С какой частотой правильно отслеживать нажатие кнопки?

Sonologist
Sonologist аватар
Offline
Зарегистрирован: 08.06.2018

Друзья, работу с тактовыми кнопками (аппаратно) изучил, более того, снабдил кнопку дебаунсером на триггере Шмита, всё работает, меандр на Ардуину уходит качественный. Но не нашел рекомендаций, с какой частотой следует программно отслеживать нажатие кнопки, чтобы было удобно ею пользоваться? Если есть информация, ткните в ссылку, пожалуйста. Понимаю, что выход - провести эксперимент, но если есть уже готовое решение....

Заранее спасибо!

Green
Offline
Зарегистрирован: 01.10.2015

Кнопки разные, режимы работы разные. Время дребезга может быть разным. Обычно 30-50мс. 10мс периода опроса хватает на любые "высокоскоростные" комбинации.)

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

У меня опрос клавы с периодом 20мс, установился опытным путем. 

Sonologist
Sonologist аватар
Offline
Зарегистрирован: 08.06.2018

Обычная тактовая кнопка (на энкодере). Дребезга нету вааще: конденсаторы, триггер (проверял осциллом).

Спасибо, друзья, поиграюсь в диапазоне 10-20 мсек. Это уже конкретика.

-NMi-
Offline
Зарегистрирован: 20.08.2018

Sonologist пишет:

 более того, снабдил кнопку дебаунсером на триггере Шмита, всё работает, меандр на Ардуину уходит качественный.

энта... а схему сего чуда можнафстудийу?

Sonologist
Sonologist аватар
Offline
Зарегистрирован: 08.06.2018

-NMi- пишет:

энта... а схему сего чуда можнафстудийу?

Да никакого чуда нет. Кнопка подтянута к (+5в), параллельно контактам конденсатор 100нф. С контакта сигнал идет на один из шести элементов триггера Шмита (74HC14N). На выходе элемента - отличный прямоугольник. Если настаиваете на схеме - вечером около 20:00 загружу. Но, полагаю, описания выше достаточно.

Sonologist
Sonologist аватар
Offline
Зарегистрирован: 08.06.2018

Вот, взял из Интернета: https://i2.wp.com/www.bizkit.ru/wp-content/uploads/2019/03/WaterCounterD...

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

inspiritus
Offline
Зарегистрирован: 17.12.2012

Удобно завести на pcf-ку , а ея инт на int. В обработчике выставлять флаг, а обрабатывать его в теле, когда это допустимо.

b707
Offline
Зарегистрирован: 26.05.2017

Sonologist пишет:

Вот, взял из Интернета: https://i2.wp.com/www.bizkit.ru/wp-content/uploads/2019/03/WaterCounterD...

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

Красиво. только непонятно - зачем?

интересно. для каких таких "касмических технологий" нужен внешний аппаратный триггер? Я отлично обхожусь программным...

nik182
Offline
Зарегистрирован: 04.05.2015

Смотри ка, за два дня второй раз вылезает вопрос зачем аппаратно подавлять дребезг. Опять остроносые с тупоносыми бодаются. Как по мне, то если не в лом поставить аппаратное подавление, то лучше с ним. Заявление, что программного достаточно, можно легко опровергнуть тинькой забитой под завязку. Да и реакция на кнопку однозначнее. 

Удобство пользования целиком личные предпочтения. Сколько времени можно ждать ответа системы, что бы это событие не раздражало. Надо заметить, что сюда входит не только отслеживание нажатия, но и сумма всех остальных задержек обработки - от зажигания светодиода, до появления строки на ТFT экране. Светодиод явно зажжется раньше, чем появится строка. Для меня время реакции после нажатия нормально воспринимается 40-50 миллисекунд.  Следовательно опрашивать кнопки надо чаще.   

Green
Offline
Зарегистрирован: 01.10.2015

Не убедительно. Программных ресурсов минимум, а вместо этого железный ТШ по размерам в два раза больше "тиньки", ничего?

dimax
dimax аватар
Offline
Зарегистрирован: 25.12.2013

Sonologist,  по идее на каждом входе МК стоит такой-же триггер шмитта. Т.е. если убрать из схемы 74hc14 то ничего не изменится :)

nik182
Offline
Зарегистрирован: 04.05.2015

