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

В данный форуме Вы можете создавать темы посвящённые расширению функционала программы или сайта. После рассмотрения Ваше предложение будет перенесено в соответствующее место
seri0shka
Лейтенант
Сообщения: 391
Зарегистрирован: 09 апр 2016, 12:17
Откуда: Кременчуг
Имя: Сергей

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

Сообщение 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 доведёт до ума и блоки и описание и оформит после тестов как положено в "Пользовательских" блоках
Обязательно. Но быстро не обещаю- работа, личная жизнь иногда. Если кому что надо быстрей, пишите. И не забывайте отписаться о результатах применения.
KulibinOrsk
Лейтенант
Сообщения: 515
Зарегистрирован: 25 фев 2018, 08:48
Откуда: Оренбург
Имя: Александр

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

Сообщение KulibinOrsk »

seri0shka, Надо конечно. Ждем. И вас и микросхемы которые заказал.
Я возможно не смогу проверить так детально как вы т.к. не знаю всех нюансов работы программы FLProg - в частности как правильно строить программу.
Но насколько смогу проверю. Моя задача - читать входа и записывать выхода и все это действо с учетом обработки чтобы укладывалось в 0.1 сек (для блоков с расширением) с учетом обработки в программе задач.
Но вот набросал тестовую задачу для проверки: часы+энкодер+LCD+2 аналоговых и программа уже отрабатывает с задержкой в 0.4 сек. Может я неправильно разместил платы или неверное вообще сформировал программу. Поэтому на первых порах я не могу достоверно проверить работу блока. Только на уровне - работает или нет. Т.е. подаю на входа и вижу как проходит через программу на выход. Но это наверное вы и без меня сможете проверить в течении 20 минут.
Аватара пользователя
Sancho
Полковник
Сообщения: 4066
Зарегистрирован: 25 дек 2015, 17:32
Откуда: Ярославль.
Имя: Александр
Контактная информация:

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

Сообщение Sancho »

seri0shka,
Тогда поменяй на вот так:
SPOILERSPOILER_SHOW

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

//  Вариант 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 мар 2018, 09:48Но вот набросал тестовую задачу для проверки: часы+энкодер+LCD+2 аналоговых и программа уже отрабатывает с задержкой в 0.4 сек.
Оптимизируй проект: если lcd по i2c - разгоняй бибку до 400кГц и оптимизируй вывод инфы, аналоговые - поставь "быстрые", опрашивай часы по мере необходимости...
мой ник в нете и почте omelchuk890, если что. запомните на всякий. многие знают номер тлф.
seri0shka
Лейтенант
Сообщения: 391
Зарегистрирован: 09 апр 2016, 12:17
Откуда: Кременчуг
Имя: Сергей

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

Сообщение seri0shka »

Sancho писал(а): 21 мар 2018, 10:12Тогда поменяй на вот так
Вроде можно и так. К сожалению, все эксперименты с ардуино вынужден отложить на несколько дней.
Sancho писал(а): 21 мар 2018, 10:12аналоговые - поставь "быстрые"
Там, как мне помнится, с аналоговыми очень небольшой прирост скорости.
seri0shka
Лейтенант
Сообщения: 391
Зарегистрирован: 09 апр 2016, 12:17
Откуда: Кременчуг
Имя: Сергей

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

Сообщение seri0shka »

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

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

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

Сообщение Sancho »

seri0shka,
нужно ужимать и переходить на более низший язык програмирования. Как Вы уже заметили, все мои "телодвиженния" как раз и направлены на экономию "байтов" и увеличение быстродействия. Создание переменных, временных, возможно лишь в чистом С++...
Однако блоки лучше выложите Вы - опыт использования микрух даёт о себе знать при описании. Если в нём (описании) будет упомянуто моё имя - буду признателен.
мой ник в нете и почте omelchuk890, если что. запомните на всякий. многие знают номер тлф.
seri0shka
Лейтенант
Сообщения: 391
Зарегистрирован: 09 апр 2016, 12:17
Откуда: Кременчуг
Имя: Сергей

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

Сообщение seri0shka »

