Страница 1 из 2
1 нога 5 кнопок
Добавлено: Сб янв 30, 2010 00:58:29
GRafGRay
Здравствуйте уважаемые!
Вопрос следующий:
имею контроллер тини13, с единственной свободной ногой PB2. Задача состоит в том, чтоб прикрутить к этому контроллеру 5 кнопок.
была идея прикрутить кнопки через резисторы, образующие делитель, соответственно использовать АЦП. Но, к своему стыду, в своих поделках как-то умудрялся обходиться без АЦП, а посему пока недоумеваю.
Посему интересно, возможна ли вообще такая реализация идеи с этим контроллером?
Может есть другое, более оригинальное решение?
Собственно схема безобразия в прикрепленном файле. Там к "свободной" ноге уже прикручен упомянутый делитель. Единственная оговорка, если у кого вопрос возникнет, на PB1 в железе уже висит датчик холла.
Добавлено: Сб янв 30, 2010 01:11:43
12val12
à ó âàñ ñ ðåãèñòðà ñäâèãà 4 ñâîáîäíûõ íîãè
ìîæíî ñèëüíî èçâðàòèòüñÿ è ïîöåïèòü êíîïêè ìåæäó
PB2 è òåìè âûõîäàìè ðåãèñòðà è ïîñëåäîâàòåëüíî îïðàøèâàòü
ïîñûëàÿ íà òå íîãè ïîñëåäîâàòåëüíî 1
åñòâåâñòâåííî ïîâòîðÿÿ âåñü öèêë âûâîäà çíàêîâ íà èíäèêàòðû ..ìóòîðîøíî
íî ðåàëüíî
Добавлено: Сб янв 30, 2010 01:21:24
GRafGRay
интересно,
но если я правильно понял, то 4 свободных ноги регистра - это 4 кнопки получится? а надо 5

Добавлено: Сб янв 30, 2010 01:42:08
Igor_67
По вашей схеме все правильно, но ADC все же придется использовать. Если пишите в среде CodeVisionAVR, то вам можно посмотреть здесь:
http://datagor.ru/microcontrollers/page ... st-3..html
Re: 1 нога 5 кнопок
Добавлено: Сб янв 30, 2010 03:36:59
avreal
GRafGRay писал(а):Здравствуйте уважаемые!была идея прикрутить кнопки через резисторы, образующие делитель, соответственно использовать АЦП.
...
Посему интересно, возможна ли вообще такая реализация идеи с этим контроллером?
Может есть другое, более оригинальное решение?
Запросто и неоднократно. По приведенной схеме внимательно надо, так как там выходит нелинейный шаг по напряжению от номера нажатой кноки. Но для 4-5 кнопок это не проблема. Я так цеплял до 18 кнопок, но тогда резисторы в цепочке все были разные, увеличивающиеся по мере удаления от контроллера.

Это висело на atmega8 на аналоговом входе 7. Так хитро нарисовано чтобы на схеме клавиатура имела то же расположение кнопок, что и на плате, ну и огрыщки других деталей я прост стёр.
По линейке резисторов там ещё три или четыре кнопки можно навесить со стандартным рядом резисторов. Если считать на худший случай, вот все резисторы кроме одного пошли, к примеру, в плюс на максимум, а один - в минус, то желатльно 1% резисторы, реально на 5% работает.
Ещё можно так - распереть делитель между землёй и питанием, а на вход подать общую точку кнопок. Прошу прощения за вывернутые подписи - в реальной схеме кнопки были вытянуты по вертикали, я просто повернул, чтобы не растягивало пост.

Это опять шло на "отдельный" аналоговый вход мега8 (AI6 или AI7), поэтому, чтобы не плавало при ненажатых кнопках, подвязано к питанию, иначе наводка вместе с утечками могут организовать "нажатия". Если нога "универсальная", то можно включить внутренний pull-up и выключать его на время измерения.
Недостаток - делитель жрёт постоянно. Но это не всегда страшно.
Ещё одновремённое нажатие двух кнопок в первом варианте даёт одну - которая ближе к контроллеру, а тут - может отреагировать как на какую-то между нажатыми.
Достоинство - да хоть тридцать кнопок, резисторы все одинаковые.
Более оригинальное решение есть, но всё равно с АЦП
http://www.edn.com/contents/images/6360317.pdf
всего восемь резисторов двух номиналов для 16 кнопок.
Добавлено: Сб янв 30, 2010 04:01:51
avreal
GRafGRay писал(а):интересно,
но если я правильно понял, то 4 свободных ноги регистра - это 4 кнопки получится? а надо 5

7-ю ножку тини13 можно вообще свободной оставить. После стробирования регистров по входам перезаписи из сдвигового в хранящий вход данных и вход сдвига могут иметь любое состояние.
С общих выводов кнопок на 2 и 3 ноги тини13 подаём сигнл через резисторы. Во время записи в регистры они не мешают, потом даём импульс перезаписи, переводим 2 и 3 ноги на входы, считываем кнопки, переводим опять на выходы. Кнопки так же динамически опрашиваются, как индикаторы засвечиваются. Повесить можно явно больше пяти
А PB2 пусть остаётся. Ещё пригодится.
Добавлено: Сб янв 30, 2010 08:54:20
b612
во во на регистр можно хоть 8 хоть ещё 32 кнопки повешать. а на ту несчастную ножку лучше звук вывести
Добавлено: Сб янв 30, 2010 10:31:55
GRafGRay
Спасибо всем за отклики!
<b>to Igor_67</b>
Идею собственно от туда и содрал

