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

 
 
> Новичковое: дребезг кнопок
ReedCat
сообщение Jan 25 2008, 09:48
Сообщение #1


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

Группа: Свой
Сообщений: 109
Регистрация: 14-01-08
Из: Москва
Пользователь №: 34 069



Приветствую!

Начал пробовать свои силы в работе с FPGA.
Схемотехникой немного занимался, но очень давно (ещё когда PLM были "будущим электроники", а не её настоящим), поэтому сразу стали возникать "вопросы новичка". Буду признателен за разъяснения.

Итак, дано: макетная плата с Spartan-3E, ISE Webpack.
Прогоняю технологическую цепочку, чтобы понять, как "оно" работает, на примитивном тесте: светодиодиками на макетной плате помигать. Мигает. Дальше хочу задействовать имеющуюся кнопку для управления процессом (выключения светодиодика).

Придумывается что-то типа:


reg ONOFF;

...
always @(posegde clk) if ( ~ butt) ONOFF = ~ ONOFF;
...

assign LED = ONOFF & .... ;

И "меня терзают смутные сомнения", придуманная конструкция явно неустойчива к "дребезгу" контактов кнопки.
Какой стандартный ход применяют те, кто уже имеет опыт? Делят такт и опрашивают реже? А что если единственный опрос придётся как раз на время дребезга?


Посоветуйте, пожалуйста.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
iosifk
сообщение Jan 25 2008, 10:02
Сообщение #2


Гуру
******

Группа: Модераторы
Сообщений: 4 011
Регистрация: 8-09-05
Из: спб
Пользователь №: 8 369



Цитата(ReedCat @ Jan 25 2008, 12:48) *
Приветствую!

Итак, дано: макетная плата с Spartan-3E, ISE Webpack.
Прогоняю технологическую цепочку, чтобы понять, как "оно" работает, на примитивном тесте: светодиодиками на макетной плате помигать. Мигает. Дальше хочу задействовать имеющуюся кнопку для управления процессом (выключения светодиодика).

И "меня терзают смутные сомнения", придуманная конструкция явно неустойчива к "дребезгу" контактов кнопки.
Какой стандартный ход применяют те, кто уже имеет опыт? Делят такт и опрашивают реже? А что если единственный опрос придётся как раз на время дребезга?
Посоветуйте, пожалуйста.


1. сдвиговый регистр. сдвигаете сигнал, когда все выходы 1, значит 1. Или реверсивный счетчик. два уровня ниже или равно нижней планке - 0, выше или равно верхней - 1.
2. Таймер. запускается сигналом и блокирует поступление сигнала на время.
3. Микропроцессор...

Про RC-цепочки - забудьте!


--------------------
www.iosifk.narod.ru
Go to the top of the page
 
+Quote Post
sazh
сообщение Jan 25 2008, 10:24
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 2 435
Регистрация: 6-10-04
Из: Петербург
Пользователь №: 804



Цитата(iosifk @ Jan 25 2008, 13:02) *
1. сдвиговый регистр. сдвигаете сигнал, когда все выходы 1, значит 1. Или реверсивный счетчик. два уровня ниже или равно нижней планке - 0, выше или равно верхней - 1.
2. Таймер. запускается сигналом и блокирует поступление сигнала на время.
3. Микропроцессор...

Про RC-цепочки - забудьте!


А если таких кнопок - за 100 будет?
Go to the top of the page
 
+Quote Post
iosifk
сообщение Jan 25 2008, 10:39
Сообщение #4


Гуру
******

Группа: Модераторы
Сообщений: 4 011
Регистрация: 8-09-05
Из: спб
Пользователь №: 8 369



Цитата(sazh @ Jan 25 2008, 13:24) *
А если таких кнопок - за 100 будет?

А если кнопок будет много, то их собирают в матрицу и матрицу сканируют. Память, счетчик и сумматор-вычитатель (аккумулятор)...
Делают 100 ячеек памяти для промежуточного результата. На нужном такте читают память и делают инкремент или декремент и результат пишут обратно в память.
Ресурсы:
100 ячеек памяти, счетчик адресов, сумматор-вычитатель, регистр, автомат на несколько состояний...

Как видите, абсолютно ничего сложного....

А простейший фильтр - это сдвиговый регистр, с него все выходы и вход подаются на И, оттуда на S-вход триггера. Также все сигеалы подаются на ИЛИ-НЕ, оттуда на вход К триггера. При всех "1" в сдвиговом регистре, триггер переключится в 1, при всех нулях - в "0"...
Реверсивный счетчик с двумя уровнями - это понятно.

Ну а микроконтроллер - это если он уже есть в проекте. Обработка кнопки программная, как обычно. Просто я всегда представлял, что проект делается не только для обработки одной кнопки...


--------------------
www.iosifk.narod.ru
Go to the top of the page
 
+Quote Post
sazh
сообщение Jan 25 2008, 11:29
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 2 435
Регистрация: 6-10-04
Из: Петербург
Пользователь №: 804



Цитата(iosifk @ Jan 25 2008, 13:39) *
Просто я всегда представлял, что проект делается не только для обработки одной кнопки...


У кого как.
Я хотел сказать, что кроме программного подхода есть простой железный.
У Титце и Шенка расписан. стр.359
R_S триггер и два резистора. Правда при наличии трехпозиционной кнопки.
Все таки уверенность должна быть. Что сработает когда надо.

module drebezg /// dff
(
input r_n, //Weak Pull-Up Resistor == on
input s_n, //Weak Pull-Up Resistor == on
output reg out
);

wire clk = 1'b1;

always@ (posedge clk or negedge r_n or negedge s_n)
begin
if (r_n == 1'b0) out <= 1'b0;
else if (s_n == 1'b0) out <= 1'b1;
else out <= 1'b0;
end

endmodule
Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 25th June 2025 - 01:57
Рейтинг@Mail.ru


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