Да, именно так! То есть на выходах сигналы будут появляться один раз за цикл. Если цикл очень длинныйSancho писал(а): ↑20.03.2018{, 08:55}Что там происходит, если оставить как есть?
В приёмной части регистра данные висят, в первых восьми D- триггерах. По фронту на 12-м они записываются во вторые восемь, т.е на выходы.
Если этого не делать, то на выходах сигналы появятся только с началом следующего цикла, когда начнёт работать часть, относящаяся к 165.
, то, возможно, это будет с запозданием. Данные, полученные в текущем цикле, обрабатываются в следующем цикле. Для моего применения это несущественно, тем более, что почти все блоки в FLProg построены подобным образом. А чтоб применить данные сразу же в этом цикле, в средину блока нужно впихнуть другой блок обработки данных (мы ведь не просто прочитали 4 регистра и записали в другие 4 регистра).
А я так надеялся на вашу помощь, у Вас опыта явно побольше. Хотя в этой теме вроде уж всё понял.
Обязательно. Но быстро не обещаю- работа, личная жизнь иногда. Если кому что надо быстрей, пишите. И не забывайте отписаться о результатах применения.
Код: Выделить всё
// Вариант V2
if( _EN_Work )
{
digitalWrite( PL_pin , LOW);
delayMicroseconds( pauza );
write_output_595_reg( in_4_595 ); // Записываем дальний 595 регистр
write_output_595_reg( in_3_595 );
write_output_595_reg( in_2_595 );
write_output_595_reg( in_1_595 ); // Записываем ближний 595 регистр
delayMicroseconds( pauza );
digitalWrite( PL_pin , HIGH); // Защёлкиваем данные в 165 и 595 В ОДИН ЩЕЛЧОК!!!
Out_1_165 = read_input_165_reg(); // Читаем первый 165 регистр
Out_2_165 = read_input_165_reg(); // 2-ой
Out_3_165 = read_input_165_reg(); // 3-ий
Out_4_165 = read_input_165_reg(); // Читаем четвёртый 165 регистр
digitalWrite( Clock_pin , LOW); // Зараннее, что-бы не проскочило ничего лишнего
}
// Вариант V1
if( _EN_Work )
{
D14_Low;
delayMicroseconds( pauza );
write_output_595_reg( in_4_595 ); // Записываем дальний 595 регистр
write_output_595_reg( in_3_595 );
write_output_595_reg( in_2_595 );
write_output_595_reg( in_1_595 ); // Записываем ближний 595 регистр
delayMicroseconds( pauza );
D14_High; // Защёлкиваем данные в 165 и 595 В ОДИН ЩЕЛЧОК!!!
Out_1_165 = read_input_165_reg(); // Читаем первый 165 регистр
Out_2_165 = read_input_165_reg(); // 2-ой
Out_3_165 = read_input_165_reg(); // 3-ий
Out_4_165 = read_input_165_reg(); // Читаем четвёртый 165 регистр
D15_Low; // Зараннее, что-бы не проскочило ничего лишнего
}
Оптимизируй проект: если lcd по i2c - разгоняй бибку до 400кГц и оптимизируй вывод инфы, аналоговые - поставь "быстрые", опрашивай часы по мере необходимости...KulibinOrsk писал(а): ↑21.03.2018{, 09:48}Но вот набросал тестовую задачу для проверки: часы+энкодер+LCD+2 аналоговых и программа уже отрабатывает с задержкой в 0.4 сек.
Сделал блок, работает! При подключении микросхем входных регистров нужно добавить три деталюхи, на рисунке выделены, в описании блока расписано подробно. Здесь только мастер-блок, остальные здесь: http://forum.flprog.ru/viewtopic.php?f= ... 200#p45200seri0shka писал(а): ↑15.03.2018{, 12:04}А что если попробовать так: притянули защёлку вниз, серия импульсов на CLK- отправили данные на 595, потом защёлку вверх, дальше переключили вывод данных на вход, серия импульсов на CLK- приняли данные с 165, снова переключили вывод данных на вЫход, закончили упражнение. Получится трёхпроводная схема. Такой ещё не встречал, но стоит попробовать.
KulibinOrsk, ждём ваших результатов тестирования.KulibinOrsk писал(а): ↑15.03.2018{, 09:32}Со дня на день приедут микросхемы (заказал и те и те т.к. надо 32 входа и 32 выхода) и сразу начну проверять.
Код: Выделить всё
for (byte i = 0; i < reg_595 ; i++) //reg_595- количество 595 регистров
{write_output_595_reg( In_595_reg [i] );} // Записываем 595 регистры
Код: Выделить всё
for(byte i = reg_595; i >= 0 ; i--)
Код: Выделить всё
for(char i = reg_595; i >= 0 ; i--)
Код: Выделить всё
for(int i = reg_595; i >= 0 ; i--)