Как то обычно без ТШ обходятся. Тем более, что на входе он и так стоит. Это от незнания удваивают, а так достаточно емкость параллельно контактам кнопки и резистор разрядный.

Green
Offline
Зарегистрирован: 01.10.2015

И как же это в ПК клавиатурах без конденсаторов обходятся? Удивительно.

wdrakula
wdrakula аватар
Offline
Зарегистрирован: 15.03.2016

Green пишет:

И как же это в ПК клавиатурах без конденсаторов обходятся? Удивительно.

там отдельный контроллер, которому ресурсы ни на что, кроме антидребезга, не нужны. Улавливаешь нить? ;))

Sonologist
Sonologist аватар
Offline
Зарегистрирован: 08.06.2018

dimax пишет:

Sonologist,  по идее на каждом входе МК стоит такой-же триггер шмитта. Т.е. если убрать из схемы 74hc14 то ничего не изменится :)

У меня нет никаких оснований этому противоречить. Одно НО: пока не связался с триггером, были траблы с кнопками. Нечеткое срабатывание. Отнес это к дребезгу, который, тем не менее, возникает (вопреки наличию ТШ на входе). Те же грабли (неченткость срабатывания) были и с энкодерами (обычными, не оптическими). Установил ТШ, и проблемы исчезли от слова "совсем".   А 74HC14 удобно ставить энкодеру "под попу": места занимает мало. Три элемента на контакты энкодера и кнопку, если очень хочется инвертировать сигнал - есть в микросхеме еще три элемента.

Green
Offline
Зарегистрирован: 01.10.2015

wdrakula пишет:

там отдельный контроллер, которому ресурсы ни на что, кроме антидребезга, не нужны. Улавливаешь нить? ;))

Там может и моему тоже нечем заняться.)

Pyotr
Offline
Зарегистрирован: 12.03.2014

Низзя конденсатор параллельно кнопке - контакты могут подгорать даже при такой емкости. А если в несколько мкФ (как некоторые делают) так ваще смерть:)

Потяжку включать ко входу МК (а лучше внутреннюю-че ей пропадать зря) или триггера, кондер тоже ко входу, а кнопку через резистор в сотню ом на землю.

ТС, посмотрите мой вариант опроса кнопки.
http://arduino.ru/forum/programmirovanie/snova-o-knopke

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

Sonologist
Sonologist аватар
Offline
Зарегистрирован: 08.06.2018

Pyotr пишет:

ТС, посмотрите мой вариант опроса кнопки.
http://arduino.ru/forum/programmirovanie/snova-o-knopke

Посмотрел. Спасибо, любопытно (но я по посконности пока делаю проще, как на схеме Адриано, только тяну кнопку к +5в). Дальнейшую битву гигантов на той ветке не посмотрел, хотя позже гляну, может, чего еще полезного выужу....

Гриша
Offline
Зарегистрирован: 27.04.2014

Pyotr пишет:

Низзя конденсатор параллельно кнопке - контакты могут подгорать даже при такой емкости. А если в несколько мкФ (как некоторые делают) так ваще смерть:)

Потяжку включать ко входу МК (а лучше внутреннюю-че ей пропадать зря) или триггера, кондер тоже ко входу, а кнопку через резистор в сотню ом на землю.

полностью согласен - схема странная. R2  не пришей рукав и отсутствует зарядно-разрядное сопротивление. можно предположить, что R2 от дурака, который в коде может вход назначить выходом и немного им поуправлять...  

Green
Offline
Зарегистрирован: 01.10.2015

Pyotr пишет:

Низзя конденсатор параллельно кнопке - контакты могут подгорать даже при такой емкости. А если в несколько мкФ (как некоторые делают) так ваще смерть:)


Что русскому хорошо, то кнопке смерть.) Хотелось бы обоснований.

nik182
Offline
Зарегистрирован: 04.05.2015

Ничего не пригорает, ничего не дребезжит, что ещё надо для спокойной старости?

Pyotr
Offline
Зарегистрирован: 12.03.2014

Green пишет:

Pyotr пишет:

Низзя конденсатор параллельно кнопке - контакты могут подгорать даже при такой емкости. А если в несколько мкФ (как некоторые делают) так ваще смерть:)


