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

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

В данном проекте создается клавиатура на базе микроконтроллера, которая отправляет нажатия кнопок по USB и сопрягается с Windows приложением AutoHotKey, предназначенного для создания приложений и макросов.

AutoHotKey может использоваться с вашей оригинальной клавиатурой без необходимости дополнительной клавиатуры. Данное устройство не предназначено для всех, однако может применяться в следующих ситуациях:

  • Использование одной кнопки вместо нажатия комбинации горячих клавиш
  • Создание специальных контроллеров для игр и интерфейсов
  • Создание специальных программных задач, например, использование каждой кнопки для сохранения различных типов идентификатора файла в приложении.

Программное обеспечение AutoHotKey может назначать любое действие на нажатие кнопки:

  • Запуск приложений
  • Многошаговые команды, выполняемые с помощью клавиатуры
  • Упрощение действий при использовании ярлыков
  • Запуск специфических веб-адресов
  • Вставка сниппетов текста.

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

Шаг 1: Используемые компоненты

  • Микроконтроллер Adafruit Trinket
  • Механический клавиатурный блок Mx Cherry
  • Небольшая печатная плата
  • Резисторы: 1кОм (x4 штуки), 100кОм (x2 штуки)
  • Припой
  • Проводники.
  • Паяльник
  • Ножовка по металлу
  • Плоскогубцы.

Шаг 2: Модификация корпуса

В проекте используется клавиатурный блок mx cherry, но вы можете подобрать и другие устройства с несколькими переключателями: игровые контроллеры, цифровые блоки клавиатуры или просто переключатели, установленные на печатной плате.

В отдельных стенках корпуса нужно прорезать канавки. Это необходимо для размещения проводников внутри корпуса. Я использовал плоскогубцы для удаления пластиковых перегородок корпуса между верхними и нижними кнопками для пропуска большего количества проводников.

Шаг 3: Сборка схемы

Я начал с припаивания полноразмерного проводника к входам, заизолировав с другой стороны. Далее необходимо припаять резисторы и соединения между кнопками, и в завершении расположить все необходимые проводники.

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

Шаг 4: Код Trinket Arduino

На данном шаге указан программный код, используемый в проекте. Возможно, вам потребуется внести некоторые изменения для входных значений для получения наилучших результатов. Я заменил кнопки с буквой F на кнопки с буквами и выполнил тестирование в блокноте.

Шаг 5: Код AutoHotKey

Шаг 6: Внесение изменений

Использование отдельного usb-устройства позволит вам выполнять нажатие кнопок в соответствии с вашими предпочтениями.

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 и обычных тактовых кнопок:

Читайте также  Управление светодиодами ws2813 с адресацией с помощью attiny

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

Для перепрошивки в случае чего необходимо активировать 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 по заказу РадиоЛоцман

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

Текущее время: Пт июл 30, 2021 02:22:35

Часовой пояс: UTC + 3 часа

Usb клавиатура

Страница 1 из 1 [ Сообщений: 19 ]

JLCPCB, всего $2 за прототип печатной платы! Цвет — любой!

Зарегистрируйтесь и получите два купона по 5$ каждый:https://jlcpcb.com/cwc

Сборка печатных плат от $30 + БЕСПЛАТНАЯ доставка по всему миру + трафарет

При замене в современном автомобиле электромеханических реле на интеллектуальные силовые ключи PROFET производства Infineon необходимо учитывать особенности их коммутации по сравнению с «сухими контактами» реле, а также особенности управления с их помощью различными типами нагрузок.

Вот оно, уже готовое.

_________________
Разница между теорией и практикой на практике гораздо больше, чем в теории.

Вебинар посвящен проектированию и интеграции встроенных и внешних антенн Quectel для сотовых модемов, устройств навигации и передачи данных 2,4 ГГц. На вебинаре вы познакомитесь с продуктовой линейкой и способами решения проблем проектирования. В программе: выбор типа антенны; ключевые проблемы, влияющие на эффективность работы антенны; требования к сертификации ОТА; практическое измерение параметров антенн.

_________________
Разница между теорией и практикой на практике гораздо больше, чем в теории.

Нужна хорошая клавиатура для всего.
Нормальный отклик для игр, NKRO не помешает. Раскладка будет моя поэтому хорошо бы переназначить некоторые кнопки(точку и запятую).
Чтото вроде этого

Готовых схем както не густо.

