Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: SPI клавиатура
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > AVR
Мур
tort.gif В 1999 году, когда AVR только начинался боролись за каждую ножку. Как-то само собой получилось оригинальное решение на 8 кнопок. Идея понятна,-прогон унарного нолика по сдвиговому регистру. Поскольку аппаратно след нажатия собирается сам в регистре приёма,-программа предельно проста. Каждый это сделает легко, зная SPI...Ну а дальше 1533ИР31,-на 24 кнопки(как пример!)
Удобно, что разъём под SPI программирование-это уже и под клаву...
Рекомендую при плотном рессурсе!!! 1111493779.gif
rezident
Если это на отдельный SPI, то да, нормально. А если на этом SPI еще какое-то устройство, то в данной схеме на линии считывания не хватает буфера с Z-состоянием и входом разрешения.
Gall
Я делел аналогичное решение на 4 кнопки и 12 светодиодов (всего два регистра). Провод от кнопок завел на прерывание и сканировал только при возникновении оного. За счет этого паразитное мигание светодиодов было только в момент нажатия кнопки и очень ненадолго.
upc2
Еще 10 лет назад заставил 84 рик управлять ВВ79.
64 клавиши + 16 разрядный дисплей.
Kopa
Может на данный предмет стоит
пролистнуть книгу Шевкопляса "Микропроцессорные структуры и решения"
Как работать с кнопками много решений при нехватке линий ввода/вывода

P.S. Название книги мог немного перевратьsmile.gif
Мур
Ха! Это классика! biggrin.gif Тут речь об использовании свободного рессурса.. Причём встроенный механизм SPI облегчает програмное обслуживание! Традиционные клавиатуры Х*У сьедают память пространства кода и ВРЕМЯ выполнения...Тут не надо напрягаться. cranky.gif Только фпаг нажатия контролируй...
=GM=
Цитата(Мур @ Jul 5 2006, 07:41) *
В 1999 году, когда AVR только начинался боролись за каждую ножку. Как-то само собой получилось оригинальное решение на 8 кнопок. Идея понятна,-прогон унарного нолика по сдвиговому регистру. Поскольку аппаратно след нажатия собирается сам в регистре приёма,-программа предельно проста. Каждый это сделает легко, зная SPI...Ну а дальше 1533ИР31,-на 24 кнопки(как пример!)
Удобно, что разъём под SPI программирование-это уже и под клаву...


Отличная идея! Её можно распространить на использование матричных кнопок. Скажем, ставите второй столбец с кнопками (матрица 8 х 2) и мультиплексер на 2, который переключается с помощью SS. При необходимости, можно поставить мультиплексер, который переключается от фронта SS и т.п. Логика программы немного усложнится, конечно.
vesago
Спасибо! Применю по случаю.
Мур
excl.gif ***Как-то само собой получилось ,говоришь???***(Сам себе! tongue.gif )ХА!
Для полноты картины уместно подробнее расписать. Смотрю, народ умняки гоняет, потому и решил ещё раз повторить, что тут главное ИДЕЯ!
Стояли у меня для кормёжки катодов 4х семисегментных индикаторов пара ИР16(100мА!) на выходе SPI. Тут и ключи для перебора анодов...(Сразу предупреждаю, что в цикле сдвига все ключи отключаются,-подъём уровня на стыке между ИР16ми!!!)
Как всегда заказчику захотелось шось нажать... В итоге доп резистор и диодики по числу кнопок.
Програмка ненамного усложнилась, ну и индикаторы чуть туше стали. Вот так и было....
Ну а сейчас biggrin.gif у SPI появилась буферизация данных, регистры ТРIС595 от TI(для индикации) под боком. Ваяй!!!
При SPI-буферизации можно сгородить последовательный тендем отдельно индикация и клава без вынужденного гашения на все 16 бит(0xfe+cod_indication)...В приёмнике---> 0xкод нажатия+хх
Как говоритя,-нет предела совершенству!!!
Понятно, что здесь задействуется не только SPI...
Dibor
Это не SPI подключение, но тоже позволяет подключить 16 кнопок по 2 (3 с интераптом) проводам.
zltigo
Цитата(Мур @ Jul 5 2006, 11:41) *
...боролись за каждую ножку.

ADC есть почти у всех. К нему его-же опорник через R/2R резисторную матрицу и все это ОДИН вывод.
Кто меньше :-).
GetSmart
Не больше восьми кнопок тока sad.gif
zltigo
Цитата(GetSmart @ Jul 8 2006, 22:57) *
Не больше восьми кнопок тока sad.gif

