Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Устранение дребезга коммутирующего устройства
Форум разработчиков электроники ELECTRONIX.ru > Программируемая логика ПЛИС (FPGA,CPLD, PLD) > Работаем с ПЛИС, области применения, выбор
Гяук
Грубо говоря есть такая цепь:

+ питания
|
резистор
|
|
земля------кнопка-------о------нога ПЛИС

Кнопка что-то в духе МПК1-4В и дребезжит при нажатии со страшной силой.
В ПЛИС она заведена на асинхронный сброс всего что только можно.
Вопрос: насколько этот дребезг может повлиять на работу схемы и как с ним можно бороться?

Я на счет устранения изобразил конструкцию из нескольки последовательно включенных д-триггеров, вход каждого из которых объединен по "И" с пином на который приходит сигнал с кнопки.
Alexandr
Если место в ПЛИСе есть, то советую сброс от кнопки завести на D-триггер с асинхронным сбросом. По первому же фронту от кнопки триггер защелкнется и запустит счетчик (настроеный на время 200-300мС, хотя нужно экспериментировать с конкретной кнопкой) который потом сбросит входной триггер и все что еще нужно сбросить. Правда окончательный сброс произойдет при отпускании кнопки. Можно поиграться и не отпускать сброс пока не отпустят кнопку - в общем решайте как лучше.
Victor®
Цитата(Гяук @ Mar 24 2005, 16:39)
Грубо говоря есть такая цепь:

                            + питания
                                  |
                            резистор
                                  |
                                  |
земля------кнопка-------о------нога ПЛИС

Кнопка что-то в духе МПК1-4В и дребезжит при нажатии со страшной силой.
В ПЛИС она заведена на асинхронный сброс всего что только можно.
Вопрос: насколько этот дребезг может повлиять на работу схемы и как с ним можно бороться?

Я на счет устранения изобразил конструкцию из нескольки последовательно включенных д-триггеров, вход каждого из которых объединен по "И" с пином на который приходит сигнал с кнопки.
*


1) У Altera в MAX+PLUS II был пример антидребезга. Посмотрите там.
2) У MAXIM есть микросхемы для этого - смотрите на их сайте.
3) Интересный вариант использовать watchdog, например Analog Devices ADM706 (у него Master Reset с антидребезгом) да и еще Power Fail Indicator
и еще как сам wathcdog :-)
4) Регистр сдвига, на вход кнопка+pullup, выходы регистра объединить по
ИЛИ, выход ИЛИ - нужный сигнал
M_A
Про устранение дребезга есть кое-что здесь
Alhen
Если есть переключающая группа контактов, то всегда стараюсь использовать RS триггер для антидребезга. Единственный недостаток перерасход входов на ПЛИС т.е. по две ноги на одну кнопку, зато работает железно.
Romanello
Поставь конденсатор, одной ногой соединив с выводом кнопки, другой ногой соедини с землей. Емкость конденсатора выбирается исходя из номинала резистора.
Гяук
2 Alexandr.
Первым делом почти так и сделаю, только...
У меня схема должна работать по нажатию кнопки, т.е. когда она отжата - вес в сбросе, нажата - в работе. Но мысль со счетчиком отработаю.

2 Victor®
1) Гм... А как хоть по аглицки этот "антидребезг" должен звучать? Я так понял смотреть нужно в хелп?
2) 3) Микросхему влепить уже не смогу - места на плате маловато, но буду иметь в виду. Особенно watchdog.

4) Тоже интересно, спасибо

2 Alhen
А можно поподробнее насчет двух ног? Торможу видимо...

2 Romanello
Вот это по-нашему!!

Всем спасибо, пошел пробовать smile.gif
Victor®
Цитата(Гяук @ Mar 25 2005, 12:23)
2 Victor®
1) Гм... А как хоть по аглицки этот "антидребезг" должен звучать? Я так понял смотреть нужно в хелп?

*


антидребезг - debounce
Микросхемы смотреть здесь:
http://www.maxim-ic.com/quick_view2.cfm/qv_pk/1896
Alhen
to Гяук
Вот пример на AHDL

TITLE "EPR";
Subdesign EPR
(
CLK32x :input; -- PIN 54
Button_S :input; -- PIN 49
Button_R :input; -- PIN 47
.......
)
Variable
C[1..0] :TFF;
PScaler[18..0] :TFF;
DEBOUNCER :SRFF;

BEGIN
PScaler[].clk = CLK32x;
PScaler[0].t = VCC; -- 16 MHz
.......
PScaler[15].t = PScaler[0] & PScaler[1]......

DEBOUNCER.clk = PScaler[15];
DEBOUNCER.s = !Button_S;
DEBOUNCER.r = !Button_R;
.......
END;
Ну и на рисунке схема

Кстати есть опыт использования MAX6816. Микросхема не плохая, даже очень, но заметили что немного тормозная т.е. если где в приложении надо будет сделать дабл клик как на мышке то наврядтли получится, она не успеет очухаться от первого клика. Но это не испортило впечатления. цену не знаю досталась по случаю, вдруг это испортит картину.
Victor®
Здесь есть на VHDL (debouncer) + еще несколько IP
http://www.alse-fr.com/English/ips.html
Гяук
2 Victor®
По поводу дебоунсера корка какая-то маловнятная (пользуясь всеми подсказками данными на форуме мне проще что-то свое сваять), но за ссылку спасибо smile.gif

2 Alhen Идею понял, спасибо. И, это, можно вопрос... А Вы правда из КАРАГАНДЫ???
Димыч
Да, со счетчиком все работает весьма сладко:

// debouncer
reg [3:0] debouncer;
parameter hold_time = 10;

always @(posedge clk)
if(in_to_debouncing) debouncer <= hold_hime;
else if(debouncer > 0)
debouncer <= debouncer - 1;

wire in_debounced = (debouncer != 0);
Alhen
2Гяук, я однозначно из Караганды "мы ррузские дрругх друха не обманываем", а что?
DLR
Поставь кондер!
Гяук
Цитата(Alhen @ Mar 29 2005, 08:25)
2Гяук, я однозначно из Караганды "мы ррузские дрругх друха не обманываем", а что?
*


Гм, да нет, ничего, просто соратник на работе глазастый попался - пригляделся: "Вот, говорит, народ стебается" - а я решил спросить smile.gif
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.