Реклама ⓘ
Главная » Компьютерная электроника
Призовой фонд
на апрель 2024 г.
1. 100 руб.
От пользователей

Похожие статьи:


Реклама ⓘ

HID клавиатура на микроконтроллере

В этой статье рассмотрим разработку USB HID клавиатуры. Устройство будет работать точно так же как стандартная USB клавиатура для компьютера, при этом, как и в оригинале, установка драйверов не нужна, так как при данной технологии используются стандартные ресурсы Windows.

Для реализации устройства будет использоваться ранее рассмотренная отладочная плата для микроконтроллера AT90USB162. Логика выбора этого микроконтроллера для изготовления клавиатуры простая - главный и, пожалуй, единственный аспект – это аппаратный USB интерфейс. В остальном сам же по себе клавиатура это контроллер нажатия определенных кнопок. Однако, мало просто нажимать кнопки, важно также знать что именно нужно посылать персональному компьютеру, чтобы был эффект от нажатия этих самых кнопок, а именно нужно знать коды клавиш.

Так какую именно клавиатуру можно сделать? Да вообще любую, вплоть даже до своей оригинальной раскладки, вообще же как обычно во все упирается фантазия разработчика. Таким образом, немного поразмыслив на эту тему, вспомнилось, что у некоторых ноутбуков на раскладке клавиатуры не всегда присутствует цифровая панель или numpad. Поэтому было решено было сделать показательный проект цифровой панели клавиатуры. Для этой цели как раз хватает выводов микроконтроллера. К слову, максимальное количество линий ввода/вывода равно 22 у этого микроконтроллера. Соответственно максимум 22 кнопки можно сделать на клавиатуре и это с учетом задействованного вывода Reset. Однако можно сделать вариант и из матрицы клавиш, тогда из 22 лини ввода/вывода можно сделать 121 клавишу (11*11).

Для эталона numpad клавиатуры из поиска гугла была взята картинка таковой:

Помимо этих 18 клавиш от себя также добавил SHIFT, чтобы использовать другие функции клавиш такой клавиатуры.

С основными нюансами определились, теперь можно приступить к проектированию схемы клавиатуры на основе микроконтроллера AT90USB162:

Проект HID клавиатуры на микроконтроллере

Схема построена на микроконтроллере AT90USB162, питание которого берется от порта 5 вольт. Микроконтроллер внутри содержит стабилизатор на 3,3 вольта для питания линий USB (которые как раз и работают именно на таком напряжении). Конденсатор C6 выполняет функцию фильтра для этого внутреннего стабилизатора напряжения. Номинал можно увеличить. Резисторы R2, R3 необходимы для корректной работы по линиям данных USB порта. Кварц используется номиналом 16 МГц, так как микроконтроллер питается от 5 вольт, что позволяет поставить кварцевый резонатор на более высокую частоту. При питании 3,3 вольта, согласно даташиту, максимальная частота кварца для этого микроконтроллера составила бы 8 МГц. Резисторы R5 и R6 подтягивают 5 вольт к линиям микроконтроллера для правильной работы кнопок и исключения воздействия помех на этих линиях. Резисторы R1 и R4 ограничивают ток, протекающий через светодиоды, чтобы исключить их выход из строя

В этой схеме светодиод LED2 будет использоваться для индикации того, что клавиатура готова к использованию – пять раз моргнул, значит все загрузилось и можно жать кнопки. Вообще же функционал светодиода можно всегда подредактировать для других нужд.

Схема есть, теперь необходимо написать прошивку, чтобы клавиатура заработала. Здесь есть несколько путей. Можно использовать библиотеку LUFA для написания прошивки, а можно использовать встроенные библиотеки USB (USB HID) компилятора CodeVisionAVR.

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

Таким образом, за 10 секунд можно настроить аппаратный USB микроконтроллера, ну и плюс к этому линии ввода и прочее, что нам вдруг необходимо. Честно говоря, такая концепция меня зацепила, ведь даже не открыв даташит, можно настроить любой модуль микроконтроллера. С одной стороны это хорошо, но с другой перестаем читать документацию и разбираться в принципах работы. Так что расставленные галочки лучше закреплять даташитом. А для генерации начального кода в CodeVisionAVR необходимо открыть функцию CodeWizard, выбрать необходимый микроконтроллер и в меню как на скриншоте выбрать все, что нам необходимо.

