Дисплеи, датчики и прочие функциональные узлы, управляемые МК.
Ответить

Сдвиговый регистр 74HC595

Вт ноя 28, 2017 23:33:12

Привет всем! :)
проблема такая: допустим есть 8 переменных, которые динамически меняют состояние 0/1
мне нужно через сдвиговый регистр включать/выключать 8 светодиодов.

Код:
                void sdvig_reg(void) {
     
           for (count=0;count<8;count++) {
            if (z & 0b10000000)
            data=1 ;
           else
          data=0;
          shift=1;
          delay_us(5);
          shift=0;
          z=z<<1;  //z<<=1;
         }

        latch=1;
        delay_us(5);
        latch=0;
       // data=0 ;
   
  }






 void main(void)
  {

while(1){

sdvig_reg();


if( led_0==1){
z=0b00000001;
}


}
}
 


:facepalm:

я так понял, что нужно led_0 - led_7 записывать в переменную к примеру:" z = 0b10001011;"

скажите как правильно записать ? :oops:

Re: Сдвиговый регистр 74HC595

Ср ноя 29, 2017 00:17:03

Заюзайте структуру и union. Будут и led'ы и выдвигаемый байт "в одном флаконе".

Re: Сдвиговый регистр 74HC595

Ср ноя 29, 2017 04:47:15

Создайте структуру к примеру :
Код:
struct UnionBits
{
   unsigned DO0: 1;
   unsigned DO1: 1;
   unsigned DO2: 1;
   unsigned DO3: 1;
   unsigned DO4: 1;
   unsigned DO5: 1;
   unsigned DO6: 1;
   unsigned DO7: 1;
};

union Byte {
   uint8_t ByteRegister;
   struct UnionBits Register;
};

union Byte OneOUT;

И пишите состояние в эту структуру к примеру чере SPI.
Код:
uint8_t SPI_UpdataByte(uint8_t data)
{
   uint8_t report;
   SPDR = data;
   while(!(SPSR & (1<<SPIF)));
   report = SPDR;
   return report;
}
void SpiOutRegister()
{
   SPI_PORT &= ~(1<<SPI_SS);
   OneIN.ByteRegister=SPI_UpdataByte(EightOUT.ByteRegister);
   SPI_PORT |= (1<<SPI_SS);
}


Вот ссылка с моей реализацией реализацией.
viewtopic.php?f=57&t=149947

Re: Сдвиговый регистр 74HC595

Ср ноя 29, 2017 11:39:10

Спасибо но spi уже занят у меня есть 3 свободных порта, по этому и решил применить программный spi.

Re: Сдвиговый регистр 74HC595

Пт дек 01, 2017 09:38:09

Вам нужно 8 раз отправить 1. Соответственно загорится 8 светодиодов.

Добавлено after 24 minutes 59 seconds:
И еще кое что. Если у вас переменная latch управляет STCP регистром то вам его нужно в начале цикла выставить в 0, а потом в конце цикла выставить 1.

Re: Сдвиговый регистр 74HC595

Ср дек 06, 2017 13:06:00

Спасибо но spi уже занят у меня есть 3 свободных порта, по этому и решил применить программный spi.

Что значит "занят"? SPI - это вообще-то шина и, соответственно, позволяет вешать на неё несколько независимых слэйвов, каждый со своим CS.
Занят может быть только конкретный CS.

Re: Сдвиговый регистр 74HC595

Сб дек 16, 2017 16:51:10

Народ, неужели 74hc595 не требует совсем никакой обвязки?
Ни на одной схеме в инете я её не увидел.
Проскакивала инфа, что надо вешать кондеры по питанию.
Так ли это?
Какого номинала они должны быть, как думаете?
0,1мкФ, как на контроллере, достаточно будет?
Или не ставить вовсе, если схема будет питаться от батареек и управлять светодиодами?

Re: Сдвиговый регистр 74HC595

Сб дек 16, 2017 18:24:46

Я за народ.
Ставить на каждую микросхему по 0,1 мкФ.
...Ни на одной схеме в инете я её не увидел...

И не увидите. Бо рисуют (а в большинстве своём копипастят) и выкладывают эти схемы такие же, как вы.

Re: Сдвиговый регистр 74HC595

Вс дек 17, 2017 14:51:59

Народ, неужели 74hc595 не требует совсем никакой обвязки?
Или не ставить вовсе, если схема будет питаться от батареек и управлять светодиодами?

Какая разница - от батареек или нет?
Читайте учебники что такое "блокировочные конденсаторы" и зачем они нужны.

Re: Сдвиговый регистр 74HC595

Вт май 22, 2018 03:46:27