Если эта ремарка по поводу использования ADC, то количество кнопок ограничено разрядностью и точностью ADC, что для 8-12 битовых ADC массово используемых в контроллерах позволяет фиксировать заметно больше 8 кнопок.
GetSmart
zltigo
Если не секрет, то сколько можно сделать кнопок?


Цитата
Кто меньше :-).

Меньше будет на общей шине I2C через PCF8574 или PCF8575.

Кто меньше?
sensor_ua
Например, 3х3
[url=http://www.ustr.net/electronics/akeys.shtml[/url]
а в автоаудио от Панасоника видал 21 кнопу на АЦПwink.gif
zltigo
Цитата(GetSmart @ Jul 8 2006, 23:33) *
Если не секрет, то сколько можно сделать кнопок?

Ну, например, на практически любом 12 битном до 256 кнопок (или их комбинаций) получится без особого напряга. Хватит?
Цитата
Меньше будет на общей шине I2C через PCF8574 или PCF8575.
Кто меньше?

Ну а I2C это _два_ провода, а если речь идет об расшаривании ресурса, то и ADC можно использовать для других целей в промежутках между разборками с кнопками.
Дале следуют I/O чипы с OW интерфейсом...
GetSmart
Цитата(zltigo @ Jul 9 2006, 02:47) *
...то и ADC можно использовать для других целей в промежутках между разборками с кнопками.

Без коментариев :-).

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

В I2C - легко!
sensor_ua
Цитата(GetSmart @ Jul 9 2006, 00:05) *
Цитата(zltigo @ Jul 9 2006, 02:47) *

...то и ADC можно использовать для других целей в промежутках между разборками с кнопками.

Без коментариев :-).

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

В I2C - легко!

Учимся читать
http://www.ustr.net/electronics/akeys.shtml
zltigo
Цитата(GetSmart @ Jul 9 2006, 00:05) *
Пардон, всё-таки я не понял, как можно использовать один вход АЦП для подключения двух и более источников сигнала, при этом не задействуя ни одного дополнительного выхода проца?

Ну, например, источники сигнала разных уровней - полдиапазона на кнопки, полдиапазона на контроль батареи. Кроме того, почему вывод именно всегда AЦП? Можно, например, периодически использовать как выход и светодиодиком моргать.. А можно и OW интерфейсик эмулировать...
Достаточно?
GetSmart
sensor_ua, учитесь сами читать. Повторить вопрос?

zltigo
Соглашусь, цеплять все кнопки на один вход АЦП - это нормально. Но туда же приделать контроль батареи или что ещё - извращение. Хотя, если покажете схему, то дело прояснится.
sensor_ua
Цитата(GetSmart @ Jul 9 2006, 00:43) *
sensor_ua, учитесь сами читать. Повторить вопрос?

Может, Вам и показался мой тон резким, но где Ваш вопрос? Сколько кнопок на АЦП - пишу, а Вы не читаете - пример даю с расчётами на 9 кнопок. То, что Вы категорично заявили, что больше 8-и (к чему интересно?) не получить, опровергнуто. Если можете предложить что-либо для обсуждения, а не предлагать разбираться в Вашем непонимании, прошу
GetSmart
sensor_ua
Мой вопрос понял zltigo, но не поняли Вы. Я не виноват. Что больше 8 кнопок можно я понял, но как это сделать в матрице R-2R я пока не догадался. Вашу схему посмотрел. Способна ли она обнаружить одновременное нажатие нескольких кнопок - пока не понял.
Цитата
Если можете предложить что-либо для обсуждения, а не предлагать разбираться в Вашем непонимании, прошу

Я уже предложил клавиатуру на шине I2C. На общей шине. Что не требует ни одного дополнительного входа/выхода.
Ещё один вопрос в посте #20 для zltigo.
sensor_ua
Проехали. Что касается Вашего варианта (не увидел, простите, что Ваш), то вариант принципиально близок к званию хорошего стандартного решения, ИМХО. В настоящее время пишу мультимастера I2C для контроллера клавиатуры на Атмега48 и головного LPC2138 на аппаратных TWI/I2C. Предполагаю реализовать вариант I2C/UART на той же ATmega48 для обслуживания удаленной клавиатуры/индикатора. Не могу пока опредлелиться, что лучше - безмозглый конвертер I2C/UART (хард-варианты есть у Филипса) или эмулятор - удаленный/бортовой терминал. У меня ограничения по потреблению, отсюда по скоростям. Вариант с терминалом выглядит предпочтительнее, но пока не просчитал
zltigo
Цитата(GetSmart @ Jul 9 2006, 01:09) *
Я уже предложил клавиатуру на шине I2C.