Первая попалась CatBoard на at90usb162 описания функционала нет, куски схемы раскиданы по кучи сайтов, что с *KRO непонятно, про быстродействие тоже ничего. Схема делалась для набора текста.
Теперь наткнулся на тулзу с кучей ссылок как я понял под одну и туже схему клавы в разных вариантах. Начало, и вроде как более полная версия на atmega32u2 и регистрах. Тут известно что 6KRO.

Тут спрашивается какой МК лучше, первый или второй и пара регистров.
Видел обработчик ПК клавы для Радио86РК так там была мега64 и 8 регистров зато с ненужным там NKRO.
У меня в наличии только парочка 168 мег, да и в кодинге я не силён.

Сейчас у меня полноразмерная китайская клава на Cherry MX Black и китайском контролере Hantick HTK1087B без документации.
Всё бы хорошо но дребезг мешает печатать, печатается по нескольку букв, переназначения тоже нет.
Хотя возможно дребезг из за отвала самих кнопок от платы, качество пайки очень китайское. Только кнопку до блеска пайка отвалилась.
Тут думаю может какую RC фиговину припаять для задержки.

По NKRO, контроллер различает нажатие любого количества кнопок, для этой цели на каждой кнопке стоит диод, но отправляет в компьютер с ограничением протокола USB HID Keyboard, это 6 нажатых любых кнопок, и 8 модификаторов.

Кнопок всего 60, есть возможность догнать до стандартных 88 или только поставить 2 МК ? Нужен ещё HEX нумпад, возможно отдельно.

Это особеность МК или клавиатур вообще ?
Читал что на usb и какихто мелкософтовских клавах нет ограничений.

Вот в этом моменте и вопрос, у меня по тестам клавиатура не ограничена, может она передёт нажатия последовательно, а потом последоввательно отпускания с приоритетом передачи отпусканий, отсюда и дребезг иногда.
Есть обычные клавиатуры ps2 и usb там максимум 3 нажатых кнопки и 2 модификатора или 3 модификатора и 2 кнопки.

Кнопка Caps не определяется в тестах как и в некоторых играх, хотя может потомучто я её отключил в системе как капс. Но в других играх она работает. Или это особенность некоторых клавиатур.

Заказал ардуину леонарду на 32u4 как самый дешёвый контролер, чтоб было на чём опыты ставить.
Из софтовых проектов пока только 2 и попалось, это кошкоклава и нечто тмк. У кошкоклавы маловато кнопок, затолкать туда все без доп деталей и правки прошивки врятли получится, так что нет смысла её ковырять.

Только надумал собрать tmk HID Liberation Device как кое что поменялось.
Есть там 2 интересные схемы . Одна на 32u2 что не суть и паре дешифраторах с инверсным выходом.
Вторая более редкая на 32u4 и одном дешифраторе с прямым выходом, в этом дешифраторе и затуп. Покупать одну деталь не хочется, а из того что есть, да и вообще что широко доступно только с инверсным, хотябы тотже 555ид7.
Так что непонятно править код или проще инвертор поставить. К томуже без резисторов подтяжки ардуина без ничего дрыгает кнопками так что системы выключается, видимо защиты там никакой.

Видимо для начала придётся спаять с инвертором чтоб понять как вообще переназначать кнопки. Вроде как есть какаето прога, но что она и как делает непонятно.
Повторить в наше время простое устройство крайне сложно.

Недавно заметил что присмотреный мной проект пропал из исходников https://github.com/tmk/tmk_keyboard .
Теперь там появилась папка orphan куда видимо свалили все штучные проекты. Хотя странно , ведь их тоже делали для замены модулей в готовых клавиатурах

Для начала переназначение нужно потомучто моя клавиатура не будет совпадать с прошивкой, да и как ей совпасть если я не знаю её схему. Из всех существующих проектов, а их всего 2 со схемой , не обозначены клавиши на схеме, только матрица.
Вытягивать из кода не самая простая задача.
В случае с игровыми клавиатурами, там матрица просто ппц. Вот с моей, там есть пара ошибок, но видно что все основные клавиши на одной линии не зависимо от расположения. Фактически 90% игровых расположены всего на 2 проводах. https://github.com/74ls00/GameKB/blob/m . 87b_kb.png

С диодами другое дело, на плёночной клавиатуре их никак не сделать, там используется разведение функциональных клавиш на разные линии чтоб реализовать одновременное нажатие упираемся в тоже, в сложную разводку из кучи проводов.
Если я сделаю HID Liberation Device с дешифратором, то для подключения нумпада из 24 кнопок, нужно всего 8 проводов с учётом питания и они больше не будут использованы нигде.
У моей клавиатуры на это 13 проводов и это только матрица на 6 кнопок меньше чем мне нужно.

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

