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

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> Клавиатура 3 линии 6 кнопок на линиях АРМ, возможно ли реализовать
prottoss
сообщение Jul 18 2008, 13:54
Сообщение #1


Гуру
******

Группа: Свой
Сообщений: 2 720
Регистрация: 24-03-05
Пользователь №: 3 659



Привет всем! Встала необходимость реализовать подобную клаву (на 3 линиях 6 кнопок) на МК AT91SAM7X128 в связи с отсутствием свободных линий ВВ. Алгоритм ясен и легко реализуем, к примеру, на AVR. НО есть сомнения, что такое возможно соорудить на вышеназванном камне. Кто нибудь строил подобную клавиатуру? Прилагаю рисунок:
Код
GPIOA-----x------------x-------------Key4-----GND
_              |             |
_           Key1       Key3
_              |             |
GPIOA-----x-------------|-------------Key5-----GND
_              |             |
_           Key2         |
_              |             |
GPIOA-----x------------x-------------Key6-----GND


--------------------
Go to the top of the page
 
+Quote Post
HARMHARM
сообщение Jul 18 2008, 14:28
Сообщение #2


читатель даташитов
****

Группа: Свой
Сообщений: 853
Регистрация: 5-11-06
Из: Днепропетровск
Пользователь №: 21 999



Что-то не очень понятная схема. А соорудить скорее всего можно, учитывая переключаемые pull-up и pull-down.
Go to the top of the page
 
+Quote Post
prottoss
сообщение Jul 18 2008, 14:31
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 2 720
Регистрация: 24-03-05
Пользователь №: 3 659



Цитата(HARMHARM @ Jul 18 2008, 22:28) *
Что-то не очень понятная схема. А соорудить скорее всего можно, учитывая переключаемые pull-up и pull-down.
Что не понятного? Есть три линии, назовем их A, B, C. Есть три кнопки, которые подключены между линиями, назовем их линейными - Key1, Key2, Key3. И есть три кнопки, которые подключены между оджной линией и землей - Key4, Key5, Key6. Токоограничительные резисторы я опустил для простоты.


--------------------
Go to the top of the page
 
+Quote Post
zltigo
сообщение Jul 18 2008, 14:39
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(prottoss @ Jul 18 2008, 15:54) *
легко реализуем, к примеру, на AVR. НО есть сомнения, что такое возможно соорудить на вышеназванном камне.

Какие, простите, проблемы могут возникнуть при реализации оного на любом контроллере? Какой из контроллеров не может изображать opendrain и считывать состояние выхода, или переключать вход/выход?
А вообще нормальнее использовать дополнительно 6 диодов/сборок и банально считывать код нажатой кнопки без дополнительных телодвижений, если, конечно не ставить задачу получить еще и нажание комбинаций кнопок.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
uriy
сообщение Jul 18 2008, 14:43
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 2 429
Регистрация: 30-11-05
Из: Ижевск
Пользователь №: 11 606



Вроде должно работать! Только с нажатием нескольких кнопок вроде сложновато. А в чем в данном случае принципиальное отличие SAM от AVR? Опередили пока писал.
Go to the top of the page
 
+Quote Post
Sergio66
сообщение Jul 18 2008, 14:50
Сообщение #6


Местный
***

Группа: Свой
Сообщений: 235
Регистрация: 9-02-05
Пользователь №: 2 526



Цитата(prottoss @ Jul 18 2008, 18:31) *
Что не понятного? Есть три линии, назовем их A, B, C. Есть три кнопки, которые подключены между линиями, назовем их линейными - Key1, Key2, Key3. И есть три кнопки, которые подключены между оджной линией и землей - Key4, Key5, Key6. Токоограничительные резисторы я опустил для простоты.

Идея проста как апельсин...
3 линии и 6 кнопок...
Задача делится на 3 части:
1 - все 3 линии на прием с pull up и опрашиваем их. Ксли замкнута хотябы одна кнопка, сажающая одну из линий на массу, то мы это видим и считываем код клавиши.
2 - второй шаг - ждем, когда отпущена (или не нажималась) кнопка (шаг 1) и программируем одну из 3 линий на передачу и выставляем там "0". опррашиваем 2 оставшиеся линии на предмет замкнутости 2 кнопок, соединяющих эти 2 линии с той, что мы перевели в "0".
3 - последний шаг, переводим на передачу и втиорую из трех линий и "0". и смотрим на состояние третей линии, которое определяется положением 6-й кнопки, которая соединяет вторую и третью линии.
Это по схеме, приведенной автором.
вот такой нехитрый алгоритм.
При этом важно, что к каждому следующему шагу переходим только в том случае, если на предыдущем шаге не обнаружено нажатий.
Go to the top of the page
 
+Quote Post
Dog Pawlowa
сообщение Jul 18 2008, 14:58
Сообщение #7


Гуру
******

