100 кнопок

Bengamin
Offline
Зарегистрирован: 25.08.2021

Добрый день!

Появилась задача сделать плату, на которой размещалось бы 100 кнопок (5 рядов, 20 колонок). При этом, важно , чтобы можно было обрабатывать одновременные нажатия клавиш (не более 5, но в любых рядах и колонках). В целом, надо чтобы в порт уходило что-то такое: [0,2][0,4][2,2]

Мысли как сделать такое следующие:

1) Использовать парочку больших мультиплексоров типа AS-6408.

2) Использовать несколько МК, считывающих аналоговые значения, подключенных к родительскому МК.

Подскажите, какой из вариантов целесообразнее и есть ли какие-либо другие варианты?

Спасибо!

rkit
Offline
Зарегистрирован: 23.11.2016

Стандартная матричная схема.

Green
Offline
Зарегистрирован: 01.10.2015

Только диоды нужны последовательно для фиксации нескольких.

Bengamin
Offline
Зарегистрирован: 25.08.2021

rkit пишет:

Стандартная матричная схема.

Для матричной схемы нужно 5 + 20 аналоговых входов. Те МК что я видел - это обычно не более 15 входов.

rkit
Offline
Зарегистрирован: 23.11.2016

Для матричной схемы не нужно аналоговых входов.

Bengamin
Offline
Зарегистрирован: 25.08.2021

Понял, то есть, в принципе достаточно что-то типа arduino mega 2560, у которой аж 54 цифровых входа.

Спасибо!

Green
Offline
Зарегистрирован: 01.10.2015

Ардуино Про Мини + один hc595 + 8 диодов шоттки достаточно. 

Bengamin
Offline
Зарегистрирован: 25.08.2021

Green пишет:

Ардуино Про Мини + один hc595 + 8 диодов шоттки достаточно. 

Спасибо, ушёл читать.

asam
asam аватар
Offline
Зарегистрирован: 12.12.2018

Green пишет:

Ардуино Про Мини + один hc595 + 8 диодов шоттки достаточно. 

Если сделать матрицу 10х10 , то ардуины мини хватит одной без диодов и сдвигового регистра, а коды по UART выдавать.

Green
Offline
Зарегистрирован: 01.10.2015

Да, с 10х10 покрасивее будет, но А6/А7 придётся задействовать (либо XTAL, либо РЕСЕТ)).

v258
v258 аватар
Offline
Зарегистрирован: 25.05.2020

asam пишет:

Green пишет:

Ардуино Про Мини + один hc595 + 8 диодов шоттки достаточно. 

Если сделать матрицу 10х10 , то ардуины мини хватит одной без диодов и сдвигового регистра, а коды по UART выдавать.

Сдается мне, что пинов все-таки не хватит

asam
asam аватар
Offline
Зарегистрирован: 12.12.2018

v258 пишет:

Сдается мне, что пинов все-таки не хватит

Хватит, но надо или ресет через фьюзы в порт превратить или тактировать от внутреннего генератора, а выводы на кварц тоже можно в порты перефьюзить. Но тогда надо будет пайкой на плате ардуины заняться. 

Pro Mini ATMEGA328P 5V/16M (Official Version)

rkit
Offline
Зарегистрирован: 23.11.2016

Диоды в матричной схеме ставятся на каждую кнопку.

v258
v258 аватар
Offline
Зарегистрирован: 25.05.2020

asam пишет:
Хватит, но надо или ресет через фьюзы в порт превратить

Включая RX и TX

asam пишет:
или тактировать от внутреннего генератора, а выводы на кварц тоже можно в порты перефьюзить. Но тогда надо будет пайкой на плате ардуины заняться.

Тогда проще свою плату развести и голый камень поставить ))

v258
v258 аватар
Offline
Зарегистрирован: 25.05.2020

rkit пишет:

Диоды в матричной схеме ставятся на каждую кнопку.

Нет

Bengamin
Offline
Зарегистрирован: 25.08.2021

Насколько я понимаю, если нужны одновременные нажатия на кнопки - то диоды, всё таки, ставятся на каждую кнопку. 

v258
v258 аватар
Offline
Зарегистрирован: 25.05.2020

Bengamin пишет:

Насколько я понимаю, если нужны одновременные нажатия на кнопки - то диоды, всё таки, ставятся на каждую кнопку. 

Нет, достаточно на столбцы. А можно и вообще без них, если неактивные столбцы переводить в INPUT

ЗЫ: речь не о том, что ЕСЛИ требуется, а о защите от дурака

Green
Offline
Зарегистрирован: 01.10.2015

asam пишет:

Хватит, но надо или ресет через фьюзы в порт превратить или тактировать от внутреннего генератора, а выводы на кварц тоже можно в порты перефьюзить. Но тогда надо будет пайкой на плате ардуины заняться. 


