Страница 1 из 2
Подключение кнопок через АЦП
Добавлено: Ср мар 21, 2012 13:57:28
MS24
Ребят, столкнулся с такой проблемой, Смог подключить только 4 кнопки к ацп, хотя нужно подключить гораздо больше, именно 21, знаю, что считывать с входов ацп нужно записью в ADMUX, но никак не могу понять, как это сделать, подскажите пожалуйста.
Re: Подключение кнопок через АЦП
Добавлено: Ср мар 21, 2012 16:53:33
MS24
Или может кто нибуль подскажет, как к одному порту можно подключить много кнопок?
Re: Подключение кнопок через АЦП
Добавлено: Ср мар 21, 2012 17:25:24
Engineer_Keen
Программу внимательно не смотрел, вроде структура верная. Возможно надо поколдовать с порогами (с которыми сравниваются значения АЦП).
Подключал 20 штук, работало, можно и больше. Главное чтобы номиналы резисторов были поточнее, хотя у меня 5% стояли.
Re: Подключение кнопок через АЦП
Добавлено: Ср мар 21, 2012 17:54:25
MS24
А свой исходник дать не можешь? Или может расскажешь как ты подключал?
Re: Подключение кнопок через АЦП
Добавлено: Ср мар 21, 2012 18:01:00
MS24
А свой исходник дать не можешь? Или может расскажешь как ты подключал?
Re: Подключение кнопок через АЦП
Добавлено: Ср мар 21, 2012 18:15:04
Engineer_Keen
Исходника сейчас нет, система голая (только поставил), документы где-то в общем бардаке затерялись... Но схема была самая обычная.
Re: Подключение кнопок через АЦП
Добавлено: Ср мар 21, 2012 18:49:01
MS24
В общем у меня задача, что бы кнопки зажигали диоды. Но портов не хватает на всю систему. Я думаю настроить кнопки через АЦП, остальные порты освободиь для диодов. Думаю сделать так, считываю пин порта ( в атмеге 128 АЦП подключен к порту F) и если на него подано напряжение, то запускаем АЦП и находим через уровень напряжения какая кнопка нажата, иначе сканируем след пин и так далее, узнав какая кнопка нажата зажигаем диод. Может поможешь с реализацией? У меня сроки горят, а я совем новичек.
Re: Подключение кнопок через АЦП
Добавлено: Ср мар 21, 2012 21:59:22
s64
если просто зажигать диоды от кнопки, то можно проще - т.к. каждый пин может быть и входом и выходом, то настраиваем пины на выход в состоянии "1", led при этом не светится. Каждые 20-50мСек переводим порт в состояние вход с подтяжкой и проверяем на 0xff ну или каждый пин в отдельности на "0" (в случае если кнопка нажата) После проверки возвращаем порт в исходное состояние и если кнопка была нажата, соответствующий пин переводим в "0" вот led и загорелся. Есть один недостаток - led всегда будет загораться пока нажата кнопка, даже если повторным нажатием он должен выключаться. Если интересно могу поискать исходники
под все это безобразие, делал давно, сразу не найду.
Re: Подключение кнопок через АЦП
Добавлено: Ср мар 21, 2012 22:18:57
Smoker
Есть микросхемы специально предназначенные для управления светодиодами типа М66313FP у нее последовательный вход для сигнала и параллельный выход на 32 светодиода. 15-20 портов + 5 микросхем = 160 светодиодов. И разводку легче делать, так как к микросхеме только 3-4 проводника вести.
Re: Подключение кнопок через АЦП
Добавлено: Чт мар 22, 2012 08:37:34
Engineer_Keen
Вот мой вариант.
Код:
Код: Выделить всё
CLR KEY_CODE
IN R16,ADCH ;читаем АЦП
LSR R16 ;делим на 8, с меньшими числами проще работать
LSR R16
LSR R16
INC ADC_CHANNEL ;переключаем номер канала
ANDI ADC_CHANNEL,0x01 ;
BREQ READ1 ;если 1-й читаем кнопки
RJMP READ2 ;если 0-й - переменный резистор
READ1: CPI R16,0x00 ;0 - кнопки не нажаты
BRNE K01
RJMP NO_KEY
K01: CJNE R16,0x01,PC+3 ;первая кнопка (cjne - макрос: CJNE="CPI @0,@1"+"BRNE @2")
LDI KEY_CODE,KEY_ENTER
RJMP KEY_0
K02: CJNE R16,0x02,PC+3 ;вторая
LDI KEY_CODE,KEY_JOGR
RJMP KEY_0
K03: CJNE R16,0x03,PC+3 ;третья
LDI KEY_CODE,KEY_JOGL
RJMP KEY_0
[...]
K22: CJNE R16,0x1C,PC+3
LDI KEY_CODE,KEY_CH2
RJMP KEY_0
K23: CJNE R16,0x1E,PC+3
LDI KEY_CODE,KEY_CH1
KEY_0:
SBI GPIOR0,KEY_PRESSED ;ставим флаг что кнопка была нажата
NO_KEY:
OUTI ADMUX,0x00 ;переключаем канал (0)
RETI
После строки READ2 идет примерно такая-же структура, только с другими кодами и в конце АЦП переключается на 1-й канал...
А вот так подключены кнопки:
Re: Подключение кнопок через АЦП
Добавлено: Чт мар 22, 2012 15:50:18
Cat
Для чего использовать АЦП? Как же матричная клавиатура?
Re: Подключение кнопок через АЦП
Добавлено: Чт мар 22, 2012 15:53:18
Engineer_Keen
Cat писал(а):Для чего использовать АЦП? Как же матричная клавиатура?
Че, много портов лишних есть?