Группа: Свой
Сообщений: 2 702
Регистрация: 14-07-06
Пользователь №: 18 823



Цитата(prottoss @ Jul 18 2008, 16:54) *
Привет всем! Встала необходимость реализовать подобную клаву (на 3 линиях 6 кнопок) на МК

Тут главное диоды в развязке матрицы не забыть. А то ложные нажатия и прочие радости обеспечены.


--------------------
Уходя, оставьте свет...
Go to the top of the page
 
+Quote Post
prottoss
сообщение Jul 18 2008, 15:56
Сообщение #8


Гуру
******

Группа: Свой
Сообщений: 2 720
Регистрация: 24-03-05
Пользователь №: 3 659



Цитата(Dog Pawlowa @ Jul 18 2008, 22:58) *
Тут главное диоды в развязке матрицы не забыть. А то ложные нажатия и прочие радости обеспечены.
А зачем здесь диоды?

Возможно, у меня сомнения, от моего недопонимания работы процессора. Я работаю всего лишь полгода с ним. В форуме как то проскакивали реплики, про то, что не возможно махать ногами, как в АВР, к примеру. Но я не вдавался в тему, потому как это было не надо. Смотрю даташит, но не пойму - почему.



Цитата(uriy @ Jul 18 2008, 22:43) *
Вроде должно работать! Только с нажатием нескольких кнопок вроде сложновато. А в чем в данном случае принципиальное отличие SAM от AVR? Опередили пока писал.
Несколько кнопок нажимать не надо, только фиксирование нажатия одной кнопки


--------------------
Go to the top of the page
 
+Quote Post
YAM
сообщение Jul 18 2008, 16:47
Сообщение #9


Местный
***

Группа: Свой
Сообщений: 256
Регистрация: 7-07-04
Из: Ukraine
Пользователь №: 291



Можно вообще одной ногой все кнопки обрабатывать, если она - вход АЦП... smile.gif


--------------------
Go to the top of the page
 
+Quote Post
prottoss
сообщение Jul 18 2008, 17:02
Сообщение #10


Гуру
******

Группа: Свой
Сообщений: 2 720
Регистрация: 24-03-05
Пользователь №: 3 659



Цитата(YAM @ Jul 19 2008, 00:47) *
Можно вообще одной ногой все кнопки обрабатывать, если она - вход АЦП... smile.gif
Можно, но я пытаюсь обсудить то, что написано в заголовке темы. Другие варианты в данном случе не приемлемы.


--------------------
Go to the top of the page
 
+Quote Post
Deka
сообщение Jul 19 2008, 08:08
Сообщение #11


Местный
***

Группа: Свой
Сообщений: 248
Регистрация: 18-07-06
Из: Сочи
Пользователь №: 18 890



Цитата(prottoss @ Jul 18 2008, 21:02) *
Можно, но я пытаюсь обсудить то, что написано в заголовке темы. Другие варианты в данном случе не приемлемы.


Вот так у меня организован опрос блока джамперов для AVR на ассемблере. Может пригодится...

Код
[font="Courier"]; PORT D
;
; bModeB1 ------0 -2- 0---+
;                         |
;               3     1   |
;                         |
; bModeB2 ------0 -4- 0---+
;                         |
;               5     1   |
;                         |
; bModeB3 ------0 -6- 0---+
;                        _|_
;
; Выбор времени работы клапана
; Возможные значения: 10, 20, 30, 40, 50 или 60 секунд.
;
; bModeB1, bModeB2 и bModeB3 подтянуты к напряжению питания при помощи внутренних резисторов МК.
; Перемычка может занять одно из 7-ми положений.
; Если bModeB1, bModeB2 и bModeB3 не замкнуты на землю и не замкнуты между собой - выбран режим № 1
; Если bModeB1 замкнут перемычкой на "землю" - выбран режим № 2
; Если bModeB2 замкнут перемычкой на "землю" - выбран режим № 4
; Если bModeB3 замкнут перемычкой на "землю" - выбран режим № 6
; Если bModeB2 замкнут перемычкой с bModeB1 - выбран режим № 3
; Если bModeB2 замкнут перемычкой с bModeB3 - выбран режим № 5
;
;.def  ModeB  = R20  ; Режим работы B (10, 20, 30, 40, 50 или 60 секунд)
;
GetTimeB:
;---------------------------------------;
_TestBM2:             ; Тестирование линии B1 - режим № 2
   sbic PinD, bModeB1 ; Пропустить следующую команду, если bModeB1 = 0
   rjmp _TestBM4      ; Иначе перейти к тестированию линии B2 - режим № 4
   ldi  Temp, 20      ; Выбран режим № 2 - 20 секунд
   rjmp _GetTimeB     ; Выход
