кнопки и антидребезг
|
|
kip96 | Дата: Четверг, 29.11.2012, 21:48 | Сообщение # 1 |
Группа: Свой человек
Сообщений: 170
Статус: Offline
| Работая с кнопками, удобно, когда нажатие дублируется звуком. Но если кнопка часто используется, не удобно каждый раз использовать Sound. Кроме, того, кнопки стареют, и если работают с микротоками, то дребезг увеличивается. На моём велокомпьютере, дребезг так увеличился, что появились сбои и я задумался. Вобщем решение проблемы- увеличить ток на кнопки. Например включить низкоомные подтягивающие резисторы, что скажется на энергопотреблнении. Хочу поделиться с форумчанами, как я решил этот вопрос. Кнопки подключаются через резистор 300 Ом. В работе задействован 8-ми битный таймер. Code Knopka: ' 256 uS If Knl = 0 Or Knm = 0 Or Knr = 0 Then If Zv_t > 50 Then 'антидребезг If Zv_t < 250 Then ‘отсюда начинаем писк If Zv_t = 200 Then Portdx = Pind ‘ значение порта запоминаем Toggle Zv Else Zv_t = 251 End If Else
' Ddrd = &B11000011 ' переключаем ПортД на выход Portd = Portd And &B10000011 'и пропускаем ток для разрушения окислов. End If Incr Zv_t Else Zv_t = 0 End If
Ddrd = &B01000000 Return В программе проверяем на нажатие как обычно, но не порт , а переменную Portdx Code If Portdx.7 = 0 Then Portdx = 255 ‘чё нибудь делаем. End If По переполнению проверяем нажатие кнопок, выжидаем антидребезг, переключаем порт на выход, подаём на него напряжение, тем самым разрушая всякие окислы и очищаем контакт. Ну и пищим пином ZV Эффект 100%. Кнопки стали работать сразу, без сбоев. Я был просто в восторге! Ну и идея не моя, впервые прочитал в журнале Радио, потом узнал, что так работают многие драйвера кнопок.
Сообщение отредактировал kip96 - Четверг, 29.11.2012, 21:49 |
|
| |
top | Дата: Четверг, 29.11.2012, 22:55 | Сообщение # 2 |
Группа: Друзья
Сообщений: 146
Статус: Offline
| Ох помню я намучался с ложными срабатываниями прерываний из-за дребезга. Пример действительно полезный, в копилку Спасибо!
|
|
| |
exersizze | Дата: Пятница, 30.11.2012, 01:02 | Сообщение # 3 |
Группа: Администраторы
Сообщений: 723
Статус: Offline
| Полезный трюк. Заметил тоже что кнопки в устройствах со временем начинают по нескольку раз "нажиматься", поставишь одну задержку-нормально работает, через некоторое время опять начинает сбоить, увеличиваешь задержку еще-вроде снова становится нормально.. и так продолжается пока задержку на полсекунды не вкатаешь видимо кнопки УГ попались..
а есть на примете простой способ улавливать долгое нажатие кнопки?
|
|
| |
kip96 | Дата: Пятница, 30.11.2012, 07:35 | Сообщение # 4 |
Группа: Свой человек
Сообщений: 170
Статус: Offline
| Изначально, хотел сделать дублирование кнопок звуком. С этой подпрограммой каждое нажатие дублируется писком. Теперь, если программа "обростает" дополнительными функциями, достаточно просто проверять условие нажатия кнопки, и будет "пик". Тем более, что не нужно теперь применять команду Debounce. Для меня это покозалось очень удобным.
Сообщение отредактировал kip96 - Пятница, 30.11.2012, 07:36 |
|
| |