Микроконтроллер — подключаем PS/2 клавиатуру

 

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

 

Я предлагаю использовать, то что у нас под рукой — простую PS/2 компьютерную клавиатуру. Из плюсов:

  • вещь не дорогая;
  • продается в любом компьютерном магазине
  • нам доступно 101 клавиша
  • займет клавиатура всего 2-pin микроконтроллера для синхросигнала и данных.

 
logo_keyboard+atmel

В качестве микроконтроллера я буду использовать ATmega328P или Arduino UNO.

 

 

Немного теории

 

Если вы вскроете оплетку кабеля для клавиатуры, то вы обнаружите 4-е провода:

  • провод питания (5 В)
  • провод земли
  • провод синхросигнала (CLK)
  • провод данных (DATA)

Каждая клавиша на клавиатуре имеет свой 8-и битный код, называемый скан-кодом и записывается в шестнадцатеричном виде (HEX), смотри ниже.

 

scan_code

 

Когда вы нажимаете на клавишу, по SLK передаются прямоугольные импульсы а по DATA 11-и битный код:

keyboard_code

 

Биты данных считываются компьютером при переходе CLK с высокого уровня на низкий.

Первый бит всегда равен 0 — это стартовый бит, далее идет 8-емь бит скан-кода, после чего бит контроля четности и в конце стоповый бит, который всегда равен 1.

 

 

Как подключить PS/2 клавиатуру к микроконтроллеру?

 

На самом деле порт PS/2 компьютерный клавиатуры это разновидность разъема Mini-DIN, её 6-и пиновый вариант.
В клавиатуре установлен min-din 6 pin штекер (папа), мы все его видели на конце кабеля клавиатуры.

 

mini_DIN_6_pin_plug

Гнездо min-din 6 pin (мама) находится на материнской плате, для подключения к микроконтроллеру нам придется его выпаивать из старой клавиатуры, что не удобно.

Я советую приобрести нормальное гнездо min-din 6 pin для кабеля, например на ebay.ru он стоит ~ 1$. Выглядит он следующим образом:

mini_DIN_6_pin_jack

(слева в собранном виде, справа в разобранном)

В качестве примера я буду подключать клавиатуру к Arduino UNO (контроллер ATmega328P), от нас требуется подключить проводки по следующей распиновки.

mini_DIN_6_pin_jack_

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

 

mini_DIN_6_pin_jack__

 

В вашем случае концы проводков вы можете припаять к плате микроконтроллера, я буду использовать pin-ы Arduino UNO.

  • GND подключаем к GND Arduino UNO
  • Vcc подключим к 5V Arduino UNO
  • DATA подключим 2-pin Arduino UNO
  • CLK подключим к 3-pin Arduino UNO

 

mini_DIN_6_pin_jack+Arduino

 

Далее останется только подключить клавиатуру к гнезду.

 

 

Исходный код прошивки

 

В интернете для работы с PS/2 клавиатурой в больше половины случаев используют библиотеку ps2keyboard, где через цикл проверяют состояние «переменной — буфера» обмена с клавиатурой. Я не сторонник проверять что-то через цикл, прошивка будет занята только работой с клавиатурой. А если нам нужно производить расчеты или работать с каким-нибудь медленным оборудованием? Тут будет что-то страдать или наши расчеты или скорость реакции на клавиатуру.

Я предлагаю использовать прерывание…

PIN контроллера принимающий CLK (синхроимпульсы) от клавиатуры нужно настроить как внешнее прерывание при переходе из высокого состояние в низкий и в обработчике считывать бит данных с DATA. Алгоритм обработчика прерывания должен побитно накапливать посылаемый скан-код с клавиатуры.

 

Код для Arduino, подключаем DATA к 2-ому пину, CLK подключим к 3-ему пину.

 

При нажатие на клавишу клавиатуры, Arduino по виртуальному COM порту будет посылать скан-код в HEX.

Например, если я зажму клавишу «j«, а потом её отпущу, то в мониторе порта мы увидим следующий код:

 

UART_monitor_scan_code

 

 




Буду признателен если вы поделитесь данным постом


Ваш комментарий


Ответ в цифрах

 
© s-engineer.ru, 2012-2017 | Все права защищены