_TestBM4:             ; Тестирование линии B2 - режим № 4
   sbic PinD, bModeB2 ; Пропустить следующую команду, если bModeB2 = 0
   rjmp _TestBM6      ; Иначе перейти к тестированию линии B3 - режим № 6
   ldi  Temp, 40      ; Выбран режим № 4 - 40 секунд
   rjmp _GetTimeB     ; Выход
_TestBM6:             ; Тестирование линии B3 - режим № 6
   sbic PinD, bModeB3 ; Пропустить следующую команду, если bModeB3 = 0
   rjmp GetExTimeB    ; Иначе тестируем линии B2 & B1 - режим № 3
   ldi  Temp, 60      ; Выбран режим № 6 - 60 секунд
   rjmp _GetTimeB     ; Выход
;---------------------------------------;
GetExTimeB:           ; *** ВХОД В РАСШИРЕННЫЙ РЕЖИМ ***
   cbi  PortD, bModeB2; Установить логический 0 на выходе bModeB2
   sbi  DDRD, bModeB2 ; Установить bModeB2 как выход
   rjmp PC+1          ; Подождать установки уровня
;-------------------------------;
_TestBM3:             ; Тестирование линии B2 & B1 - режим № 3
   sbic PinD, bModeB1 ; Пропустить, если bModeB1 = 0 - режим № 3
   rjmp _TestBM5      ; Иначе тестируем линии B2 & B3 - режим № 6
   ldi  Temp, 30      ; Выбран режим № 3 - 30 секунд
   rjmp _GetExTimeB   ; Выход
_TestBM5:             ; Тестирование линий B2 & B3 - режим № 5
   sbic PinD, bModeB3 ; Пропустить, если bModeB3 = 0 - режим № 5
   rjmp _TestBM1      ; Иначе тестируем линии B1 & B2 & B2 - режим № 1
   ldi  Temp, 50      ; Выбран режим № 5 - 50 секунд
   rjmp _GetExTimeB   ; Выход
_TestBM1:             ; Тестирование линий B1 & B2 & B3 - режим № 1
   ldi  Temp, 10      ; Выбран режим № 1 - 10 секунд
;-------------------------------;
_GetExTimeB:          ; *** ВЫХОД ИЗ РАСШИРЕННОГО РЕЖИМА ***
   cbi  DDRD, bModeB2 ; Установить bModeB2 как вход
   sbi  PortD, bModeB2; Установить логический 1 (подтягивающий резистор) для bModeB2
;---------------------------------------;
_GetTimeB:
   ret
;[/font]
Go to the top of the page
 
+Quote Post
proba
сообщение Jul 19 2008, 08:45
Сообщение #12


Местный
***

Группа: Участник
Сообщений: 358
Регистрация: 29-05-05
Пользователь №: 5 526



последовательно всеми Key стоит ставить резисторы несколько к-ом, тогда возможно незавимимыи опрос всех клавиш, т.е. можно наити несколько одновременно нажатых кнопок. если последовательно с key1..key3 ставить диоды, то можно добавить еще 3 клавиш, где диоды в противоположном направлениии в отношении key1..key3.

Сообщение отредактировал proba - Jul 19 2008, 08:50
Go to the top of the page
 
+Quote Post
_Pasha
сообщение Jul 19 2008, 11:01
Сообщение #13


;
******

Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509



[attachment=22935:attachment]
Go to the top of the page
 
+Quote Post
Dog Pawlowa
сообщение Jul 19 2008, 16:36
Сообщение #14


Гуру
******

Группа: Свой
Сообщений: 2 702
Регистрация: 14-07-06
Пользователь №: 18 823



Цитата(prottoss @ Jul 18 2008, 18:56) *
А зачем здесь диоды?
Возможно, у меня сомнения, от моего недопонимания работы процессора. ...

А при чем тут процессор?

В любой матрице без диодов при трех нажатых кнопках автоматически генерируется четвертое нажатие. Поводите карандашом по схеме.
Посмотрите схемы матричных клавиатур.

Гугл нашел, я даже не смотрел, что написано ...http://kazus.ru/articles/405.html


--------------------
Уходя, оставьте свет...
Go to the top of the page
 
+Quote Post
prottoss
сообщение Jul 19 2008, 17:29
Сообщение #15


Гуру
******

Группа: Свой
Сообщений: 2 720
Регистрация: 24-03-05
Пользователь №: 3 659



Цитата(Dog Pawlowa @ Jul 20 2008, 00:36) *
А при чем тут процессор?
Да, наверное не при чем... Наверное я просто испугался того, чего не виделsmile.gif

Цитата(Dog Pawlowa @ Jul 20 2008, 00:36) *
В любой матрице без диодов при трех нажатых кнопках автоматически генерируется четвертое нажатие. Поводите карандашом по схеме. Посмотрите схемы матричных клавиатур.
Мне нужно отслеживать только единичные нажатия.


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

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

 


RSS Текстовая версия Сейчас: 21st July 2025 - 09:25
Рейтинг@Mail.ru


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