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

 
 
 
Reply to this topicStart new topic
> Клавиатура, особенности сканирования клавиатурной матрицы
Derek
сообщение Nov 14 2008, 14:22
Сообщение #1





Группа: Новичок
Сообщений: 7
Регистрация: 16-06-08
Пользователь №: 38 330



Уважаемые разработчики. Поделитесь практическим опытом пожалуйста.
Мне надо разработать интерфейс клавиатуры 8х8 на примере keypad interface в EP9307 Cirrus Logic.
Клавиатура может декодировать до 2 одновременно нажатых клавиш.
Если нажато большее число то приоритет отдается клавишам наименьшего адреса.
Технология работы моего интерфейса такая: произвожу опрос строк бегущим нулем и смотрю на состояния столбцов. Весь процесс сканирования за одну итерацию происходит за 64 такта. каждое мое сканирование начинается с ROW 0 и заканчивается ROW7. Но в аналоге почему-то сканирование ведется с ROW7 - > ROW0 .... И в разработке пишут что ROW 7 имеет некий приоритет по сравнению с последующими строками. Но в этой же разработке отдают приоритет клавишам с наименьшим адресом. А клавиша с наименьшим адресом находится как раз в строке 0.
Вопрос вот в чем: имеет ли какое - то значение с какой строки начинается сканирование?
Привожу фрагмент аналога:

Products are scanned based on the KEY_SCAN register value. Each complete array scan starts with ROW 7 and then progresses to ROW0, 1 , and so on because of the pipelined nature of the key scan controller. Keys in this ROW have precedence and are considered first in the scan order because ROW7 is scanned first. When a key is pressed, it may mechanically bounce for a up to 20 msec. The key array scan circuit will count the nu,ber of consecutive scans that decode to the same 1 or 2 first keys encountered from the start of a scan.

Сообщение отредактировал Derek - Nov 14 2008, 14:24
Go to the top of the page
 
+Quote Post
rezident
сообщение Nov 14 2008, 16:20
Сообщение #2


Гуру
******

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



Извините, что ленюсь посмотреть этот keypad interface smile.gif но нельзя ли его реализовать программно? На обычных GPIO пинах? Программно такой интерфейс делается "как два пальца обосcасфальт". И устранение дребезга и автоповтор и пр. прелести.
Go to the top of the page
 
+Quote Post
Derek
сообщение Nov 17 2008, 07:57
Сообщение #3





Группа: Новичок
Сообщений: 7
Регистрация: 16-06-08
Пользователь №: 38 330



программно конечно можно реализовать. Но задача сделать однако именно как аппаратный IP блок
Go to the top of the page
 
+Quote Post
MaxEngee
сообщение Dec 4 2008, 11:37
Сообщение #4


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

Группа: Свой
Сообщений: 120
Регистрация: 17-03-07
Из: Беларусь, Минск
Пользователь №: 26 249



Пример реализации 4*4 для PIC:
Все достаточно просто и для 8*8:

