Цитата(Plain @ Jun 18 2018, 22:09)

Да потому что кнопки сейчас мифические. Перейдите в реальность и сделайте сперва синхронный подавитель дребезга для обеих, после него не останется никаких неоднозначностей.
Ни в коем случае. Ничего мифического нет.
Key_01 и Key_02 - контролируют длительность нажатия.
Первый заход в процесс - устанавливается Key_01.
В конце устанавливается Key_02.
Второй заход в процесс (через 10 мс) - проверяется Key_01 = Key_02.
Т.е. антидребезг на 10 мс.
Код
UCF
Net "Btn_Left" Loc = "D18" | IOStandard = LVTTL | PullDown;
Net "Btn_Right" Loc = "H13" | IOStandard = LVTTL | PullDown;
VHD
shared variable PulsePerPeriod_VAR: integer range 0 to PulsePerPeriod_VAR_MAX := 624;
. . . . .
ButtonsPolling:
process(Clock_100Hz)
begin
if rising_edge(Clock_100Hz) then
if Btn_Left = '1' then
Key_01 := '1';
if Key_01 = Key_02 then
OnBtnLeft_DownEvent <= '1';
end if;
else
OnBtnLeft_DownEvent <= '0';
end if;
if Btn_Right = '1' then
Key_01 := '1';
if Key_01 = Key_02 then
OnBtnRight_DownEvent <= '1';
end if;
else
OnBtnRight_DownEvent <= '0';
end if;
Key_02 := Key_01;
end process ButtonsPolling;
OnButtonLeft_Down:
process(OnBtnLeft_DownEvent)
begin
if rising_edge(OnBtnLeft_DownEvent) then
if (PulsePerPeriod_VAR > 0) then
PulsePerPeriod_VAR := PulsePerPeriod_VAR - 1;
end if;
end if;
end process OnButtonLeft_Down;
OnButtonRight_Down:
process(OnBtnRight_DownEvent)
begin
if rising_edge(OnBtnRight_DownEvent) then
if (PulsePerPeriod_VAR < PulsePerPeriod_VAR_MAX) then
PulsePerPeriod_VAR := PulsePerPeriod_VAR + 1;
end if;
end if;
end process OnButtonRight_Down;
1. Если есть знатоки как красиво делать антидребезг - буду только благодарен узнать/послушать.
2. На счет того синхронный подавитель это или НЕ синхронный - таких подробностей пока не знаю.
Спасибо за ответы.
На счет объединения в один процесс . . . обязательно подумаю, тока пока не понимаю как это вообще возможно.

А как вообще в мире делается опрос клавиатуры (если например 10 кнопок)?
Ведь например функция вверх-вниз хождения по меню - это явно уменьшение/увеличение одной и той же переменной описывающей текущее положение в меню. Так?
К слову - философский вопрос о концепции того, что возможно построить на ПЛИС и нужно ли это делать?
У меня есть набор Спартан 3Е. На нем есть какая-то память, ЖКИ и тд и тп. А вот такой вопрос вобще на ПЛИС "
возможно" реализовать устройство например которое принимает сигнал с ацп и рассчитывает его спектр. Плюс вывод какой-то дополнительной информации на экран. Под словом "
возможно", я подразумеваю не то возможно ли это вообще сделать, а то - целесообразно ли это, или надо делать применять другие микросхемы.
Сообщение отредактировал aBoomest - Jun 19 2018, 06:50