Итак, по-быстрому настроив USB и линии ввода микроконтроллера для клавиш, пишем основной код прошивки, а именно по событию нажатия клавиш отправляем соответствующие коды на компьютер. Здесь все просто – реализация через конструкцию if. Исходный код предоставлен в конце статьи.

Формат отправки кодов клавиш следующий: используется функция

usb_keyboard_keypress(код нажатой клавиши, модификатор);

Код клавиши выбираем соответственно из таблиц выше. А что такое модификатор? Одна клавиша может выполнять 2 функции, происходит это при нажатии клавиши SHIFT и тогда, например, клавиша с цифрой 4 выполняет функцию стрелки влево. Так фот нажатая клавиша SHIFT и есть модификатор. Если модификатор отсутствует в функции эта переменная будет равна нулю, если модификатор присутствует, то эта переменная должна быть равна коду модификатора. Вот и все премудрости клавиатуры.

Эта функция описана во встроенных библиотеках USB (USB HID) компилятора CodeVisionAVR, название библиотеки «usb_hid.h». Ее можно выдернуть из папки установленного компилятора или просмотреть в процессе написания прошивки, она будет включена в проект. Причем в этой же библиотеке присутствует список кодов клавиш клавиатуры, а также модификаторов. Это можно брать от туда, либо просто прописывать код в функцию.

Пишем код, компилируем, получаем HEX файл прошивки для микроконтроллера. Прошивка заняла примерно 3 кбайта памяти. Простительно с учетом того, сколько времени было потрачено на генерацию начального кода. Прошивать будем программой Flip по USB. Процесс прошивки этой программой описан в статье Отладочная плата AT90USB162. При этом методе про фьюз биты не вспоминайте, их можно прошить только ISP программатором. Следуем инструкциям прошиваем, жмем Reset и в диспетчере устройств появится или просто клавиатура HID, или, как в моем случае, вторая клавиатура HID:

Все, устройство загружено и готово к использованию. Клавиатура работает полноценно.

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

Расстановка кнопок не как в оригинальных нумпадах, зато новый дизайн :) У меня небольшие ассоциации с Франкенштейном. 

Для перепрошивки в случае чего необходимо активировать bootloader (жмем и удерживаем Reset, жмем и удерживаем HWB, отпускаем Reset, отпускаем HWB, пропадет клавиатура из диспетчера и появится сам микроконтроллер) и перепрошить.

USB – это просто.

К статье прилагается файл прошивки микроконтроллера AT90USB162, исходник в программе CodeVisionAVR version 3.12, печатная плата отладочной платы для микроконтроллера AT90USB162, небольшое видео работы клавиатуры.

Список радиоэлементов

Обозначение Тип Номинал Количество ПримечаниеМагазинМой блокнот
IC1 МК AVR 8-бит
AT90USB162
1 Поиск в магазине ОтронВ блокнот
C1 Конденсатор1 мкФ2 1206Поиск в магазине ОтронВ блокнот
C2 Конденсатор0.1 мкФ1 1206Поиск в магазине ОтронВ блокнот
C3, C4 Конденсатор22 пФ2 1206Поиск в магазине ОтронВ блокнот
C5 Конденсатор10 мкФ1 1206Поиск в магазине ОтронВ блокнот
R1 Резистор
1.5 кОм
1 1206Поиск в магазине ОтронВ блокнот
R2, R3 Резистор
22 Ом
2 1206Поиск в магазине ОтронВ блокнот
R4 Резистор
1 кОм
1 1206Поиск в магазине ОтронВ блокнот
R5, R6 Резистор
10 кОм
2 1 - 0805, 1 - выводнойПоиск в магазине ОтронВ блокнот
LED1 СветодиодКрасный1 1206Поиск в магазине ОтронВ блокнот
LED2 СветодиодЗеленый1 1206Поиск в магазине ОтронВ блокнот
Z1 Кварцевый резонатор16 МГц1 Поиск в магазине ОтронВ блокнот
Jmp1, Jmp2 ПеремычкаДжемпер2 Поиск в магазине ОтронВ блокнот
S1, S2 Тактовая кнопкаIT-1127-5-160G-G2 smdПоиск в магазине ОтронВ блокнот
S3-S21 Тактовая кнопкаTC-A10919 Поиск в магазине ОтронВ блокнот
X1 РазъемminiUSB1 smdПоиск в магазине ОтронВ блокнот
Добавить все