;Подпрограмма сканирования кнопок 4*4
;подключенных к порту В.
;Старшие 4-и линии порта направить на ввод,младшие на вывод c нулями.
;Требуется подключить подтягивающие резисторы.
; Определить KEY_PRESD_COD
;KEY_PRESD возвращает в KEY_PRESD_COD 4-ех битный код нажатой кнопки.
;
; rb7 ------- F E D C
; rb6 ------- B A 9 8
; rb5 ------- 7 6 5 4
; rb4 ------- 3 2 1 0
; | | | |
; | | | |
; b3b2b1b0
;ЕСЛИ КНОПКА НЕБЫЛА НАЖАТА ИЛИ НАЖАТЫ более 1-ой ВОЗВРАЩАЕТ в W 0x0
;Подпрограмма может глюкнуть если только нажаты одновременно соседние
;по столбцу кнопки,в этом случае возвращает код нижней.
;Во все остальных случаях:если не нажата или нажаты более одной
;кнопки в W возвращается 0X0.
;При использовании прерывания после вызова подпрограммы требуется переинициализировать TRIS
;При использовании высокочастотных генираторов при циклическом
;вызове подпрограммы(детектирование нажатия) встовляйте задержку перед
;подпрограммой.
;KEY_CONNECT-порт подключения клавиатуры
KEY_PRESD
CLRF KEY_CONNECT
BANK1
MOVLW 0XF0
MOVWF KEY_CONNECT
BANK0
MOVF KEY_CONNECT,0
ANDLW 0XF0 ;если
XORLW 0XF0 ; ненажата
BTFSC STATUS,Z ; ниодна кнопка
RETLW 0X0 ; вернуть в W 0X0
;кнопка нажата !!!
;Определим строку:
CLRW
BTFSS KEY_CONNECT,4
MOVLW 0X0
BTFSS KEY_CONNECT,5
MOVLW 0X4
BTFSS KEY_CONNECT,6
MOVLW 0X8
BTFSS KEY_CONNECT,7
MOVLW 0XC
MOVWF KEY_PRESD_COD
;Определим столбец:
BANK1 ;TRIS
BSF KEY_CONNECT,0
BANK0
NEXT_KEY_ST
MOVF KEY_CONNECT,0 ;Проверка
ANDLW 0XF0 ; на номер
XORLW 0XF0 ; установленного
BTFSC STATUS,Z ; столбца.
RETLW 1 ;
MOVF KEY_PRESD_COD,0 ; Проверка
ANDLW 0X3 ; на последний
XORLW 0X3 ; обработанный
BTFSC STATUS,Z ; столбец.
RETLW 0 ;нажаты несколько кнопок.
INCF KEY_PRESD_COD,1
; Выбрать cледущий столбец для проверки.
BANK1;TRIS
BTFSC KEY_CONNECT,2 ;
BSF KEY_CONNECT,3
BTFSC KEY_CONNECT,1 ;
BSF KEY_CONNECT,2
BSF KEY_CONNECT,1
BANK0
NOP;
NOP;
NOP;
NOP;
NOP;
NOP;
NOP;
NOP;
NOP; Задержка для высокочастотных генираторов.
NOP;
NOP;
NOP;
NOP;
NOP;
NOP;
NOP;
NOP;
GOTO NEXT_KEY_ST
;****************************************************************
Go to the top of the page
 
+Quote Post
XVR
сообщение Dec 5 2008, 09:41
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 3 123
Регистрация: 7-04-07
Из: Химки
Пользователь №: 26 847



Цитата
программно конечно можно реализовать. Но задача сделать однако именно как аппаратный IP блок




Цитата(MaxEngee @ Dec 4 2008, 14:37) *
Пример реализации 4*4 для PIC:
Все достаточно просто и для 8*8:

;Подпрограмма сканирования кнопок 4*4
Я правильно понял - вы предлагаете автору вопроса сделать PIC в виде аппаратного IP блока и загрузить в него программу сканирования клавиатуры? yeah.gif
Go to the top of the page
 
+Quote Post
MisterDi
сообщение Dec 10 2008, 14:05
Сообщение #6


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

Группа: Участник
Сообщений: 88
Регистрация: 28-10-08
Из: Днепропетровск
Пользователь №: 41 263



Цитата(Derek @ Nov 14 2008, 18:22) *
Привожу фрагмент аналога:

Products are scanned based on the KEY_SCAN register value. Each complete array scan starts with ROW 7 and then progresses to ROW0, 1 , and so on because of the pipelined nature of the key scan controller. Keys in this ROW have precedence and are considered first in the scan order because ROW7 is scanned first. When a key is pressed, it may mechanically bounce for a up to 20 msec. The key array scan circuit will count the nu,ber of consecutive scans that decode to the same 1 or 2 first keys encountered from the start of a scan.

В переводе на русский это значит, что в связи с особеностями аппаратной реализации наивысший приоритет имеет ROW7, затем 0, 1, т и т.д. По большому счету скан-коды можно в дальнейшем преобразовать как угодно, а приоритетность кнопок решать соответствующей разводкой матрицы на панели
Go to the top of the page
 
+Quote Post

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

 


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


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