|
Клавиатура 3 линии 6 кнопок на линиях АРМ, возможно ли реализовать |
|
|
|
Jul 18 2008, 14:31
|

Гуру
     
Группа: Свой
Сообщений: 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. Токоограничительные резисторы я опустил для простоты.
--------------------
|
|
|
|
|
Jul 18 2008, 14:39
|

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

|
Цитата(prottoss @ Jul 18 2008, 15:54)  легко реализуем, к примеру, на AVR. НО есть сомнения, что такое возможно соорудить на вышеназванном камне. Какие, простите, проблемы могут возникнуть при реализации оного на любом контроллере? Какой из контроллеров не может изображать opendrain и считывать состояние выхода, или переключать вход/выход? А вообще нормальнее использовать дополнительно 6 диодов/сборок и банально считывать код нажатой кнопки без дополнительных телодвижений, если, конечно не ставить задачу получить еще и нажание комбинаций кнопок.
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
Jul 18 2008, 14:50
|
Местный
  
Группа: Свой
Сообщений: 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-й кнопки, которая соединяет вторую и третью линии. Это по схеме, приведенной автором. вот такой нехитрый алгоритм. При этом важно, что к каждому следующему шагу переходим только в том случае, если на предыдущем шаге не обнаружено нажатий.
|
|
|
|
|
Jul 18 2008, 15:56
|

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

|
Цитата(Dog Pawlowa @ Jul 18 2008, 22:58)  Тут главное диоды в развязке матрицы не забыть. А то ложные нажатия и прочие радости обеспечены. А зачем здесь диоды? Возможно, у меня сомнения, от моего недопонимания работы процессора. Я работаю всего лишь полгода с ним. В форуме как то проскакивали реплики, про то, что не возможно махать ногами, как в АВР, к примеру. Но я не вдавался в тему, потому как это было не надо. Смотрю даташит, но не пойму - почему. Цитата(uriy @ Jul 18 2008, 22:43)  Вроде должно работать! Только с нажатием нескольких кнопок вроде сложновато. А в чем в данном случае принципиальное отличие SAM от AVR? Опередили пока писал. Несколько кнопок нажимать не надо, только фиксирование нажатия одной кнопки
--------------------
|
|
|
|
|
Jul 19 2008, 08:08
|
Местный
  
Группа: Свой
Сообщений: 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]
|
|
|
|
|
Jul 19 2008, 16:36
|
Гуру
     
Группа: Свой
Сообщений: 2 702
Регистрация: 14-07-06
Пользователь №: 18 823

|
Цитата(prottoss @ Jul 18 2008, 18:56)  А зачем здесь диоды? Возможно, у меня сомнения, от моего недопонимания работы процессора. ... А при чем тут процессор? В любой матрице без диодов при трех нажатых кнопках автоматически генерируется четвертое нажатие. Поводите карандашом по схеме. Посмотрите схемы матричных клавиатур. Гугл нашел, я даже не смотрел, что написано ...http://kazus.ru/articles/405.html
--------------------
Уходя, оставьте свет...
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|