Обычное стандартно-лобовое решение к тому-же более затратное по ресурсам в случае если других I2C нафиг не надо. Да и по стоимости тоже не рекордное. А тут вроде больше как в сторону некоторых легких извращений разговор идет?
Цитата
Ещё один вопрос в посте #20 для zltigo.

Да все просто - при ненажатых кнопках напряжение пропорционально напряжению питания,
при нажатии фиксируется _резкое_ изменение оного и начинается разборки с определением нажатой кнопки.
rezident
Цитата(zltigo @ Jul 9 2006, 02:47) *
Цитата(GetSmart @ Jul 8 2006, 23:33) *

Если не секрет, то сколько можно сделать кнопок?

Ну, например, на практически любом 12 битном до 256 кнопок (или их комбинаций) получится без особого напряга. Хватит?

Я извиняюсь что вмешиваюсь. Мне просто любопытно стало. А вы реальную клавиатуру хотя бы на 64 кнопки делали на таком принципе с 12 разрядным АЦП? Какой точности резисторы ставили? 0,1% и ТКС 25ppm/ºС достаточно для такого случая?
zltigo
Цитата(rezident @ Jul 9 2006, 20:59) *
Я извиняюсь что вмешиваюсь. Мне просто любопытно стало. А вы реальную клавиатуру хотя бы на 64 кнопки делали на таком принципе с 12 разрядным АЦП? Какой точности резисторы ставили? 0,1%

Не делал, поскольку сфера моей деятельности бесконечно далека от этого, правда очень близка и измерительным системам :-). Но это все незачем "делать", поскольку можно и посчитать. Если внимательно посмотрите, то я для большого количества кнопок предлагал классическую R-2R матрицу, что конечно не позволит использовать банальную кнопочную матрицу, но зато требования к точности резисторов и температурной стабильности (при 64 комбинациях - не кнопках! ) будут просто "никакие".
Если нужно имено 64 кнопки, придется :-( добавить шифратор 64 кнопок в 6 бит.
rezident
Цитата(zltigo @ Jul 10 2006, 01:00) *
Цитата(rezident @ Jul 9 2006, 20:59) *

Я извиняюсь что вмешиваюсь. Мне просто любопытно стало. А вы реальную клавиатуру хотя бы на 64 кнопки делали на таком принципе с 12 разрядным АЦП? Какой точности резисторы ставили? 0,1%

Не делал, поскольку сфера моей деятельности бесконечно далека от этого, правда очень близка и измерительным системам :-). Но это все незачем "делать", поскольку можно и посчитать. Если внимательно посмотрите, то я для большого количества кнопок предлагал классическую R-2R матрицу, что конечно не позволит использовать банальную кнопочную матрицу, но зато требования к точности резисторов и температурной стабильности (при 64 комбинациях - не кнопках! ) будут просто "никакие".
Если нужно имено 64 кнопки, придется :-( добавить шифратор 64 кнопок в 6 бит.

Ага! Так все-таки 256 комбинаций, а не кнопок! А то я уж подумал, что мне мерещится smile.gif Помнится мы рассчитывали сколько датчиков (например, пожарных) подключенных по R-2R можно цеплять к каждому аналоговому каналу нашего контроллера и получили что при обычных 5% резисторах их может быть не более 8 (если я правильно помню, завтра уточню). Причем аналоговый канал контроллера калиброванный, с точностью измерения тока 0-20мА не хуже 0,05%. Естественно в расчет закладывали нестабильность питания которым запитывалась эта цепь датчиков.
GetSmart
Ну теперь ясно, почему я так и не догадался, как сделать больше 8-ми кнопок на R-2R. zltigo любит критиковать чужие идеи выставляя при этом свои в наиболее выгодном свете, то есть высказывая только "удобную" часть своих решений и скрывая "неудобные" аспекты. И не в первый раз. Оказывается нужно ещё и приоритетный шифратор добавлять. Значит про комбинации клавиш придётся забыть.
Теперь по поводу контроля питания. Где гарантия, что все клавиши будут отжатыми чтобы можно было померить это самое питание?
Почему это наличие I2C в устройстве является большЕй редкостью, чем наличие АЦП в процессоре? I2C можно даже программно сделать.
Когда появится объективность?
zltigo
Цитата(GetSmart @ Jul 9 2006, 23:31) *
Ну теперь ясно, почему я так и не догадался, как сделать больше 8-ми кнопок на R-2R

Зато как на PCF8574 "догадались" - навесить чипов в "нужном" количестве...
Цитата
zltigo любит критиковать чужие идеи выставляя...

Вы себе льстите, если я и _отмечал_, то отсутствие :-( идеи как таковой.
И вообще "бурная" переписка началась с Вашей попытки в "удобных" условиях использования
нескольких I2C устройств побить "рекорд" однопроводности.
Цитата
Теперь по поводу контроля питания. Где гарантия, что все клавиши будут отжатыми чтобы можно было померить это самое питание?

Гарантии в том, что прежде чем делать нужно думать о том какое состояние будет основным.
Цитата
Почему это наличие I2C в устройстве является большЕй редкостью, чем наличие АЦП в процессоре?

А где хоть слово про редкость в контроллере? А вот использование нескольких (для побития "рекорда" однопроводности ) I2C девайсов имеет уже много меньшую вероятнось.
Цитата
Когда появится объективность?

Попробуйте спокойно перечитать переписку, возможно Вам удастся достичь объективности :-) в _своих_ взглядах на раздутую Вами ""ПРОБЛЕМУ"".

P.S.
Я ни в коем случае не настаиваю на использовании кем либо аналоговогого варианта клавиатуры, как и
на неиспользовании любых других явных или нет решений для минималистичного подключения кнопок.
GetSmart
Цитата(zltigo)
Зато как на PCF8574 "догадались" - навесить чипов в "нужном" количестве...

Зачэм? На один чип можно поставить сразу стандартную матрицу. PCF8574 - квазидвунаправленная. Аналогично портам 51-ых процов. Одновременно и защита логических уровней для матрицы.

Цитата
А где хоть слово про редкость в контроллере?

В самом первом посте про АЦП-клавиатуру.

Цитата
И вообще "бурная" переписка началась с Вашей попытки в "удобных" условиях использования
нескольких I2C устройств побить "рекорд" однопроводности.

И мне это почти удалось :-)
zltigo
Цитата(GetSmart @ Jul 10 2006, 00:39) *
Цитата
А где хоть слово про редкость в контроллере?