AVR271

Демонстрация USB клавиатуры

Свойства:

  • поддержка любой операционными системами фирмы Microsoft начиная с Windows® 98SE, Linux и MAC OS;
  • отсутствие необходимости установки драйвера;
  • отображение простого текстового сообщения;
  • отсутствие поддержки управления светодиодами на клавиатуре.

Интерфейс PS/2 исчезает из ПК нового поколения, его замещает интерфейс USB, который стал стандартным интерфейсом между ПК и периферийными устройствами. Это изменение должно быть учтено разработчиками клавиатур, которые должны встраивать USB-интерфейс для подключения клавиатуры к ПК.

Цель этого документа — описание начала реализации и разработки USB клавиатуры на МК AT90USB с использованием отладочного набора STK525 и внутрисистемного программирования с помощью Flip.

Предполагается, что пользователь знаком с программной библиотекой USB для микроконтроллеров AT90USBxxx (Application Note AVR276 Программная библиотека USB для AT90USBxxx) и спецификацией HID-класса (http://www.usb.org/developers/hidpage).


Рис. 1-1. Интерфейс между клавиатурой и ПК

2. Требования к аппаратному обеспечению

Для реализации HID-приложения требуется следующее аппаратное обеспечение:

  • AVR USB демонстрационная плата (STK525, AT90USBKey, STK526. или ваша собственная плата);
  • AVR USB-микроконтроллер
  • USB-кабель (стандартный A в мини B);
  • ПК с операционной системой Windows (98SE, ME, 2000, XP, Vista), Linux® или MAC® OS с USB хостом 1.1 или 2.0.

3. Внутрисистемное программирование и обновление программного обеспечения устройства

Для программирования устройства вы можете использовать несколько методов:

  • JTAG-интерфейс с использованием JTAGICE MKII
  • SPI — интерфейс с использованием AVRISP MKII
  • USB-интерфейс благодаря фабричному DFU загрузчику (bootloader) и программному обеспечению Flip;
  • Параллельное программирование с помощью STK500 или STK600.

Пожалуйста, обратитесь к руководству пользователя используемой вами платы (если вы используете стартовые наборы Atmel) для понимания как программировать устройства этими разными методами.

Пожалуйста, обратитесь к разделу помощи Flip, чтобы понять как устанавливать USB-драйвер и программировать устройство через USB-интерфейс.

Замечание. Flip — это программное обеспечение, поставляемое фирмой Atmel, для предоставления пользователям возможности программирования USB AVR-устройств через USB-интерфейс (для этого не требуется внешнего аппаратного обеспечения) благодаря заводскому DFU-загрузчику.

4. Быстрый старт

Когда ваше устройство запрограммировано файлом usb_keyboard.a90, вы можете начать демонстрацию клавиатуры. Проверьте, что ваше устройство нумеруется в качестве клавиатуры (см. рис. 4-1), после чего вы можете использовать отладочный набор для посылки символов в ПК.


Рис. 4-1. Нумерация клавиатуры

Нижеприведенный рисунок показывает использование STK525 в качестве демонстрации клавиатуры (вы можете использовать другой отладочный набор: AT90USBKey, STK526 — в зависимости от того, с каким USB AVR микроконтроллером вы работаете).


Рис. 4-2. Демонстрационная плата STK525

Назначение демонстрации клавиатуры — послать строку символов в ПК. Для запуска демонстрации следуйте нижеприведенным инструкциям:

  1. Откройте Notepad или другой текстовый редактор.
  2. Установите раскладку клавиатуры QWERTY (иначе в текстовом редакторе вы увидите неправильные символы).
  3. Подсоедините STK525.
  4. Нажмите на джойстик.


Рис. 4-3. Демонстрация клавиатуры

5. Обзор приложения

Приложение «USB-клавиатура» обеспечивает простой обмен данными между ПК и клавиатурой.

ПК «спрашивает» клавиатуру каждый интервал времени P (интервал опроса), есть ли новые данные, если они есть, то клавиатура посылает их в ПК, иначе клавиатура посылает NAK (отказ от транзакции), чтобы «сказать» ПК, что нет новых доступных данных.

Обмен данными между ПК и клавиатурой осуществляется с помощью репортов. Репорт, который содержит информацию о нажатых кнопках, является IN-репортом (посылается от клавиатуры к ПК). Репорт, в котором содержится информация о статусе светодиодов (NUM LOCK, CAPS LOCK, SCROLL LOCK. ) является OUT-репортом (посылается от ПК к клавиатуре). Нижеприведенный рисунок иллюстрирует структуры этих репортов:


Рис. 5-1. Структура USB-репортов


Рис. 5-2. Обзор приложения

6. Программное обеспечение

Как объяснено в документе «Программная библиотека USB для AT90USBxxx» (Application Note AVR276) все программное обеспечение для USB имеет одинаковую архитектуру (для более подробной информацией обратитесь, пожалуйста, к этому документу).


Рис. 6-1 Архитектура программного обеспечения USB-клавиатуры

Этот раздел посвящен только модулю клавиатуры. Изменение файлов, описанных ниже, позволяет пользователю разработать его собственную клавиатуру.

Этот файл содержит функции, которые инициализируют аппаратные средства, используемые в качестве клавиатуры, а также функции, которые получают данные репорта и отправляют их в FIFO конечной точки для подготовки их к отправке в ПК.


Рис. 6-2. Алгоритм работы клавиатуры

Эта функция осуществляет инициализацию параметров клавиатуры и аппаратных ресурсов (джойстик….).

Эта функция проверяет, есть ли нажатые кнопки, и устанавливает в 1 переменную key_hit.

Эта функция проверяет, нажата ли какая-нибудь из кнопок (key_hit == true). Если это условие выполняется, то формируется IN-репорт с соответствующими данными и сохраняется в FIFO конечной точки, чтобы быть отправленным в хост.

Этот файл содержит все процедуры для управления ресурсами отладочной платы STK52x (джойстик, потенциометр, датчик температуры, светодиоды…). Пользователь не должен изменять этот файл при использовании STK52x. Иначе ему придется разработать собственный файл для управления аппаратными ресурсами.

6.3 Как управлять светодиодами CAPS, NUMLOCK.

Управление светодиодами на клавиатуре (CAPS, NUMLOCK. ) осуществляется хостом при нажатии соответствующих кнопок. При получении кода кнопок CAPS или NUMLOCK. хост посылает запрос Set_Report (OUT-репорт) для включения/выключения светодиодов на клавиатуре.

Запрос посылается через нулевую конечную точку (управляющая передача) и должен быть обработан как запрос Set_Configuration, как показано ниже:

Сначала хост посылает set_report, как показано ниже:

Этот запрос является специфическим для HID-класса, поэтому он не обрабатывается функциями в файле usb_standard_request.c, но обрабатывается функциями, содержащимися в файле usb_specific_request.c. В этом файле запрос декодируется с помощью функции usb_user_read_request() в соответствии со значениями полей bmRequest и bRequest. Тип репорта (0x02) соответствует OUT-репорту. Для обработки этого запроса usb_user_read_request() вызовет функцию hid_set_report(). Эта функция подтвердит setup-запрос и затем позволит пользователю получить доступ к посланным данным (вы можете проверить размер с помощью параметра wLength), чтобы узнать, какой светодиод нужно включить/выключить. (обратитесь к спецификации HID-класса для более подробной информации относительно использования значения LEDs).

6.4 Как изменить мое не загрузочное (non-bootable) устройство на загрузочное (bootable) устройство

Пожалуйста, заметьте: HID устройство может быть загрузочным и нет. Изначально демонстрации HID устройсв, поставляемые Atmel, не загрузочные. Если необходимо, чтобы ваше приложение было загрузочным, вы должны изменить параметр sub-class (usb_descriptors.h):

Установите INTERFACE_SUB_CLASS_KEYBOARD в 1 для преобразования клавиатуры в загрузочное устройство.

7. Программное обеспечение для ПК

Приложение «USB-клавиатура» не требует никакого программного обеспечения на компьютере.

Ограничения. Демонстрация не поддерживает OUT-репорты. Вам нужно добавить соответствующий код для обработки этих репортов (для получения более подробной информации обратитесь к разделу 6.3)

64-клавишная матричная клавиатура для работы с Arduino

Мастер-самодельщик работает над проектом, который будет иметь встроенную клавиатуру и здесь есть проблема: как включить клавиатуру в прототип платы разработки? В проекте нельзя использовать USB-клавиатуру или существующую клавиатуру на базе Arduino, потому что клавиатура в реальном проекте подключена напрямую к микроконтроллеру, который обрабатывает все другие функции. Для решения проблемы мастер разработал 64-клавишную матрицу клавиатуры для прототипирования печатной платы.

Эта печатная плата не содержит никаких микросхем. Строки и столбцы матрицы клавиатуры подключаются непосредственно к разъемам контактов, так что клавиатуру можно подключить к Arduino или любому другому микроконтроллеру.

Мастер включил подробный код с комментариями. На клавиатуре 64 клавиши, включая модификаторы для shift, caps, ctrl, alt, fn и «special». Также есть шесть дополнительных клавиш, которые можно использовать для чего угодно. Функции каждой отдельной клавиши могут быть определены индивидуально.

Шаг первый: принцип работы матрицы клавиатуры
На этой клавиатуре 64 клавиши. Если бы мы подключили каждую из этих кнопок напрямую к плате разработки, нам потребовалось бы 64 контакта ввода-вывода. Это много выводов и больше, чем доступно на большинстве плат. Чтобы уменьшить количество разъемов до разумного числа, можно использовать матрицу клавиатуры, для которой требуется только количество выводов, равное квадратному корню (с округлением в большую сторону) из числа клавиш.

Матрица клавиатуры настроена таким образом, что каждый клавишный переключатель в строке подключен, и каждый клавишный переключатель в столбце подключен. Когда мы хотим увидеть, какие клавиши нажаты, мы «активируем» первую строку, а затем проверяем каждый столбец. Если активен конкретный столбец, мы знаем, что была нажата клавиша в этом столбце и строке 1. Затем мы деактивируем строку 1 и активируем строку 2, затем снова проверяем все столбцы. После того, как все строки были активированы, мы просто начинаем снова с первого ряда.

Поскольку устройство работает с микроконтроллером, «активировать» означает установить для этой строки значение LOW или HIGH. В этом случае мы устанавливаем для строки значение LOW, потому что используем встроенные подтягивающие резисторы микроконтроллера на входных контактах столбцов. Без подтягивающего резистора вывод будет реагировать непредсказуемо, и будут регистрироваться ложные нажатия кнопок.

Для всех строк также обычно установлено значение HIGH, что предотвращает соединение выводов столбца с выводами строки независимо от того была, нажата кнопка или нет.

Диоды в схеме предназначены для предотвращения непреднамеренного нажатия клавиш при удерживании определенных комбинаций кнопок. Диоды пропускают ток только в одном направлении, что предотвращает сдвоенное нажатие. Если бы не использовались диоды, то нажатие определенных клавиш могло бы вызвать срабатывание другой не нажатой клавиши, поскольку ток проводился бы через соседние переключатели.

Матрица клавиатуры требует количества контактов, равного квадратному корню из числа клавиш, но в данной конструкции клавиатуры всего 11 контактов (а должно быть 16). Контактов 11 потому что в конструкции используется сдвиговый регистр 74HC595. Этот регистр позволяет использовать только три контакта ввода / вывода Arduino для управления до 8-ми выходных контактов. Эти три контакта позволяют отправить байт (восемь бит) в регистр сдвига, который устанавливает для своих восьми выходных контактов значение HIGH или LOW. Используя регистр сдвига для выводов выходной строки, мы экономим 5 полных выводов ввода / вывода.

Можно использовать регистр сдвига и для входных контактов, но здесь нужен другой тип регистра. Такой детали у мастера не было в наличии. К тому же использование сдвигового регистра для ввода также усложняет чтение столбцов и может вызвать проблемы с дребезгом клавиш.
schematic.pdf


Шаг второй: дизайн печатной платы
Теперь, когда есть понимание работы клавиатуры, мастер разрабатывает печатную плату в KiCAD. Он просто поместил символ кнопки и символ диода, затем скопировал и вставил их, пока не получил сетку из 64 ключей. Затем я добавил два символа разъемов 1×8: один для строк и один для столбцов. Одна сторона кнопок была соединена в столбцы, а другая сторона кнопок была соединена в ряды.

Следующим шагом было назначить посадочные места печатной платы каждому из этих схемных символов. Входящая в комплект KiCAD библиотека схемных символов/посадочных мест имеет необходимые встроенные символы.

Обращаем особое внимание на номера контактов. У KiCAD есть проблема, когда номера выводов условного обозначения диода не совпадают с номерами выводов посадочного места. Это приводит к тому, что диоды находятся в обратном порядке, что является серьезной проблемой, учитывая их полярность. Чтобы решить эту проблему мастеру пришлось создать специальную посадочную площадку для диода с зеркальными местами контактов.

Создав схему и назначив символы, мастер перешел к разводке печатной платы. Контур платы был создан в Autodesk Fusion 360, экспортирован как DXF, а затем импортирован в KiCAD на слое Edge Cuts. Большая часть работы после этого заключалась в простом расположении кнопок так, чтобы их расположение было похоже на обычную клавиатуру.

Создав плату, мастер просто нарисовал все слои и добавил их в zip-папку. Скачать файл для изготовления платы можно здесь .



Шаг четвертый: подключение клавиатуры к Arduino
Подключение выглядит сложно, но на самом деле все довольно просто.
Восемь перемычек идут от контакта столбца прямо к следующим контактам Arduino:
Column 1 > A0
Column 2 > A1
Column 3 > A2
Column 4 > A3
Column 5 > A4
Column 6 > A5
Column 7 > 5
Column 8 > 6
Затем устанавливаем сдвиговый регистр 74HC595 на макетную плату. Точка указывает на контакт 1. Регистр сдвига имеет два контакта, подключенных к 5 В, и два контакта, подключенных к земле.

Для подключения сдвигового регистра к Arduino нужно всего три провода:
Shift (Clock) 11 > 4
Shift (Latch) 12 > 3
Shift (Data) 14 > 2
По какой-то глупой причине выходные контакты сдвигового регистра расположены нелогично. Обратите особое внимание на схему распиновки сдвигового регистра при подключении их к выводам.
Row 1 > Shift (Q0) 15
Row 2 > Shift (Q1) 1
Row 3 > Shift (Q2) 2
Row 4 > Shift (Q3) 3
Row 5 > Shift (Q4) 4
Row 6 > Shift (Q5) 5
Shift 7 > Shift (Q6) 6
Shift 8 > Shift (Q7) 7
К контактам Arduino 0 и 1 ничего не подключается. Эти контакты используются для последовательного порта и вызывают конфликты.



Шаг пятый: прошивка
В статье приводится два кода. Первый старый, второй доработанный с учетом недостатков. Вводная часть работает для обоих кодов.
Все в коде имеет подробные комментарии. В основном, контакты настраиваются как входы и выходы. Основной цикл просто содержит функцию таймера. Каждые 5 мс он вызывает функцию сканирования клавиатуры. Эта функция вызывает отдельную функцию для установки регистра сдвига перед проверкой каждого столбца. Нажатые клавиши выводят свое значение в Serial.

Если вы хотите изменить то, что печатается при нажатии клавиши, просто измените Serial.print («_»); в операторе if, соответствующем условию. Например, вы можете установить, что будет печататься, когда вы удерживаете FN и нажимаете N. То же самое верно для любой другой клавиши с каждым модификатором.

Многие ключи вообще ничего не делают в этом коде, потому что он просто печатает в Serial. Это означает, что клавиша Backspace не действует, потому что вы не можете удалить из последовательного монитора — эти данные уже получены. Однако вы можете изменить это если хотите.
Эта клавиатура предназначена для создания прототипов более сложных проектов. Вот почему легко изменить ее функциональность. Если, например, вы хотите распечатать набранный текст на OLED-экране, вы можете просто заменить каждый Serial.print ( на display.print ( или все, что требуется для вашего конкретного дисплея). Инструмент Replace All в Arduino IDE отлично подходит для замены всех этих значений одним быстрым шагом.

Новый код полностью переписан и работает лучше, чем исходный код. В основном это было сделано для решения проблемы с алгоритмом, который не позволял вводить символы при каждом нажатии клавиши. Исходный код проверял, чтобы конкретная клавиша была нажата не последней . Это вызывало проблему, если удерживались 2 или более клавиши, что приводило к вводу чего-то вроде «fgfgfgfgfgfgfgfgfgfg». Это также не позволяло вводить одну и ту же клавишу снова и снова очень быстро, например, когда вы набираете две буквы m в слове «bummer.».
Новый код решает обе эти проблемы. Вместо того, чтобы отслеживать последнюю нажатую клавишу, устройство проверяет состояние всей клавиатуры и сравнивает его со всем состоянием клавиатуры в последнем цикле. Это означает, что цикл может выполняться намного быстрее, и можно очень быстро вводить один и тот же ключ снова и снова. Производительность значительно улучшена. Все символы также находятся в массивах вверху, поэтому можно легко их найти и изменить. Для каждого модификатора есть независимые массивы. Код также намного короче.
Единственным недостатком этого нового кода является то, что он использует больше динамической памяти, хотя и использует значительно меньше места для программы. На Arduino Uno теперь используется: 3532 байта (10%) пространства для хранения программ и 605 байтов (29%) динамической памяти.

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