HID клавиатура на микроконтроллере
В этой статье рассмотрим разработку USB HID клавиатуры. Устройство будет работать точно так же как стандартная USB клавиатура для компьютера, при этом, как и в оригинале, установка драйверов не нужна, так как при данной технологии используются стандартные ресурсы Windows.
Для реализации устройства будет использоваться ранее рассмотренная отладочная плата для микроконтроллера AT90USB162. Логика выбора этого микроконтроллера для изготовления клавиатуры простая — главный и, пожалуй, единственный аспект – это аппаратный USB интерфейс. В остальном сам же по себе клавиатура это контроллер нажатия определенных кнопок. Однако, мало просто нажимать кнопки, важно также знать что именно нужно посылать персональному компьютеру, чтобы был эффект от нажатия этих самых кнопок, а именно нужно знать коды клавиш.
Так какую именно клавиатуру можно сделать? Да вообще любую, вплоть даже до своей оригинальной раскладки, вообще же как обычно во все упирается фантазия разработчика. Таким образом, немного поразмыслив на эту тему, вспомнилось, что у некоторых ноутбуков на раскладке клавиатуры не всегда присутствует цифровая панель или numpad. Поэтому было решено было сделать показательный проект цифровой панели клавиатуры. Для этой цели как раз хватает выводов микроконтроллера. К слову, максимальное количество линий ввода/вывода равно 22 у этого микроконтроллера. Соответственно максимум 22 кнопки можно сделать на клавиатуре и это с учетом задействованного вывода Reset. Однако можно сделать вариант и из матрицы клавиш, тогда из 22 лини ввода/вывода можно сделать 121 клавишу (11*11).
Для эталона numpad клавиатуры из поиска гугла была взята картинка таковой:
Помимо этих 18 клавиш от себя также добавил SHIFT, чтобы использовать другие функции клавиш такой клавиатуры.
С основными нюансами определились, теперь можно приступить к проектированию схемы клавиатуры на основе микроконтроллера AT90USB162:
Схема построена на микроконтроллере 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, небольшое видео работы клавиатуры.
Источник
10-кнопочная USB HID клавиатура на микроконтроллере PIC. Часть 1 — Схема и конструкция
В статье мы рассмотрим простую конструкцию на микроконтроллере, реализующую 10-кнопочную USB HID (Human Interface Device) клавиатуру, которая является Plug-and-Play устройством и не требует установки драйверов. Изначально устройство предназначалось для быстрого доступа к часто используемым сочетаниям клавиш в операционной системе Windows, например Alt+F4 (закрыть программу), Windows+D (свернуть все окна), Ctrl+Alt+Del и др. Однако пользователи могут приспособить устройство и для других целей, например, для сбора и накопления данных.
Основой конструкции является микроконтроллер Microchip PIC18F14K50, помимо него используется несколько резисторов, конденсаторов и коннекторы. Устройство не требует отдельного источника питания, т.к. подключается к порту USB компьютера (USB Host) и получает питание от него.
Аппаратная часть базируется на примере от компании Microchip “USB Device HID Keyboard”, который предоставляется в отладочном наборе DM164127 — Low Pin Count USB Development Kit. Сочетания клавиш задаются в программе микроконтроллера, назначение сочетания клавиш мы рассмотрим во второй части статьи.
Коды сочетаний клавиш предназначены для операционной системы Windows, однако возможно их переназначение для использования в других ОС.
Основные характеристики устройства:
- 10 входных каналов (кнопки);
- все кнопки имеют подтягивающие резисторы к «+» питания;
- активное состояние кнопок – низкий логический уровень;
- подключение к порту USB;
- питание от USB;
- Plug-and-Play устройство, не требуется установка драйверов.
Основные характеристики микроконтроллера PIC18F14K50:
- Flash-микроконтроллер со встроенным USB 2.0 интерфейсом;
- рабочая частота до 48 МГц;
- 16 КБайт Flash-память программ, 768 Байт SRAM, 256 Байт EEPROM;
- один 8-битный таймер, три 16-битных таймера, 1 канал ШИМ;
- коммуникационные интерфейсы: USB, SPI, I2C, UART;
- встроенный 9-канальный 10-битный АЦП;
- два аналоговых компаратора;
- до 15 линий ввода/вывода общего назначения;
- корпус: 20-выводный DIP, SOIC, SSOP.
Для сборки устройства нам понадобятся:
- микроконтроллер PIC18F14K50;
- кварцевый резонатор 12 МГц;
- один конденсатор 0.1 мкФ;
- один конденсатор 220 нФ;
- 2 сборки из 5 резисторов номиналом 10 кОм;
- один резистор номиналом 1.5 кОм;
- панелька (сокет) для установки 20-выводного микроконтроллера;
- коннектор USB Type B;
- кабель USB Type B – Type A;
- 10 кнопок;
- 4-выводные и 6 выводные коннекторы (либо аналогичные).
Принципиальная схема устройства
Вид печатной платы
Печатная плата односторонняя, пользователи могут самостоятельно разработать печатную плату с применением smd компонентов с целью миниатюризации устройства.
Расположение элементов на печатной плате
Кнопки установлены на отдельной плате и подключаются к плате с микроконтроллером при помощи коннекторов (обозначены на плате HEADER1-4 и HEADER5-10).
Назначение отдельных компонентов и основные замечания по установке на печатную плату
Наборы 10 кОм резисторов – данные элементы содержат в себе 5 резисторов номиналом 10 кОм каждый, включенных параллельно с одним общим выводом. Этот вывод обозначается точкой на корпусе элемента.
Кварцевый резонатор должен быть расположен максимально близко к микроконтроллеру. Возможно, потребуется подключение двух конденсаторов емкостью 22 пФ к кварцевому резонатору. Конденсатор С2 (220 нФ) подключается между выводом микроконтроллера VUSB и V+.
Резистор R1 (1.5 кОм) подтягивает линию Data+ к напряжению питания, что сигнализирует для Host устройства, на какой скорости работает USB Device (клавиатура).
Джамеперы, указанные на печатной плате (J1 и J2, P1-P2-P3, G1 и G2, Rx и Tx), используются в связи с односторонней разводкой печатной платы, а также для возможности расширения функций:
- J1 соединен с J2;
- P1 подключен к P2, который подключен к P3;
- точки G1 и G2 остаются свободными (подключены к «–» питания);
- точки Rx и Tx подключены к линиям Rx и Tx микроконтроллера (на схеме не показано) для расширения функций.
Кнопки подключаются при помощи коннекторов к плате с микроконтроллером согласно схемы.
В следующей части статьи мы рассмотрим основные моменты в ПО микроконтроллера, как назначать сочетания клавиш и использование клавиатуры.
Перевод: Vadim по заказу РадиоЛоцман
Источник
Hid клавиатура своими руками
4$)
2. никаких доп драйверов
3. настраиваемые системные кнопки, либо комбинации
4. настройка происходит без программирования чипа
База собрана на AtMega8. В распоряжении минимум 16 кнопок.
Либа в основе V-USB.
Если вам завтра захочется переназначит кнопки, то достаточно запустить программу и сделать конфигурацию.
Сейчас все выглядит так
UPD 04.01.2016
Выложил полную версию проекта. Пользуйтесь. Кому нужны заводские печатные платы, пишем в личку.
UPD 16.06.2017
Спрашивали про фьюзы. выкладываю по памяти(Low: 0xFF, High: 0xD1), фото ниже.
Здесь fuse bit’s по аннотации Atmel(как в даташитах):
без галочки — значит не запрограммирован (1),
стоит галочка — запрограммирован (0).
Вложения
firmware.rar (10.8 Кб, 588 просмотров) | |
soft.rar (94.4 Кб, 622 просмотров) | |
Scematic.pdf (17.1 Кб, 944 просмотров) |
1. Зачем mega16? прошивка в данный момент весит менее 5к. что-то больше городить на чип безмыслено.
2. Мне 16 пинов с головой хватит от mega8. А мега16 вообще бессмысленная покупка. за эти деньги можно ARM купить, жаль что не в дипе.
3. либа v-usb заберет 90% производительности чипа. больше флеша бес мысленно, на другие действия не останется достаточно ресурсов.
4. mega8 дороже в 2 раза и имеет большие габариты, 40пин как ни как.
чтоб работал бутлоадер, вам нужно достать плату и нажать спец пин для прошивки. а идея не разбирать ничего, чтоб менять конфигурацию.
6. я тему создал для других, чтоб повторили девайс, а не чтоб задавать вопросы.
Девайс уже готов и проверен на коленке. сейчас пишу программу для конфигурирования.
рекомендую Teensy 2.0 http://pjrc.com/store/teensy.html
всего 16$
сразу есть аппаратное USB. Может работать как клава+мышка+джойстик+ком-порт одновременно.
В ардуине поддерживается, если доп. модуль установить.
Ну и паять почти ничего не надо. Я себе на ней все построил, мне очень понравилось из всего что я еще пробовал.
Источник