| кнопки и антидребезг | 
| 
				
			 | 
| 
| 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 |  |   Группа: Администраторы Сообщений: 720 
 Статус: Offline | Полезный трюк. Заметил тоже что кнопки в устройствах со временем начинают по нескольку раз "нажиматься", поставишь одну задержку-нормально работает, через некоторое время опять начинает сбоить, увеличиваешь задержку еще-вроде снова становится нормально.. и так продолжается пока задержку на полсекунды не вкатаешь  видимо кнопки УГ попались.. 
 а есть на примете простой способ улавливать долгое нажатие кнопки?
 
 
 |  
 |  |  |  | 
| 
| kip96 | Дата: Пятница, 30.11.2012, 07:35 | Сообщение # 4 |  | Группа: Свой человек Сообщений: 170 
 Статус: Offline | Изначально, хотел сделать дублирование кнопок звуком. С этой подпрограммой каждое нажатие дублируется писком. Теперь, если программа "обростает" дополнительными функциями, достаточно просто проверять условие нажатия кнопки, и будет "пик". Тем более, что не нужно теперь применять команду Debounce. Для меня это покозалось очень удобным. 
 
 
 
 Сообщение отредактировал kip96 - Пятница, 30.11.2012, 07:36 |  
 |  |  |  |