Страница 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) моргает, так вот когда батарейки садятся так что он уже не моргает, кнопки все равно пашут :)
Cat писал(а):Вот такое милое изделие, 140 руб, займет всего 8 ножек. http://chip-nn.ru/find.php?f=%EA%EB%E0% ... 2%F3%F0%E0
А у меня всего 6 ножек, из них 1 ресет, 1 светодиод, 2 для RS485 (TX+R/W), остается 2 :P Ну не ставить же другой контроллер, да и кнопки элементарно разводятся на плате.

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 писал(а):как к одному порту можно подключить много кнопок?
Теоретически - как здесь, или здесь
Почему теоретически?
Проверено работает! :solder: