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

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

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

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

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

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

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

Добавлено: 21 мар 2018, 10:12
Sancho
[ref]seri0shka[/ref],
Тогда поменяй на вот так:
[spoiler]

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

//  Вариант 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; // Зараннее, что-бы не проскочило ничего лишнего
}
[/spoiler]

Отправлено спустя 4 минуты 20 секунд:
KulibinOrsk писал(а): 21 мар 2018, 09:48Но вот набросал тестовую задачу для проверки: часы+энкодер+LCD+2 аналоговых и программа уже отрабатывает с задержкой в 0.4 сек.
Оптимизируй проект: если lcd по i2c - разгоняй бибку до 400кГц и оптимизируй вывод инфы, аналоговые - поставь "быстрые", опрашивай часы по мере необходимости...

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

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

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

Добавлено: 01 апр 2018, 14:55
seri0shka
[ref=#ff8000]Sancho[/ref], я протестировал ваши последние блоки, выложенные в сообщении 61, всё работает отлично с паузой не менее 1 микросекунды (при 0 не работает нормально ни чтение, ни запись). Давайте Вы выложите в "Пользовательские блоки" под своим именем, чтоб по-честному. Для тех, кому интересно больше, дайте ссылку на эту тему.

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

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

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

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

Добавлено: 06 апр 2018, 23:07
seri0shka
seri0shka писал(а): 15 мар 2018, 12:04А что если попробовать так: притянули защёлку вниз, серия импульсов на CLK- отправили данные на 595, потом защёлку вверх, дальше переключили вывод данных на вход, серия импульсов на CLK- приняли данные с 165, снова переключили вывод данных на вЫход, закончили упражнение. Получится трёхпроводная схема. Такой ещё не встречал, но стоит попробовать.
Сделал блок, работает! При подключении микросхем входных регистров нужно добавить три деталюхи, на рисунке выделены, в описании блока расписано подробно. Здесь только мастер-блок, остальные здесь: http://forum.flprog.ru/viewtopic.php?f= ... 200#p45200
Проверено в железе.
[spoiler]
по 5 проводам-1.jpg
[/spoiler]
[spoiler]
165_595_Master_3_lines_(CODE).ubi
[/spoiler]

[ref=#ff8000]Sancho[/ref], посмотрите, если не затруднит.
KulibinOrsk писал(а): 15 мар 2018, 09:32Со дня на день приедут микросхемы (заказал и те и те т.к. надо 32 входа и 32 выхода) и сразу начну проверять.
[ref]KulibinOrsk[/ref], ждём ваших результатов тестирования.

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

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

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

Добавлено: 09 окт 2018, 20:29
seri0shka
[ref=#ff8000]Sancho[/ref], вот фрагмент блока для управления входными-выходными регистрами по трём проводам, с настраиваемым количеством регистров. Всё давно проверено и отлажено. Но мне нужно, чтобы запись велась начиная с ближнего к контроллеру регистра, а начинается с дальнего, что создаёт некоторые неудобства при составлении проектов. Как правильно переписать следующую строку? :

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

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

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

Добавлено: 15 окт 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 окт 2018, 09:41
Sancho
[ref]seri0shka[/ref], Цикл
seri0shka писал(а): 09 окт 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 окт 2018, 23:38Код: Выделить всё

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

выполнится reg_595+1 раз! //reg_595- количество 595 регистров
seri0shka писал(а): 15 окт 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 окт 2018, 12:21
seri0shka
Sancho писал(а): 16 окт 2018, 09:41выполнится reg_595+1 раз!
Да, точно, спасибо за подсказку! Я думал, что i-- выполнится уже при первом проходе, не нашёл толкового описания. Теперь всё стало на свои места. И ещё 20 байт экономии (откуда?).

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

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

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

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

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

Добавлено: 17 янв 2024, 01:19
skynet83
Ребят код заточек под какие кнопки заточен с фиксацией или без? Мне нужно чтобы работало по принципу нажал включил еще раз нажал выключил.

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

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

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

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

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

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

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