Что русскому хорошо, то кнопке смерть.) Хотелось бы обоснований.

В момент нажатия на кнопку конденсатор заряжен до 5 В (при питании 5В) и ток разряда ограничен лишь сопротивлением проводников до кнопки и ее контактов. Пусть импульс длится очень короткое время, но на контактах слабая искра обеспечена и на 101й раз контакты всёж подгорят. 

Поэтому делаем как лучше, а косяков в девайсе и без этого хватит ))

Pyotr
Offline
Зарегистрирован: 12.03.2014

nik182 пишет:

Ничего не пригорает, ничего не дребезжит, что ещё надо для спокойной старости?

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

Вопрос к ученым людям - в учебниках про это есть? Мне не попадалось.

Green
Offline
Зарегистрирован: 01.10.2015

Pyotr пишет:

В момент нажатия на кнопку конденсатор заряжен до 5 В (при питании 5В) и ток разряда ограничен лишь сопротивлением проводников до кнопки и ее контактов. Пусть импульс длится очень короткое время, но на контактах слабая искра обеспечена и на 101й раз контакты всёж подгорят. 

Нет, теорию я понимаю. Хотелось бы каких то аргументов или расчётов. Почему на 101, а не на 1000001?

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Pyotr пишет:

конденсатор параллельно кнопке ... несколько мкФ (как некоторые делают) 

А некоторые и не делают конденсатор параллельно кнопке. Некоторые делают сначала резистор, а конденсатор с пина на землю (или на питание - что удобнее разводить) и очень довольны :-)

b707
Offline
Зарегистрирован: 26.05.2017

ЕвгенийП пишет:

А некоторые и не делают конденсатор параллельно кнопке. Некоторые делают сначала резистор, а конденсатор с пина на землю (или на питание - что удобнее разводить) и очень довольны :-)

при такой схеме при подтяжке 10К и резисторе 3.6К на пине будет VCC* 3.6 /(10 + 3.6) - больше вольта при включенной кнопке. Вроде тоже LOW , но как-то неаккуратненько...

nik182
Offline
Зарегистрирован: 04.05.2015

Green пишет:

Нет, теорию я понимаю. Хотелось бы каких то аргументов или расчётов. Почему на 101, а не на 1000001?

Потому что процесс вероятностный. Может на 101, может на 10000001 - любое число озвученное здесь может подойти к конкретной ситуации. Никаких аргументов и расчётов нет. Есть мануал, где прописано минимальное число нажатий при максимальном допустимом токе. Дальше работу никто не гарантирует. Поэтому не надо гнать волну ненужных постов, а нужно немного подумать головой.  

Pyotr
Offline
Зарегистрирован: 12.03.2014

ЕвгенийП пишет:

Pyotr пишет:

конденсатор параллельно кнопке ... несколько мкФ (как некоторые делают) 

А некоторые и не делают конденсатор параллельно кнопке. Некоторые делают сначала резистор, а конденсатор с пина на землю (или на питание - что удобнее разводить) и очень довольны :-)

Раскусили мой подкол..)))) 
А если серьезно, я и не сомневался, что у Вас там все правильно. Просто обычно емкости на порядок-два меньше.

Green
Offline
Зарегистрирован: 01.10.2015

nik182 пишет:
Никаких аргументов и расчётов нет. Есть мануал, где прописано минимальное число нажатий при максимальном допустимом токе. Дальше работу никто не гарантирует. Поэтому не надо гнать волну ненужных постов, а нужно немного подумать головой.  

Какой такой мануал? И это возможно для вас не нужные посты.

nik182
Offline
Зарегистрирован: 04.05.2015

На любую детальку, если конечно она не сделана в подвале на малой арнаутской, есть мануал. Ищите и обрящите. https://static.chipdip.ru/lib/972/DOC002972833.pdf 50мА 100000 циклов.

Pyotr
Offline
Зарегистрирован: 12.03.2014

Green пишет:

Нет, теорию я понимаю. Хотелось бы каких то аргументов или расчётов. Почему на 101, а не на 1000001?