Нет, всё же легче аналоговые А6/А7 использовать. Достаточно одного. Тактирование АЦП повысить, разрешение понизить. Да и скорость преобразования тут не особо нужна.

Green
Offline
Зарегистрирован: 01.10.2015

v258 пишет:

Нет, достаточно на столбцы. А можно и вообще без них, если неактивные столбцы переводить в INPUT

ЗЫ: речь не о том, что ЕСЛИ требуется, а о защите от дурака


Это защита выходов. А если нужно определять н-ное кол-во нажатых клавиш, то диоды нужны с каждой.

v258
v258 аватар
Offline
Зарегистрирован: 25.05.2020

Green пишет:

если нужно определять н-ное кол-во нажатых клавиш, то диоды нужны с каждой.

Нет. Кнопки в одном столбце замыкаются каждая на свой ряд и перемыкание между собой на результат не влияет. Кнопки в разных столбцах защищены диодами на столбцах

rkit
Offline
Зарегистрирован: 23.11.2016

v258 пишет:

Green пишет:

если нужно определять н-ное кол-во нажатых клавиш, то диоды нужны с каждой.

Нет. Кнопки в одном столбце замыкаются каждая на свой ряд и перемыкание между собой на результат не влияет. Кнопки в разных столбцах защищены диодами на столбцах

Теперь нарисуй и посмотри

v258
v258 аватар
Offline
Зарегистрирован: 25.05.2020

rkit пишет:

Теперь нарисуй и посмотри

Показывай, замыкание каких кнопок приведет не фейлу

kalapanga
Offline
Зарегистрирован: 23.10.2016

v258 пишет:

Показывай, замыкание каких кнопок приведет не фейлу

На картинке в добавок к нажатым кнопкам 4 и 7 нажмите кнопку 5. Сработает и кнопка 8.

Диоды нужны всем.

rkit
Offline
Зарегистрирован: 23.11.2016

И что это вообще за чушь придумана с диодами? Солнце, ты в курсе, что пин можно просто перевести в режим input, и он не будет выдавать ничего?

Alex_Ferrum
Offline
Зарегистрирован: 04.05.2015

А если использовать регистры 74HC165 с параллельной загрузкой и последовательно выгрузкой. Соединяете последовательно 13 штук, подцепляете к SPI, и, опрашиваете 104 кнопки.

xDriver
xDriver аватар
Offline
Зарегистрирован: 14.08.2015

a.b.c,d - это выходы как я понимаю.

rkit чет ты с темы начинаешь съезжать.

v258
v258 аватар
Offline
Зарегистрирован: 25.05.2020

rkit пишет:
И что это вообще за чушь придумана с диодами? Солнце, ты в курсе, что пин можно просто перевести в режим input, и он не будет выдавать ничего?

Мальчик, посмотри  сообщение #16, а потом спрашивай глупости.

v258
v258 аватар
Offline
Зарегистрирован: 25.05.2020

kalapanga пишет:

На картинке в добавок к нажатым кнопкам 4 и 7 нажмите кнопку 5. Сработает и кнопка 8.

Да, уел ))) Три кнопки не осилит

rkit
Offline
Зарегистрирован: 23.11.2016

То есть вместо того. чтобы объяснить, как правильно сделать, объясняем, как приделать костыль на случай, если сделано неправильно.

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

asam пишет:

Хватит, но надо или ресет через фьюзы в порт превратить или тактировать от внутреннего генератора, а выводы на кварц тоже можно в порты перефьюзить. Но тогда надо будет пайкой на плате ардуины заняться. 

 

С внутренним генератором UART не взлетит.

kolyn
Offline
Зарегистрирован: 18.01.2019

andriano пишет:

С внутренним генератором UART не взлетит.

Ну да, у меня на ATtiny13/85 летает, а на 328-й не взлетит...

MaksVV
Offline
Зарегистрирован: 06.08.2015

можно ещё камень на 328pb перепаять/купить ардуину 328PB там вроде А6 и А7 дигитал

nik182
Offline
Зарегистрирован: 04.05.2015

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

Green
Offline
Зарегистрирован: 01.10.2015

nik182 пишет:
А что, взять старую клаву религия не позволяет? Не нравится вид - выцарапать микросхему, и к ней свои кнопки. Там куча нажатий и повтор и антидребезг.

Только ТС нужно фиксировать одновременные нажатия кучи клавиш, а PS/2 клавиатура это не обеспечивает, только выборочных. А значит огород, а ходовые все плёночные... Спасут только из серии ЕС-ЭВМ.)))

Green
Offline
Зарегистрирован: 01.10.2015

andriano пишет:

С внутренним генератором UART не взлетит.


Не взлетит в условиях крайнего севера.)

GarryC
Offline
Зарегистрирован: 08.08.2016

Если бы Вам хватило 7*7*2=98 кнопок, то хватило бы и (7+1)+(7+1)=16 ножек, ключевое слово "чарлиплексинг".