Скачать список элементов (PDF)

Прикрепленные файлы:

Теги:

Опубликована: Изменена: 05.09.2017 0 4
Я собрал 0 3
x

Оценить статью

  • Техническая грамотность
  • Актуальность материала
  • Изложение материала
  • Полезность устройства
  • Повторяемость устройства
  • Орфография
0

Средний балл статьи: 5 Проголосовало: 3 чел.

Комментарии (15) | Я собрал (0) | Подписаться

0
Hork112 #
А можно на одну клавишу забивать комбинацию клавиш?
Ответить
0

[Автор]
Gauss #
usb_keyboard_keypress(KS_Q, KM_RIGHT_SHIFT);
в скобках вначале основная клавиша, а потом модификатор, например шифт - вызов функции в таком виде сгенерирует заглавную букву, то есть как будто нажато две клавиши
Ответить
0
Tig #
Хороший "быстрый старт" с примером, главное все вполне просто
Ответить
0

[Автор]
Gauss #
Согласен, предложенный подход не должен вызывать трудностей
Ответить
0
Targo #
Скажите, у устройств есть возможность задать какой либо уникальный идентификатор, в случае подключения двух или более таких клавиатур?
Или портировать код на at90usb1287, там клавиш больше можно задействовать?
Ответить
0

[Автор]
Gauss #
Все, что можно задать для интерфейса на скриншоте из кодвижна, попробовать поиграться значениями не страшно: http://cxem.net/comp/images/comp164-3.png
Ответить
0
Виктор #
А можно ли задать в данном устройстве управление плееров, громкостью?
Ответить
0

[Автор]
Gauss #
Да - нужно использовать коды соответствующих клавиш
Ответить
0
liner #
У меня проект не компилируется в CV AVR v3.12., так как в нем нет файлов библиотек usb_device.h, usb_hid.h и соответственно файлов с расширением .lib. Или может это мне такая версия CV попалась. Подскажите где можно их скачать?
Ответить
0

[Автор]
Gauss #
может это мне такая версия CV попалась
Вреде бы не киндер-сюрприз покупается...
На каждую версию есть описание с функционалом, там то все и написано
Ответить
0
Guest #
А как в этой схеме обстоит дело с дребезгом контактов?
Ответить
0
Denis #
А где плату взял отладочную?
Ответить
0
Gregory #
Спасибо за проэкт, все красиво и интересно. У меня CVAVR v3.14 и 3.42. Согласно Вашему руководству сгенерировал HID Keyboard, прошил. При подключении к USB HID Keyboard в диспетчере не появляется, а появляется:
CodeVisionAVR USB Device(COM7)
Указано несуществующее устройство.

Вероятно бракованный CVAVR
Ответить
0
Gregory #
Спасибо, уже все работает, пришлось поменять Вендор ИД и Продукт ИД. Ранее по этому адресу подключался USB_cdc и виндовс от этого отупел.
Еще раз спасибо за такой проэкт. Все работает четко!
Ответить
0
Сергей #
Отличная схема. Всё работает. Легко настраивается. Спасибо.
Ответить
Добавить комментарий
Имя:
E-mail:
не публикуется
Текст:
Защита от спама:
В чем измеряется электрическое сопротивление?
Файлы:
 
Для выбора нескольких файлов использйте CTRL

МиниПК MK809V - 4 ядра, Android 4.4.2
МиниПК MK809V - 4 ядра, Android 4.4.2
Металлоискатель MD3010II Набор для сборки - УНЧ 2х60 Вт на TDA7294
вверх