Реклама на сайте | Помощь сайту   English version | Datasheets 
KAZUS.RU - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

12-кнопочная клавиатура с двухпроводным интерфейсом

12-кнопочная клавиатура с двухпроводным интерфейсом



Раздел: Периферия к МК

В статье рассмотривается вариант организации 12-кнопочной клавиатуры для устройств на микроконтроллерах. Интерфейс клавиатуры потребует от микроконтроллера всего лишь две линии ввода/вывода: одна линия предназначена для информирования микроконтроллера о нажатии кнопки, вторая линия – для чтения информации о нажатой кнопке.

 


Как известно, клавиатуры используются в устройствах на микроконтроллерах для ввода пользовательской информации и управления. В общем случае, многокнопочная клавиатура организуется как матрица кнопок объединенных в столбцы и строки, таким образом, интерфейс такой клавиатуры потребует определенного минимального количества линий ввода/вывода микроконтроллера. Например, 12-кнопочная клавиатура организуется в формат 4×3 и потребует 7 линий ввода/вывода. Для определения нажатой кнопки на такой клавиатуре микроконтроллер должен просканировать все столбцы и строки. В сети Интернет много информации относительно этой техники.

Здесь мы рассмотрим иной интерфейс клавиатуры, требующей всего лишь две линии ввода/вывода микроконтроллера. Основа нашей 12-кнопочной клавиатуры – интегральный таймер 555, который сконфигурирован как несинхронизированный мультивибратор. Также для проверки работоспособности клавиатуры мы будем использовать микроконтроллер PIC16F628A, который будет считывать информацию с выхода таймера, определять какая кнопка нажата и отображать код нажатой кнопки на символьном LCD дисплее. 

Теория

Рассматриваемая техника реализации клавиатуры основывается на очень простом принципе. Значение выходной частоты несинхронизированного мультивибратора определяется двумя резисторами и конденсатором, ее значение рассчитывается по формуле, представленной на рисунке 1.

 



Рис. 1. Схема включения таймера 555 в режиме генератора импульсов и формула расчета выходной частоты.

Если мы выберем постоянными значение резистора R1 и конденсатора С, изменение выходной частоты будет связано с изменением резистора R2. Таким образом, если каждую кнопку клавиатуры подключим к различным резисторам, то при нажатии на кнопки мы получим различные значения частоты на выходе таймера. Микроконтроллер может измерить выходную частоту генератора и определить какая кнопка нажата. 

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

Принцип работы нашей клавиатуры

При нажатии одной из кнопок клавиатуры, резистор с определенным значением включается между выводом 7 (Разряд) и выводом 6 (Останов) таймера 555, завершая схему несинхронизированного мультивибратора. Выходные импульсы подсчитываются за период 100 мс встроенным таймером микроконтроллера. Определение микроконтроллером нажатой кнопки производится по количеству переполнений таймера. Т.е., если количество переполнений таймера равно 5, то была нажата кнопка 5. Если была нажата кнопка 0, то переполнения таймера микроконтроллера не произойдет. 

 



Принципиальная схема интерфейса клавиатуры


На схеме показано, как можно подключить 12 кнопок к таймеру 555 для генерации 12 различных частот. Резисторы R0 – R# – это 12 различных резисторов, которые включаются в цепь (между выводом 6 и 7 таймера) в соответствии с нажатой кнопкой.

Для нашего случая номинал резистора R1 – 1 кОм, конденсатора C – 0.01 мкф, в соответствии с типовой схемой включения. В нижеследующей таблице видно соответствие между различными номиналами резистора R2 для каждой кнопки, частотой и количеством переполнений таймера 0 микроконтроллера. Заметим, что некоторые из этих резисторов являются составными для получения нужного номинала. R1=1 кОм, С=0.01 мкФ

 

R1=1 кОм,  С=0.01 мкФ
Кнопка № Номинал
резистора R2,
Ом
Выходная
частота,
Гц
Количество
импульсов
за 100 мс
Количество
переполнений
Таймера 0
0 47000 1515.79 151.58 0
1 22000 3200 320 1
2 12000 5760 576 2
3 8200 8275.86 827.59 3
4 5600 11803.28 1180.33 4
5 4700 13846.15 1384.62 5
6 3900 16363.64 1636.36 6
7 3400 18461.54 1846.15 7
8 2800 21818.18 2181.82 8
9 2530 23762.38 2376.24 9
* 2200 26666.67 2666.67 *
# 2000 28800 2880 #

 

Для более стабильной работы схемы нужно применять электронные компоненты (конденсатор и резисторы) с допуском менее 5%.

Описание работы схемы, значение и выбор времязадающих компонентов схемы.

Рассмотрим теперь основные моменты в работе и настройке интерфейса клавиатуры. Как видно, схема имеет два выхода: выход частоты (на схеме обозначен как TOCKI) и выход импульса (на схеме – RA2). 

 


