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

 
 
> Обработка прерывания кнопки
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
Ответов
777777
сообщение Aug 22 2011, 06:12
Сообщение #2


Профессионал
*****

Группа: Участник
Сообщений: 1 091
Регистрация: 25-07-07
Из: Саратов
Пользователь №: 29 357



Цитата(Nikitoc @ Aug 22 2011, 01:35) *
Может я засиделся сегодня у компа, но что-то меня заклинило: как правильно писать обработчик прерывания по нажатию кнопки? Суть вопроса сводится к расположению задержки (~30мс) для "устранения " дребезга контактов кнопки. Ведь существует неписанное правило о том, что обработчики прерывания должны быть как можно короче по времени исполнения, а введение "антидребезговой" задержки этому как-то не способствует. Или это неизбежное зло и таким обработчикам просто следует назначать наименьший приоритет? Если тема боян - ткните носом. Не нашел.

А задержка в вашем представлении это обязательно delay_ms()? Мне например за свою жизнь никогда подобные задержки не требовались. Запусти таймер на 30 мс и сравни значение кнопки до и после.
Go to the top of the page
 
+Quote Post
mempfis_
сообщение Aug 23 2011, 13:24
Сообщение #3


Профессионал
*****

Группа: Свой
Сообщений: 1 001
Регистрация: 27-06-06
Пользователь №: 18 409



Для устранения дребезга контактов давно делаю так:
1. Завожу буффер например на 3 - 5 снятых состояния пинов клавиатуры и 2 переменных текущего и прошлого состояния кнопок.
2. По таймеру раз в 5-10 мс считываю текущее состояние пинов и заношу его в буффер на позицию самого старого показания
3. Если нажатым считается состояние 0 то делаю or всех элементов буффера, если 1 - то соотв. &
4. Сохраняю старое значение состояния в переменную прошлого состояния, в переменную текущего состояния заношу результат логической операции над буффером
5. Получаю результат сканирования кнопок с антидребезгом.

Обычно конечный результат привожу к виду 0 - нет нажатия, 1 - кнопка нажата и использую его для других задач в программе.
Используя прошлое и текущее отфильтрованные состояния кнопок а также период опроса довольно просто потом получить всякие спецэффекты типа автоповтор, удержание кнопки, альтернативные значения и т.д.

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
- - SSerge   Сама идея прерываний от кнопки не очень хороша. Из...   Aug 22 2011, 09:00
- - Nikitoc   Спасибо всем за ответы. Прокомментируйте, пожалуйс...   Aug 22 2011, 09:19
|- - whiteTigr   Цитата(Nikitoc @ Aug 22 2011, 13:19) Спас...   Aug 22 2011, 10:06
- - 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 Текстовая версия Сейчас: 20th July 2025 - 01:04
Рейтинг@Mail.ru


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