Green
Offline
Зарегистрирован: 01.10.2015

Вы бы расшифровали формулы.) Классический чарлиплексинг требует всего 11 пинов для 110 кнопок. Но. Для фиксации одновременно нажатых кнопок нужен АЦП, в данном случае 11-ти канальный.) Уже разбирали.

GarryC
Offline
Зарегистрирован: 08.08.2016

Хм, я думал про классическую схему туда-сюда (конечно, с диодами на каждый ключ), где общее количество объектов сканирования равно (количество строк/столбцов -1)**2*2, для нашего случая (8-1)*(8-1)*2=98.

Green
Offline
Зарегистрирован: 01.10.2015

Вообще то нет. n * n - n, или аналогично: n * (n - 1).

Voodoo Doll
Voodoo Doll аватар
Offline
Зарегистрирован: 18.09.2016

Green пишет:

Ардуино Про Мини + один hc595 + 8 диодов шоттки достаточно. 

можно схему а то так непонятно. что в регистр гнать, откуда читать? тож интересует.

Green
Offline
Зарегистрирован: 01.10.2015

Матрица 20х5. Т.к. пинов не достаточно, расширяем за счёт hc595 (всего на 5 пинов!). Получаем 12 + 3 (управление 595) и 5 входов, всего 20. В 595-м, как и на 12-ти выходах поочередно гоняем 0 по кругу, активизируя строки (или столбцы) матрицы и смотрим ответ на входах. Диоды на выходе 595 для защиты, т.к. не имеет 3-го состояния.

Voodoo Doll
Voodoo Doll аватар
Offline
Зарегистрирован: 18.09.2016

о найс, так понятно. спасибо.

wdrakula
wdrakula аватар
Offline
Зарегистрирован: 15.03.2016

На 328, то есть на Уно/Нано. С легкостью 385 кнопок. ;))) И УАРТ сохраняем.

Без УАРТ у нас 11 цифровых выходов и 7 аналоговых входов. Делаем стандартную матрицу сканирования 11х7=77. С диодом на каждую кнопку. Только вместо кнопки ставим матрицу R/2R на 5 кнопок. Читаем с паузами на перезарядку, как по ДШ положено. На цикл опроса нам нужно сделать 77 аналоговых чтений. С паузой в 100мкс укладываемся в 10 мс на цикл опроса, что вполне эргономично.

В теории у нас АЦП на 10 разрядов, значит имеем право проектировать в каждом элементе матрицу R/2R на 9 кнопок... но мы же все всё  понимаем? Помехи, кривые резисторы и прочее. На 5 или 6 кнопок - совершенно точно будет ОК.

 

Green
Offline
Зарегистрирован: 01.10.2015

Даже больше! 12 цифровых х 8 аналоговых.)

Bengamin
Offline
Зарегистрирован: 25.08.2021

Через HC595 я понял как и что нужно делать, в принципе, ничего сложного. Удобная, надо сказать штука.

Однако, вопрос: в интернетах я прочитал, что можно подключить не один, а два и более HC595.

Т.е. фактически, для получения 20 входов на матрице, необходимо 4x HC595, и всего используя только 3 цифровых выхода МК.

Насколько это разумно? Просто остальные выходы также могут пригодиться.

Green
Offline
Зарегистрирован: 01.10.2015

Решение о целесообразности расширителей принимать вам. Кроме 595 есть и другие (PCF8574 например), которые могут расширять не только выходА, но и входА. А раньше клавиатуру вообще на рассыпухе делали - данные и готовность на выходе. И даже в ASCII, и даже с автоповтором, и даже с индикаторами.

Bengamin
Offline
Зарегистрирован: 25.08.2021

Green пишет:

Решение о целесообразности расширителей принимать вам. Кроме 595 есть и другие (PCF8574 например), которые могут расширять не только выходА, но и входА. А раньше клавиатуру вообще на рассыпухе делали - данные и готовность на выходе. И даже в ASCII, и даже с автоповтором, и даже с индикаторами.

Про целесообразность - я имею ввиду, не создаст ли такая схема в теории каких-либо проблем в плане глюков?

Bengamin
Offline
Зарегистрирован: 25.08.2021

И по поводу самой схемы - так я и не понял, диод на каждую клавишу или всё - таки достаточно на ряд?

Напомню - что необходимо проверять до 5 одновременных нажатий.

С маркировкой диода не поможете?

Green
Offline
Зарегистрирован: 01.10.2015

Боюсь, у вас не взлетит...(
Для чего такая матрица и почему до 5-ти нажатий одновременно?
Может подскажем другое решение.

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Bengamin пишет:

И по поводу самой схемы - так я и не понял, диод на каждую клавишу или всё - таки достаточно на ряд?

Достаточно - на каждую контактную пару.

Цитата:

С маркировкой диода не поможете?

Любые импульсные: КД503, КД510, КД512 и подобные, либо 1N4148.