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

 
 
> Обработка нажатия кнопок
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 27 2018, 19:17
Сообщение #2


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

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



Цитата(Plain @ Jun 24 2018, 14:42) *
"Да наоборот же! ©" ............
Спасибо. Дельно.

Вот такой вопрос, чтобы понять нюанс, по сообщениям номер 15 и номер 23:

Какую частоту должны иметь сигналы clk?

В моем случае антидребезг с временем 10 мс. (используется частота 100 Гц)
А та частота о которой говорю, она же , как я понимаю должна быть <100 Гц (или <=100Гц). По крайней мере, вроде как она не должна быть больше.
Т.е. эта частота определяет с какой скоростью PulsePerPeriod_VAR будет увеличиваться/уменьшаться на 1.
Т.е. если clk = 1 Гц, то при нажатой кнопке UP один раз в секунду PulsePerPeriod_VAR будет увеличиваться на единицу. Правильные рассуждения?
Если да, то что всетаки может помешать сделать clk > 100 Гц?


--------------------
C уважением!
Go to the top of the page
 
+Quote Post
Flip-fl0p
сообщение Jun 28 2018, 04:50
Сообщение #3


В поисках себя...
****

Группа: Свой
Сообщений: 729
Регистрация: 11-06-13
Из: Санкт-Петербург
Пользователь №: 77 140



Цитата(aBoomest @ Jun 27 2018, 22:17) *

Чтобы понять нюанс по сообщениям - надо понять в первую очередь какую мысль я до Вас пытаюсь донести.
А для этого надо сесть и нарисовать на бумажке структуру прохождения данных в проекте:


Инвертор уровня - нужен для того, чтобы всегда работать с активным уровнем сигнала- лог.1. Иначе легко допустить ошибку. Во всяком случае я предпочитаю работать по возможности с активным уровнем лог.1

Регистры-синхронизаторы - для синхронизации с клоковым доменом.

Антидребезг - удаление дребезга собственно rolleyes.gif .

В моем случае у меня все это делает один модуль, который называется KAA_button_debounce, пример которого я привел на форуме: https://electronix.ru/forum/index.php?showt...5&start=195

С выхода антидребезга стабильный, синхронный сигнал подаете на автомат и что-то с ними делаете по Вашему алгоритму.

Забудьте про частоты 1 Гц, 100 Гц и прочее. Не плодите разные частоты без крайней необходимости, это лишено смысла.
Советую прочитать про тактовые домены, чтобы пришло понимание почему без особой необходимость не надо плодить разные частоты:
http://www.kit-e.ru/articles/circuit/2009_02_102.php
https://habr.com/post/254869/

Если есть возможность - обрабатывать на одной частоте. В приведенном примере я взял за основу системную частоту с тактового генератора, но можно на блоках PLL или DCM синтезировать нужную Вам. Смысл примера - то что все действия можно производить только на одной частоте.
P.S. К сожалению я лучше уж объяснить не смогу. Не умею...
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
- - aBoomest   Цитата(Plain @ Jun 18 2018, 22:09) Да пот...   Jun 19 2018, 06:48
|- - Flip-fl0p   ЦитатаЕсли есть знатоки как красиво делать антидре...   Jun 19 2018, 07:08
|- - _Anatoliy   Цитата(aBoomest @ Jun 19 2018, 09:48)   Jun 19 2018, 07:18
|- - Plain   Цитата(aBoomest @ Jun 19 2018, 09:48) син...   Jun 19 2018, 08:39
- - 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
|- - iosifk   Цитата(aBoomest @ Jun 27 2018, 22:17) Как...   Jun 27 2018, 19:33
|- - Plain   Цитата(aBoomest @ Jun 27 2018, 22:17) при...   Jun 27 2018, 20:17
- - Plain   Конкретизирую по повторам. Минимальный период ручн...   Jun 28 2018, 11:53


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

 


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


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