В самом первом посте про АЦП-клавиатуру.

Ну просто ради справедливости привожу первый пост ЦЕЛИКОМ:
Цитата
ADC есть почти у всех. К нему его-же опорник через R/2R резисторную матрицу и все это ОДИН вывод.
Кто меньше :-).

Нету там букв I2C. И "критики" чьих-либо идей нет. Совсем нет.
Мур
ВАУ!!! Какие страсти кипят!... smile3009.gif
Мне нравятся оба варианта и конечно выбрал бы какой-то под определённый расклад рессурса в конкрктной задаче, но я бы учёл ОБЯЗАТЕЛЬНО объём предполагаемого кода и траты времени на обсугу всего этого великолепия!!!
Тут всё становится на свои места. АЦП ущербен при одновременном нащатии нескольких клавиш, а ИдваС выгоден ТОЛЬКО когда что-то ещё на шине висит и оправданы затраты кода на обслуживание прерываний по ИдваС....(Специально для клавы,-слишком много трат!!!)
В любом случае благодарен участникам за расширение НАШЕГО кругозора!! cheers.gif Удачи в творчестве!
zltigo
Цитата(Мур @ Jul 10 2006, 10:51) *
ВАУ!!! Какие страсти кипят!... smile3009.gif
Мне нравятся оба варианта и конечно выбрал бы какой-то под определённый расклад рессурса в конкрктной задаче,

И это правильно!!!

Цитата
АЦП ущербен при одновременном нащатии нескольких клавиш

Смотря, как делать. При массовых ADC и количестве кнопок 8..9 ну до 10
Можно и все комбинации получить. Cоответственно возможны и комбинированные (максимально приближенные к реальности) варианты, когда распознавть комбинации только нескольких кнопок с остальными.
lazycamel
Какой R-2R на кнопках, что за бред.

Весь смысл работы R2-R заключается в том. что ряд входов притянуты к 0, а ряд входов к питанию. Как вы на обычной тактовой кнопке сделаете безразрывное переключение с 0 до Uпит ?
zltigo
Цитата(lazycamel @ Jul 10 2006, 19:44) *
Как вы на обычной тактовой кнопке сделаете безразрывное переключение с 0 до Uпит ?

1.Кнопки разные бывают.
2.Можно и не городить из дискретов матрицу а взять интегральную в комплекте с ключами.
3.Собственно такая матрица эффективна при необходимости комбинаций кнопок и не является единственно возможным решением. Думать и выбирать надо.
4.Безразрывность ни нафиг не нужна - все покроет механизм защиты от дребезга.
IgorKossak
Цитата(zltigo @ Jul 10 2006, 20:16) *
...4.Безразрывность ни нафиг не нужна - все покроет механизм защиты от дребезга.

Очевидно имеется в виду программный механизм.
Дёшево, сердито и более чем достаточно.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.