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

 
 
> Клавиатура на ПЛИСке, Домашнее задание
andreichk
сообщение Apr 21 2008, 17:23
Сообщение #1


Знающий
****

Группа: Свой
Сообщений: 507
Регистрация: 15-04-06
Из: Германия
Пользователь №: 16 143



Привет Народ!
Получил сегодня задание сделать клавиатуру на 16 кнопок на ПЛИСине от XILINX.
На входе должно быть 16 кнопок, на выходах, которых два ,должно быть-
на одном- меандр, на втором два байта от 1 до 16 в зависимости от нажатой кнопки в течении активной части меандра.
На рисунке для ясности приведён пример , когда одновременно нажаты клавишы: 2,5,12,16.
Оба выхода должны будут опрашиваться ПИК процессором, в котором они описаны следующим образом

коды кнопок
Код
#define Key1    0b0000000000000001//0x0001//1
#define Key2    0b0000000000000010//0x0002//2
#define Key3    0b0000000000000100//0x0004//4
#define Key4    0b0000000000001000//0x0008//8
#define Key5    0b0000000000010000//0x0010//16
#define Key6    0b0000000000100000//0x0020//32
#define Key7    0b0000000001000000//0x0040//64
#define Key8    0b0000000010000000//0x0080//128
#define Key9    0b0000000100000000//0x0100//256
#define Key10   0b0000001000000000//0x0200//512
#define Key11   0b0000010000000000//0x0400//1024
#define Key12   0b0000100000000000//0x0800//2048
#define Key13   0b0001000000000000//0x1000//4096
#define Key14   0b0010000000000000//0x2000//8192
#define Key15   0b0100000000000000//0x4000//16384
#define Key16   0b1000000000000000//0x8000//32768


и

#ifndef TASTE_EN
#define TASTE_EN PIN_A5//Признак опроса кнопок
#endif

ПЛИСку умею програмировать пока только в графическом режиме.Подскажите,плиз, с какого боку подходить к решению данной задачи.Заранее спасибо beer.gif


--------------------
Go to the top of the page
 
+Quote Post
2 страниц V   1 2 >  
Start new topic
Ответов (1 - 18)
chds
сообщение Apr 21 2008, 17:44
Сообщение #2


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

Группа: Свой
Сообщений: 173
Регистрация: 5-11-07
Из: Чернигов, Украина
Пользователь №: 32 078



