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

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

Добавлено: 20.03.2018{, 10:59}
Sancho
Наверно, последнее моё творчество с 165 и 595-ми.
Версия с основными блоками и блоками входов/выходов, несовместима с предыдущими.
Важно помнить нумерацию:
Для входных, 165-х, номер 1 у блока обозначает ближайший к месту подключения цепочки микрух к мк, т.е. порядок от мк.
Для выходов, 595-х, номер блока 1 обозначает самый дальний от мк, т.е. для него надо загнать первым инфу, и прогнать через все, поэтому порядок - к мк.
На это хотелось обратить внимание для понимания нумерации, остальное в описании.
Надеюсь, seri0shka доведёт до ума и блоки и описание и оформит после тестов как положено в "Пользовательских" блоках.
Блоки добавляют веса программе:
V2, стандартные, настраиваемые пины, 6 блоков входных и 6 выходных - 830 байт, время выполнения 1450 мкс;
V1, быстрые, изменяемые только правкой кода, тот-же набор по 6 штук - 400 байт, время выполнения 230 мкс.
На сим здесь( в теме) до-свидания, я старался.

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

Добавлено: 21.03.2018{, 00:42}
seri0shka
Sancho писал(а):
20.03.2018{, 08:55}
Что там происходит, если оставить как есть?
В приёмной части регистра данные висят, в первых восьми D- триггерах. По фронту на 12-м они записываются во вторые восемь, т.е на выходы.
Если этого не делать, то на выходах сигналы появятся только с началом следующего цикла, когда начнёт работать часть, относящаяся к 165.
Да, именно так! То есть на выходах сигналы будут появляться один раз за цикл. Если цикл очень длинный
Sancho писал(а):
20.03.2018{, 08:55}
несколько датчиков влажности, температуры, дисплеи и т.д
, то, возможно, это будет с запозданием. Данные, полученные в текущем цикле, обрабатываются в следующем цикле. Для моего применения это несущественно, тем более, что почти все блоки в FLProg построены подобным образом. А чтоб применить данные сразу же в этом цикле, в средину блока нужно впихнуть другой блок обработки данных (мы ведь не просто прочитали 4 регистра и записали в другие 4 регистра).
И сегодня проверил, ваш вариант тоже работает, где в цикле "D14_Low;D14_High;" повторяется дважды. До этого проверял- вроде не работало, но причина, наверно, была в другом.
Обязательно попробую 74НС 165 и 595_V2.ubl и 165 и 595 кол-во настр.ubl, и отпишусь о результатах, но уже в другой день и после работы, надо и спать иногда.
Sancho писал(а):
20.03.2018{, 10:59}
Наверно, последнее моё творчество с 165 и 595-ми
А я так надеялся на вашу помощь, у Вас опыта явно побольше. Хотя в этой теме вроде уж всё понял.

Отправлено спустя 3 минуты 42 секунды:
Sancho писал(а):
20.03.2018{, 10:59}
Надеюсь, seri0shka доведёт до ума и блоки и описание и оформит после тестов как положено в "Пользовательских" блоках
Обязательно. Но быстро не обещаю- работа, личная жизнь иногда. Если кому что надо быстрей, пишите. И не забывайте отписаться о результатах применения.

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

Добавлено: 21.03.2018{, 09:48}
KulibinOrsk
seri0shka, Надо конечно. Ждем. И вас и микросхемы которые заказал.
Я возможно не смогу проверить так детально как вы т.к. не знаю всех нюансов работы программы FLProg - в частности как правильно строить программу.
Но насколько смогу проверю. Моя задача - читать входа и записывать выхода и все это действо с учетом обработки чтобы укладывалось в 0.1 сек (для блоков с расширением) с учетом обработки в программе задач.
Но вот набросал тестовую задачу для проверки: часы+энкодер+LCD+2 аналоговых и программа уже отрабатывает с задержкой в 0.4 сек. Может я неправильно разместил платы или неверное вообще сформировал программу. Поэтому на первых порах я не могу достоверно проверить работу блока. Только на уровне - работает или нет. Т.е. подаю на входа и вижу как проходит через программу на выход. Но это наверное вы и без меня сможете проверить в течении 20 минут.

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