По расчетам эт не ко мне. 
Не было у меня ни сто один, ни мульен один... Зато было один)) Надо было по-быстрому подключить светильник днат 150 Вт с дросселем в качестве ПРА через таймер. Взял новый механический суточный таймер, настроил время ВКЛ/ВЫКЛ, проверил -работает. Должен был отключить лампу до моего приезда. Приезжаю - свет горит. Таймер отработал, а цепь по-прежнему замкнута. Разбираю и вижу, что контакты микрика приварились между собой. В светильнике стоял конденсатор для компенсации реактивного тока в 10 мкФ и одного импульса тока для его заряда хватило чтоб контакты приварились.

Зато контактор 20 А включает 100 мкФ напрямую в сеть уже 5 лет и ему пофиг эти искры.

Поэтому все зависит еще от качества кнопки.

Green
Offline
Зарегистрирован: 01.10.2015

ОК. А тогда откуда 101 нажатие?
Я не ставлю конденсаторы параллельно кнопке.

Sonologist пишет:
Кнопка подтянута к (+5в), параллельно контактам конденсатор 100нф. С контакта сигнал идет на один из шести элементов триггера Шмита (74HC14N).

Во. Пётр уже описал свой случай.)

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

b707 пишет:

при такой схеме при подтяжке 10К и резисторе 3.6К на пине будет VCC* 3.6 /(10 + 3.6) - больше вольта при включенной кнопке. Вроде тоже LOW , но как-то неаккуратненько...

Вполне возможно, но я пользуюсь встроенным резистором подтяжки, а он min=20k - max=50k (таблица 30-1 даташита). Стало быть, при нуле имеем 330-760 милливольт. Вполне себе приемлемо.

Green
Offline
Зарегистрирован: 01.10.2015

Я изначально посчитал что 3,6к на подтяжку.))

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Green пишет:

Кнопки разные, режимы работы разные. Время дребезга может быть разным. Обычно 30-50мс. 10мс периода опроса хватает на любые "высокоскоростные" комбинации.)

С "любыми" - это Вы погорячились. Для музыкальных целей такого периода, скорее всего , окажется недостаточно.

Green
Offline
Зарегистрирован: 01.10.2015

Это уже скорее специальное применение. Тоже самое что и для телеграфного ключа.)

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Sonologist пишет:

Вот, взял из Интернета: https://i2.wp.com/www.bizkit.ru/wp-content/uploads/2019/03/WaterCounterD...

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

А потому, что в той схеме резистор 1к стоит не там, где нужно.

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Green пишет:

Это уже скорее специальное применение. Тоже самое что и для телеграфного ключа.)

Специальное - частный случай "любых высокоскоростных".

Pyotr
Offline
Зарегистрирован: 12.03.2014

Вопрос из #23 остается.) Повторю.

Как, имея один цифровой пин, проверить цепь до кнопки на обрыв при разомкнутых контактах
и проверить цепь на отсутствие КЗ при замкнутых контактах кнопки?

Задачка совсем не для четвертого класса))

Green
Offline
Зарегистрирован: 01.10.2015

andriano пишет:
Специальное - частный случай "любых высокоскоростных".


Под высокоскоростными я имел ввиду обычное клоподавство - одиночный, двойной, тройной...)

Green
Offline
Зарегистрирован: 01.10.2015

Pyotr пишет:

Вопрос из #23 остается.) Повторю.

Как, имея один цифровой пин, проверить цепь до кнопки на обрыв при разомкнутых контактах
и проверить цепь на отсутствие КЗ при замкнутых контактах кнопки?

Задачка совсем не для четвертого класса))


Как вариант, по ёмкости. Разряжать конденсатор и наблюдать скорость восстановления заряда.
 

Pyotr
Offline
Зарегистрирован: 12.03.2014

Уточнение: кнопка (это может быть концевик, датчик с герконом и т.д. ) может длительное время находиться в замкнутом или разомкнутом состоянии. Состояние контактов мы не знаем и можем узнать только когда определим целостность линии до кнопки.

Схему подключения тоже нужно нарисовать)) 

b707
Offline
Зарегистрирован: 26.05.2017

общая идея такая же, как контроль целостности линий в авто. Смысл в том, что сопротивление линии в состояниях "включено" и "выключено" должно быть не 0 и бесконечность, а скажем 150 ом и 22К - чтобы можно было отличить нормальную работу от обрыва и КЗ

На цифровом пине сопротивление линии можно измерять по времени разряда конденатора через датчик

