Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Микроконтроллеры (MCU) и микропроцессоры (MPU) > Дребезг Кнопок на Mega


Автор: EVSx1 9.7.2009, 23:53
Я начинаю работать с контроллерами.Есть матричная клавиатура допустим 4*4.как организовать опрос на нажатие кнопок представляю.А как избавляются от нехорошой вещи,такой как дребезг кнопок.Просто убивать циклы(задержка)?или организовать таймер чтобы проверял временные промежутки,тогда сколько промежутков надо отследить,чтобы с уверенностью сказать ,что дребезг прошел.Кто как организует это?

Автор: cardinal 10.7.2009, 01:48
Тут по-русски
http://itpuls.com/wrt/drebesg.html
но почему лучше это делать программно мне непонятно. Предпочитаю решать проблему с дребезгом при помощи железа. По подробнее (а точнее просто на самом деле анатомия дребезга smile) написано здесь на англ. яз.
http://www.ganssle.com/debouncing.pdf

Автор: Mazzi 10.7.2009, 09:34
Цитата(EVSx1 @ 9.7.2009,  23:53)
А как избавляются от нехорошой вещи,такой как дребезг кнопок.Просто убивать циклы(задержка)?или организовать таймер чтобы проверял временные промежутки,тогда сколько промежутков надо отследить,чтобы с уверенностью сказать ,что дребезг прошел.Кто как организует это?

Дребезг контактов примерно 10 миллисекунд, короткое нажатие палцем на кнопку примерно 50 миллисекунд. 

Обнаружив изменение состояния на кнопке запрещаеш её опрос на 30 миллисекунд, по прошествии которых(30мс) ещё раз опрашиваеш состояние кнопки (после дребезга). Это состояние(кнопки) считаеш достоверным.

Всё.

Автор: UniBomb 10.7.2009, 09:52
Я делаю так - опрашиваю кнопки каждые 10-15 мс, если три раза подряд я получаю состояние "кнопка нажата" или "кнопка отжата", то программа уверена что кнопка действительно нажата.

Автор: EVSx1 10.7.2009, 14:11
Цитата(UniBomb @ 10.7.2009,  09:52)
Я делаю так - опрашиваю кнопки каждые 10-15 мс, если три раза подряд я получаю состояние "кнопка нажата" или "кнопка отжата", то программа уверена что кнопка действительно нажата.

3*15=45мс за этот промежуток сможет человек успеть нажать два раза?меня как раз волнуют вот эти временные интервалы,как их выбирают?

Автор: UniBomb 10.7.2009, 14:33
EVSx1, теоретически человек сможет два раза нажать и за 10 мс, но это ведь работа с аппаратурой это не соревнование по скоростному соревнованию. Тем более что время дребезга не всегда поддаётся предсказанию, но при этом величина времени довольно мала. 20-30 мс задержек вполне хватит, я делаю больше для избыточной перестраховки.

Автор: Mazzi 10.7.2009, 14:43
Цитата(EVSx1 @ 10.7.2009,  14:11)
3*15=45мс за этот промежуток сможет человек успеть нажать два раза?

Вдвоём с другом делаете эксперимент.

Один из вас открывает на редактирование текстовый файл, например "Блокнот", второй готовит секундомер(например в мобилке).

По команде человека с секундомером, человек с "блокнотом" начинает лихорадочно молотить одним палцем по одной клавише. После выдержки например 10 секунд, человек с секундомером говорит "Стоп!".

Затем подсчитываем количество символов в файле, делим 10000 на число символов(в файле), в результате получаем время одного нажатия в миллисекундах.

Для увеличения достоверности проведите серию испытаний.

Удачи!

Автор: cardinal 10.7.2009, 16:03
Цитата(EVSx1 @  10.7.2009,  12:11 Найти цитируемый пост)
меня как раз волнуют вот эти временные интервалы,как их выбирают? 

во первых смотри выше, а во вторых разные кнопки по разному дребезжат... smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)