Очевидное редко бывает истинным.
Конфуций

Меню навигации для мобильных

Матричку опросить :: вариант решения

Автор Slabovik, 27 Июль, 2023, 18:09

« предыдущая - следующая »

Slabovik

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

Самый экономный способ - использовать готовые интерфейсы, PS/2 или USB. PS/2 довольно прост, там последовательная шина обмена данными, относительно низкоскоростная (что-то в районе 20 кГц), можно реализовать ногодрыгом. USB без аппаратной поддержки со стороны чипа никак не сделать (ну, я точно не умею).

Вариант с COM-портом имеет право быть. На мой взгляд, самый удобный, если клавиатура уникальная и выносная. Ещё интереснее, если реализовать интерфейс телетайпа - с клавиатуры принимаем буквы, на клавиатуру передаём изображение, алфавитно-цифровое, конечно, с ESC-кодами. Но во всех этих случаях клавиатуре положен свой процессор - матричку-то всё-равно надо опрашивать.

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

Для примера, старая клавиатура МС-7007

MC7007-foto.jpg

Не самая большая. Матрица клавиатуры выглядит как-то так

MC7007.png

При нажатии кнопки происходит замыкание проводников, находящихся под кнопкой.
Для однозначного понимания, какие кнопки нажаты, необходимо подавать сигнал (высокий или низкий уровень, в зависимости от того, какую логику вы выберете) на одну из горизонтальных (или вертикальных) линий и смотреть, на какой из вертикальных (или горизонтальных) линий появится сигнал. Перебрав все линии, на которые вы подаёте сигнал и, соответственно, считав другие столько же раз, можно однозначно установить, какие клавиши сейчас нажаты (и сохранить в память для отслеживания изменений).

Если подключать "в лоб", то для этой клавиатуры нужно 21 вывод. Если убрать "Сброс" или куда переключить - то 20. Но всё-равно много. Но, поскольку строки (столбцы) опрашиваются по одному, можно заметно сократить количество проводов, добавив микросхемку

MC7007-ID3.png

Микросхема-дешифратор. Превращает код, поступающий на её входы, в '0' на одном из выходов, соответствующем этому коду. От 0 до 15.
Соединив таким образом, 21 провод матрицы утаптываем в 12 проводов связи. Уже приемлемо, т.к. есть 15-контактные DB разъёмы, которые можно приспособить. Через свободные контакты подаём питание и сигнал на светодиодик. Мелочь, а уже приятно :)

На стороне ЦП тоже вешаем микросхемку, но не регистр хранения, а счётчик

MC7007-IE5.png

Можно было и регистр хранения (ИР33 или ИР22), в него записывать номер столбца, затем считывать порт, проверяя биты, соответствующие строкам.

Счётчик хорош тем, что у него можно сделать автоинкрементацию, как на картинке.
При чтении порта, после того, как данные считаны, счётчик автоинкрементируется сам, благодаря сигналу чтения, который и так должен быть, и можно читать следующие данные, ничего не выставляя взамен.

Поскольку линий на дешифраторе ИД3 шестнадцать, а столбцов только 11, для приведения счётчика в состояние '0' можно сделать запись в порт. По факту записи счётчик установится в '0'. Данные на шине при этом могут быть любые, так что даже можно их использовать в каких-либо целях: светодиодик зажечь или ещё чего.

Вот, как-то так...  ;)
Общением на форуме подпитываю свою эгоистичную, склонную к самолюбованию сущность.