вот только с "Ссями" я в контрах, мне бы в асме это победить.
<b>avreal</b> !!!! спасибо! у меня как буд-то глаза раскрылись.
Из 3х предложенных вариантов, мне более глянулись 2ой (с делителем) и 3ий (а-ля матрица).
Насчёт делителя, что жрет он постоянно .... ну жрать то он будет мизер, а устройство будет работать время-от-времени, постоянно не будет включено

по-сему меня это очень устраивает, да и резюки подбирать не так геморно
насчёт матричной клавы - где-то я кажется видел похожую реализацию, но из головы как обычно вылетело. В моем случае я так понимаю это 3 резистора 6 кнопок и одна нога контроллера - вроде то, что доктор прописал.
Теперь за АЦП, начну из далека

в Тин13 нога AREF отсутствует, соответственно прийдётся ещё городить какой-то "суммирующий усилитель, который будет вырабатывать некоторые напряжения и поочередно сравнивать их с напряжением на аналоговом входе"?
но даже если так, все-равно 1ой ноги не хватает.
Насчёт кнопок на 2ую и 3ю ногу МК и чтоб 7ая ещё осталась - это использование матричной клавы, без использования АЦП?
Т.е., если я правильно понимаю, то на 4 неиспользованные ноги регистра прикручиваем строки матрицы, а столбцы прикручиваем к ногам 2 и 3 контроллера, подтянув их резисторами к питанию.
В таком разе, теоретически можно строки матрицы вешать и на занятые ноги регистров?
Добавлено: Сб янв 30, 2010 13:21:07
GP1
Добавлено: Сб янв 30, 2010 14:07:32
avreal
GRafGRay писал(а):в Тин13 нога AREF отсутствует, соответственно прийдётся ещё городить какой-то "суммирующий усилитель, который будет вырабатывать некоторые напряжения и поочередно сравнивать их с напряжением на аналоговом входе"?
Ничего не надо, включить опору от собственного питания и всё будет работать, кнопки выдают напряжение, являющееся некоторой долей питания и АЦП меряет долю питания. Это называется "ратиометрический метод", зависимость от питания исключается самим подходом.
GRafGRay писал(а):Насчёт кнопок на 2ую и 3ю ногу МК и чтоб 7ая ещё осталась - это использование матричной клавы, без использования АЦП?
...
В таком разе, теоретически можно строки матрицы вешать и на занятые ноги регистров?
Да, матричная клава. Можно и на занятые, но на тот регистр, который кормит сегменты - просто немного неудобно. На регистре общих бегущая "1"-ка или "0"-ик в зависимости от "полярности" выбранного индикатора и опрос органично вписывается в динамическую индикацию. А если задействовать оба регистра, то надо в конце цикла индикации сделать пробежку по всем 16 выходам отдельным циклом.
Добавлено: Сб янв 30, 2010 14:28:57
neon-f
Добавлено: Сб янв 30, 2010 14:34:18
GRafGRay
Спасибо, нашел Вашу там работу - очень впечатляет и главное к моему вопросу с АЦП ответы имеюцца, буду вникать.
<b>to avreal</b>
Спасибо за помощь

Осталось мне ещё раз хорошенько покумекать и решить на каком варианте остановиться.
<b>UPD:</b>
Ну вроде определился, повешу наверное 8 кнопок через регистр, схему прилагаю. Думаю лишних 3 не помешает, мож со временем добавлю какие-нить действия к ним.
Прошу покритиковать

