В статье мы рассмотрим простую конструкцию на микроконтроллере, реализующую 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 микроконтроллера (на схеме не показано) для расширения функций.
Кнопки подключаются при помощи коннекторов к плате с микроконтроллером согласно схемы.
Программное обеспечение
Как отмечалось в первой части статьи, за основу конструкции были взяты примеры приложений, которые предназначены для использования с отладочным набором Low Pin Count Development Kit от компании Microchip. Этих примеров и демонстрационных приложений для разработки USB устройств очень много, для нашего устройства был выбран пример реализации USB HID клавиатуры.
Для разработки программного обеспечения, а также для внесения корретив, переназначения сочетаний клавиш необходима интегрированная среда разработки MPLAB и компилятор С18, которые доступны для скачивания на официальном сайте компании.
Программы микроконтроллера из примеров компании Microchip написаны таким образом, что ее можно использовать для различных PIC микроконтроллеров со встроенным USB интерфейсом. Единственное, что понадобится, – это скорректировать код функции
Keyboard().
Данная функция вложенная и условно расположена так:
ProcessIO() -> Keyboard() -> Check if IN endpoint is ready -> Check Switches ->Send Data -> ProcessIO()
Основной момент в программе – это поверка состояния кнопок, заполнение буфера данных соответствующими данными и отправка их по USB в компьютер. Затем цикл повторяется.
В буфер данных записываются 8 байт, которые имеют определенные значения. В программе эти 8 байт обозначены как
hid_report_in[0] - hid_report_in[7].
Рассмотрим их назначение.
hid_report_in[0]= – это байт модификатора, он содержит информацию о состоянии функциоанльных клавиш (Alt, Ctrl, Shift, Win). 8 битное значение, которое характеризует нажатие этих кнопок по отдельности, или одновременное нажатие нескольких (напрмер Ctrl+Shift).
Назначение битов в байте hid_report_in[0]
Бит |
Соответствующая клавиша |
0 |
Левый Ctrl |
1 |
Левый Shift |
2 |
Левый Alt |
3 |
Левая Win |
4 |
Правый Ctrl |
5 |
Правый Shift |
6 |
Правый Alt |
7 |
Правая Win |
Например, запись:
hid_report_in[0]=4 означает, что байт имеет значение 4 (десятичное число), и это соответствует нажатой кнопке Alt (бинарный код 100);
hid_report_in[0]=7 означает, что байт имеет значение 7, и это соответствует нажатым кнопкам Ctrl+Alt+Shift (бинарный код 111).
Следующий байт
hid_report_in[1]=0, всегда равный 0, зарезервирован.
Байты
hid_report_in[2] … hid_report_in[7] предназначены для записи и отправки по USB интерфейсу кодов клавиш. Т.е. одновременно может эмулироваться нажатие до 6 клавиш, и данные отправляются как единое целое. Коды клавиш для USB HID устройств можно взять в документе HID Usage Tables, который доступен для скачивания в разделе загрузок.
Такая реализация позволяет эмулировать и посылать данные (коды) о нескольких одновременно нажатых кнопках. К примеру,
Alt+Пробел+n. Также, иногда потребуется эмулировать нажатие комбо-клавиш, наприер
Alt+Пробел и затем клавиша
n. Для такой реализации в программном обеспечении нужно использовать байты данных
NextModKey and
NextKey и затем установить флаг
AnotherFlag. В этом случае, после посылки первой команды, отправится следующая с кодом данной последней клавиши.
Для прошивки микроконтроллера можно использовать внешний программатор или предусмотреть установку разъема для внутрисхемного программирования установленного микроконтроллера.
В архиве файлы проекта MpLab, Документ HID Usage Tables, Принципиальная схема, рисунки печатной платы, исходные коды и HEX файл для прошивки микроконтроллера
10keyshidkeyboard.rar [1,24 Mb] (cкачиваний: 809)