Duino A.R.
Offline
Зарегистрирован: 25.05.2015

Pyotr пишет:
Уточнение: кнопка (это может быть концевик, датчик с герконом и т.д. ) может длительное время находиться в замкнутом или разомкнутом состоянии. Состояние контактов мы не знаем и можем узнать только когда определим целостность линии до кнопки. Схему подключения тоже нужно нарисовать))

Когда нужно сделать по-человечески, в промышленности для этого придумали специальный вид сигнала (цепи): NAMUR.

https://ru.wikipedia.org/wiki/NAMUR

Схемку из контактов и резисторов можно посмотреть тут https://fireflyer.ru/proektirovanie/avtomatika-pozharotusheniya/standart...

Если всё хочется сделать на одном дискретном ардуиновском входе, то... тут нет никаких ограничений в порывах творчества. :))

 

Duino A.R.
Offline
Зарегистрирован: 25.05.2015

Sonologist пишет:
... с какой частотой следует программно отслеживать нажатие кнопки, чтобы было удобно ею пользоваться?

Когда джойстик ещё был кнюпелем, меня учили, что задержку между нажатием кнопки и реакцией системы менее 0,3 с  человек-оператор воспринимает как "мгновенную" реакцию. Если реакции системы человек может в явном виде не определить, то за это время нужно визуально подтвердить факт принятия системой команды.

UPD Удобству взаимодействия человека с кнопкой в "Arduino. Сага о кнопках v.2.0" https://yadi.sk/d/nXvEorbUjf3oX посвящена главка "Песнь кнопки сладкоголосой". Там всё из жизни. :))

 

Pyotr
Offline
Зарегистрирован: 12.03.2014

В707, линия до кнопки просто два провода. Сопротивление 0-10 Ом. Ну чтоб с запасом. 
Если условились, что на линии может быть КЗ, то обязательно защищаем пин МК резистором 100 Ом, ограничивая при этом выходящий ток в 40 мА. Это с учетом выходного сопротивления ключей на выходе МК.
Элементы схемы - резистор(ы), конденсатор(ы), кнопка. 

Duino A.R. спасибо. Теперь буду знать про стандарт NAMUR.

Green
Offline
Зарегистрирован: 01.10.2015

Я несколько раз встречался с неисправностью герконов - просто залипают. Но это не ваш случай.)

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Duino A.R. пишет:
"Arduino. Сага о кнопках v.2.0" https://yadi.sk/d/nXvEorbUjf3oX посвящена главка "Песнь кнопки сладкоголосой". Там всё из жизни. :))

Ёкарный бабай! Писал человек, писал, вроде, всё разумно, а тут с 42-ой страницы, на тебе ... борьба с переполнением миллис! Да ещё и ссылка [14] на совершенно безграмотный код на эту же тему :-(

«Вот те раз! Нельзя же так!»

А так всё хорошо начиналось :-(

dimax
dimax аватар
Offline
Зарегистрирован: 25.12.2013

Кстати, по поводу RC-цепочек для дребезго-подавления есть ещё вот такая схема:

В отличии от предыдущих при замыкании кнопки уровень напряжения будет плавно  не только возрастать, но и падать.  Что может быть полезным при работе с прерываниями в режимах Falling/Rising, когда колебание напряжения  в "переходной зоне" может вызвать ложное прерывание.

 

Duino A.R.
Offline
Зарегистрирован: 25.05.2015

Pyotr пишет:
Duino A.R. спасибо. Теперь буду знать про стандарт NAMUR.

Пожалуйста. :)) Pyotr, чисто для расширения кругозора. NAMUR - стандарт иноземный. Там подразумевается, что все элементы цепи тоже сделаны по иноземным стандартам. Если практиковать в Отечестве, то, по-хорошему, необходимо для контролируемой цепи выписать все коммутационные элементы (контакты переключателей, разъёмов, реле и т.п.), по их паспортам определить элемент с максимальным "минимальным током коммутации" и обеспечить дежурный ток в цепи не ниже этого самого "минимального тока". С учетом типового напряжения для промышленной автоматики =24 В мощности на "подсветку" цепи могут оказаться не гуманными. Да и выбор контактов в одной цепи нужно будет соизмерять между собой. Подварить контакты того же геркона - обычное дело.