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

 
 
> Антидребезг контакта., Как сделать?
Iptash
сообщение Jul 22 2011, 17:59
Сообщение #1


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

Группа: Свой
Сообщений: 1 613
Регистрация: 2-09-08
Из: г.Набережные Челны
Пользователь №: 39 936



Здравствуйте все.
Есть входной сигнал с плохим фронтом, поэтому происходит дребезг. Написал антидребезговый блок, так в принципе работает не плохо,
но иногда при включении стопорится, потому что видимо dreb и ndreb не обнуляются и соответственно сигнал zap
который я дальше использую не работает. Алгоритм такой. Приходит внешний сигнал IN, включается счетчик dreb и
пока не досчитает до 1000 zap будет вкл. тем самым исключая ложное срабатывание zap .
Но код какой то кривой и задний фронт вроде не коректно отрабатывает. Подскажите пожалуйста как это лучше сделать или может подправите?
Код
always @ (posedge clock1) begin
  if(IN) begin // внешний сигнал
    if(dreb == 0) begin
     zap <= 1'b1; // сигнал после фильтрации, используется дальше
     ndreb <= 0;
    end
    
  end
  
   if(zap)
    dreb <= dreb + 1'b1;
  
   if(dreb > 1000) begin
    zap <= 1'b0;  
   end
  
   if(!IN) begin
    if(ndreb == 0) begin
     nzap <= 1'b1;
     dreb <= 0;
    end
    
    end
   if(nzap)
    ndreb <= ndreb + 1'b1;
   if(ndreb > 1000) begin
    nzap <= 1'b0;      
   end
end
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
privet
сообщение Aug 1 2011, 06:57
Сообщение #2





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



если речь идет о дребезге контакта кнопочки, то не проще просто опрашивать ее редко?
Если надежный контакт устанавливается, скажем, 1мс, то тогда опрашивать можно, например, с периодом 10мс.
Go to the top of the page
 
+Quote Post
Victor®
сообщение Aug 1 2011, 07:40
Сообщение #3


Lazy
******

Группа: Свой
Сообщений: 2 070
Регистрация: 21-06-04
Из: Ukraine
Пользователь №: 76



Цитата(privet @ Aug 1 2011, 09:57) *
если речь идет о дребезге контакта кнопочки, то не проще просто опрашивать ее редко?
Если надежный контакт устанавливается, скажем, 1мс, то тогда опрашивать можно, например, с периодом 10мс.


имея вероятность 10% напороться на грабли.


--------------------
"Everything should be made as simple as possible, but not simpler." - Albert Einstein
Go to the top of the page
 
+Quote Post
privet
сообщение Aug 1 2011, 09:16
Сообщение #4





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



Цитата(Victor® @ Aug 1 2011, 11:40) *
имея вероятность 10% напороться на грабли.

не очень понял Вашу мысль про грабли, но попробую объяснить свое понимание проблемы.
Есть кнопка, поключенная ко входу. Человек, довольно редко нажимает на кнопки.
Предположим вход подтянут резиком к питанию, при замыкании кнопки вход оказывается в нуле.
Таким образом, сигнал с дребезгом контакта получается на входе вот такой:

11111111111111111111111111111111110110101110101100000000000000000000000000
--------не нажата--------------->|<--дребезг--->|<----------кнопка нажата
__^____________________^____________________^____________________^_______
редкий опрос


ИМНО, период опроса кнопки просто должен быть много больше длительности дребезга.
Даже если ОДИН момент опроса попадет внутрь интервала с дребезгом - это нормально.
При этом, что будет считано? Ноль или единица? - это не важно.
Если момент опроса в попадает в интервал дребезга и читается 0, то считаем, что нажали кнопку. Ну и правда, ведь нажали? Значение входа сейчас установится и будет стабильный ноль.
Если попали в интервал дребезга и считали 1, тоже нормально, считаем, что кнопка не нажата (ну и в самом деле - нажали не очень хорошо - контакт плохой). Уже следующий poll даст стабильный 0 и тогда уж точно определим нажатие кнопки.
При таком подходе точность определения момента нажатия определяется периодом опроса, но в большинстве случаев с кнопками это вполне приемлимо.
Всякие альтернативные методы в принципе тоже имеют свой "период фильтрации", только другие методы сложнее в реализации и требуют больше логики.
Go to the top of the page
 
+Quote Post



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

 


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


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