Могу предложить решение на VHDL
Ну для начала нужно определиться с частотой опроса клавиатуры. Сформировать такой сигнал можно на обычном делителе зависит от внутренней частоты в ПЛИС:
Код
signal cnt : std_logic_vector(20 downto 0);
signal scan_keyboard : std_logic;
cnt : process (clk)
begin
   if (clk=1 and clk'event) then
       cnt <= cnt+1;
   end if;
end process;

scan_keyboard <= cnt(20);


тут входной clk поделили на 2^20

а потом запускаться от сигнала scan_keyboard и считывать состояние со входных пинов к которым подключены кнопки:
если в entity объявлен сигнал типа:
Код
key : in std_logic_vector(16 downto 1);

то выполняем что то типа:
Код
scan : process (scan_keyboard)
begin
   if (scan_keyboard=1 and scan_keyboard'event) then
       send_scaned_key <= key;
   end if;
end process;

Дальше останется только выдать параллельный код send_scaned_key последовательно, можно так же самостоятельно написать на VHDL процесс, а можно запортмапить сдвиговый регистр, в библиотеке у Xilinx их предостаточно.
Ну конечно возможны модификации, типа: слать когда нажимают кнопки, но это потребует незначительной модификации кода.




Настрочил, а потом прочитал:
Цитата
ПЛИСку умею програмировать пока только в графическом режиме.Подскажите,плиз, с какого боку подходить к решению данной задачи.Заранее спасибо


Ну тут еще проще, читай мануал.
Go to the top of the page
 
+Quote Post
rezident
сообщение Apr 21 2008, 17:44
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882



Двух сигналов для синхронного интерфейса маловато. Нужно еще фреймовую синхронизацию ввести. Т.е. сигнал, который будет определять начало слова состояния. Если кнопки у вас не объединены в матрицу, то ничего сложного в схеме нет. Организуйте интерфейс синхронного последовательного канала на 16-и разрядном сдвиговом регистре. А схему устранения дребезга на двух 16-и разрядных параллельных регистрах и логике типа XORа, которые тактируются низкочастотным сигналом с периодом порядка 10мс...100мс. В одном регистре хранится предыдущее состояние в другом состояние, отфильтрованное от дребезга. Если текущее состояние кнопок отличается от предыдущего, то значит идет дребезг контакта и логика не должна "пропускать" сигнал во второй регистр "устойчивого состояния", а запись происходит только в первый регистр. В противном случае текущее состояние записывается в оба регистра.
Ну и по сигналу фреймовой синхронизации информация из регистра "устойчивого состояния" копируется в сдвиговый регистр и выдается наружу синхронно с тактовыми сигналами.
Хотя нафига вам такой геморрой при наличии в системе МК, я не понимаю? laughing.gif
Go to the top of the page
 
+Quote Post
chds
сообщение Apr 21 2008, 17:47
Сообщение #4


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

Группа: Свой
Сообщений: 173
Регистрация: 5-11-07
Из: Чернигов, Украина
Пользователь №: 32 078



Цитата
Двух сигналов для синхронного интерфейса маловато

Тут можно поспорить. Link порты у всех DSP могут работать в таком режиме. Передний фронт запрос записи, задний запись и сигнал подтверждения не нужен. Ну и I2C/SPI тоже такие не требовательные.
Go to the top of the page
 
+Quote Post
andreichk
сообщение Apr 21 2008, 17:48
Сообщение #5


Знающий
****

Группа: Свой
Сообщений: 507
Регистрация: 15-04-06
Из: Германия
Пользователь №: 16 143



Скажите, а можно ли каким-то образом обьеденить уже нарисованный кусок программы с тем, что вы предлагаете на VHDL ?
Спрашиваю потому, что в ПЛИСке уже имеется код сделанный в графике, но к нему нужно ещё вот это прилепить(кажется два раза одно и тоже написал)
Ну или как можно этот код в графику перерисовать?


--------------------
Go to the top of the page
 
+Quote Post
chds
сообщение Apr 21 2008, 17:51
Сообщение #6


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

Группа: Свой
Сообщений: 173
Регистрация: 5-11-07
Из: Чернигов, Украина
Пользователь №: 32 078



Ну с начала нужно поведать где и чем вы творите.
Если в ISE с полной лицензией, то объединять VHDL и Schematic никаких проблем нет. Либо в VHDL блок Схематика вставляете через port map или в схематик вставляется блок VHDL и дальше работается как с графическим элементом.
Go to the top of the page
 
+Quote Post
andreichk
сообщение Apr 21 2008, 17:55
Сообщение #7


Знающий
****

Группа: Свой
Сообщений: 507
Регистрация: 15-04-06
Из: Германия
Пользователь №: 16 143



Цитата(rezident @ Apr 21 2008, 19:44) *
Хотя нафига вам такой геморрой при наличии в системе МК, я не понимаю? laughing.gif

дело в том, что этот самый геморрой уже распаян на двухсторонней плате и от него никуда не денешься. да и порты в ПИКе уже все растасканы по заданиям и для клавы осталось только два.
И ещё сенсей мне прерывание под это дело написал и сказал, что сделает мне харакири, если я его не использую. help.gif

Цитата(chds @ Apr 21 2008, 19:51) *
Ну с начала нужно поведать где и чем вы творите.
Если в ISE с полной лицензией, то объединять VHDL и Schematic никаких проблем нет. Либо в VHDL блок Схематика вставляете через port map или в схематик вставляется блок VHDL и дальше работается как с графическим элементом.

точно в нём, только насчёт лицензии не уверен.Качал его с ихнего сайта где-то 1.7Га


--------------------
Go to the top of the page
 
+Quote Post
chds
сообщение Apr 21 2008, 18:12
Сообщение #8


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

Группа: Свой
Сообщений: 173
Регистрация: 5-11-07
Из: Чернигов, Украина
Пользователь №: 32 078



Ну это станет понятно в процессе.
Я так понимаю, если новичок, то проще всего объединять в схематике.
Для этого создаем новый проект, делаем верхним уровнем схематик. Дальше, что можем рисуем, что не можем делаем визардом (Tools->Symbol Wizard) нужный нам символ и заполняем его кодом.
Go to the top of the page
 
+Quote Post
andreichk
сообщение Apr 21 2008, 19:14
Сообщение #9


Знающий
****

Группа: Свой
Сообщений: 507
Регистрация: 15-04-06
Из: Германия
Пользователь №: 16 143



а мне вот такой вариант предложили


--------------------
Go to the top of the page
 
+Quote Post
rezident
сообщение Apr 21 2008, 21:09
Сообщение #10


Гуру
******

Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882



Цитата(chds @ Apr 21 2008, 23:47) *
Тут можно поспорить. Link порты у всех DSP могут работать в таком режиме. Передний фронт запрос записи, задний запись и сигнал подтверждения не нужен. Ну и I2C/SPI тоже такие не требовательные.
Что-то вы меня не поняли. Я про фреймовую синхронизацию, а вы о чем? Возьмите у SPI только два сигнала: SCLK и MOSI. А теперь скажите где у битовой последовательности начало и где конец? wink.gif I2C это другая песня. Её пока исполнять не будем. smile.gif
Цитата(andreichk @ Apr 22 2008, 01:14) *
а мне вот такой вариант предложили
И как он по-вашему должен работать? Ну считает счетчик, ну имеется сигнал окончания счета, а дальше что? Откуда и как приемник узнает какой именно вход подключен к выходу мультиплексора в данный конкретный момент времени? Для этого приемник должен сам генерить тактовые импульсы для счетчика или синхронизироваться этим же сигналом. Т.е. все равно к трем сигналам приходим:
- тактовые импульсы,
- последовательные синхронные данные,
- сигнал фреймовой синхронизации, который указывает на начало и/или конец фрейма (кадра передачи).
Go to the top of the page
 
+Quote Post
andreichk
сообщение Apr 21 2008, 21:30
Сообщение #11


Знающий
****

Группа: Свой
Сообщений: 507
Регистрация: 15-04-06
Из: Германия
Пользователь №: 16 143



а мне вот подсказывают, что , так как и ПИК и ПЛИС кормятся от одного кварцгенератора, то и никакая синхронизация не нужна


--------------------
Go to the top of the page
 
+Quote Post
rezident
сообщение Apr 21 2008, 21:54
Сообщение #12


Гуру
******

Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882



Цитата(andreichk @ Apr 22 2008, 03:30) *
а мне вот подсказывают, что , так как и ПИК и ПЛИС кормятся от одного кварцгенератора, то и никакая синхронизация не нужна
Ну не нужна так не нужна. biggrin.gif Чего же эти "подсказчики" до кучи вам не нарисуют рабочую схему и не объяснят как же она работает7 wink.gif
Go to the top of the page
 
+Quote Post
TomaT
сообщение Apr 21 2008, 22:09
Сообщение #13


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

Группа: Свой
Сообщений: 195
Регистрация: 25-01-06
Из: г. Троицк, МО
Пользователь №: 13 575



Цитата(andreichk @ Apr 22 2008, 01:30) *
а мне вот подсказывают, что , так как и ПИК и ПЛИС кормятся от одного кварцгенератора, то и никакая синхронизация не нужна


Теоретически! Возожно, но про прерывания на момент обмена, можно забыть... В ПИКах я не спец.
Вообще, то говоря, можно и одной ногой обойтись... smile.gif Но, как я понимаю не на данном этапе...

З.Ы. Если есть только две свободные ноги, то тут, проще всего, (если в одну сторону передача) реализовать синхронный последовальный интерфейс, хотя если все этодело от одного каварца кормиться, то в одну сторону одного провода хватит, UART...

З.Ы.Ы. Вернее, ето будет "Synchronus Transmitter" smile.gif, но копать все равно в сторону USART!
Go to the top of the page
 
+Quote Post
rimpocha
сообщение Apr 22 2008, 05:22
Сообщение #14


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

Группа: Свой
Сообщений: 82
Регистрация: 6-03-07
Из: Новосибирск, Seattle
Пользователь №: 25 935



А дребезг контактов вы подавляете как?


--------------------
НГТУ, Физико-технический факультет, кафедра Лазерных систем
Go to the top of the page
 
+Quote Post
chds
сообщение Apr 22 2008, 07:31
Сообщение #15


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

Группа: Свой
Сообщений: 173
Регистрация: 5-11-07
Из: Чернигов, Украина
Пользователь №: 32 078



Цитата(rezident @ Apr 22 2008, 00:09) *
Что-то вы меня не поняли. Я про фреймовую синхронизацию, а вы о чем?

Я имел в виду вот такой способ передачи:
Прикрепленное изображение
Go to the top of the page
 
+Quote Post
andreichk
сообщение Apr 22 2008, 16:44
Сообщение #16


Знающий
****

Группа: Свой
Сообщений: 507
Регистрация: 15-04-06
Из: Германия
Пользователь №: 16 143



Цитата(rezident @ Apr 21 2008, 23:54) *
Ну не нужна так не нужна. biggrin.gif Чего же эти "подсказчики" до кучи вам не нарисуют рабочую схему и не объяснят как же она работает7 wink.gif

Ну дык схему я привёл, с остальным разбираемся, если не получится , будем дальше копать. smile.gif
Схема немного изменена, но принцип тот же. Кстати она уже загружена в ПЛИСку и проверена в работе.Всё соответствует заданию, правда есть небольшие проблемы с процедурой прерывания , но это уже другая тема.


--------------------
Go to the top of the page
 
+Quote Post
Maverick
сообщение Apr 22 2008, 18:22
Сообщение #17


я только учусь...
******

Группа: Модераторы
Сообщений: 3 447
Регистрация: 29-01-07
Из: Украина
Пользователь №: 24 839



Цитата(chds @ Apr 21 2008, 20:51) *
Ну с начала нужно поведать где и чем вы творите.
Если в ISE с полной лицензией, то объединять VHDL и Schematic никаких проблем нет. Либо в VHDL блок Схематика вставляете через port map или в схематик вставляется блок VHDL и дальше работается как с графическим элементом.


А что если не лицензионный, то нельзя? wacko.gif


--------------------
If it doesn't work in simulation, it won't work on the board.

"Ты живешь в своих поступках, а не в теле. Ты — это твои действия, и нет другого тебя" Антуан де Сент-Экзюпери повесть "Маленький принц"
Go to the top of the page
 
+Quote Post
chds
сообщение Apr 23 2008, 06:19
Сообщение #18


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

Группа: Свой
Сообщений: 173
Регистрация: 5-11-07
Из: Чернигов, Украина
Пользователь №: 32 078



Цитата(ZMaverickZ @ Apr 22 2008, 21:22) *
А что если не лицензионный, то нельзя? wacko.gif

Ну Вы же не уточнили на чем делаете. Поэтому я сразу оговорился, что все что пишется это либо к купленному либо полеченому продукту. Просто были случаеи когда рассказываеш куда нажимать, а проблема оказывается в том, что нажимать некуда, т.к. не позволяет лицензия.
Go to the top of the page
 
+Quote Post
andreichk
сообщение Apr 23 2008, 19:30
Сообщение #19


Знающий
****

Группа: Свой
Сообщений: 507
Регистрация: 15-04-06
Из: Германия
Пользователь №: 16 143



Спешу сообщить что задача построения кнопок благополучно разрешилась. Прерывание откорректировано и всё теперь работает и очень даже быстро и надёжно.Подавление дребезга даже не понадобилось, во всяком случае никаких ложных срабатываний не наблюдается.Большое спасибо всем принявшим участие в обсуждении данной темы beer.gif


--------------------
Go to the top of the page
 
+Quote Post

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

 


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


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