помогите разобраться с регистром сдвиговым(74HC595)

Обсуждаем цифровые устройства...
PacMan
Первый раз сказал Мяу!
Сообщения: 32
Зарегистрирован: Ср апр 15, 2009 21:08:43

Сообщение PacMan »

спасибо большое)
Реклама
culibin 100
Встал на лапы
Сообщения: 88
Зарегистрирован: Ср апр 29, 2009 10:35:56
Откуда: кр. лиман украина

помогите разобрать с 74нс595

Сообщение culibin 100 »

доброго времени суток уважаемые коты зашел в тупик не зватает на моем девайсе портов и решил я применить 74нс595 мне она подходит ,но к сожалению никогда не работал с ее управлением
подсобите обьяснением или пните куда надо. сам погулял в гугле и ничего суразного не попалось
мне бы понять что куда подать и как потом поданное получить :dont_know:
спасибо за любую помощ :beer:
Реклама
spongebob
Грызет канифоль
Сообщения: 289
Зарегистрирован: Пт мар 20, 2009 12:25:47
Откуда: Ivanovo
Контактная информация:

Re: помогите разобрать с 74нс595

Сообщение spongebob »

1) в даташите всё популярно расписано
2) здесь на форуме я уже описывал как с ней работать (http://forum.radiokot.ru/viewtopic.php? ... 2&start=20 - последнее сообщение)
Twilo
Нашел транзистор. Понюхал.
Сообщения: 193
Зарегистрирован: Вт авг 25, 2009 22:24:39
Откуда: Черкассы
Контактная информация:

Re: помогите разобрать с 74нс595

Сообщение Twilo »

вот пример записи трех чисел в три последовательено соединенных 74hc595:
data1, data2, data3 - наши 3 числа

Код: Выделить всё

        ...
#define DATA  PORTD.2       //тут подставить 
#define SHIFT PORTD.0       // свои
#define STORAGE PORTD.1  // значения
        ...
        for(i=0; i<8 ; i++)
	{  if (data3 & BIT(0) )   DATA=1;   // выводим бит данных
        else   DATA=0;
		data3>>=1;
		SHIFT=1;
		SHIFT=0;
	}
     
        for(i=0; i<8 ; i++)
        {  if (data2 & BIT(0) )   DATA=1;   // выводим бит данных
        else   DATA=0;
		data2>>=1;
		SHIFT=1;
		SHIFT=0;
	}

        for(i=0; i<8 ; i++)
        {  if (data1 & BIT(0) )   DATA=1;   // выводим бит данных
        else   DATA=0;
		data1>>=1;
		SHIFT=1;
		SHIFT=0;
	}
        STORAGE=1;
        STORAGE=0;
Реклама
Эиком - электронные компоненты и радиодетали
culibin 100
Встал на лапы
Сообщения: 88
Зарегистрирован: Ср апр 29, 2009 10:35:56
Откуда: кр. лиман украина

Re: помогите разобрать с 74нс595

Сообщение culibin 100 »

спасибо чето проясняется но я в си болван если можно на асме изложить
воть хоть этот кусочек или поснить что за условия плиз :dont_know:
( for(i=0; i<8 ; i++)
{ if (data3 & BIT(0) ) DATA=1; // выводим бит данных
else DATA=0;
data3>>=1; )
Реклама
Twilo
Нашел транзистор. Понюхал.
Сообщения: 193
Зарегистрирован: Вт авг 25, 2009 22:24:39
Откуда: Черкассы
Контактная информация:

Re: помогите разобрать с 74нс595

Сообщение Twilo »

for(i=0; i<8 ; i++) - цикл от 0 до 7 потому что восемь ног у регистра, т.е. за каждый проход сдвигаем число на 1 и так восемь раз, таким образом после выполнения цикла в регистре будет нужное число.

if (data3 & BIT(0) - содержит значение младшего бита числа data3, т.е. 0 или 1, и если 1 то условие выполняется, если 0 то нет.
Последний раз редактировалось Twilo Сб апр 10, 2010 17:13:28, всего редактировалось 1 раз.
Реклама
kalobyte
Друг Кота
Сообщения: 13796
Зарегистрирован: Чт сен 20, 2007 14:08:00

Re: помогите разобрать с 74нс595

Сообщение kalobyte »

тематические ответы только в форуме, в приват не пишите
culibin 100
Встал на лапы
Сообщения: 88
Зарегистрирован: Ср апр 29, 2009 10:35:56
Откуда: кр. лиман украина

Re: помогите разобрать с 74нс595

Сообщение culibin 100 »

все равно никак не доеду пример для понимания допустим что
порт б подключен к шине данных лсд дисплея HD44780
работаем по 8ми битам и подаем команду с кодом 10101010
ldi temp , $AA ; загружаем в рон с именем темп число 10101010
out portb , temp ; выгружаемиз регистра темп в порт б весь байт $АА
это простая выгрузка числа из регистра в порт
дрыганье ногами дисплея r/w ... r/s .. e опустим
как теперь это сделать если поставить нс595 на этот порт дабы освободить несколько ног
предположим что
shift подключен к пину 0 порта б * нога 11
data подключен к пину 1 порта б *нога 14
storage подключен к пину 2 порта б * нога 12 * это ноги нс-ки
все как тут http://kalobyte.com/wp-content/uploads/ ... gister.gif
как сформировать последовательность дрыганий ногами чтобы в этом регистре был мой байт информации
и как нужно сделать если мне надо только установить один бит например 3-й а все оставить
Twilo
Нашел транзистор. Понюхал.
Сообщения: 193
Зарегистрирован: Вт авг 25, 2009 22:24:39
Откуда: Черкассы
Контактная информация:

Re: помогите разобрать с 74нс595

Сообщение Twilo »

все что вы запишите в регистр сдвига (595 точно а, 4094 не знаю не работал) появится там только после того как передернуть ногой "STORAGE"
и как нужно сделать если мне надо только установить один бит например 3-й а все оставить
Записать новое число с установленным битом
как сформировать последовательность дрыганий ногами чтобы в этом регистре был мой байт информации
я же Вам отправил код, проще некуда, на асм перевести совсем не трудно. главное знать что записывать в регистры сдвига
culibin 100
Встал на лапы
Сообщения: 88
Зарегистрирован: Ср апр 29, 2009 10:35:56
Откуда: кр. лиман украина

Re: помогите разобрать с 74нс595

Сообщение culibin 100 »

извените за назойливость не трудно для вас а для меня не совсем писать начал не давно и всего не знаю уж пробачте
я так понял что надо подать постоянный меандр на shift
далее ставим на ноге data либо ноль либо единицу (смотря что нужно записать)
и дрыгаем "STORAGE"и этот ноль либо единица оказывается в нулевом бите регистра
а если надо эту цыфру установить в бите 7 дрыгаем "STORAGE" 8 раз
пример : надо в регистре установить число 10101010
ставим data 1
дрыгаем SHIFT=1;
SHIFT=0;
ставим data 0
дрыгаем SHIFT=1;
SHIFT=0;
............... и так еще 6 раз

в итоге получаем в регистре 10101010
так или нет ?
Аватара пользователя
Настя
Мявтор!
Сообщения: 878
Зарегистрирован: Чт авг 07, 2008 09:12:38
Откуда: не скажу
Контактная информация:

Re: помогите разобрать с 74нс595

Сообщение Настя »

Микроконтроллер последовательно записывает байты в сдвиговый регистр: на линии DS устанавливает очередной бит необходимого логического уровня (0 или 1), затем задним фронтом сигнала (переход из 1 в 0) на линии CH_CP задвигает этот бит в регистр и, наконец, задним фронтом на линии ST_CP инициирует появление на выходах регистра записанных последних восьми бит.
натуральная блондинка
otest
Друг Кота
Сообщения: 7853
Зарегистрирован: Ср фев 11, 2009 20:35:58

Re: помогите разобрать с 74нс595

Сообщение otest »

Возьмите таблицу истинности из даташита и просимулируйте Мс в Протеусе или Мультисиме и всё вам станет понятно.
culibin 100
Встал на лапы
Сообщения: 88
Зарегистрирован: Ср апр 29, 2009 10:35:56
Откуда: кр. лиман украина

Re: помогите разобрать с 74нс595

Сообщение culibin 100 »

пишу в vm lab на асме протос не юзаю но вроде чето потихоньку доходит я так понял на линии ST_CP при записи битов должна быть постоянно единица и лиш после записи всего байта сбрасываем ST_CP в ноль и получаем появление наших разрядов на выходе регистра ?
так ли уважаемая настя
Twilo
Нашел транзистор. Понюхал.
Сообщения: 193
Зарегистрирован: Вт авг 25, 2009 22:24:39
Откуда: Черкассы
Контактная информация:

Re: помогите разобрать с 74нс595

Сообщение Twilo »

я так понял что надо подать постоянный меандр на shift
далее ставим на ноге data либо ноль либо единицу (смотря что нужно записать)
и дрыгаем "STORAGE"и этот ноль либо единица оказывается в нулевом бите регистра
не так. STORAGE дрыгаем когда "передернули" необходимое количество раз "SHIFT'ом" (обычно 8 для одного регистра). Если в момент дергания "SHIFT'ом" на DATA "1" то записывается 1 и наоборот. только потом дрыгаем "STORAGE" и на выходе регистра то что мы записали
я так понял на линии ST_CP при записи битов должна быть постоянно единица и лиш после записи всего байта сбрасываем ST_CP в ноль и получаем появление наших разрядов на выходе регистра ?
внимательно посмотрите код, который я привел. неужели на асме было бы понятнее? там STORAGE всамом конце дергается после записи в три последовательно соединенных регистра. Собственно DATA-DS, SHIFT-SH_CP, STORAGE-ST_CP и /OE. MR на + питания
culibin 100
Встал на лапы
Сообщения: 88
Зарегистрирован: Ср апр 29, 2009 10:35:56
Откуда: кр. лиман украина

Re: помогите разобрать с 74нс595

Сообщение culibin 100 »

разобрался всем спасибо все работает гуд
Аватара пользователя
sad-angel
Встал на лапы
Сообщения: 122
Зарегистрирован: Пт июл 11, 2008 21:49:40
Откуда: Украина

Управление сдвиговым регистром 74HC595

Сообщение sad-angel »

Нужно управлять регистром 74HC595, сделал два варианта:
1. Соединил вместе выводы STCP и OE - в таком режиме сначала идет запись регистр даных (переход с "0" в "1") , выход регистра находиться в "Z-состоянии" (время t) и потом вкл. выход регистра (переходом с "1" в "0")

2. Вывод OE подключен к GND, выход регистра в таком режиме всегда подключен.
Выход регистра подключен к LCD (от китайского мультиметра DT830)

Какой вариант лучше использовать?

Изображение
kalobyte
Друг Кота
Сообщения: 13796
Зарегистрирован: Чт сен 20, 2007 14:08:00

Re: Управление сдвиговым регистром 74HC595

Сообщение kalobyte »

второй
только индикатор у тебя будет работать, если на нем будет 60гц переменки
а это прога будет большая и сложная

вход ое лучше использовать как шим для регулировки яркости светодиодов
тематические ответы только в форуме, в приват не пишите
Аватара пользователя
sad-angel
Встал на лапы
Сообщения: 122
Зарегистрирован: Пт июл 11, 2008 21:49:40
Откуда: Украина

Re: Управление сдвиговым регистром 74HC595

Сообщение sad-angel »

kalobyte писал(а):второй
только индикатор у тебя будет работать, если на нем будет 60гц переменки
а это прога будет большая и сложная

вход ое лучше использовать как шим для регулировки яркости светодиодов
Не мог никак определится с выбором реализации. Видел подключение как в первом варианте (управление 4-ным. 7-ным индикатором).

Прога уже написана, не сильно сложная:
Настраиваю таймер на 100гц, в обработчике инвертирую общий вывод дисплея, и даные которые загружаю в регист. Так выглядит обработчик прерывания таймера :

Код: Выделить всё

ISR(TIMER1_COMPA_vect)
{
  Port_Data^=1<<com; // инверсия общего вывода дисплея
  disp1 = ~disp1;         // инверсия даных которие отображаються
  disp2 = ~disp2;
  disp3 = ~disp3; 
  
  send_74hc595(disp1);
  send_74hc595(disp2);
  send_74hc595(disp3);

  Port_Data|=1<<strob;    // запись данных в регистр (вывод на дисплей)
  asm("nop");
  Port_Data&=~(1<<strob);
 }
Ответить

Вернуться в «Цифровая техника»