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

 
 
3 страниц V  < 1 2 3  
Reply to this topicStart new topic
> Подавление дребезга контактов, Алгоритм подавления,реализация
Visor
сообщение Apr 3 2007, 12:52
Сообщение #31


Местный
***

Группа: Свой
Сообщений: 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
Сообщение #32


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

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



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

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

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

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


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


Местный
***

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



Цитата(Axxel @ Apr 3 2007, 18:24) *
Суть следующая: не могу понять
как можно обработать один датчик(клавишу, и.т.д)
на дребезг, обрабатывая порт целиком.

Берётся новое состояние байта входов и сравнивается с предыдущим посредством "Exclusive OR", тем самым выделяются изменившиеся и неизменившиеся биты, затем с помощью простых логических операций, изменившимся битам присваиваются старые значения статуса, а неизменившимся новые значения байта входов. Алгебра логики рулит! wink.gif
А чтоб понять листинг, поглядите используемые команды хоть в любом даташите для AVR, хотя и так понять можно AND - И, OR - ИЛИ, ...
Go to the top of the page
 
+Quote Post
slog
сообщение Apr 3 2007, 20:21
Сообщение #34


Знающий
****

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



Если опрашивать реже, чем время дребезга, никакие сложные алгоритмы не нужны вообще. Считали порт. Есть сигнал - датчик сработал, нет - значит нет. И всё.


--------------------
В действительности всё не так, как на самом деле.
Go to the top of the page
 
+Quote Post
Mario
сообщение Apr 7 2007, 22:24
Сообщение #35





Группа: Новичок
Сообщений: 5
Регистрация: 23-02-07
Пользователь №: 25 616



Цитата(Visor @ Apr 3 2007, 14:21) *
Берётся новое состояние байта входов и сравнивается с предыдущим посредством "Exclusive OR", тем самым выделяются изменившиеся и неизменившиеся биты, затем с помощью простых логических операций, изменившимся битам присваиваются старые значения статуса, а неизменившимся новые значения байта входов. Алгебра логики рулит! wink.gif

Если можно покажите это на примере, (на С), пожалуйста.


Иногда делаю вот таким кустарным методом:
unsigned char SkanKlava (void)
{
if(KN_Ok==0){
delay_ms(10);// защита от дребезга

if(KN_Ok==0){ //проверяем еще раз
return 0x01; //нажата кнопка "Ок"
};
};
//...и т.д. (все остальные кнопки)
}
Может не совсем красиво но иногда выгодно. huh.gif
Go to the top of the page
 
+Quote Post
Axxel
сообщение Apr 9 2007, 05:00
Сообщение #36


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

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



Мне кажется что задержки
типа delayms() в алгоритме подавления дребезга
это не есть гут, хотя все конечно зависит от программы.


--------------------
Если боишься - не говори. если сказал - не бойся. ©
Go to the top of the page
 
+Quote Post
Kitsok
сообщение May 15 2007, 03:32
Сообщение #37


Местный
***

Группа: Свой
Сообщений: 211
Регистрация: 9-11-06
Пользователь №: 22 136



Цитата(Oleg_IT @ Mar 28 2007, 12:50) *
Давно и хорошо работающий код. Обслуживает несколько клавиш.


Очень код понравился, пред-оптимизированный wink.gif Но вот 8 циклов чтения на подавление дребезга - это много... А нету ли чего-нибудь похожего, но, скажем, с тремя циклами?
Go to the top of the page
 
+Quote Post
Kitsok
сообщение May 15 2007, 09:24
Сообщение #38


Местный
***

Группа: Свой
Сообщений: 211
Регистрация: 9-11-06
Пользователь №: 22 136



Нашел. Технология называется vertical counters.
Вот ссылки:
http://www.dattalo.com/technical/software/pic/debounce.html
http://www.dattalo.com/technical/software/pic/vertcnt.html
Go to the top of the page
 
+Quote Post
Oleg_IT
сообщение May 15 2007, 09:58
Сообщение #39


Знающий
****

Группа: Свой
Сообщений: 922
Регистрация: 3-06-05
Из: Москва
Пользователь №: 5 709



Цитата(Kitsok @ May 15 2007, 13:24) *
Нашел. Технология называется vertical counters.
Вот ссылки:
http://www.dattalo.com/technical/software/pic/debounce.html
http://www.dattalo.com/technical/software/pic/vertcnt.html


См. моё предложение на первой странички http://electronix.ru/forum/index.php?showt...=29296&st=0
Go to the top of the page
 
+Quote Post
Mario
сообщение May 15 2007, 10:15
Сообщение #40





Группа: Новичок
Сообщений: 5
Регистрация: 23-02-07
Пользователь №: 25 616



Цитата(Axxel @ Apr 9 2007, 08:00) *
Мне кажется что задержки
типа delayms() в алгоритме подавления дребезга
это не есть гут, хотя все конечно зависит от программы.


Полностью с Вами согласен. Поэтому я тут. Хочу чему-нибудь научиться у Форумчан. smile.gif

С уважением, Mario.
Go to the top of the page
 
+Quote Post
Kitsok
сообщение May 15 2007, 12:47
Сообщение #41


Местный
***

Группа: Свой
Сообщений: 211
Регистрация: 9-11-06
Пользователь №: 22 136



Цитата(Oleg_IT @ May 15 2007, 13:58) *
См. моё предложение на первой странички

Так я собственно от этого и искал wink.gif

Я-ж написал, что алгоритм очень хороший, но 8 шагов - многовато.
Кстати, вкурив в эти вертикальные счетчики я обнаружил, как "дешево" с точки зрения кода сделать еще ряд операций в моем проекте, так что спасибо за наводку wink.gif
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 14th July 2025 - 17:18
Рейтинг@Mail.ru


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