Возможно ли библиотеку GyverButton подружить со сдвиговым регистром?

SarmatK

✩✩✩✩✩✩✩
13 Июл 2021
14
2
На мой взгляд, для описанной задачи больше подходят расширители ввода/вывода. Как пример - PCF8574. Он и последовательный вывод в параллельный конвертирует, и параллельный ввод в последовательный. Для него и либа есть - LCD_I2C, с которой можно начать, чтобы создать свою под конкретные нужды.
 

poty

★★★★★★✩
19 Фев 2020
2,988
895
А на мой взгляд достаточно использовать один аналоговый вход. И никаких сдвиговых регистров.
 

Старик Похабыч

★★★★★★★
14 Авг 2019
4,192
1,281
Москва
А по мне для разнообразия это очень неплохо. Как альтернатива. И я вот до этого не знал, что есть сдвиговые регистры, такого типа. Похож на дешифратор, но все же.
 

poty

★★★★★★✩
19 Фев 2020
2,988
895
Для этой альтернативы нужна куча портов МК. Можно, конечно, если делать нечего.
 

Геннадий П

★★★★★★✩
14 Апр 2021
1,837
592
44
@poty, Кнопки три-четыре можно так подключить если нужно одновременное нажатие более одной. Если не нужно одновременное нажатие, то с дюжину можно подключить.
 

poty

★★★★★★✩
19 Фев 2020
2,988
895

@Геннадий П, надёжное распознавание - это примерно 6 бит, то есть 6 кнопок можно подключить. Если считать, что нужно подключить пару кнопок (2 бита) + 2 переключателя (по 2 положения) - ещё 4 бита, то всё легко на одном порту решается. С дополнительными цифровыми портами, подключающими группы переключателей, можно практически удваивать эти возможности/порт.
 

derungebundener

✩✩✩✩✩✩✩
18 Июл 2020
117
3
@Старик Похабыч, А можно ещё вопрос?
Вчера тут обсуждались внутренности бибилиотеки для чтения сдвигового регистра, где импульс для чтения строился через delay, и, собственно, хотел спросить - этот самый delay в 5 мкс не помешает ли работе spi шине и модулю nrf24l01 в частности? Вдруг как-то будет мешать отправлять/читать данные?
 

Старик Похабыч

★★★★★★★
14 Авг 2019
4,192
1,281
Москва
не должны. Тут нет многозадачности как таковой. Когда считываете данные с регистра больше ничего не происходит. И 5 мкс это очень быстро. Далее у НРФ есть свой процессор и буфер. Главное в него положить , а уж отправит он сам , а т.к. кладете вы в другое время, нежели читает из регистра, то проблем не вижу.
 
  • Лойс +1
Реакции: derungebundener

derungebundener

✩✩✩✩✩✩✩
18 Июл 2020
117
3
@Старик Похабыч,Наверняка уже надоел вам, да и сильно отвлекаю, но, можно ли спросить еще совета? Случайно не работали с модулями nrf24l01?

Я тут нашел универсальную библиотеку под разные радиомодули, в т.ч. и для этого.

В одном из примеров на получение данных указано, что обычное чтение - это блокирующая функция:


И поэтому якобы правильнее пользоваться чтением с прерыванием:


Но я никак не могу понять, что именно блокирует это функция и что именно делает это прерывание.
У нас тут в уроках всё понятно - "Вот тебе кнопка, вот тебе прерывание, вот тебе обработка кода вне очереди".
А вот в чем тут суть - не ясно...

Точно такая же петрушка, вроде, и с модулями ЛоРа...
 

Старик Похабыч

★★★★★★★
14 Авг 2019
4,192
1,281
Москва
Не пользовался этой библиотекой. Вполне может быть, что блокирующая функция будет ждать нужное кол-во байт от приемника.
В обычной RF24-master есть функция проверки входного будфера radio.available() и действия по чтению можно делать при наличии данных.
 

bort707

★★★★★★✩
21 Сен 2020
2,898
862
@derungebundener, к сожалению, ваши ссылки вставились как-то неудачно и непонятно, что там в библиотеке имеется в виду под блокирующей функцией.
Но из общих соображений - принимать данные почти с любого радиомодуля можно двумя методами - по опросу (поллинг) или по прерыванию.
В первом случае ваша программа должна непрерывно опрашивать радио на предмет новых данных. Во втором опрос не требуется, вместо этого модуль сам подает вам сигнал о приеме путем выставления логического уровня на отдельном пине. Для работы необходимо настроить в программе обработчик прерывания.
Работу через прерыввние поддерживают многие радиомодули, такие как нрф24, hc-12.... Специальная библиотека для этого не требуется.

