|
Подавление дребезга контактов, Алгоритм подавления,реализация |
|
|
|
Apr 3 2007, 12:52
|

Местный
  
Группа: Свой
Сообщений: 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
|
|
|
|
|
Apr 3 2007, 13:24
|

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

|
К сожалению АСМом не владею... Как это будет выглядеть на Си? Суть следующая: не могу понять как можно обработать один датчик(клавишу, и.т.д) на дребезг, обрабатывая порт целиком. Я сразу как то предположил что обрабатывать нужно каждый вывод по отдельности.
Сообщение отредактировал Axxel - Apr 3 2007, 13:32
--------------------
Если боишься - не говори. если сказал - не бойся. ©
|
|
|
|
|
Apr 3 2007, 14:21
|

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

|
Цитата(Axxel @ Apr 3 2007, 18:24)  Суть следующая: не могу понять как можно обработать один датчик(клавишу, и.т.д) на дребезг, обрабатывая порт целиком. Берётся новое состояние байта входов и сравнивается с предыдущим посредством "Exclusive OR", тем самым выделяются изменившиеся и неизменившиеся биты, затем с помощью простых логических операций, изменившимся битам присваиваются старые значения статуса, а неизменившимся новые значения байта входов. Алгебра логики рулит!  А чтоб понять листинг, поглядите используемые команды хоть в любом даташите для AVR, хотя и так понять можно AND - И, OR - ИЛИ, ...
|
|
|
|
|
Apr 7 2007, 22:24
|
Группа: Новичок
Сообщений: 5
Регистрация: 23-02-07
Пользователь №: 25 616

|
Цитата(Visor @ Apr 3 2007, 14:21)  Берётся новое состояние байта входов и сравнивается с предыдущим посредством "Exclusive OR", тем самым выделяются изменившиеся и неизменившиеся биты, затем с помощью простых логических операций, изменившимся битам присваиваются старые значения статуса, а неизменившимся новые значения байта входов. Алгебра логики рулит!  Если можно покажите это на примере, (на С), пожалуйста. Иногда делаю вот таким кустарным методом: unsigned char SkanKlava (void) { if(KN_Ok==0){ delay_ms(10); // защита от дребезга if(KN_Ok==0){ //проверяем еще раз return 0x01; //нажата кнопка "Ок" }; }; //...и т.д. (все остальные кнопки)} Может не совсем красиво но иногда выгодно.
|
|
|
|
|
May 15 2007, 03:32
|
Местный
  
Группа: Свой
Сообщений: 211
Регистрация: 9-11-06
Пользователь №: 22 136

|
Цитата(Oleg_IT @ Mar 28 2007, 12:50)  Давно и хорошо работающий код. Обслуживает несколько клавиш. Очень код понравился, пред-оптимизированный  Но вот 8 циклов чтения на подавление дребезга - это много... А нету ли чего-нибудь похожего, но, скажем, с тремя циклами?
|
|
|
|
|
May 15 2007, 10:15
|
Группа: Новичок
Сообщений: 5
Регистрация: 23-02-07
Пользователь №: 25 616

|
Цитата(Axxel @ Apr 9 2007, 08:00)  Мне кажется что задержки типа delayms() в алгоритме подавления дребезга это не есть гут, хотя все конечно зависит от программы. Полностью с Вами согласен. Поэтому я тут. Хочу чему-нибудь научиться у Форумчан. С уважением, Mario.
|
|
|
|
|
May 15 2007, 12:47
|
Местный
  
Группа: Свой
Сообщений: 211
Регистрация: 9-11-06
Пользователь №: 22 136

|
Цитата(Oleg_IT @ May 15 2007, 13:58)  См. моё предложение на первой странички Так я собственно от этого и искал Я-ж написал, что алгоритм очень хороший, но 8 шагов - многовато. Кстати, вкурив в эти вертикальные счетчики я обнаружил, как "дешево" с точки зрения кода сделать еще ряд операций в моем проекте, так что спасибо за наводку
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|