Страница 2 из 2
Добавлено: Пт ноя 06, 2009 13:22:38
PacMan
спасибо большое)
помогите разобрать с 74нс595
Добавлено: Пт апр 09, 2010 10:56:45
culibin 100
доброго времени суток уважаемые коты зашел в тупик не зватает на моем девайсе портов и решил я применить 74нс595 мне она подходит ,но к сожалению никогда не работал с ее управлением
подсобите обьяснением или пните куда надо. сам погулял в гугле и ничего суразного не попалось
мне бы понять что куда подать и как потом поданное получить
спасибо за любую помощ

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
спасибо чето проясняется но я в си болван если можно на асме изложить
воть хоть этот кусочек или поснить что за условия плиз
( 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);
}