Добавлено: 21.03.2018{, 10:08}
Sancho
seri0shka,
Тогда поменяй на вот так:
СпойлерПоказать

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

//  Вариант 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; // Зараннее, что-бы не проскочило ничего лишнего
}
Отправлено спустя 4 минуты 20 секунд:
KulibinOrsk писал(а):
21.03.2018{, 09:48}
Но вот набросал тестовую задачу для проверки: часы+энкодер+LCD+2 аналоговых и программа уже отрабатывает с задержкой в 0.4 сек.
Оптимизируй проект: если lcd по i2c - разгоняй бибку до 400кГц и оптимизируй вывод инфы, аналоговые - поставь "быстрые", опрашивай часы по мере необходимости...

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

Добавлено: 22.03.2018{, 00:18}
seri0shka
Sancho писал(а):
21.03.2018{, 10:12}
Тогда поменяй на вот так
Вроде можно и так. К сожалению, все эксперименты с ардуино вынужден отложить на несколько дней.
Sancho писал(а):
21.03.2018{, 10:12}
аналоговые - поставь "быстрые"
Там, как мне помнится, с аналоговыми очень небольшой прирост скорости.

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

Добавлено: 01.04.2018{, 14:48}
seri0shka
Sancho, я протестировал ваши последние блоки, выложенные в сообщении 61, всё работает отлично с паузой не менее 1 микросекунды (при 0 не работает нормально ни чтение, ни запись). Давайте Вы выложите в "Пользовательские блоки" под своим именем, чтоб по-честному. Для тех, кому интересно больше, дайте ссылку на эту тему.

Отправлено спустя 7 минут 1 секунду:
Ещё вопрос: несколько дней назад связался с ATtiny13, интересная штучка, хватает для многих проектов и стоит копейки. Заодно и пригодилось подсоединение регистров по 4 проводам. Но здесь борьба за каждый байт. Можно ли ещё ужать блоки для минимального потребления ресурсов? Пробовал, убрал пару байтов. Кстати, с месяц назад была тема про переназначение переменных, не могу найти.

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

Добавлено: 01.04.2018{, 16:14}
Sancho
seri0shka,
нужно ужимать и переходить на более низший язык програмирования. Как Вы уже заметили, все мои "телодвиженния" как раз и направлены на экономию "байтов" и увеличение быстродействия. Создание переменных, временных, возможно лишь в чистом С++...
Однако блоки лучше выложите Вы - опыт использования микрух даёт о себе знать при описании. Если в нём (описании) будет упомянуто моё имя - буду признателен.

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

Добавлено: 06.04.2018{, 23:07}
seri0shka
seri0shka писал(а):
15.03.2018{, 12:04}
А что если попробовать так: притянули защёлку вниз, серия импульсов на CLK- отправили данные на 595, потом защёлку вверх, дальше переключили вывод данных на вход, серия импульсов на CLK- приняли данные с 165, снова переключили вывод данных на вЫход, закончили упражнение. Получится трёхпроводная схема. Такой ещё не встречал, но стоит попробовать.
Сделал блок, работает! При подключении микросхем входных регистров нужно добавить три деталюхи, на рисунке выделены, в описании блока расписано подробно. Здесь только мастер-блок, остальные здесь: http://forum.flprog.ru/viewtopic.php?f= ... 200#p45200
Проверено в железе.
СпойлерПоказать
по 5 проводам-1.jpg
СпойлерПоказать
165_595_Master_3_lines_(CODE).ubi
(19.08 КБ) 103 скачивания
Sancho, посмотрите, если не затруднит.
KulibinOrsk писал(а):
15.03.2018{, 09:32}
Со дня на день приедут микросхемы (заказал и те и те т.к. надо 32 входа и 32 выхода) и сразу начну проверять.
KulibinOrsk, ждём ваших результатов тестирования.

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

Добавлено: 07.04.2018{, 17:04}
KulibinOrsk
Я помню. Жду микрухи. Китай что то нереально долго едет. Бывает порой за 10 дней, а порой 2 месяца идут.

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

