В этой статье описано, как самостоятельно изготовить простейшую матричную клавиатуру, размером 3х3, на микроконтроллере, с возможностью подключения её к компьютеру через com-порт. В качестве примера используется микроконтроллер PIC16F628A.
Схема:
Элементы:
С1=0,1 мкФR1=1 кОмV1..V9 — абсолютно любые диоды (лучше Шоттки), ток с одной кнопки, через внутренний подтягивающий резистор, всего лишь около 0,2 мА.К1..К9 — нормально-разомкнутые кнопки без фиксации.
Описание работы схемы:
Выводы микроконтроллера RA1, RA7, RA6 запрограммированы как выходы.
Выводы RB6, RB5, RB7 запрограммированы как входы, подтягивающие резисторы включены.
В начальном состоянии все выходы переключены в единицу (подтянуты к питанию), а все входы подтянуты к питанию через подтягивающие резисторы.
При необходимости узнать состояние кнопок какого-либо столбца, — соответствующий выход (к которому подключен столбец) устанавливается в ноль (то есть подключается к земле), после чего проверяется состояние входов. Если вход равен нулю, то кнопка в соответствующей этому входу строке проверяемого столбца нажата, если вход равен 1, то кнопка не нажата.
Например, мы хотим проверить состояние кнопок во втором столбце, и пусть у нас нажата кнопка К8.
1) Устанавливаем RA7=0 (при этом RA1=RA6=1).
2) Проверяем, что будет со входами? Кнопка К2 разомкнута, связи с землей нет, поэтому вход RB6 так и останется равен 1 (притянут к питанию через внутренний резистор). Аналогичная ситуация со входом RB5.
А вот на входе RB7 образуется делитель напряжения, в одном плече (том, что к питанию) у которого внутренний подтягивающий резистор (с сопротивлением порядка 25 кОм), а в другом плече — открытый на землю диод. Если считать диод идеальным, то напряжение на входе будет равно нулю, то есть вход установится в ноль.
Таким образом, последовательно просканировав состояния кнопок во всех трех столбцах, мы узнаем состояния кнопок всей нашей небольшой клавиатурки.
Теперь следующий вопрос: зачем нужны диоды?
Давайте представим, что в нашей схеме нет диодов и рассмотрим тот же самый случай. Если кроме кнопок в сканируемом столбце больше ни одна кнопка не нажата, то все отлично работает.
Но пусть у нас помимо кнопки К8 нажата еще кнопка К9. Итак, линия RB7 у нас подтянута к земле через кнопку К8 и линию RA7, но тогда через кнопку К9 выход RA6 (который установлен в единицу) также окажется подтянут к земле, — получим КЗ и спалим выходы. А если бы там стоял диод, как в нашей схеме, то в данной ситуации он оказался бы обратно смещенным, то есть запертым и КЗ бы не случилось.
То есть, диоды нужны для развязки, они позволяют игнорировать состояние всех клавиш клавиатуры кроме сканируемых, предотвращая образование КЗ через нажатые клавиши в других столбцах.
Ну вот, в общем-то, почти и всё.
Фото готового девайса:
![]() Выведенные отдельно линии Tx и Rx позволяют подключить эту конструкцию через USART к com-порту компьютера, используя преобразователь уровней RS232-TTL. В принципе, примерно так устроена обычная клавиатура для com-порта. Дальше все зависит от вашей фантазии: хотите — сканируйте клавиатуру постоянно и отсылайте состояние на компьютер, хотите — сканируйте по команде с компьютера, хотите — сканируйте постоянно, а посылайте только когда есть нажатые клавиши, хотите — вообще ничего никуда не посылайте, а используйте это все для управления контроллером и т.д. Скачать печатную плату (DipTrace 2.0) Данная печатная плата разведена под использование диодов BAT18 в корпусе SOT23 (маркировка A2, на материнках таких полно). Вот здесь можно посмотреть пример программы и скачать готовую прошивку для этой клавиатуры. |