реклама на сайте
подробности

 
 
> Обработка прерывания кнопки
Nikitoc
сообщение Aug 21 2011, 21:35
Сообщение #1


Местный
***

Группа: Validating
Сообщений: 207
Регистрация: 14-01-09
Из: Днепропетровск
Пользователь №: 43 367



Может я засиделся сегодня у компа, но что-то меня заклинило: как правильно писать обработчик прерывания по нажатию кнопки? Суть вопроса сводится к расположению задержки (~30мс) для "устранения " дребезга контактов кнопки. Ведь существует неписанное правило о том, что обработчики прерывания должны быть как можно короче по времени исполнения, а введение "антидребезговой" задержки этому как-то не способствует. Или это неизбежное зло и таким обработчикам просто следует назначать наименьший приоритет? Если тема боян - ткните носом. Не нашел.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Nikitoc
сообщение Aug 22 2011, 09:19
Сообщение #2


Местный
***

Группа: Validating
Сообщений: 207
Регистрация: 14-01-09
Из: Днепропетровск
Пользователь №: 43 367



Спасибо всем за ответы. Прокомментируйте, пожалуйста, следующий вариант обработки нажатия кнопки: по нажатию на кнопку устанавливаем в обработчике флаг соотв. кнопки и запускаем таймер (и выходим из прерывания), по прерыванию от которого проверяем состояние кнопки (чей флаг предварительно был установлен) и устанавливаем флаг нажатия кнопок, который (в паре с флагом соотв. кнопки) обрабатываем в основной программе.

P.S. Учитывая пост Sserge добавляем запрещение соотв. прерывания в первом обработчике и разрешение во втором.

Сообщение отредактировал Nikitoc - Aug 22 2011, 09:27
Go to the top of the page
 
+Quote Post
whiteTigr
сообщение Aug 22 2011, 10:06
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 55
Регистрация: 25-07-11
Пользователь №: 66 407



Цитата(Nikitoc @ Aug 22 2011, 13:19) *
Спасибо всем за ответы. Прокомментируйте, пожалуйста, следующий вариант обработки нажатия кнопки: по нажатию на кнопку устанавливаем в обработчике флаг соотв. кнопки и запускаем таймер (и выходим из прерывания), по прерыванию от которого проверяем состояние кнопки (чей флаг предварительно был установлен) и устанавливаем флаг нажатия кнопок, который (в паре с флагом соотв. кнопки) обрабатываем в основной программе.

P.S. Учитывая пост Sserge добавляем запрещение соотв. прерывания в первом обработчике и разрешение во втором.


Возможно, заработает. Возможно, будет даже немного лучше чем вообще без антидребезга. Возможно...

По хорошему алгоритм в следующем:
Опрос кнопки в прерывании от таймера, раз в 0.5-5мс
Счетчик - от 0 до N, где N задает время антидребезга (порядка 10-200мс)
Буфер - состояние кнопки после антидребезга.

1. Если кнопка нажата и счетчик меньше максимума - прибавляем счетчик
2. Если кнопка отжата и счетчик больше нуля - убавляем счетчик
3. Если счетчик в максимуме, устанавливаем буфер в '1'
4. Если счетчик в нуле, устанавливаем буфер в '0'
5. По переходу буфера '0' -> '1' или '1' -> '0' делаем вывод о нажатии/отжатии кнопки.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Nikitoc   Обработка прерывания кнопки   Aug 21 2011, 21:35
- - нечитатель   Кто запрещает что-то другое делать, пока задержка....   Aug 22 2011, 02:25
- - alexeyv   Примерно лет шесть делаю так: CODE // в .h-файл...   Aug 22 2011, 04:20
- - 777777   Цитата(Nikitoc @ Aug 22 2011, 01:35) Може...   Aug 22 2011, 06:12
|- - mempfis_   Для устранения дребезга контактов давно делаю так:...   Aug 23 2011, 13:24
- - SSerge   Сама идея прерываний от кнопки не очень хороша. Из...   Aug 22 2011, 09:00
- - MrYuran   Я вообще не вижу смысла вешать кнопку на вход прер...   Aug 22 2011, 10:10
- - ILYAUL   Запускаешь АЦП и никаких тебе дребезгов и задержек...   Aug 22 2011, 12:36
|- - whiteTigr   Цитата(ILYAUL @ Aug 22 2011, 16:36) Запус...   Aug 23 2011, 04:57
|- - ILYAUL   Цитата(whiteTigr @ Aug 23 2011, 08:57) Чт...   Aug 23 2011, 07:43
|- - whiteTigr   Цитата(ILYAUL @ Aug 23 2011, 11:43) А я н...   Aug 23 2011, 07:47
|- - ILYAUL   Цитата(whiteTigr @ Aug 23 2011, 11:47) За...   Aug 23 2011, 07:59
- - skripach   Ни в одном проекте не использовал прерывания для к...   Aug 23 2011, 12:42
- - ARV   вообще не понимаю, зачем для столь низкоприоритетн...   Aug 23 2011, 12:54
- - _Pasha   Если кнопки на АЦП, то лучше пройдет поллинг с исп...   Aug 23 2011, 15:40


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 21st July 2025 - 09:43
Рейтинг@Mail.ru


Страница сгенерированна за 0.01382 секунд с 7
ELECTRONIX ©2004-2016