Добавлено: 09.10.2018{, 20:27}
seri0shka
Sancho, вот фрагмент блока для управления входными-выходными регистрами по трём проводам, с настраиваемым количеством регистров. Всё давно проверено и отлажено. Но мне нужно, чтобы запись велась начиная с ближнего к контроллеру регистра, а начинается с дальнего, что создаёт некоторые неудобства при составлении проектов. Как правильно переписать следующую строку? :

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

for (byte i = 0; i <  reg_595  ; i++)  //reg_595- количество 595 регистров
{write_output_595_reg(  In_595_reg [i] );}  // Записываем 595 регистры
Отправлено спустя 2 минуты 2 секунды:
KulibinOrsk, пробовали что-нибудь по теме?

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

Добавлено: 15.10.2018{, 23:38}
seri0shka
Жаль, что никто не подсказал. Проблема была в том, что я пытался использовать конструкцию

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

for(byte i = reg_595; i >= 0  ; i--)
а нужно

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

for(char i = reg_595; i >= 0  ; i--)
Собственно, работает так же, как и

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

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

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

Добавлено: 16.10.2018{, 09:41}
Sancho
seri0shka, Цикл
seri0shka писал(а):
09.10.2018{, 20:29}
Код: Выделить всё

for (byte i = 0; i < reg_595 ; i++) //reg_595- количество 595 регистров
{write_output_595_reg( In_595_reg );} // Записываем 595 регистры

Выполнится reg_595 раз. //reg_595- количество 595 регистров
А цикл
seri0shka писал(а):
15.10.2018{, 23:38}
Код: Выделить всё

for(char i = reg_595; i >= 0 ; i--)

выполнится reg_595+1 раз! //reg_595- количество 595 регистров
seri0shka писал(а):
15.10.2018{, 23:38}
Код: Выделить всё

for(byte i = reg_595; i >= 0 ; i--)

Бесконечный цикл, т.к. i>=0 верно всегда! Байт не может быть отрицательным.
Поэтому правильно делать так:
for(byte i = reg_595; i > 0 ; i--)
{write_output_595_reg( In_595_reg [i-1] );} // Записываем 595 регистры

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

Добавлено: 16.10.2018{, 12:21}
seri0shka
Sancho писал(а):
16.10.2018{, 09:41}
выполнится reg_595+1 раз!
Да, точно, спасибо за подсказку! Я думал, что i-- выполнится уже при первом проходе, не нашёл толкового описания. Теперь всё стало на свои места. И ещё 20 байт экономии (откуда?).

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

Добавлено: 23.10.2023{, 06:34}
6altay
Добрый день. Помогите разобраться с блоком автора по 74HC165. Что то у меня не работает. Константы в нем, как я понял это пины ардуины и я могу задать любой пин!? Или все таки там другое какое-то значение?

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

Добавлено: 23.10.2023{, 17:27}
ecoins
6altay писал(а):
23.10.2023{, 06:34}
Добрый день. Помогите разобраться с блоком автора по 74HC165. Что то у меня не работает. Константы в нем, как я понял это пины ардуины и я могу задать любой пин!? Или все таки там другое какое-то значение?
А разве есть штатный блок 74HC165? Поискал, не нашел. Выложите проект, чтобы можно было бы понять вопрос.
С Уважением, Энвер.

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

Добавлено: 16.01.2024{, 21:34}
skynet83
Ребят код заточек под какие кнопки заточен с фиксацией или без? Мне нужно чтобы работало по принципу нажал включил еще раз нажал выключил.

Отправлено спустя 3 часа 44 минуты 36 секунд:
165_595_Master_3_lines_(CODE).ubi проверил в протеусе - работает только 1 регистр остальные 3 молчат.

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

Добавлено: 06.03.2024{, 18:39}
Artem851213
Вечер добрый !!!Ребята так в итоге есть нормальный рабочий пользовательский блок под 165 микросхему? :smile427:

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

Добавлено: 06.03.2024{, 19:23}
WildCat
Artem851213 писал(а):
06.03.2024{, 18:39}
Ребята так в итоге есть нормальный рабочий пользовательский блок под 165 микросхему?
Есть

Я пользуюсь блоком 165+595 из этой темы
viewtopic.php?f=88&t=3535&p=83426&hilit ... %8B#p83426

При желании блок можно настроить (код) под неделе количество регистров