Главная » Компьютерная электроника
Призовой фонд
на май 2017 г.
1. Тестер компонентов MG328
Паяльник
2. Осциллограф DSO138
Паяльник
3. Регулируемый паяльник 60 Вт
Паяльник
4. 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 Поиск в FivelВ блокнот
C1 Конденсатор1 мкФ2 1206Поиск в FivelВ блокнот
C2 Конденсатор0.1 мкФ1 1206Поиск в FivelВ блокнот
C3, C4 Конденсатор22 пФ2 1206Поиск в FivelВ блокнот
C5 Конденсатор10 мкФ1 1206Поиск в FivelВ блокнот
R1 Резистор
1.5 кОм
1 1206Поиск в FivelВ блокнот
R2, R3 Резистор
22 Ом
2 1206Поиск в FivelВ блокнот
R4 Резистор
1 кОм
1 1206Поиск в FivelВ блокнот
R5, R6 Резистор
10 кОм
2 1 - 0805, 1 - выводнойПоиск в FivelВ блокнот
LED1 СветодиодКрасный1 1206Поиск в FivelВ блокнот
LED2 СветодиодЗеленый1 1206Поиск в FivelВ блокнот
Z1 Кварцевый резонатор16 МГц1 Поиск в FivelВ блокнот
Jmp1, Jmp2 ПеремычкаДжемпер2 Поиск в FivelВ блокнот
S1, S2 Тактовая кнопкаIT-1127-5-160G-G2 smdПоиск в FivelВ блокнот
S3-S21 Тактовая кнопкаTC-A10919 Поиск в FivelВ блокнот
X1 РазъемminiUSB1 smdПоиск в FivelВ блокнот
Добавить все

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

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

Теги:

Опубликована: 0 3
Я собрал 0 3
x

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

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

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

Комментарии (10) | Я собрал (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 попалась
Вреде бы не киндер-сюрприз покупается...
На каждую версию есть описание с функционалом, там то все и написано
Ответить
Добавить комментарий
Имя:
E-mail:
не публикуется
Текст:
Защита от спама:
В чем измеряется электрическое сопротивление?
Файлы:
 
Для выбора нескольких файлов использйте CTRL

МиниПК MK809V - 4 ядра, Android 4.4.2
МиниПК MK809V - 4 ядра, Android 4.4.2
USB-реле (2 канала) Металлоискатель MD3010II
вверх