.
Насчёт резисторов правда есть сомнения ... хотя ...
Добавлено: Пн фев 01, 2010 23:02:16
GRafGRay
Да простят меня модераторы за повторный пост, (он на самом деле уже 3ий), но если не повторять - то вверх он не поднимется
вообщем так, клавиатуру я победил, схему прилагаю (разница в подключении резисторов).
есть такая противная вещь как дребезг кнопок и сопельки на индикаторах. Сопельки или тянучки - побеждать я научился - в динамике перед включением очередного сегмента - тушу все буквально на 4 такта - этого хватает чтоб цифры друг за дружкой тускло не тянулись на другие индикаторы.
Дребезг вроде как тоже победил, но .... от многократного выполнения одного и того же действия избавился, а вот от соплей при дребезге - не могу. Дело в том, что по нажатию на кнопку прога просто вычисляет её код и выполняется дальше, соответственно (в моем случае) если момент нажатия на кнопку совпадает с моментом вывода на индикаторы, получается что на регистры с двух сторон идет инфа, напрямую с контроллера и через резюки с клавиатуры. Отсюда видимо и мусор на индикаторах.
Вот и получается что дребезг кнопок не влияет на ход выполнения программы никоим образом, а вот глаза мазолит тусклым мусором на индикаторах.
Кто с талкивался с подобным, какие могут быть варианты решения?
Добавлено: Пн фев 01, 2010 23:29:54
avreal
R3, R4 увеличить до килоом так 4,7..10.
R5, R6 убрать
Между общими "колонками" кнопок и линиями от микроконтроллера до SH_CP и DS и далее до R3, R4 - врезать по килоому.
В "мягких" условиях можно R3, R4 убрать совсем, обойдясь внутренними pull-up микроконтроллера, не забывая их включать при переводе на входы. Резисторы от клавиатуры на выводы микроконтроллера при этом можно увеличить до 3..4,7к.
Добавлено: Вт фев 02, 2010 00:07:05
GRafGRay
R3, R4 в реале стоит по 1,5кОм
пробовал прикручивать к ним еще один на 10кОм в разрыв между точкой соединиения этих резисторов и питанием - не помогло, набоборот появились ложные срабатывания клавиш
R5, R6 убрал давно, вторая схема больше приближена к идеалу, разница только в номиналах деталей
Между общими "колонками" кнопок и линиями от микроконтроллера до SH_CP и DS и далее до R3, R4 - врезать по килоому.
а вот это я что-то не совсем вкурил .... на второй схеме R7 и R8 - Вы о них говорите?
Добавлено: Вт фев 02, 2010 01:10:41
avreal
GRafGRay писал(а):R5, R6 убрал давно, вторая схема больше приближена к идеалу, разница только в номиналах деталей
Надо ж было хоть по разному назвать картинки, хотя бы 1.gif и 2.gif.
Я только первую и посмотрел.
GRafGRay писал(а):Между общими "колонками" кнопок и линиями от микроконтроллера до SH_CP и DS и далее до R3, R4 - врезать по килоому.
а вот это я что-то не совсем вкурил .... на второй схеме R7 и R8 - Вы о них говорите?
Ну я их предлагал немного в другое место поставить, "вертикально" от кнопок к этим линиям, в разрыве которых они сейчас стоят. Но это несущественно.
500 Ом маловато, конечно, такие токи там не нужны, я бы килоом поставил или больше даже. Но работать должно бы, 10мА тини при выводе на индикатор потянет легко, да и hc595 ещё и не выдаст их.
Вот так работает. Резистор на каждую кнопку свой потому, что сканирование кнопок идёт теми же выходами, что и сканирование индикатора. Вот они для того, чтобы не дрались выходы контроллера между собой и не открывалось несколько "общих" транзисторов при нажатии нескольких кнопок одновремённо.
У Вас для клавиатуры используются другие выходы регистра и нажатие нескольких кнопок сразу только даст повышенные токи выходов регистра (всё равно будут меньше, чем идут в базы транзисторов). Так что с одним резистром на группу кнопок могут быть только неправильное определени нажатий, но на индикации отражаться не должно.
p.s. Ваши схемы в формате png занимают в три раза меньше места, чем в gif. Я конечно понимаю, что интернет нонче быстрый и диски большие, но... потом сами ругаем всех других, что компы всё быстреют, а работает всё как и раньше медлено 
Добавлено: Вт фев 02, 2010 21:11:12
GRafGRay
что то увеличение сопротивления резисторов не помогает ... собрано на макетке, посему втыкать-подбирать резюки не проблема, вот тьолько все без толку.
R7 и R8 увеличил до 4,7кОм, при этом сохраняется работоспособность, выше уже ложные срабатывания. А результат тотже, на индикторах во время нажатия все сегменты дорисовываются до нуля, а если на сегменте отображается какая-то цифра - то и "тянучка" этой цифры по всем сегментам (например на одном из сегментов была тройка, дык тянучка идёт нулем и тройкой сразу - т.е восьмерка.)
еще не совсем ясно, точки в индикаторах не используются, но к регистру подключены. Почему в таком разе они в тянучках не участвуют?
Добавлено: Вт фев 02, 2010 22:07:13
GP1
на время опроса кнопок и загрузки данных в регистры надо отключать индикацию, для этого используй OE
зы: а способ с АЦП так и не хочешь попробовать?
Добавлено: Вт фев 02, 2010 22:48:58
GRafGRay
GP1 писал(а):на время опроса кнопок и загрузки данных в регистры надо отключать индикацию, для этого используй OE
зы: а способ с АЦП так и не хочешь попробовать?
вы имеете ввиду повесить OE на свободную ногу контролеера?
Способ с АЦП обязательно попробую, бо надо научиться, но видимо уже не в этом проекте.
<b>UPD</b> отключал индикацию как рекомендовали, пока не помогает.
Дело в том, что отключением OE второго регистра, я ведь и клаву отключаю, соответственно сканировать отключенную клаву как-то не камильфо. Посему щелкаю ОЕ только на первом регистре - который код в сегменты пересылает. Тож не помогло.
Добавлено: Ср фев 03, 2010 08:53:43
GP1
GRafGRay писал(а):
вы имеете ввиду повесить OE на свободную ногу контролеера?
ну да пока грузишь регистры отключаешь выходы, загрузил подключил, и ни каких тянучек, и с клавой то же самое.