Каждый метод имеет свои преимущества и недостатки. Работа через опрос проще, но в этом случае тратится время на постоянный опрос модуля. Кроме того, если делать опрос недостаточно часто, реакция на сообщения радио будет приходить с опозданием. В случае прерывания реакция программы быстрее и время тратится только при приходе сообщения. Но работа с прерываниями сложнее для новичка и для нее нужен дополнительный пин.
 

derungebundener

✩✩✩✩✩✩✩
18 Июл 2020
117
3
@bort707,Вроде как разобрался чуток:
В библиотеке есть пример приёма по прерыванию. Там опрашивается пин при приеме сообщения (либо отправке) и по нему поднимается флаг.
А далее в Loop уже идёт проверка флага и внутри условия пихаем свой код....
Но вссё равно ничего не понятно, ых...

UPD
Надо бы на досуге проверить - можно ли эту лабуду с флагом и проверкой флага заменить на полноценное прерывание - нацепить именно attach interrupt на пин.
 

bort707

★★★★★★✩
21 Сен 2020
2,898
862
@bort707,Вроде как разобрался чуток:

Но вссё равно ничего не понятно, ых...
вроде разобрался, но ничего не понятно... это как?

Вроде понял, что вы написали, но в смысл не вьехал.:)
Вы в общий принцип работы прерываний знаете? Иначе не поймете. Почитайте уроки гайвера или книжку какую
 

derungebundener

✩✩✩✩✩✩✩
18 Июл 2020
117
3
@bort707,

Ну, я понял, как запихать полезный код внутрь прерывания :sneaky:

И второе -хочу попробовать поменять прерывание немного.

Сейчас работает так:

pin (можно указать любой и подключиться к любому) вызывает функцию, которая поднимает флаг
в loop стоит условие if где этот флаг проверяется
и в сам же if пихается полезный код


я хочу, сделать так, но не уверен,стоит ли и есть ли смысл:

pin от радио подключен к пину-прерыванию ардуины
пишем обычный attachinterrupt
и обработчик, в который и пихаем код
 

bort707

★★★★★★✩
21 Сен 2020
2,898
862
@derungebundener, если вы хотите весь код работы с радио поместить в обработчик прерывания - то это ошибка. Типичная ошибка новичка:)

Обработчик должен быть как можно более коротким. Правильнее делать так, как в примере - в обработчике только поднимать флаг, а всю работу - в луп
 

Геннадий П

★★★★★★✩
14 Апр 2021
1,837
592
44
@derungebundener, В прерывании не должно быть тяжелых операций. Код в прерывании должен быть минимально возможный, чтобы максимально быстро выйти из него.
Вариант с флагом в прерывании в данном случае самый правильный.
 

poty

★★★★★★✩
19 Фев 2020
2,988
895
Далеко не все МК позволяют делать attachinterrupt к любому пину.
 

derungebundener

✩✩✩✩✩✩✩
18 Июл 2020
117
3
@Геннадий П, Спасибо, буду знать :)

@poty,Да, верно, так и есть.
Просто у самого радио есть пин прерывания - я про него и говорил. Правда, видимо, непонятно объяснил:

В примере сделано так:
При получении сообщения радио само подаёт на свой пин сигнал, что работает как прерывание.
Этот пин радио мы можем подключить на любой цифровой пин.

А дальше я высказал предположение - подсоединить пин от радио к именно к пину контроллера, где есть функция прерывания.
 

Старик Похабыч

★★★★★★★
14 Авг 2019
4,192
1,281
Москва
В любом случае работа сведется к такому коду в цикле:
если есть новые данные , то считать их и обработать.
в случае с прерыванием на пине новые данные будут типа "новые данные=дигиталРид(пин_прерывания) либо в самом цикле, либо в обработчике прерывания.
Если цикл loop крутиться достаточно быстро, то проблем быть не должно ни в том, ни в другом случае. Передача коротких данных (6 байт) с подтверждением работает свободно кажется до 50 раз в секунду у меня. Для управления по радио этого мне за глаза хватает.
 

derungebundener

✩✩✩✩✩✩✩
18 Июл 2020
117
3
@Старик Похабыч, У меня в планах всего 8 байт и всего в одну сторону. И те же 50 циклов в секунду. Да и подтверждение не нужно -crc же есть, а также на стороне приемника будет предусмотрены действия на случай, если сигнал пропал.
 

Старик Похабыч

★★★★★★★
14 Авг 2019
4,192
1,281
Москва
Подтверждение - встроенная функция nrf , работает на всех скоростях, кроме самой маленькой, самой дальнобойной. У меня пульт самодельный, который позволяет настраивать все без перезаливки программы, с сохранением профилей и про. 8 кнопок, 4 потенциометра, повороты энкодера - все это передается на приемник.
 

derungebundener

✩✩✩✩✩✩✩
18 Июл 2020
117
3
Ну у меня не пульт будет, а контроллер для теплицы. Немного автоматизации и плюс возможность внешнего управления.