Страница 2 из 2

Добавлено: Пт ноя 06, 2009 13:22:38
PacMan
спасибо большое)

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

Добавлено: Пт апр 09, 2010 10:56:45
culibin 100
доброго времени суток уважаемые коты зашел в тупик не зватает на моем девайсе портов и решил я применить 74нс595 мне она подходит ,но к сожалению никогда не работал с ее управлением
подсобите обьяснением или пните куда надо. сам погулял в гугле и ничего суразного не попалось
мне бы понять что куда подать и как потом поданное получить :dont_know:
спасибо за любую помощ :beer:

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

Добавлено: Пт апр 09, 2010 11:39:46
spongebob
1) в даташите всё популярно расписано
2) здесь на форуме я уже описывал как с ней работать (http://forum.radiokot.ru/viewtopic.php? ... 2&start=20 - последнее сообщение)

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

Добавлено: Пт апр 09, 2010 15:25:46
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;

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

Добавлено: Пт апр 09, 2010 15:31:03
culibin 100
спасибо чето проясняется но я в си болван если можно на асме изложить
воть хоть этот кусочек или поснить что за условия плиз :dont_know:
( for(i=0; i<8 ; i++)
{ if (data3 & BIT(0) ) DATA=1; // выводим бит данных
else DATA=0;
data3>>=1; )

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

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

if (data3 & BIT(0) - содержит значение младшего бита числа data3, т.е. 0 или 1, и если 1 то условие выполняется, если 0 то нет.

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

Добавлено: Сб апр 10, 2010 01:45:29
kalobyte

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

Добавлено: Сб апр 10, 2010 14:55:40
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-й а все оставить

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

Добавлено: Сб апр 10, 2010 16:59:16
Twilo
все что вы запишите в регистр сдвига (595 точно а, 4094 не знаю не работал) появится там только после того как передернуть ногой "STORAGE"
и как нужно сделать если мне надо только установить один бит например 3-й а все оставить
Записать новое число с установленным битом
как сформировать последовательность дрыганий ногами чтобы в этом регистре был мой байт информации
я же Вам отправил код, проще некуда, на асм перевести совсем не трудно. главное знать что записывать в регистры сдвига

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

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

в итоге получаем в регистре 10101010
так или нет ?

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

Добавлено: Сб апр 10, 2010 20:33:48
Настя
Микроконтроллер последовательно записывает байты в сдвиговый регистр: на линии DS устанавливает очередной бит необходимого логического уровня (0 или 1), затем задним фронтом сигнала (переход из 1 в 0) на линии CH_CP задвигает этот бит в регистр и, наконец, задним фронтом на линии ST_CP инициирует появление на выходах регистра записанных последних восьми бит.

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

Добавлено: Сб апр 10, 2010 20:49:44
otest
Возьмите таблицу истинности из даташита и просимулируйте Мс в Протеусе или Мультисиме и всё вам станет понятно.

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

Добавлено: Сб апр 10, 2010 20:59:53
culibin 100
пишу в vm lab на асме протос не юзаю но вроде чето потихоньку доходит я так понял на линии ST_CP при записи битов должна быть постоянно единица и лиш после записи всего байта сбрасываем ST_CP в ноль и получаем появление наших разрядов на выходе регистра ?
так ли уважаемая настя

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

Добавлено: Вс апр 11, 2010 16:43:01
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 на + питания

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

Добавлено: Сб май 22, 2010 12:49:36
culibin 100
разобрался всем спасибо все работает гуд

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

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

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

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

Изображение

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

Добавлено: Пн ноя 08, 2010 22:54:42
kalobyte
второй
только индикатор у тебя будет работать, если на нем будет 60гц переменки
а это прога будет большая и сложная

вход ое лучше использовать как шим для регулировки яркости светодиодов

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

Добавлено: Вт ноя 09, 2010 00:55:13
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);
 }