С какой частотой правильно отслеживать нажатие кнопки?
- Войдите на сайт для отправки комментариев
Втр, 12/05/2020 - 15:37
Друзья, работу с тактовыми кнопками (аппаратно) изучил, более того, снабдил кнопку дебаунсером на триггере Шмита, всё работает, меандр на Ардуину уходит качественный. Но не нашел рекомендаций, с какой частотой следует программно отслеживать нажатие кнопки, чтобы было удобно ею пользоваться? Если есть информация, ткните в ссылку, пожалуйста. Понимаю, что выход - провести эксперимент, но если есть уже готовое решение....
Заранее спасибо!
Кнопки разные, режимы работы разные. Время дребезга может быть разным. Обычно 30-50мс. 10мс периода опроса хватает на любые "высокоскоростные" комбинации.)
У меня опрос клавы с периодом 20мс, установился опытным путем.
Обычная тактовая кнопка (на энкодере). Дребезга нету вааще: конденсаторы, триггер (проверял осциллом).
Спасибо, друзья, поиграюсь в диапазоне 10-20 мсек. Это уже конкретика.
более того, снабдил кнопку дебаунсером на триггере Шмита, всё работает, меандр на Ардуину уходит качественный.
энта... а схему сего чуда можнафстудийу?
энта... а схему сего чуда можнафстудийу?
Да никакого чуда нет. Кнопка подтянута к (+5в), параллельно контактам конденсатор 100нф. С контакта сигнал идет на один из шести элементов триггера Шмита (74HC14N). На выходе элемента - отличный прямоугольник. Если настаиваете на схеме - вечером около 20:00 загружу. Но, полагаю, описания выше достаточно.
Вот, взял из Интернета: https://i2.wp.com/www.bizkit.ru/wp-content/uploads/2019/03/WaterCounterD...
Один в один, как у меня. Правда, я даже исключил резистор 1ком (есть или нет он - мой осциллограф разницы в сиысле дребезга не почувствовал).
Удобно завести на pcf-ку , а ея инт на int. В обработчике выставлять флаг, а обрабатывать его в теле, когда это допустимо.
Вот, взял из Интернета: https://i2.wp.com/www.bizkit.ru/wp-content/uploads/2019/03/WaterCounterD...
Один в один, как у меня. Правда, я даже исключил резистор 1ком (есть или нет он - мой осциллограф разницы в сиысле дребезга не почувствовал).
Красиво. только непонятно - зачем?
интересно. для каких таких "касмических технологий" нужен внешний аппаратный триггер? Я отлично обхожусь программным...
Смотри ка, за два дня второй раз вылезает вопрос зачем аппаратно подавлять дребезг. Опять остроносые с тупоносыми бодаются. Как по мне, то если не в лом поставить аппаратное подавление, то лучше с ним. Заявление, что программного достаточно, можно легко опровергнуть тинькой забитой под завязку. Да и реакция на кнопку однозначнее.
Удобство пользования целиком личные предпочтения. Сколько времени можно ждать ответа системы, что бы это событие не раздражало. Надо заметить, что сюда входит не только отслеживание нажатия, но и сумма всех остальных задержек обработки - от зажигания светодиода, до появления строки на ТFT экране. Светодиод явно зажжется раньше, чем появится строка. Для меня время реакции после нажатия нормально воспринимается 40-50 миллисекунд. Следовательно опрашивать кнопки надо чаще.
Не убедительно. Программных ресурсов минимум, а вместо этого железный ТШ по размерам в два раза больше "тиньки", ничего?
Sonologist, по идее на каждом входе МК стоит такой-же триггер шмитта. Т.е. если убрать из схемы 74hc14 то ничего не изменится :)
Как то обычно без ТШ обходятся. Тем более, что на входе он и так стоит. Это от незнания удваивают, а так достаточно емкость параллельно контактам кнопки и резистор разрядный.
И как же это в ПК клавиатурах без конденсаторов обходятся? Удивительно.
И как же это в ПК клавиатурах без конденсаторов обходятся? Удивительно.
там отдельный контроллер, которому ресурсы ни на что, кроме антидребезга, не нужны. Улавливаешь нить? ;))
Sonologist, по идее на каждом входе МК стоит такой-же триггер шмитта. Т.е. если убрать из схемы 74hc14 то ничего не изменится :)
У меня нет никаких оснований этому противоречить. Одно НО: пока не связался с триггером, были траблы с кнопками. Нечеткое срабатывание. Отнес это к дребезгу, который, тем не менее, возникает (вопреки наличию ТШ на входе). Те же грабли (неченткость срабатывания) были и с энкодерами (обычными, не оптическими). Установил ТШ, и проблемы исчезли от слова "совсем". А 74HC14 удобно ставить энкодеру "под попу": места занимает мало. Три элемента на контакты энкодера и кнопку, если очень хочется инвертировать сигнал - есть в микросхеме еще три элемента.
там отдельный контроллер, которому ресурсы ни на что, кроме антидребезга, не нужны. Улавливаешь нить? ;))
Низзя конденсатор параллельно кнопке - контакты могут подгорать даже при такой емкости. А если в несколько мкФ (как некоторые делают) так ваще смерть:)
Потяжку включать ко входу МК (а лучше внутреннюю-че ей пропадать зря) или триггера, кондер тоже ко входу, а кнопку через резистор в сотню ом на землю.
ТС, посмотрите мой вариант опроса кнопки.
http://arduino.ru/forum/programmirovanie/snova-o-knopke
В одной переменной хранится и текущее состояние кнопки, и прошедшие за определенный период времени. Никакой специальной борьбы с дребезгом.
ТС, посмотрите мой вариант опроса кнопки.
http://arduino.ru/forum/programmirovanie/snova-o-knopke
Посмотрел. Спасибо, любопытно (но я по посконности пока делаю проще, как на схеме Адриано, только тяну кнопку к +5в). Дальнейшую битву гигантов на той ветке не посмотрел, хотя позже гляну, может, чего еще полезного выужу....
Низзя конденсатор параллельно кнопке - контакты могут подгорать даже при такой емкости. А если в несколько мкФ (как некоторые делают) так ваще смерть:)
Потяжку включать ко входу МК (а лучше внутреннюю-че ей пропадать зря) или триггера, кондер тоже ко входу, а кнопку через резистор в сотню ом на землю.
полностью согласен - схема странная. R2 не пришей рукав и отсутствует зарядно-разрядное сопротивление. можно предположить, что R2 от дурака, который в коде может вход назначить выходом и немного им поуправлять...
Низзя конденсатор параллельно кнопке - контакты могут подгорать даже при такой емкости. А если в несколько мкФ (как некоторые делают) так ваще смерть:)
Что русскому хорошо, то кнопке смерть.) Хотелось бы обоснований.
Ничего не пригорает, ничего не дребезжит, что ещё надо для спокойной старости?
Низзя конденсатор параллельно кнопке - контакты могут подгорать даже при такой емкости. А если в несколько мкФ (как некоторые делают) так ваще смерть:)
Что русскому хорошо, то кнопке смерть.) Хотелось бы обоснований.
В момент нажатия на кнопку конденсатор заряжен до 5 В (при питании 5В) и ток разряда ограничен лишь сопротивлением проводников до кнопки и ее контактов. Пусть импульс длится очень короткое время, но на контактах слабая искра обеспечена и на 101й раз контакты всёж подгорят.
Поэтому делаем как лучше, а косяков в девайсе и без этого хватит ))
Ничего не пригорает, ничего не дребезжит, что ещё надо для спокойной старости?
Вот про такую схему я и говорил.
А для спокойной старости)) нужно еще отслеживать целостность линии до кнопки и наличие самой кнопки. Это на случай длинной линии и, например, геркона в бочке с водой. Именно по двум проводам - сигнал и земля.
Вопрос к ученым людям - в учебниках про это есть? Мне не попадалось.
В момент нажатия на кнопку конденсатор заряжен до 5 В (при питании 5В) и ток разряда ограничен лишь сопротивлением проводников до кнопки и ее контактов. Пусть импульс длится очень короткое время, но на контактах слабая искра обеспечена и на 101й раз контакты всёж подгорят.
конденсатор параллельно кнопке ... несколько мкФ (как некоторые делают)
А некоторые и не делают конденсатор параллельно кнопке. Некоторые делают сначала резистор, а конденсатор с пина на землю (или на питание - что удобнее разводить) и очень довольны :-)
А некоторые и не делают конденсатор параллельно кнопке. Некоторые делают сначала резистор, а конденсатор с пина на землю (или на питание - что удобнее разводить) и очень довольны :-)
при такой схеме при подтяжке 10К и резисторе 3.6К на пине будет VCC* 3.6 /(10 + 3.6) - больше вольта при включенной кнопке. Вроде тоже LOW , но как-то неаккуратненько...
Нет, теорию я понимаю. Хотелось бы каких то аргументов или расчётов. Почему на 101, а не на 1000001?
конденсатор параллельно кнопке ... несколько мкФ (как некоторые делают)
А некоторые и не делают конденсатор параллельно кнопке. Некоторые делают сначала резистор, а конденсатор с пина на землю (или на питание - что удобнее разводить) и очень довольны :-)
Раскусили мой подкол..))))
А если серьезно, я и не сомневался, что у Вас там все правильно. Просто обычно емкости на порядок-два меньше.
На любую детальку, если конечно она не сделана в подвале на малой арнаутской, есть мануал. Ищите и обрящите. https://static.chipdip.ru/lib/972/DOC002972833.pdf 50мА 100000 циклов.
Нет, теорию я понимаю. Хотелось бы каких то аргументов или расчётов. Почему на 101, а не на 1000001?
По расчетам эт не ко мне.
Не было у меня ни сто один, ни мульен один... Зато было один)) Надо было по-быстрому подключить светильник днат 150 Вт с дросселем в качестве ПРА через таймер. Взял новый механический суточный таймер, настроил время ВКЛ/ВЫКЛ, проверил -работает. Должен был отключить лампу до моего приезда. Приезжаю - свет горит. Таймер отработал, а цепь по-прежнему замкнута. Разбираю и вижу, что контакты микрика приварились между собой. В светильнике стоял конденсатор для компенсации реактивного тока в 10 мкФ и одного импульса тока для его заряда хватило чтоб контакты приварились.
Зато контактор 20 А включает 100 мкФ напрямую в сеть уже 5 лет и ему пофиг эти искры.
Поэтому все зависит еще от качества кнопки.
ОК. А тогда откуда 101 нажатие?
Я не ставлю конденсаторы параллельно кнопке.
Во. Пётр уже описал свой случай.)
при такой схеме при подтяжке 10К и резисторе 3.6К на пине будет VCC* 3.6 /(10 + 3.6) - больше вольта при включенной кнопке. Вроде тоже LOW , но как-то неаккуратненько...
Вполне возможно, но я пользуюсь встроенным резистором подтяжки, а он min=20k - max=50k (таблица 30-1 даташита). Стало быть, при нуле имеем 330-760 милливольт. Вполне себе приемлемо.
Я изначально посчитал что 3,6к на подтяжку.))
Кнопки разные, режимы работы разные. Время дребезга может быть разным. Обычно 30-50мс. 10мс периода опроса хватает на любые "высокоскоростные" комбинации.)
С "любыми" - это Вы погорячились. Для музыкальных целей такого периода, скорее всего , окажется недостаточно.
Это уже скорее специальное применение. Тоже самое что и для телеграфного ключа.)
Вот, взял из Интернета: https://i2.wp.com/www.bizkit.ru/wp-content/uploads/2019/03/WaterCounterD...
Один в один, как у меня. Правда, я даже исключил резистор 1ком (есть или нет он - мой осциллограф разницы в сиысле дребезга не почувствовал).
Это уже скорее специальное применение. Тоже самое что и для телеграфного ключа.)
Вопрос из #23 остается.) Повторю.
Как, имея один цифровой пин, проверить цепь до кнопки на обрыв при разомкнутых контактах
и проверить цепь на отсутствие КЗ при замкнутых контактах кнопки?
Задачка совсем не для четвертого класса))
Под высокоскоростными я имел ввиду обычное клоподавство - одиночный, двойной, тройной...)
Вопрос из #23 остается.) Повторю.
Как, имея один цифровой пин, проверить цепь до кнопки на обрыв при разомкнутых контактах
и проверить цепь на отсутствие КЗ при замкнутых контактах кнопки?
Задачка совсем не для четвертого класса))
Как вариант, по ёмкости. Разряжать конденсатор и наблюдать скорость восстановления заряда.
Уточнение: кнопка (это может быть концевик, датчик с герконом и т.д. ) может длительное время находиться в замкнутом или разомкнутом состоянии. Состояние контактов мы не знаем и можем узнать только когда определим целостность линии до кнопки.
Схему подключения тоже нужно нарисовать))
общая идея такая же, как контроль целостности линий в авто. Смысл в том, что сопротивление линии в состояниях "включено" и "выключено" должно быть не 0 и бесконечность, а скажем 150 ом и 22К - чтобы можно было отличить нормальную работу от обрыва и КЗ
На цифровом пине сопротивление линии можно измерять по времени разряда конденатора через датчик
Когда нужно сделать по-человечески, в промышленности для этого придумали специальный вид сигнала (цепи): NAMUR.
https://ru.wikipedia.org/wiki/NAMUR
Схемку из контактов и резисторов можно посмотреть тут https://fireflyer.ru/proektirovanie/avtomatika-pozharotusheniya/standart...
Если всё хочется сделать на одном дискретном ардуиновском входе, то... тут нет никаких ограничений в порывах творчества. :))
Когда джойстик ещё был кнюпелем, меня учили, что задержку между нажатием кнопки и реакцией системы менее 0,3 с человек-оператор воспринимает как "мгновенную" реакцию. Если реакции системы человек может в явном виде не определить, то за это время нужно визуально подтвердить факт принятия системой команды.
UPD Удобству взаимодействия человека с кнопкой в "Arduino. Сага о кнопках v.2.0" https://yadi.sk/d/nXvEorbUjf3oX посвящена главка "Песнь кнопки сладкоголосой". Там всё из жизни. :))
В707, линия до кнопки просто два провода. Сопротивление 0-10 Ом. Ну чтоб с запасом.
Если условились, что на линии может быть КЗ, то обязательно защищаем пин МК резистором 100 Ом, ограничивая при этом выходящий ток в 40 мА. Это с учетом выходного сопротивления ключей на выходе МК.
Элементы схемы - резистор(ы), конденсатор(ы), кнопка.
Duino A.R. спасибо. Теперь буду знать про стандарт NAMUR.
Я несколько раз встречался с неисправностью герконов - просто залипают. Но это не ваш случай.)
Ёкарный бабай! Писал человек, писал, вроде, всё разумно, а тут с 42-ой страницы, на тебе ... борьба с переполнением миллис! Да ещё и ссылка [14] на совершенно безграмотный код на эту же тему :-(
«Вот те раз! Нельзя же так!»
А так всё хорошо начиналось :-(
Кстати, по поводу RC-цепочек для дребезго-подавления есть ещё вот такая схема:
В отличии от предыдущих при замыкании кнопки уровень напряжения будет плавно не только возрастать, но и падать. Что может быть полезным при работе с прерываниями в режимах Falling/Rising, когда колебание напряжения в "переходной зоне" может вызвать ложное прерывание.
Пожалуйста. :)) Pyotr, чисто для расширения кругозора. NAMUR - стандарт иноземный. Там подразумевается, что все элементы цепи тоже сделаны по иноземным стандартам. Если практиковать в Отечестве, то, по-хорошему, необходимо для контролируемой цепи выписать все коммутационные элементы (контакты переключателей, разъёмов, реле и т.п.), по их паспортам определить элемент с максимальным "минимальным током коммутации" и обеспечить дежурный ток в цепи не ниже этого самого "минимального тока". С учетом типового напряжения для промышленной автоматики =24 В мощности на "подсветку" цепи могут оказаться не гуманными. Да и выбор контактов в одной цепи нужно будет соизмерять между собой. Подварить контакты того же геркона - обычное дело.