Выход частоты, непосредственно с вывода 3 таймера, подается на вывод микроконтроллера TOCKI (вход Таймера 0 PIC16F628A) для измерения генерируемой частоты. Второй выход – это выход таймера со сглаживающим конденсатором Cp. При нажатии кнопки на клавиатуре последовательность импульсов с выхода таймера сглаживается конденсатором в единственный импульс. Этот импульс является сигналом для микроконтроллера, что нажата кнопка на клавиатуре. Резистор Rp (3.6 кОм) предназначен для разряда конденсатора Cp при отпускании кнопки клавиатуры, что необходимо для генерации импульса при следующем нажатии кнопки. Диод D1 предназначен для изолирования двух выходов.


Значение номиналов резистора Rp и конденсатора Cp

Значение резистора Rp не выбирается произвольным. Если значение слишком велико, то мы получим слишком большую задержку по времени между двумя нажатиями любых клавиш, т.к. потребуется больше времени для разряда конденсатора Cp. В тоже время, значение сопротивления не должно быть слишком малым, так как напряжение на конденсаторе в значительной степени уменьшится, при следовании двух последовательных импульсов с выхода таймера 555. Мы выбрали значения резистора Rp=3.6 кОм и конденсатора Cp=1 мкФ. В этом случае постоянная времени RC будет равна 0.0036 c. Это означает, что если выходная частота таймера 278 Гц (1/0.0036), напряжение на конденсаторе может снизится до 63% от его амплитудного значения между двумя последовательными импульсами.

Как видно, значения Rp и Cp также выбраны не достаточно эффективно, чтобы сгладить все рабочие частоты.
Следовательно, значения Rp и Cp должны быть подобраны так, чтобы постоянная времени RC была достаточна для сглаживания всех рабочих частот и, между тем, должна быть достаточно малой, чтобы пользователь мог нажимать кнопки на клавиатуре с минимальной задержкой. Текущие значения Rp и Cp вводят задержку 5 мс, кроме того, минимальная частота (из таблицы в первой части статьи) равна 1516 Гц, что намного выше 278 Гц.

 

Роль резистора Rc 

Если посмотрите на схему интерфейса клавиатуры, вы увидите, что резистор Rc имеет сопротивление 10 МОм и включен непосредственно между Vcc и конденсатором С. Данный резистор играет очень интересную роль. Когда пользователь отпускает кнопку, несинхронизированный мультивибратор останавливается, поскольку из цепи исключается резистор R2 (типовая схема включения). Мы знаем, что выходной каскад таймера 555 имеет RS триггер. Предположим, что триггер был сброшен (что означает высокий уровень на выходе 555) в момент, когда кнопка клавиатуры была отпущена. В этом случае теряется путь для подачи сигнала низкого уровня на вход сброса (т.к. исключили резистор R2), пока мы не обеспечим альтернативное решение для перезарядки конденсатора С.

Как только конденсатор заряжается до 2/3 напряжения питания, на выходе снова появляется сигнал низкого уровня. Помните, что мы должны убедиться, что выходное напряжение падает до 0, прежде чем будет нажата следующая кнопка. Так вот, резистор Rc заботится об этом процессе. Большое значение его сопротивления (10 МОм) гарантирует, что имеет небольшое влияние на зарядку конденсатора С при нормальной работе.

 



Функциональная схема таймера 555 и анимация работы таймера



Подключение интерфейса клавиатуры к микроконтроллеру, основные моменты в ПО микроконтроллера, демонстрация работы.

Два выхода нашего интерфейса клавиатуры подключаются непосредственно к микроконтроллеру PIC16F628A. Выход одиночного импульса подключается к порту RA2, выход частоты – к порту RA4 (TOCKI) микроконтроллера. С целью демонстрации работоспособности схемы и интерфейса мы используем двухстрочный символьный ЖК индикатор на базе контроллера HD44780, подключенный по 4-битной шине к микроконтроллеру. На индикаторе будет отображаться информация о нажатой кнопке на клавиатуре.


Дополнительно к выходу таймера был подключен светодиод последовательно с резистором 470 Ом для индикации нажатия кнопки (на схеме не указан).

 



Принципиальная схема подключения клавиатуры и ЖК индикатора к микроконтроллеру


Программное обеспечение микроконтроллера – простая тестовая программа, написанная с использованием компилятора mikroC от компании mikroElektronika. В программе конфигурируется и используется встроенный Таймер 0 микроконтроллера для подсчета импульсов с выхода таймера 555. Программа опрашивает порт RA2 и при определении импульса, Таймер 0 активируется на 100 мс и фиксируется число переполнений.

 

Блок-схема программы микроконтроллера



Автором были получены отзывы от пользователей относительно этой техники организации клавиатуры. Большинство из пользователей утверждает, что данная техника сложна с точки зрения программирования. Однако, стоит отметить, что микроконтроллер нуждается в программе независимо от того, какой тип клавиатуры используется (будь-то матричная клавиатура или делитель из резисторов). В этой технике, как уже было сказано, ничего сложного нет, не требуется вычисление частоты, необходимо лишь активировать таймер на фиксированный интервал (мы использовали интервал 100 мс и, конечно, длительность нажатия кнопки должна быть соответствующей), когда обнаружено нажатие. 

 



Внешний вид макетной платы интерфейса клавиатуры

 




Демонстрация работы


В архиве по этой ссылке - исходный код программы на СИ (mikroC) и прошивка для микроконтроллера.


вакансии врач
 © 2003—2017 «Электронный портал»Обр@тная связь