Микроконтроллеры


AVR313: Подключение PC AT клавиатуры к AVR


AVR313: Подключение PC AT клавиатуры к AVR Оригинал: Application Note AVR313 фирмы ATMELОсобенности
  • Подключается стандартная PC AT клавиатура
  • Требуется только два I/O вывода. Один из них должен быть входом внешнего прерывания
  • Не требуется внешних элементов
  • Полный пример программы на С, осуществляющей преобразование данных, полученных от клавиатуры, и выдачу их через UART
Введение

      Большинство микроконтроллеров, должно иметь какой ни будь интерфейс с человеком. Это приложение описывает в качестве одного из вариантов, использование стандартной PC AT клавиатуры.


Физический интерфейс

      Физический интерфейс между клавиатурой и микроконтроллером показан на рисунке 1. Используются две сигнальных линии - синхронизации и данных. Сигнальные линии с открытым коллктором и имеют подтягивающие резисторы, расположенные в клавиатуре. Это позволяет как микроконтроллеру, так и клавиатуре формировать на линиях низкий уровень. Существует два типа разъемов, 5-ти штырьковый DIN разъем типа 5D, и миниатюрный 6-ти штырьковый мини-DIN. Расположение выводов показано в таблице 1.


Рисунок 1. Интерфейс.

Таблица 1. Расположение контактов разьемов PC клавиатуры

Разьем



Синхронизация

DIN41524

6-pin Mini DIN PS2

Синхронизаци

1

5

Данные

2

1

Не используются

3

2, 6

Земля GND

4

3

Питание +5 В

5

4

Экран

Оплетка

Оплетка


Временный диаграммы

      Временные диаграммы передачи данных от клавиатуры к микроконтроллеру показаны на рисунке 2. Протокол обмена следующий: один старт бит (всегда 0), восемь бит данных, один бит четности и один стоп бит (всегда 1). Данные действительны в течении низкого уровня сигнала синхронизации. Синхросигнал формируется клавиатурой с длительностью низкого и высокого уровней по 30-50 мкс. Микроконтроллер также может посылать команды в клавиатуру, устанавливая низкий уровень на линии синхронизации, затем формируя импульс низкого уровня на линии данных (старт бит).
Алгоритм довольно прост: сохранение значения линии данных по спаду синхроимпульса. Это проще всего выполняется, если линия синхронизации подключена к INT0 или INT1. Прерывание будет выполняться по каждому фронту и спаду синхроимпульса, данные будут сохраняться по каждому спаду. После получения всех бит, данные можно декодировать. Это осуществляется вызовом функции decode. Для символьных клавиш эта функция сохраняет ASCII код клавиш в буфере. Это позволяет учитывать, удерживалась ли нажатой клавиша shift при нажатии данной клавиши. Другие функциональные клавиши вроде курсорных, ctrl и Alt и т.д. игнорируются. Карта соответствия скан-кодов ASCII кодам обрабатывается с помощью таблиц, одной для клавиш нажатых вместе с shift, а другой без.
Изменения и дополнения       Если микроконтроллер потеряет синхронизацию с клавиатурой, все остальные принятые биты будут неверны. Один из способов решения этой проблемы это использование таймаута. Если 11 бит не получены в течении 1,5 мс, значит произошла ошибка. Счетчик битов должен быть сброшен, а поврежденные данные удалены. Для установки таких параметров как скорость и период повтора нажатой клавиши, необходимо посылать данные в клавиатуру. Это можно сделать, как описано выше. Команды можно найти в спецификации производителя клавиатуры.

Рисунок 2. Временные диаграммы передачи данных клавиатурой в микроконтроллер.


Содержание раздела