Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Клавиатура
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > Интерфейсы
Derek
Уважаемые разработчики. Поделитесь практическим опытом пожалуйста.
Мне надо разработать интерфейс клавиатуры 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.
rezident
Извините, что ленюсь посмотреть этот keypad interface smile.gif но нельзя ли его реализовать программно? На обычных GPIO пинах? Программно такой интерфейс делается "как два пальца обосcасфальт". И устранение дребезга и автоповтор и пр. прелести.
Derek
программно конечно можно реализовать. Но задача сделать однако именно как аппаратный IP блок
MaxEngee
Пример реализации 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
;****************************************************************
XVR
Цитата
программно конечно можно реализовать. Но задача сделать однако именно как аппаратный IP блок




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

;Подпрограмма сканирования кнопок 4*4
Я правильно понял - вы предлагаете автору вопроса сделать PIC в виде аппаратного IP блока и загрузить в него программу сканирования клавиатуры? yeah.gif
MisterDi
Цитата(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, т и т.д. По большому счету скан-коды можно в дальнейшем преобразовать как угодно, а приоритетность кнопок решать соответствующей разводкой матрицы на панели
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.