seri0shka писал(а): 15 мар 2018, 12:04А что если попробовать так: притянули защёлку вниз, серия импульсов на CLK- отправили данные на 595, потом защёлку вверх, дальше переключили вывод данных на вход, серия импульсов на CLK- приняли данные с 165, снова переключили вывод данных на вЫход, закончили упражнение. Получится трёхпроводная схема. Такой ещё не встречал, но стоит попробовать.
Сделал блок, работает! При подключении микросхем входных регистров нужно добавить три деталюхи, на рисунке выделены, в описании блока расписано подробно. Здесь только мастер-блок, остальные здесь: http://forum.flprog.ru/viewtopic.php?f= ... 200#p45200
Проверено в железе.
SPOILERSPOILER_SHOW
по 5 проводам-1.jpg
SPOILERSPOILER_SHOW
165_595_Master_3_lines_(CODE).ubi
Sancho, посмотрите, если не затруднит.
KulibinOrsk писал(а): 15 мар 2018, 09:32Со дня на день приедут микросхемы (заказал и те и те т.к. надо 32 входа и 32 выхода) и сразу начну проверять.
KulibinOrsk, ждём ваших результатов тестирования.
У вас нет необходимых прав для просмотра вложений в этом сообщении.
KulibinOrsk
Лейтенант
Сообщения: 515
Зарегистрирован: 25 фев 2018, 08:48
Откуда: Оренбург
Имя: Александр

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

Сообщение KulibinOrsk »

Я помню. Жду микрухи. Китай что то нереально долго едет. Бывает порой за 10 дней, а порой 2 месяца идут.
seri0shka
Лейтенант
Сообщения: 391
Зарегистрирован: 09 апр 2016, 12:17
Откуда: Кременчуг
Имя: Сергей

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

Сообщение 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, пробовали что-нибудь по теме?
seri0shka
Лейтенант
Сообщения: 391
Зарегистрирован: 09 апр 2016, 12:17
Откуда: Кременчуг
Имя: Сергей

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

Сообщение 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 байт меньше места в памяти, реально же выигрыша нет почему-то.
Аватара пользователя
Sancho
Полковник
Сообщения: 4066
Зарегистрирован: 25 дек 2015, 17:32
Откуда: Ярославль.
Имя: Александр
Контактная информация:

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

Сообщение Sancho »

seri0shka, Цикл
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 регистры
мой ник в нете и почте omelchuk890, если что. запомните на всякий. многие знают номер тлф.
seri0shka
Лейтенант
Сообщения: 391
Зарегистрирован: 09 апр 2016, 12:17
Откуда: Кременчуг
Имя: Сергей

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

Сообщение seri0shka »

Sancho писал(а): 16 окт 2018, 09:41выполнится reg_595+1 раз!
Да, точно, спасибо за подсказку! Я думал, что i-- выполнится уже при первом проходе, не нашёл толкового описания. Теперь всё стало на свои места. И ещё 20 байт экономии (откуда?).
6altay
Рядовой
Сообщения: 1
Зарегистрирован: 22 сен 2023, 09:25
Имя: Николай

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

Сообщение 6altay »

Добрый день. Помогите разобраться с блоком автора по 74HC165. Что то у меня не работает. Константы в нем, как я понял это пины ардуины и я могу задать любой пин!? Или все таки там другое какое-то значение?
ecoins
Полковник
Сообщения: 3139
Зарегистрирован: 12 фев 2016, 11:40
Откуда: Шатура
Имя: Энвер

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

Сообщение ecoins »

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

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

Сообщение skynet83 »

Ребят код заточек под какие кнопки заточен с фиксацией или без? Мне нужно чтобы работало по принципу нажал включил еще раз нажал выключил.

Отправлено спустя 3 часа 44 минуты 36 секунд:
165_595_Master_3_lines_(CODE).ubi проверил в протеусе - работает только 1 регистр остальные 3 молчат.
Artem851213
Рядовой
Сообщения: 29
Зарегистрирован: 11 сен 2020, 20:29
Откуда: Almaty
Имя: Artem

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

Сообщение Artem851213 »

Вечер добрый !!!Ребята так в итоге есть нормальный рабочий пользовательский блок под 165 микросхему? :smile427:
WildCat
Лейтенант
Сообщения: 506
Зарегистрирован: 04 июн 2022, 04:14
Имя: Михаил

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

Сообщение WildCat »

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

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

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

Вернуться в «Новые»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость