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

 
 
> Подавление дребезга контактов, Алгоритм подавления,реализация
Axxel
сообщение Mar 28 2007, 08:12
Сообщение #1


Частый гость
**

Группа: Новичок
Сообщений: 140
Регистрация: 31-01-07
Из: Челябинск
Пользователь №: 24 896



Привет всем!

Написал небольшой кусочек кода для
подавления дребезга контактов, IMHO данный
код должен "фильтровать" ложные срабатывания
менее заданного периода.
Но почему-то не покидает ощущение того, что
в коде могут оказаться грабли smile.gif

Какие еще есть правильные методы,
либо можно это сделать проще или красивее?

Пример для одного бита порта ввода:

#define BOUNCE_CANCELLATION_PERIOD 20


unsigned char BITcounter=0; //счетчик состояний бита
bit BITstate=0; //используемое (устойчивое) состояние бита (более 20 мсек)
bit BITmemory=0; // промежуточная переменная, запоминающаяя предыдущее состояние бита
bit toggled=0; //флаг,указывающий на изменение состояния бита

interrupt Timer0() //возникает 1 раз в мсек
{
if(BITmemory^BITn){if(toggled){BITcounter=0;} toggled=1;}
if(toggled ){BITcounter++;}
if(BITcounter==BOUNCE_CANCELLATION_PERIOD){BITstate=BITn;BITcounter=0;toggled=0;
}
BITmemory=BITn; //чтение с порта
}



Вот, примерно так...

Сообщение отредактировал Axxel - Mar 28 2007, 08:34


--------------------
Если боишься - не говори. если сказал - не бойся. ©
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
slog
сообщение Apr 3 2007, 09:20
Сообщение #2


Знающий
****

Группа: Свой
Сообщений: 961
Регистрация: 28-11-05
Пользователь №: 11 489



Ну вы и нагородили, на пустом месте. Достаточно 20-30 раз в секунду опрашивать матрицу кнопок и ВСЁ. Дребезг не влияет ни на что. Можно считать что его нет.


--------------------
В действительности всё не так, как на самом деле.
Go to the top of the page
 
+Quote Post
Axxel
сообщение Apr 3 2007, 10:34
Сообщение #3


Частый гость
**

Группа: Новичок
Сообщений: 140
Регистрация: 31-01-07
Из: Челябинск
Пользователь №: 24 896



Цитата(slog @ Apr 3 2007, 12:20) *
Достаточно 20-30 раз в секунду опрашивать матрицу кнопок



Дело в том что мне необходимо контролировать не клавиатуру, а несколько датчиков.
Т.е каждый датчик нужно проверять на дребезг по отдельности,датчики могут сработать
одновременно, и.т.д. Т.е необходим одновременный контроль.

Конечно, в принципе я понимаю что хватит и двух устойчивых состояний для
принятия нажатия, но... мало ли что может произойти.





To =AK=
О таком методе шла речь?
(с битовым сдвигом,выше)


--------------------
Если боишься - не говори. если сказал - не бойся. ©
Go to the top of the page
 
+Quote Post
Visor
сообщение Apr 3 2007, 12:52
Сообщение #4


Местный
***

Группа: Свой
Сообщений: 240
Регистрация: 23-03-07
Пользователь №: 26 428



Цитата(Axxel @ Apr 3 2007, 15:34) *
Дело в том что мне необходимо контролировать не клавиатуру, а несколько датчиков.
Т.е каждый датчик нужно проверять на дребезг по отдельности,датчики могут сработать
одновременно, и.т.д. Т.е необходим одновременный контроль.

Конечно, в принципе я понимаю что хватит и двух устойчивых состояний для
принятия нажатия, но... мало ли что может произойти.

Я свой алгоритм как раз таки и применял для датчиков, для индуктивных датчиков оборота в счетчиках электроэнергии, дребезг с них был дай боже. В результате точность подсчёта соответствовала действительности. Вот как это можно реализовать на асме для 8 входов:
Код
; Time slot
; Pushbuttons #00-07 status
    in        PB00_07_In,PIND
    eor        PB00_07_In_Aux,PB00_07_In
    and        PB00_07_Stat,PB00_07_In_Aux
    com        PB00_07_In_Aux
    and        PB00_07_In_Aux,PB00_07_In
    or        PB00_07_Stat,PB00_07_In_Aux
    mov        PB00_07_In_Aux,PB00_07_In


Сообщение отредактировал Visor - Apr 3 2007, 13:33
Go to the top of the page
 
+Quote Post
Axxel
сообщение Apr 3 2007, 13:24
Сообщение #5


Частый гость
**

Группа: Новичок
Сообщений: 140
Регистрация: 31-01-07
Из: Челябинск
Пользователь №: 24 896



