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

 
 
> Обработка нажатия кнопок
aBoomest
сообщение Jun 18 2018, 18:12
Сообщение #1


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

Группа: Участник
Сообщений: 167
Регистрация: 24-12-08
Из: Россия
Пользователь №: 42 714



Всем доброго дня.
Привожу нижеследующий код:
Код
  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;
(PulsePerPeriod_VAR объявлена как shared variable)
Это обработка нажатия двух кнопок (вправо, влево)
Само нажатие работает нормально, по которому я формирую "событие-сигнал" нажатия кнопки (либо правой, либо левой - по названиям процессов все понятно)
при этом обращаю внимание на выделенные две строки. Если их закоментировать - все компилируется. Если оставить одну из них - тоже компилируется. А вот обе - сразу дает ошибку.
Я чую конечно что так писать нельзя. (Переменная PulsePerPeriod_VAR в обоих процессах одна и таже)
Но почему? Не могу понять и найти объяснение. Уже неделю копаю и в инете и в книгах Бибило.
1. Может кто-нибудь популярно объяснить почему так нельзя?
2. Как реализовать нажатие нескольких кнопок, когда по нажатию надо изменять значение одного и того же параметра (в данном случае увеличить или уменьшить значение переменной PulsePerPeriod_VAR)
3. Может кто посоветовать литературу такого плана - дается к.л. конструкция кода и далее какую структуру она порождает и описание это (примеры). Не готовые схемы счетчиков и т.п. а наоборот, с т.з. языка vhdl. Код -> структура -> описание.

Сообщение отредактировал aBoomest - Jun 18 2018, 18:18


--------------------
C уважением!
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
aBoomest
сообщение Jun 19 2018, 06:48
Сообщение #2


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

Группа: Участник
Сообщений: 167
Регистрация: 24-12-08
Из: Россия
Пользователь №: 42 714



Цитата(Plain @ Jun 18 2018, 22:09) *
Да потому что кнопки сейчас мифические. Перейдите в реальность и сделайте сперва синхронный подавитель дребезга для обеих, после него не останется никаких неоднозначностей.
Ни в коем случае. Ничего мифического нет. sm.gif
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. На счет того синхронный подавитель это или НЕ синхронный - таких подробностей пока не знаю.

Спасибо за ответы.

На счет объединения в один процесс . . . обязательно подумаю, тока пока не понимаю как это вообще возможно. sm.gif

А как вообще в мире делается опрос клавиатуры (если например 10 кнопок)?
Ведь например функция вверх-вниз хождения по меню - это явно уменьшение/увеличение одной и той же переменной описывающей текущее положение в меню. Так?

К слову - философский вопрос о концепции того, что возможно построить на ПЛИС и нужно ли это делать?
У меня есть набор Спартан 3Е. На нем есть какая-то память, ЖКИ и тд и тп. А вот такой вопрос вобще на ПЛИС "возможно" реализовать устройство например которое принимает сигнал с ацп и рассчитывает его спектр. Плюс вывод какой-то дополнительной информации на экран. Под словом "возможно", я подразумеваю не то возможно ли это вообще сделать, а то - целесообразно ли это, или надо делать применять другие микросхемы.

Сообщение отредактировал aBoomest - Jun 19 2018, 06:50


--------------------
C уважением!
Go to the top of the page
 
+Quote Post
Plain
сообщение Jun 19 2018, 08:39
Сообщение #3


Гуру
******

Группа: Участник
Сообщений: 6 776
Регистрация: 5-03-09
Из: Москва
Пользователь №: 45 710



Цитата(aBoomest @ Jun 19 2018, 09:48) *
синхронный подавитель это или НЕ синхронный - таких подробностей пока не знаю

В этом-то и проблема. Он в наличии и синхронный, а вот его результат зачем-то выведен из-под данного такта — создайте в нём же условие "обе кнопки нажаты или отпущены" и не по нему меняйте счётчик.

Сообщение отредактировал Plain - Jun 19 2018, 08:40
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- aBoomest   Обработка нажатия кнопок   Jun 18 2018, 18:12
- - Plain   Да потому что кнопки сейчас мифические. Перейдите ...   Jun 18 2018, 19:09
- - Александр77   А может корректнее завести все в один процесс и та...   Jun 19 2018, 03:10
|- - Flip-fl0p   Предлагаю все объединить в одном процессе. Заменит...   Jun 19 2018, 04:43
|- - Flip-fl0p   ЦитатаЕсли есть знатоки как красиво делать антидре...   Jun 19 2018, 07:08
|- - _Anatoliy   Цитата(aBoomest @ Jun 19 2018, 09:48)   Jun 19 2018, 07:18
- - aBoomest   Цитата(Flip-fl0p @ Jun 19 2018, 10:0...   Jun 19 2018, 07:24
|- - Flip-fl0p   Цитата(aBoomest @ Jun 19 2018, 10:24) На ...   Jun 19 2018, 07:37
- - aBoomest   Цитата(Plain @ Jun 19 2018, 11:39) В этом...   Jun 19 2018, 10:47
|- - iosifk   [quote name='aBoomest' date='Jun 19 20...   Jun 19 2018, 10:52
- - aBoomest   Так точно, работает! PS: На счет того как зас...   Jun 19 2018, 11:07
- - aBoomest   Цитата(Flip-fl0p @ Jun 19 2018, 07:4...   Jun 21 2018, 18:39
|- - Flip-fl0p   Цитата(aBoomest @ Jun 21 2018, 21:39) Пе...   Jun 21 2018, 19:33
|- - iosifk   Цитата(aBoomest @ Jun 21 2018, 21:39) Не,...   Jun 21 2018, 19:54
- - Plain   В схеме по-прежнему несколько тактовых сигналов, а...   Jun 21 2018, 19:42
|- - Flip-fl0p   Цитата(Plain @ Jun 21 2018, 22:42) Наприм...   Jun 21 2018, 19:53
||- - Plain   Цитата(Flip-fl0p @ Jun 21 2018, 22:5...   Jun 21 2018, 20:15
||- - Flip-fl0p   Цитата(Plain @ Jun 21 2018, 23:15) Резуль...   Jun 21 2018, 20:24
|- - Plain   Цитата(Plain @ Jun 21 2018, 22:42) создат...   Jun 24 2018, 11:42
- - Plain   У автора тактовая частота 100 Гц.   Jun 21 2018, 20:46
- - aBoomest   Спасибо всем за ответы! Все говорят и советуют...   Jun 22 2018, 05:48
|- - Flip-fl0p   Цитата(aBoomest @ Jun 22 2018, 08:48) Во...   Jun 22 2018, 06:12
|- - Plain   Цитата(aBoomest @ Jun 22 2018, 08:48) вро...   Jun 22 2018, 08:20
- - aBoomest   Цитата(Plain @ Jun 24 2018, 14:42) ...   Jun 27 2018, 19:17
|- - iosifk   Цитата(aBoomest @ Jun 27 2018, 22:17) Как...   Jun 27 2018, 19:33
|- - Plain   Цитата(aBoomest @ Jun 27 2018, 22:17) при...   Jun 27 2018, 20:17
|- - Flip-fl0p   Цитата(aBoomest @ Jun 27 2018, 22:17) Чт...   Jun 28 2018, 04:50
- - Plain   Конкретизирую по повторам. Минимальный период ручн...   Jun 28 2018, 11:53


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

 


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


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