В большинстве клавиатур нажатие клавиши замыкает контакт, соединяющий две линии матрицы XY. Если для обнаружения замыкания контакта используется микроконтроллер, проверка состояния (X+Y) линий требует такого же количество портов ввода/вывода. Схема на Рисунке 1, занимающая только один свободный контакт ввода/вывода, взаимодействует с микроконтроллером, генерируя один импульс каждый раз, когда происходит нажатие клавиши. Ширина импульса пропорциональна номеру нажатой клавиши, и микроконтроллер определяет нажатую клавишу, измеряя ширину импульса.
Рисунок 1. | Две микросхемы образуют клавиатуру с ШИМ-интерфейсом, требующим лишь одного входного вывода микроконтроллера. |
Микросхема IC2 типа LMC555 – КМОП версия популярного таймера 555 – работает как моностабильный мультивибратор. Когда схема находится в состоянии покоя, внутренний транзистор на выводе 7 шунтирует конденсатор C6, и выход таймера (вывод 3) остается в состоянии «лог. 0». Нажатие любой клавиши на клавиатуре соединяет два резистора из двух групп – R1 и R2 в одной группе и R3, R4 и R5 в другой – последовательно с R6. Сумма сопротивлений двух резисторов изменяется с шагом 10 кОм, а общее сопротивление пропорционально номеру нажатой клавиши.
При нажатии любой клавиши ток идет через резисторы R6, R7 и выбранные резисторы клавиатуры и увеличивает напряжение на выводе 7 микросхемы IC2. После того, как конденсатор C1 зарядится с небольшой задержкой, достаточной для устранения дребезга контактов клавиатуры при замыкании, КМОП компаратор IC1 обнаруживает небольшое падение напряжения на резисторе R7. Уровень выходного сигнала микросхемы IC1 (вывод 6) изменяется с 5 В до 0 В, и этот перепад запускает микросхему IC2 по входу 2. Выходное напряжение таймера IC2 (вывод 3) становится высоким и начинает заряжать конденсатор C6 с постоянной времени, зависящей от выбранной клавиши. Когда напряжение на конденсаторе достигает двух третей VCC, или 3.333 В, уровень напряжения на выводе 3 становится низким, и конденсатор C6 разряжается. Ширина T выходного импульса микросхемы IC2 рассчитывается по формуле:
T = 1.1 × RS × C6,
где RS равно сумме сопротивлений выбранных резисторов клавиатуры и находится в диапазоне от 10 до 120 кОм. Ширина импульса изменяется от 110 до 1320 мкс с шагом 110 мкс.
Наименьшее относительное изменение ширины импульса происходит при наибольшем соотношении длительностей импульсов, которое равно 110/1320 или 8.33%. Это соотношение обеспечивает достаточный запас, позволяющий использовать компоненты со стандартными допусками ±1% или лучшие (компоненты схемы на Рисунке 1 имеют допуски ±0.5% и ±1%). Резисторы R13 и R14 компенсируют разброс сопротивлений внутренних делителей напряжения IC2, устанавливая напряжение на выводе 5 равным двум третям напряжения питания VCC.
Выходной импульс схемы клавиатуры управляет входом внешних прерываний (RA2) микроконтроллера PIC16F630. Процедура обработки прерываний микроконтроллера PIC16F630 измеряет ширину импульса, проверяет, находится ли его допуск в пределах ±40 мкс, и возвращает числовое значение от 1 до 12, соответствующее нажатой клавише. В качестве защиты от ошибочных данных процедура возвращает код ошибки, если ширина импульса выходит за установленные пределы.