Самоделки на микроконтроллерах

авторский проект Александра Писанца

+38 097 8875581
 Skype: alex
Е-mail: im48@yandex.ru

Компьютерная клавиатура и микроконтроллеры (Урок 1)

Оцените материал
(3 голосов)

Приветствую на сайте по программированию микроконтроллеров для начинающих. Начинаю серию уроков по подключению компьютерной клавиатуры к микроконтроллеру. Из урока узнаете, как формируются данные с компьютерной клавиатуры (PS/2) на микроконтроллер. В следующем уроке, соберём простое устройство на микроконтроллере и на практике, кто программирует на си в Atmel Studio, разберём конкретно пример по принятию данныx с клавиатуры на микроконтроллер. В третьем уроке, рассмотрим, как посылать команды, с микроконтроллера на клавиатуру. Это нужно, к примеру, для работы со светодиодами, расположенными на клавиатуре. Но как было уже сказано, прежде чем начнём осваивать протокол обмена, рассмотрим, как формируются данные с клавиатуры. Урок теоретический, к arduino, Atmel Studio, CodeVision AVR и т.д. не привязан, поэтому будет понятен всем программистам микроконтроллеров.

                                      

Клавиатура представляет собой завершённое устройство. И не зависимо, какая используется клавиатура стандартная либо с расширенными функциями, каждой кнопке клавиатуры, присвоен, уникальный код, при нажатии на соответствующую кнопку, клавиатура отправляется код нажатой кнопки. В зависимости от кнопки, код может состоять из одного байта, двух, трех и даже из восьми. Рассмотрим, как формируется пакет данных на нажатие одной из кнопок клавиатуры, условно обозначу клавиатуру и приёмное устройство.

компьютерная клавиатура

Нажата и удерживается ”F”. Код 0x2Bh, клавиатура отправляет на микроконтроллер. Но код кнопки отправляется не один раз, пока нажата кнопка, клавиатура с интервалом в сто миллисекунд, постоянно отправляет код нажатой кнопки.

программирование микроконтроллеров

Кнопка отжата, клавиатура также сообщает об изменении состояния кнопки, отправляя первым специальный символ 0xF0h, который и информирует нас об отпускании кнопки. Сразу вслед за символом идёт код отпущенной кнопки 0x2Bh, после этого, пакет данных прекращается.

                            микроконтроллеры avr

Рассмотрим, как будет выглядеть данные при нажатии двух и более кнопок. Нажата и удерживается "F". Код 0x2Bh, клавиатура отправляет нам постоянно с интервалов по времени. При нажатии кнопки D, клавиатура отправляет код 0x23h. При этом код кнопки F, больше не отправляется, хоть данная кнопка и в нажатом состоянии. Нажимаем кнопку S, получаем код кнопки 0x1Dh. Как вы заметили, клавиатура постоянно сообщает микроконтроллеру о последнем действии над клавиатурой. Но это не значит, что клавиатура не сообщит об изменении уже нажатых кнопок. Рассмотрим, два варианта как это происходить.

Вариант 1:
Первую отпускаем кнопку F, клавиатура один раз сообщит об этом. Установив специальный символ с адресом отпущенной кнопки (0x2Bh 0xF0h), после этой информации продолжается отправка данных последней нажатой кнопки на клавиатуре, в нашем случае S (0x1Dh).

протокол клавиатуры

                                                                                            рис4

Те же действия происходят при изменении кнопки D (0x23h 0xF0h). При изменении состояния кнопки S, мы также получим специальный символ с адресом кнопки (0x1Dh 0xF0h), после этого поток данных с клавиатуры прекращается.

Вариант 2:
Изменим состояние кнопок в другой последовательности. Поскольку последними нашими действиями было нажатие кнопки S, клавиатура постоянно отправляет
код данной кнопки (0x1Dh). При изменении состояния кнопки S, получаем специальный символ с адресом (0x1Dh 0xF0h), после этого пакет данных прекращается.              

Отпускаем кнопку D, получаем один раз данные на это действие. Как вы уже поняли, специальный символ с адресом отпущенной кнопки (0x23h 0xF0h). То же самое, происходит с кнопкой F (0x2Bh0xF0h).

 Подытожим выше сказанное. Когда поступают данные без специального символа 0xF0, значить кнопка находится в нажатом состоянии. Как только принимаем, специальный символ и сразу за ним данные кнопки, это нам говорит что произошло противоположное изменение кнопки. Так вот и формируются данные практически для всех кнопок, кроме одной. Кнопка “Pause / Break” работает совершено по другому. При нажатии отправляется один раз код кнопки, при отпускании кнопки мы не получаем нечего, мы можем видеть только нажатие. Поскольку у нас материал образовательный, рассмотрим, как будет выглядеть пакет данных при одновременном нажатии и отпускании, к примеру, двух кнопок.

Фиксируется одновременное нажатие двух кнопок A и Z. Одновременным нажатием либо отпусканием кнопок, считается, если фиксация произошла, примерно за интервал времени 100 миллисекунд. Простыми словами, нажатие двух кнопок произошло между пачками данных. Адрес кнопок посылается по старшинству. Сначала адрес кнопки Z (0x1Ah), затем A (0x1Ch). Причём данные идут подряд, без каких либо разделительных символов.

                                                                           рис 5               

Дальше постоянно через интервал в 100 миллисекунд получаем самый старший код кнопки (0x1Ch). При одновременном отпускании кнопок. Также адреса кнопок идут по старшинству. Но, перед адресами кнопок присутствует разделительный спец символ.

рис6

Возможно вам, пока не понятно, как же принимать эти самые данные на микроконтроллер. В следующем уроке мы разберём протокол, он простой. И на примере с микроконтроллером вам станет все ясно.

Прочитано 1382 раз

Добавить комментарий


Защитный код
Обновить