Всем привет!
Вопрос по данной микросхеме.

Задача: управление электромагнитом при помощи ШИМ, т.е. срываем якорь при D=1, затем удержание ШИМом при D=0.5. размножил GPIO при помощи этой микросхемы.
Вот схема.

Изображение

В общем, записываю бит в нужную позицию, а на вывод OE подаю ШИМ. По идее, этот же ШИМ появляется на выводе, в который я раньше записал лог.1 . Частота не более 100 кГц. Такой вариант использования микросхемы адекватен или же идея шляпа?
Исток транзистора соединен с землей через токоизмерительный резистор 0,1 Ом.

Re: Сдвиговый регистр 74HC595

Пн май 28, 2018 09:38:27

Ну и садомазохизм...
Для 595-го надо от 3х до 4х линий управления, а для полевика ВСЕГО одна - в чем смысл такого изврата?
:dont_know:

Re: Сдвиговый регистр 74HC595

Пн май 28, 2018 09:53:20

было сделано для 1533ир24, но не суть.

записываем значение переменной temp в регистр сдвига.

чуть изменив код можно писать инверсное значение переменной.


#include <xc.h>


#define strb_c0 RD6
#define strb_c1 RD7
#define clk_c RD0
#define data_c RD1
#define clk_c1 RD2
#define data_c1 RD3


// makros
unsigned char var,bitno,mask;
#define bitset(var,bitno) ((var)|=1<<(bitno))
#define bitclr(var,bitno) ((var)&=~(1<<(bitno)))
#define testbit(var,bitno) ((var>>bitno)&0x01) // chek 1
#define testbit_0(var,bitno) (!((var>>bitno))&0x01) // chek 0
#define bits_on (var, mask) var |= mask //
#define bits_off (var, mask) var &= ~ 0 ^ mask
///////////////////////////////////////////////////////////////////////////////

void load_reg_clock (unsigned char temp){

/////////////////////////////////////////////new_load_reg
signed char j;
for (j=0x07; j>=0x00; j--) {

if (testbit(temp,j)) data_c=0;
else ( data_c=1);
clk_c=1;
clk_c=0;

}
/////////////////////////////////////////////new_load_reg

}

Re: Сдвиговый регистр 74HC595

Пт июн 01, 2018 12:55:01

Ну и садомазохизм...
Для 595-го надо от 3х до 4х линий управления, а для полевика ВСЕГО одна - в чем смысл такого изврата?
:dont_know:

В том что полевиков 7, я просто один разместил рядом, что бы скрин сделать. И да, поражает особенность отечественных форумов. Я спрашивал не про адекватность такого "изврата", а про гипотетическую возможность так управлять: возможно ли и с какими граблями или же нет.
Да. Смысл такой. В регистр записываем нужное значение, выставив единицы на нужных линиях, а нога enable шимится от аппаратного ШИМ. Думаю прокатит. Прототип платы уже заказан )

Re: Сдвиговый регистр 74HC595

Сб июн 02, 2018 11:53:19

Это вход разрешения, а не логика.
Если критичны параметры наростания/спада(и пиковых токов зарядки емкости затвора) импульса лучше добавить обычную логику между выходом регистра и полевиком.
8)

Re: Сдвиговый регистр 74HC595

Сб июн 02, 2018 12:16:52

Chip115 писал(а):В общем, записываю бит в нужную позицию, а на вывод OE подаю ШИМ. По идее, этот же ШИМ появляется на выводе, в который я раньше записал лог.1 . Частота не более 100 кГц. Такой вариант использования микросхемы адекватен или же идея шляпа?
Имейте ввиду, что при лог.1 на управляющем входе ОЕ выходы переходят в Z-состояние (повисают в воздухе), а не переключаются в лог.0. :wink: А по сему управлять таким способом (без дополнительной разрядной цепочки) полевым транзистором не выйдет даже и при 2кГц. . :( В остальном проблем нет, по управляющему входу ОЕ вполне можно ШИМ-ить выходами. :)

Re: Сдвиговый регистр 74HC595

Пн июн 04, 2018 03:40:19

Спасибо за ответы! Прижал затвор резистором. Придется подбирать резюк или же, действительно, ставить разрядную цепочку

Re: Сдвиговый регистр 74HC595

Пн июн 04, 2018 08:28:05

Chip115 писал(а):Прижал затвор резистором. Придется подбирать резюк...
Это не дело. :? Ставьте разрядную цепочку на транзисторе, и не задирайте частоту ШИМ выше 2кГц.
Изображение

В противном случае нужен драйвер/буфер. :roll:
Вложения
discharge.JPG
(14.99 KiB) Скачиваний: 805
Ответить