[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
кнопки и антидребезг
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
Ох помню я намучался с ложными срабатываниями прерываний из-за дребезга. Пример действительно полезный, в копилку cool Спасибо!

 
exersizzeДата: Пятница, 30.11.2012, 01:02 | Сообщение # 3
Группа: Администраторы
Сообщений: 723

Статус: Offline
Полезный трюк. Заметил тоже что кнопки в устройствах со временем начинают по нескольку раз "нажиматься", поставишь одну задержку-нормально работает, через некоторое время опять начинает сбоить, увеличиваешь задержку еще-вроде снова становится нормально.. и так продолжается пока задержку на полсекунды не вкатаешь biggrin видимо кнопки УГ попались..

а есть на примете простой способ улавливать долгое нажатие кнопки?


 
kip96Дата: Пятница, 30.11.2012, 07:35 | Сообщение # 4
Группа: Свой человек
Сообщений: 170

Статус: Offline
Изначально, хотел сделать дублирование кнопок звуком. С этой подпрограммой каждое нажатие дублируется писком. Теперь, если программа "обростает" дополнительными функциями, достаточно просто проверять условие нажатия кнопки, и будет "пик". Тем более, что не нужно теперь применять команду Debounce. Для меня это покозалось очень удобным.



Сообщение отредактировал kip96 - Пятница, 30.11.2012, 07:36
 
  • Страница 1 из 1
  • 1
Поиск: