Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей... |
22.10.2014, 14:42
|
|
Почётный гражданин KAZUS.RU
Регистрация: 27.01.2005
Адрес: Россия, КЧР, Нижний Архыз
Сообщений: 3,635
Сказал спасибо: 115
Сказали Спасибо 814 раз(а) в 591 сообщении(ях)
|
Re: Опрос кнопки/клавиатуры
Сообщение от eddy
|
Я не понял, к чему такие трудности? Просто заводим прерывание EXTI на кнопки. Как только прерывание получили, заносим в некую переменную значение задержки (скажем, 50), устанавливаем флаг нажатия и отключаем реакцию на прерывания. Ну, а в прерывании системного таймера (1 раз в 1мс) декрементируем эту переменную задержки, и как только она обращается в нуль, опять разрешаем прерывания EXTI.
В main же спокойно обрабатываем флаг.
|
Реализовал этот алгоритм в управлялке сверлильным станочком. В main не реже 1 раза в миллисекунду проверяется значение счетчика (задержка обработчика - выставляется обработчиком EXTI, в нем же отрубается реакция на внешние прерывания). Если выставлен, то декрементируется, а как обнулится, вызывается функция, проверяющая состояние кнопок.
Задержку пришлось увеличить до 100мс, чтобы можно было успеть одновременно две кнопки нажать (не хотелось мне добавлять еще код для определения нажатия второй кнопки через малый промежуток после первой). Пробовал проводочком замыкать (вот — идеальный источник дребезга) — ложных срабатываний не было.
__________________
Союз Советских Социалистических Округов Северной Америки
|
|
|
|
22.10.2014, 15:17
|
|
Почётный гражданин KAZUS.RU
Регистрация: 08.10.2007
Сообщений: 2,760
Сказал спасибо: 1,105
Сказали Спасибо 1,037 раз(а) в 569 сообщении(ях)
|
Re: Опрос кнопки/клавиатуры
Сообщение от eddy
|
Пробовал проводочком замыкать (вот — идеальный источник дребезга) — ложных срабатываний не было.
|
А потому не было, что реализован цифровой интегратор с гистерезисом. Микрики так работают: сначала интегрируют ход кнопки (можешь её неравномерно нажимать и даже приотпускать иногда) пока не дойдёт до порога, а за порогом уже всё обратно - пока не отожмёшь почти до конца, не щёлкает. И тут - дребезг только увеличивает время реакции, а результат однозначный.
У меня так сделано: на каждую кнопку - один байт, в нём счётчик о 5-ти разрядах, флаг состояния "нажато" и 2 флага событий "нажали" и "отпустили". Раз в 10 мс (где как, от 10 до 30) опрос кнопок и реакция на состояние (чаще - на событие).
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 03:46.
|
|