Re: Подключение кнопок через АЦП
Добавлено: Чт мар 22, 2012 15:58:28
Cat
Engineer_Keen писал(а):
Че, много портов лишних есть?

Тоже мне, нашли дефицит. А что покажет АЦП если нажать сразу несколько кнопок? Резисторы надо подбирать... ИМХО матричная проще, хотя я может малость не в теме.
Re: Подключение кнопок через АЦП
Добавлено: Чт мар 22, 2012 16:01:45
Engineer_Keen
Ну да, фигню покажет, но это же для в основном для ПДУ используется, а не для синтезаторов, так что все нормально. Ну а резисторы, это еще как программу написать, у меня 5% работают...
Re: Подключение кнопок через АЦП
Добавлено: Чт мар 22, 2012 16:07:23
Cat
Как с надежностью данного решения?
Вот такое милое изделие, 140 руб, займет всего 8 ножек.
http://chip-nn.ru/find.php?f=%EA%EB%E0% ... 2%F3%F0%E0
Re: Подключение кнопок через АЦП
Добавлено: Чт мар 22, 2012 16:24:18
Engineer_Keen
Cat писал(а):Как с надежностью данного решения?
Ну, год работает, сбоев нет, правда в комнатных условиях. Там изначально 3 пальчика AA, т.е. питание 4.5В, при нажатии контроллер еще белым светиком (Vf=3V) моргает, так вот когда батарейки садятся так что он уже не моргает, кнопки все равно пашут
А у меня всего 6 ножек, из них 1 ресет, 1 светодиод, 2 для RS485 (TX+R/W), остается 2

Ну не ставить же другой контроллер, да и кнопки элементарно разводятся на плате.
Re: Подключение кнопок через АЦП
Добавлено: Чт мар 22, 2012 17:11:07
ramid
MS24 писал(а):как к одному порту можно подключить много кнопок?
Теоретически -
как здесь,
или здесь
Re: Подключение кнопок через АЦП
Добавлено: Чт мар 22, 2012 18:43:36
eufs
Лучше светодиоды подключить через сдвиговые регистры, а кнопки матрицей. Через АЦП и резисторы больше десятка кнопок лучше не подключать, потому что возрастают требования к их контактам.
Re: Подключение кнопок через АЦП
Добавлено: Чт мар 22, 2012 20:15:29
radteh
Cat писал(а):Как с надежностью данного решения?
ты про АЦП? Если да, то такое решение стоит в некоторых автомагнитолах, кнопки на руле, передние анели телевизоров.
Re: Подключение кнопок через АЦП
Добавлено: Пт мар 23, 2012 22:14:01
GP1
ramid писал(а):MS24 писал(а):как к одному порту можно подключить много кнопок?
Теоретически -
как здесь,
или здесь
Почему теоретически?
Проверено работает!
