Подключение кнопок через АЦП
Подключение кнопок через АЦП
Ребят, столкнулся с такой проблемой, Смог подключить только 4 кнопки к ацп, хотя нужно подключить гораздо больше, именно 21, знаю, что считывать с входов ацп нужно записью в ADMUX, но никак не могу понять, как это сделать, подскажите пожалуйста.
- Вложения
-
- main.c
- (2.21 КБ) 652 скачивания
- Реклама
Re: Подключение кнопок через АЦП
Или может кто нибуль подскажет, как к одному порту можно подключить много кнопок?
- Engineer_Keen
- Друг Кота
- Сообщения: 3872
- Зарегистрирован: Пт янв 29, 2010 10:27:40
- Откуда: Москва
Re: Подключение кнопок через АЦП
Программу внимательно не смотрел, вроде структура верная. Возможно надо поколдовать с порогами (с которыми сравниваются значения АЦП).
Подключал 20 штук, работало, можно и больше. Главное чтобы номиналы резисторов были поточнее, хотя у меня 5% стояли.
Подключал 20 штук, работало, можно и больше. Главное чтобы номиналы резисторов были поточнее, хотя у меня 5% стояли.
Re: Подключение кнопок через АЦП
А свой исходник дать не можешь? Или может расскажешь как ты подключал?
Re: Подключение кнопок через АЦП
А свой исходник дать не можешь? Или может расскажешь как ты подключал?
- Реклама
- Engineer_Keen
- Друг Кота
- Сообщения: 3872
- Зарегистрирован: Пт янв 29, 2010 10:27:40
- Откуда: Москва
Re: Подключение кнопок через АЦП
Исходника сейчас нет, система голая (только поставил), документы где-то в общем бардаке затерялись... Но схема была самая обычная.
Re: Подключение кнопок через АЦП
В общем у меня задача, что бы кнопки зажигали диоды. Но портов не хватает на всю систему. Я думаю настроить кнопки через АЦП, остальные порты освободиь для диодов. Думаю сделать так, считываю пин порта ( в атмеге 128 АЦП подключен к порту F) и если на него подано напряжение, то запускаем АЦП и находим через уровень напряжения какая кнопка нажата, иначе сканируем след пин и так далее, узнав какая кнопка нажата зажигаем диод. Может поможешь с реализацией? У меня сроки горят, а я совем новичек.
Re: Подключение кнопок через АЦП
если просто зажигать диоды от кнопки, то можно проще - т.к. каждый пин может быть и входом и выходом, то настраиваем пины на выход в состоянии "1", led при этом не светится. Каждые 20-50мСек переводим порт в состояние вход с подтяжкой и проверяем на 0xff ну или каждый пин в отдельности на "0" (в случае если кнопка нажата) После проверки возвращаем порт в исходное состояние и если кнопка была нажата, соответствующий пин переводим в "0" вот led и загорелся. Есть один недостаток - led всегда будет загораться пока нажата кнопка, даже если повторным нажатием он должен выключаться. Если интересно могу поискать исходники
под все это безобразие, делал давно, сразу не найду.
под все это безобразие, делал давно, сразу не найду.
- Вложения
-
- Безымянный.jpg
- схема примерно такая
- (112.53 КБ) 322 скачивания
Re: Подключение кнопок через АЦП
Есть микросхемы специально предназначенные для управления светодиодами типа М66313FP у нее последовательный вход для сигнала и параллельный выход на 32 светодиода. 15-20 портов + 5 микросхем = 160 светодиодов. И разводку легче делать, так как к микросхеме только 3-4 проводника вести.
Когда я был маленький, - микросхемы были большими. Имели четыре ножки и две ручки - для переноски.
- Engineer_Keen
- Друг Кота
- Сообщения: 3872
- Зарегистрирован: Пт янв 29, 2010 10:27:40
- Откуда: Москва
Re: Подключение кнопок через АЦП
Вот мой вариант.
Код:
После строки READ2 идет примерно такая-же структура, только с другими кодами и в конце АЦП переключается на 1-й канал...
А вот так подключены кнопки:
Код:
Код: Выделить всё
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
А вот так подключены кнопки:
- Вложения
-
- ADC_KEYS.PNG
- (25.62 КБ) 247 скачиваний
- Cat
- Электрический кот
- Сообщения: 1087
- Зарегистрирован: Вт май 05, 2009 10:43:42
- Откуда: Россия
- Контактная информация:
Re: Подключение кнопок через АЦП
Для чего использовать АЦП? Как же матричная клавиатура?
Боевой ватник.
- Engineer_Keen
- Друг Кота
- Сообщения: 3872
- Зарегистрирован: Пт янв 29, 2010 10:27:40
- Откуда: Москва
Re: Подключение кнопок через АЦП
Че, много портов лишних есть?Cat писал(а):Для чего использовать АЦП? Как же матричная клавиатура?
- Cat
- Электрический кот
- Сообщения: 1087
- Зарегистрирован: Вт май 05, 2009 10:43:42
- Откуда: Россия
- Контактная информация:
Re: Подключение кнопок через АЦП
Тоже мне, нашли дефицит. А что покажет АЦП если нажать сразу несколько кнопок? Резисторы надо подбирать... ИМХО матричная проще, хотя я может малость не в теме.Engineer_Keen писал(а): Че, много портов лишних есть?
Боевой ватник.
- Engineer_Keen
- Друг Кота
- Сообщения: 3872
- Зарегистрирован: Пт янв 29, 2010 10:27:40
- Откуда: Москва
Re: Подключение кнопок через АЦП
Ну да, фигню покажет, но это же для в основном для ПДУ используется, а не для синтезаторов, так что все нормально. Ну а резисторы, это еще как программу написать, у меня 5% работают...
- Cat
- Электрический кот
- Сообщения: 1087
- Зарегистрирован: Вт май 05, 2009 10:43:42
- Откуда: Россия
- Контактная информация:
Re: Подключение кнопок через АЦП
Как с надежностью данного решения?
Вот такое милое изделие, 140 руб, займет всего 8 ножек. http://chip-nn.ru/find.php?f=%EA%EB%E0% ... 2%F3%F0%E0
Вот такое милое изделие, 140 руб, займет всего 8 ножек. http://chip-nn.ru/find.php?f=%EA%EB%E0% ... 2%F3%F0%E0
Боевой ватник.
- Engineer_Keen
- Друг Кота
- Сообщения: 3872
- Зарегистрирован: Пт янв 29, 2010 10:27:40
- Откуда: Москва
Re: Подключение кнопок через АЦП
Ну, год работает, сбоев нет, правда в комнатных условиях. Там изначально 3 пальчика AA, т.е. питание 4.5В, при нажатии контроллер еще белым светиком (Vf=3V) моргает, так вот когда батарейки садятся так что он уже не моргает, кнопки все равно пашутCat писал(а):Как с надежностью данного решения?
А у меня всего 6 ножек, из них 1 ресет, 1 светодиод, 2 для RS485 (TX+R/W), остается 2Cat писал(а):Вот такое милое изделие, 140 руб, займет всего 8 ножек. http://chip-nn.ru/find.php?f=%EA%EB%E0% ... 2%F3%F0%E0
Re: Подключение кнопок через АЦП
Лучше светодиоды подключить через сдвиговые регистры, а кнопки матрицей. Через АЦП и резисторы больше десятка кнопок лучше не подключать, потому что возрастают требования к их контактам.
C0FFEE=12648430
Re: Подключение кнопок через АЦП
ты про АЦП? Если да, то такое решение стоит в некоторых автомагнитолах, кнопки на руле, передние анели телевизоров.Cat писал(а):Как с надежностью данного решения?
- GP1
- Поставщик валерьянки для Кота
- Сообщения: 2401
- Зарегистрирован: Пт май 23, 2008 19:32:22
- Откуда: Россия, Волгоград
- Контактная информация:
Re: Подключение кнопок через АЦП
Почему теоретически?
Проверено работает!



