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

Входной сдвиговый регистр 74HC165

Добавлено: 31 янв 2018, 13:39
seri0shka
Возвращаясь к теме регистров, у кого-нибудь есть пользовательские блоки, позволяющие работать по 5-проводной схеме одновременно с несколькими 74HC165 на входах и 74HC595 на выходах? Упомянутые выше блоки arisov77 работают отлично, но там SPI программный, а у Слимпера SPI аппаратный, но что-то не работает. А хотелось бы попробовать именно аппаратный SPI, выше скорость работы и прочие плюсы. Как вариант, неплохо бы иметь универсальные блоки "отправка переменной в SPI" и "приём переменной из SPI", не привязанные к конкретным микросхемам или шилдам. Возможно, уже такие есть, дайте ссылку. Возможно, [ref]Boroda[/ref] уже делал такие, тема должна быть востребована.

Входной сдвиговый регистр 74HC165

Добавлено: 06 мар 2018, 21:39
seri0shka
Чтоб темы не плодить, здесь спрошу. Есть у кого ссылка на блоки для регистров 74НС165 с подключением к любым пинам ардуино? Нужен блок для цепочки из 4 микросхем (32 входа).

Входной сдвиговый регистр 74HC165

Добавлено: 07 мар 2018, 17:33
Sancho
[ref]seri0shka[/ref],
Попробуй, не тестил - нет железа...
На 32 бита.

Отправлено спустя 7 минут 42 секунды:
При 1 на Read - чтение.

Входной сдвиговый регистр 74HC165

Добавлено: 07 мар 2018, 18:21
seri0shka
Спасибо. А чем преобразовать unsigned long int в байты?

Отправлено спустя 2 минуты 33 секунды:
И что такое clock enable pin ?

Входной сдвиговый регистр 74HC165

Добавлено: 07 мар 2018, 20:13
Sancho
seri0shka писал(а): 07 мар 2018, 18:21А чем преобразовать unsigned long int в байты?
Чтением нужного бита. Или нужны байты?
seri0shka писал(а): 07 мар 2018, 18:21И что такое clock enable pin ?
Сделал по фэн-шую, завтра уберу. Вход разрешения тактовых импульсов.
Можно и без него....

Входной сдвиговый регистр 74HC165

Добавлено: 07 мар 2018, 22:01
seri0shka
Байты в биты мне удобней переводить блоками Бороды, поэтому мне нужны 4 байта. А какой смысл разрешения тактовых импульсов? Только пин занимает.

Входной сдвиговый регистр 74HC165

Добавлено: 08 мар 2018, 09:06
Sancho
[ref]seri0shka[/ref],
Ок, пробуйте так.

Входной сдвиговый регистр 74HC165

Добавлено: 08 мар 2018, 17:13
seri0shka
[ref=#ff8000]Sancho[/ref], работает правильно только до 15 бит, дальше фигня.
Вот такой работает отлично, хотя написан не очень (делал на основе чужого, быстро не вспомню, кого именно, лишнее удалил, недостающее дописал). Почему-то не отправляется на сайт пример рабочего блока, завтра попробую отправить.
Вот так примерно:
[spoiler=Код внутри]

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

setup......
pinMode(PL_pin,OUTPUT);
pinMode(Clock_pin,OUTPUT);
pinMode(Q7_pin,INPUT);
digitalWrite(Q7_pin, HIGH); //подключаем подтягивающий резистор

loop.......
byte Q1 = 0;
byte Q2 = 0;
byte Q3 = 0;
byte Q4 = 0;							
digitalWrite(PL_pin,HIGH);
for (int i=7; i>=0; i--) {				
digitalWrite(Clock_pin,LOW);  	
   delayMicroseconds(1);
   Q1 |= (digitalRead(Q7_pin) ? (1<<i) : 0);
   digitalWrite(Clock_pin,HIGH); 		
   delayMicroseconds(1);
} 
for (int i=7; i>=0; i--) {				
digitalWrite(Clock_pin,LOW);  	
   delayMicroseconds(1);
   Q2 |= (digitalRead(Q7_pin) ? (1<<i) : 0);
   digitalWrite(Clock_pin,HIGH); 		
   delayMicroseconds(1);
}
for (int i=7; i>=0; i--) {				
digitalWrite(Clock_pin,LOW);  	
   delayMicroseconds(1);
   Q3 |= (digitalRead(Q7_pin) ? (1<<i) : 0);
   digitalWrite(Clock_pin,HIGH); 		
   delayMicroseconds(1);
}
for (int i=7; i>=0; i--) {				 
digitalWrite(Clock_pin,LOW);  	
   delayMicroseconds(1);
   Q4 |= (digitalRead(Q7_pin) ? (1<<i) : 0);
   digitalWrite(Clock_pin,HIGH); 		
   delayMicroseconds(1);
}
digitalWrite(PL_pin,LOW); 

Q1 = Q1  ^ ((B11<<8) | (B00000000)) ; 		// инвертировать побитно  байт (0 - нет инверсии, 1 - инвертировать)
Q2 = Q2  ^ ((B11<<8) | (B00000000)) ; 		
Q3 = Q3  ^ ((B11<<8) | (B00000000)) ; 		
Q4 = Q4  ^ ((B11<<8) | (B00000000)) ;
[/spoiler]

Входной сдвиговый регистр 74HC165

Добавлено: 08 мар 2018, 19:22
Sancho
[ref]seri0shka[/ref],
Вот причёсанный твой вариант. Почти.
Отпишись о косяках.

Входной сдвиговый регистр 74HC165

Добавлено: 08 мар 2018, 23:48
seri0shka
unsigned long int Out_long;- это рудимент от предыдущих версий блока?
После digitalWrite(clockPin, LOW); задержку пропустили или специально убрали?
Блок работает нормально.
Реально по этой схеме сделать универсальный блок с изменяемым количеством микросхем от 1 до ... , соответственно и выходов (они же байты)?
Тогда можно будет выложить для всеобщего доступа.

Входной сдвиговый регистр 74HC165

Добавлено: 09 мар 2018, 07:03
KulibinOrsk
Поддерживаю и для полноты картины " чтобы было для всех" :
- главное сделайте описание к блоку - будет понятно что и как подключать и проверять.
- сделать вывод байтов и битов (кому как нужно будет так и раскроют). Или в описании указать как вывести биты (о каком то блоке бороды упоминалось...)
- сделать универсальность от 1 до 4 микросхем
- укажите возможное быстродействие, надо понимать скорость опроса.

Входной сдвиговый регистр 74HC165

Добавлено: 09 мар 2018, 07:20
Sancho
[ref]seri0shka[/ref],
Сделаем. Количество регистров будет неограниченно.
Ещё один небольшой момент - есть одна идейка, надо будет протестить - по ДШ работает до 20мгц - убрать задержки ) .

