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

В данный форуме Вы можете создавать темы посвящённые расширению функционала программы или сайта. После рассмотрения Ваше предложение будет перенесено в соответствующее место
Аватара пользователя
Sancho
Полковник
Сообщения: 3057
Зарегистрирован: 25.12.2015{, 17:32}
Репутация: 383
Откуда: Ярославль.
Имя: Александр
Контактная информация:

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

#61

Сообщение Sancho » 20.03.2018{, 10:59}

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

seri0shka
Лейтенант
Сообщения: 389
Зарегистрирован: 09.04.2016{, 12:17}
Репутация: 18
Откуда: Кременчуг
Имя: Сергей

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

#62

Сообщение seri0shka » 21.03.2018{, 00:42}

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

KulibinOrsk
Сержант
Сообщения: 194
Зарегистрирован: 25.02.2018{, 08:48}
Репутация: 12
Откуда: Оренбург
Имя: Александр

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

#63

Сообщение KulibinOrsk » 21.03.2018{, 09:48}

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

Аватара пользователя
Sancho
Полковник
Сообщения: 3057
Зарегистрирован: 25.12.2015{, 17:32}
Репутация: 383
Откуда: Ярославль.
Имя: Александр
Контактная информация:

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

#64

Сообщение Sancho » 21.03.2018{, 10:08}

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кГц и оптимизируй вывод инфы, аналоговые - поставь "быстрые", опрашивай часы по мере необходимости...
Если не получится на контроллере - сделаю на тразисторах и 155/176...Научился, немного.
Поможем проекту вместе!

seri0shka
Лейтенант
Сообщения: 389
Зарегистрирован: 09.04.2016{, 12:17}
Репутация: 18
Откуда: Кременчуг
Имя: Сергей

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

#65

Сообщение seri0shka » 22.03.2018{, 00:18}

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

seri0shka
Лейтенант
Сообщения: 389
Зарегистрирован: 09.04.2016{, 12:17}
Репутация: 18
Откуда: Кременчуг
Имя: Сергей

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

#66

Сообщение seri0shka » 01.04.2018{, 14:48}

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

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

Аватара пользователя
Sancho
Полковник
Сообщения: 3057
Зарегистрирован: 25.12.2015{, 17:32}
Репутация: 383
Откуда: Ярославль.
Имя: Александр
Контактная информация:

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

#67

Сообщение Sancho » 01.04.2018{, 16:14}

seri0shka,
нужно ужимать и переходить на более низший язык програмирования. Как Вы уже заметили, все мои "телодвиженния" как раз и направлены на экономию "байтов" и увеличение быстродействия. Создание переменных, временных, возможно лишь в чистом С++...
Однако блоки лучше выложите Вы - опыт использования микрух даёт о себе знать при описании. Если в нём (описании) будет упомянуто моё имя - буду признателен.
Если не получится на контроллере - сделаю на тразисторах и 155/176...Научился, немного.
Поможем проекту вместе!

seri0shka
Лейтенант
Сообщения: 389
Зарегистрирован: 09.04.2016{, 12:17}
Репутация: 18
Откуда: Кременчуг
Имя: Сергей

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

#68

Сообщение seri0shka » 06.04.2018{, 23:07}

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 КБ) 47 скачиваний
Sancho, посмотрите, если не затруднит.
KulibinOrsk писал(а):
15.03.2018{, 09:32}
Со дня на день приедут микросхемы (заказал и те и те т.к. надо 32 входа и 32 выхода) и сразу начну проверять.
KulibinOrsk, ждём ваших результатов тестирования.

KulibinOrsk
Сержант
Сообщения: 194
Зарегистрирован: 25.02.2018{, 08:48}
Репутация: 12
Откуда: Оренбург
Имя: Александр

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

#69

Сообщение KulibinOrsk » 07.04.2018{, 17:04}

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

seri0shka
Лейтенант
Сообщения: 389
Зарегистрирован: 09.04.2016{, 12:17}
Репутация: 18
Откуда: Кременчуг
Имя: Сергей

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

#70

Сообщение seri0shka » 09.10.2018{, 20:27}

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
Лейтенант
Сообщения: 389
Зарегистрирован: 09.04.2016{, 12:17}
Репутация: 18
Откуда: Кременчуг
Имя: Сергей

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

#71

Сообщение seri0shka » 15.10.2018{, 23:38}

Жаль, что никто не подсказал. Проблема была в том, что я пытался использовать конструкцию

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

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
Полковник
Сообщения: 3057
Зарегистрирован: 25.12.2015{, 17:32}
Репутация: 383
Откуда: Ярославль.
Имя: Александр
Контактная информация:

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

#72

Сообщение Sancho » 16.10.2018{, 09:41}

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 регистры
Если не получится на контроллере - сделаю на тразисторах и 155/176...Научился, немного.
Поможем проекту вместе!

seri0shka
Лейтенант
Сообщения: 389
Зарегистрирован: 09.04.2016{, 12:17}
Репутация: 18
Откуда: Кременчуг
Имя: Сергей

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

#73

Сообщение seri0shka » 16.10.2018{, 12:21}

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

Ответить

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

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

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