К сожалению АСМом не владею... sad.gif
Как это будет выглядеть на Си?

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

Я сразу как то предположил что обрабатывать
нужно каждый вывод по отдельности.

Сообщение отредактировал Axxel - Apr 3 2007, 13:32


--------------------
Если боишься - не говори. если сказал - не бойся. ©
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Axxel   Подавление дребезга контактов   Mar 28 2007, 08:12
- - Oleg_IT   Давно и хорошо работающий код. Обслуживает несколь...   Mar 28 2007, 08:50
|- - Kitsok   Цитата(Oleg_IT @ Mar 28 2007, 12:50) Давн...   May 15 2007, 03:32
- - NVade   а я просто опрашиваю клавиатуру с интервалом больш...   Mar 28 2007, 09:54
- - IEC   Контролировать один раз нажатие клавиши (совет NVa...   Mar 28 2007, 10:08
|- - Axxel   По хорошему необходимо контролировать время первог...   Mar 28 2007, 10:36
|- - SergCom07   Думаю лучший вариант реализуется при помощи прерыв...   Mar 28 2007, 12:07
- - Visor   На самом деле достаточно ловить первый фронт измен...   Mar 28 2007, 19:56
- - DeXteR   Цитата(Visor @ Mar 28 2007, 20:56) На сам...   Mar 29 2007, 19:19
|- - Visor   Цитата(DeXteR @ Mar 30 2007, 00:19) Если ...   Mar 31 2007, 19:06
|- - Axxel   А если произойдет такое?   Apr 2 2007, 05:12
|- - Visor   Цитата(Axxel @ Apr 2 2007, 10:12) А если ...   Apr 2 2007, 06:09
|- - Axxel   Цитата(Visor @ Apr 2 2007, 09:09) Объясни...   Apr 2 2007, 07:28
|- - rezident   Цитата(Axxel @ Apr 2 2007, 10:28) И еще в...   Apr 2 2007, 07:50
|- - Visor   Цитата(Axxel @ Apr 2 2007, 12:28) Помехи ...   Apr 2 2007, 07:55
||- - Axxel   Цитата(Visor @ Apr 2 2007, 10:55) Сигналы...   Apr 2 2007, 08:00
|- - Visor   Цитата(Axxel @ Apr 2 2007, 12:28) И еще в...   Apr 2 2007, 08:07
|- - Axxel   Универсальность - враг оптимальности. [/quote] Т...   Apr 2 2007, 10:56
|- - Dog Pawlowa   Цитата(Axxel @ Apr 2 2007, 10:56) ...Так ...   Apr 2 2007, 12:12
|- - Visor   Цитата(Axxel @ Apr 2 2007, 15:56) Так как...   Apr 2 2007, 15:29
- - rezident   На всех форумах одни и те же вопросы задаются htt...   Mar 29 2007, 19:32
- - Axxel   У меня примерно так:   Mar 30 2007, 04:58
- - =AK=   Я проще делаю. В 8-битный сдвиговый регистр каждые...   Apr 2 2007, 06:25
- - Axxel   Да,действительно не такая уж и тривиальная это зад...   Apr 2 2007, 12:20
- - vaivai   На Kazus.ru было несколько примеров на асемблере (...   Apr 2 2007, 21:13
- - birden   Я очень часто использую следующий принцип: Кодunsi...   Apr 3 2007, 05:41
- - Axxel   Остановился пока на таком методе: unsigned char a...   Apr 3 2007, 08:57
|- - =AK=   Цитата(Axxel @ Apr 3 2007, 17:04) To =AK=...   Apr 3 2007, 10:40
||- - Axxel   Цитата(=AK= @ Apr 3 2007, 13:40) Ну так в...   Apr 3 2007, 10:43
|- - Visor   Цитата(Axxel @ Apr 3 2007, 18:24) Суть сл...   Apr 3 2007, 14:21
|- - Mario   Цитата(Visor @ Apr 3 2007, 14:21) Берётся...   Apr 7 2007, 22:24
- - slog   Если опрашивать реже, чем время дребезга, никакие ...   Apr 3 2007, 20:21
- - Axxel   Мне кажется что задержки типа delayms() в алгоритм...   Apr 9 2007, 05:00
|- - Mario   Цитата(Axxel @ Apr 9 2007, 08:00) Мне каж...   May 15 2007, 10:15
- - Kitsok   Нашел. Технология называется vertical counters. Во...   May 15 2007, 09:24
- - Oleg_IT   Цитата(Kitsok @ May 15 2007, 13:24) Нашел...   May 15 2007, 09:58
- - Kitsok   Цитата(Oleg_IT @ May 15 2007, 13:58) См. ...   May 15 2007, 12:47


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

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 02:22
Рейтинг@Mail.ru


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