Входной сдвиговый регистр 74HC165

Добавлено: 09 мар 2018, 17:46
seri0shka
Sancho писал(а): 09 мар 2018, 07:20по ДШ работает до 20мгц
-не понял, что это значит.
Задержки полностью убирать пробовал (в исходном "моём" блоке- работает отлично с SN74HC165N и К555ИР9(!) при питании 5 вольт, но есть ещё несколько серий импортных и отечественных микросхем, кроме того и работать могут от 2 до 6 вольт (в случае с Ардуино от 3 до 5 в), так что задержки в блоке обязательно нужно оставить, но дать возможность менять по желанию от 0 до ...
Кстати, [ref=#ff8000]Sancho[/ref], Вы когда спите?
По поводу предложения KulibinOrsk, чтоб не увеличивать размер блока (как на схеме, так и в скетче), возможно стоит сделать два вида блока- первый с выходами в виде байтов и всё, а второй с байтовыми и битовыми выходами (то есть 9 выходов для одного регистра). Лично я стараюсь создавать проекты максимально читаемые и с минимумом незадействованных выходов.

Входной сдвиговый регистр 74HC165

Добавлено: 09 мар 2018, 18:20
Sancho
[ref]seri0shka[/ref],
Думаю сделать так -
один блок - основной, самый первый при использовании, в нём все настройки и один регистр. два вида - выход или битами или байтом.
остальные блоки -слэйвы- каждый следующий регистр, с использованием функции основного. Может быть тоже двух видов.
Слэйвы не имеют номеров. Нумерация зависит от порядка в программе после основного.
Кол-во слэйвов не ограниченно.

Входной сдвиговый регистр 74HC165

Добавлено: 09 мар 2018, 18:43
seri0shka
Sancho писал(а): 09 мар 2018, 18:20Нумерация зависит от порядка в программе после основного.
По этому поводу сомнение.

Входной сдвиговый регистр 74HC165

Добавлено: 09 мар 2018, 18:46
Sancho
seri0shka писал(а): 09 мар 2018, 18:43По этому поводу сомнение.
Никаких.
Нажимаешь кнопку "порядок компиляции блоков", убеждаешься в правильности, компилишь.

Входной сдвиговый регистр 74HC165

Добавлено: 09 мар 2018, 19:25
seri0shka
Я даже кнопки такой не знаю, версия 2.1

Входной сдвиговый регистр 74HC165

Добавлено: 09 мар 2018, 20:53
Sancho
[ref]seri0shka[/ref],
Понято.
Но всё равно - боятся не стоит, всегда можно проверить код.
Можно, также, сделать в одном, но несколько, и с разной размерностью.
Ок, завтра напилю для теста разных. Но с возможностью задержек от 0 до ....

Входной сдвиговый регистр 74HC165

Добавлено: 15 мар 2018, 04:57
KulibinOrsk
[ref=#ff8000]Sancho[/ref],
Не сориентируете когда можно ожидать блока работающего с входами расширения с выводом байта и битов и выбором необходимого кол-ва 74HC165 ?
А если будет блок описанный в 22 посте: блок, позволяющие работать по 5-проводной схеме SPI одновременно с несколькими 74HC165 на входах и 74HC595 на выходах то будет совсем полное гармоничное решение всех вопросов.

Входной сдвиговый регистр 74HC165

Добавлено: 15 мар 2018, 09:25
Sancho
[ref]KulibinOrsk[/ref], [ref]seri0shka[/ref],
Просьба попробовать. Пока только 165.