Мини 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 и обычных тактовых кнопок:
Расстановка кнопок не как в оригинальных нумпадах, зато новый дизайн 🙂 У меня небольшие ассоциации с Франкенштейном.
Для перепрошивки в случае чего необходимо активировать 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 ГГц. На вебинаре вы познакомитесь с продуктовой линейкой и способами решения проблем проектирования. В программе: выбор типа антенны; ключевые проблемы, влияющие на эффективность работы антенны; требования к сертификации ОТА; практическое измерение параметров антенн. _________________ Нужна хорошая клавиатура для всего. Первая попалась CatBoard на at90usb162 описания функционала нет, куски схемы раскиданы по кучи сайтов, что с *KRO непонятно, про быстродействие тоже ничего. Схема делалась для набора текста. Тут спрашивается какой МК лучше, первый или второй и пара регистров. Сейчас у меня полноразмерная китайская клава на Cherry MX Black и китайском контролере Hantick HTK1087B без документации. По NKRO, контроллер различает нажатие любого количества кнопок, для этой цели на каждой кнопке стоит диод, но отправляет в компьютер с ограничением протокола USB HID Keyboard, это 6 нажатых любых кнопок, и 8 модификаторов. Кнопок всего 60, есть возможность догнать до стандартных 88 или только поставить 2 МК ? Нужен ещё HEX нумпад, возможно отдельно. Это особеность МК или клавиатур вообще ? Вот в этом моменте и вопрос, у меня по тестам клавиатура не ограничена, может она передёт нажатия последовательно, а потом последоввательно отпускания с приоритетом передачи отпусканий, отсюда и дребезг иногда. Кнопка Caps не определяется в тестах как и в некоторых играх, хотя может потомучто я её отключил в системе как капс. Но в других играх она работает. Или это особенность некоторых клавиатур. Заказал ардуину леонарду на 32u4 как самый дешёвый контролер, чтоб было на чём опыты ставить. Только надумал собрать tmk HID Liberation Device как кое что поменялось. Видимо для начала придётся спаять с инвертором чтоб понять как вообще переназначать кнопки. Вроде как есть какаето прога, но что она и как делает непонятно. Недавно заметил что присмотреный мной проект пропал из исходников https://github.com/tmk/tmk_keyboard . Для начала переназначение нужно потомучто моя клавиатура не будет совпадать с прошивкой, да и как ей совпасть если я не знаю её схему. Из всех существующих проектов, а их всего 2 со схемой , не обозначены клавиши на схеме, только матрица. С диодами другое дело, на плёночной клавиатуре их никак не сделать, там используется разведение функциональных клавиш на разные линии чтоб реализовать одновременное нажатие упираемся в тоже, в сложную разводку из кучи проводов. Дело в том что нет готовых контролеров, то что у меня игровое полное фуфло, выдернуть плату неоткуда, да и есть вероятность что она сдохнет, а заменить её будет нечем, в другой клавиатуре может оказаться другая разводка. бегать искать бушную клаву негде, тем более настоящую, а покупать новую за 300р на разбор нет смысла. Покупал много разных китайских хреней на разбор, но всё шло в мусор потому как оказывалось уже не тем что было первое время и уже не годилось для применения никуда кроме того для чего сделано. AVR271Демонстрация USB клавиатурыСвойства:
Интерфейс PS/2 исчезает из ПК нового поколения, его замещает интерфейс USB, который стал стандартным интерфейсом между ПК и периферийными устройствами. Это изменение должно быть учтено разработчиками клавиатур, которые должны встраивать USB-интерфейс для подключения клавиатуры к ПК. Цель этого документа — описание начала реализации и разработки USB клавиатуры на МК AT90USB с использованием отладочного набора STK525 и внутрисистемного программирования с помощью Flip. Предполагается, что пользователь знаком с программной библиотекой USB для микроконтроллеров AT90USBxxx (Application Note AVR276 Программная библиотека USB для AT90USBxxx) и спецификацией HID-класса (http://www.usb.org/developers/hidpage).
2. Требования к аппаратному обеспечению Для реализации HID-приложения требуется следующее аппаратное обеспечение:
3. Внутрисистемное программирование и обновление программного обеспечения устройства Для программирования устройства вы можете использовать несколько методов:
Пожалуйста, обратитесь к руководству пользователя используемой вами платы (если вы используете стартовые наборы Atmel) для понимания как программировать устройства этими разными методами. Пожалуйста, обратитесь к разделу помощи Flip, чтобы понять как устанавливать USB-драйвер и программировать устройство через USB-интерфейс. Замечание. Flip — это программное обеспечение, поставляемое фирмой Atmel, для предоставления пользователям возможности программирования USB AVR-устройств через USB-интерфейс (для этого не требуется внешнего аппаратного обеспечения) благодаря заводскому DFU-загрузчику. 4. Быстрый старт Когда ваше устройство запрограммировано файлом usb_keyboard.a90, вы можете начать демонстрацию клавиатуры. Проверьте, что ваше устройство нумеруется в качестве клавиатуры (см. рис. 4-1), после чего вы можете использовать отладочный набор для посылки символов в ПК.
Нижеприведенный рисунок показывает использование STK525 в качестве демонстрации клавиатуры (вы можете использовать другой отладочный набор: AT90USBKey, STK526 — в зависимости от того, с каким USB AVR микроконтроллером вы работаете).
Назначение демонстрации клавиатуры — послать строку символов в ПК. Для запуска демонстрации следуйте нижеприведенным инструкциям:
5. Обзор приложения Приложение «USB-клавиатура» обеспечивает простой обмен данными между ПК и клавиатурой. ПК «спрашивает» клавиатуру каждый интервал времени P (интервал опроса), есть ли новые данные, если они есть, то клавиатура посылает их в ПК, иначе клавиатура посылает NAK (отказ от транзакции), чтобы «сказать» ПК, что нет новых доступных данных. Обмен данными между ПК и клавиатурой осуществляется с помощью репортов. Репорт, который содержит информацию о нажатых кнопках, является IN-репортом (посылается от клавиатуры к ПК). Репорт, в котором содержится информация о статусе светодиодов (NUM LOCK, CAPS LOCK, SCROLL LOCK. ) является OUT-репортом (посылается от ПК к клавиатуре). Нижеприведенный рисунок иллюстрирует структуры этих репортов:
6. Программное обеспечение Как объяснено в документе «Программная библиотека USB для AT90USBxxx» (Application Note AVR276) все программное обеспечение для USB имеет одинаковую архитектуру (для более подробной информацией обратитесь, пожалуйста, к этому документу).
Этот раздел посвящен только модулю клавиатуры. Изменение файлов, описанных ниже, позволяет пользователю разработать его собственную клавиатуру. Этот файл содержит функции, которые инициализируют аппаратные средства, используемые в качестве клавиатуры, а также функции, которые получают данные репорта и отправляют их в FIFO конечной точки для подготовки их к отправке в ПК.
Эта функция осуществляет инициализацию параметров клавиатуры и аппаратных ресурсов (джойстик….). Эта функция проверяет, есть ли нажатые кнопки, и устанавливает в 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». Также есть шесть дополнительных клавиш, которые можно использовать для чего угодно. Функции каждой отдельной клавиши могут быть определены индивидуально. Шаг первый: принцип работы матрицы клавиатуры Матрица клавиатуры настроена таким образом, что каждый клавишный переключатель в строке подключен, и каждый клавишный переключатель в столбце подключен. Когда мы хотим увидеть, какие клавиши нажаты, мы «активируем» первую строку, а затем проверяем каждый столбец. Если активен конкретный столбец, мы знаем, что была нажата клавиша в этом столбце и строке 1. Затем мы деактивируем строку 1 и активируем строку 2, затем снова проверяем все столбцы. После того, как все строки были активированы, мы просто начинаем снова с первого ряда. Поскольку устройство работает с микроконтроллером, «активировать» означает установить для этой строки значение LOW или HIGH. В этом случае мы устанавливаем для строки значение LOW, потому что используем встроенные подтягивающие резисторы микроконтроллера на входных контактах столбцов. Без подтягивающего резистора вывод будет реагировать непредсказуемо, и будут регистрироваться ложные нажатия кнопок. Для всех строк также обычно установлено значение HIGH, что предотвращает соединение выводов столбца с выводами строки независимо от того была, нажата кнопка или нет. Диоды в схеме предназначены для предотвращения непреднамеренного нажатия клавиш при удерживании определенных комбинаций кнопок. Диоды пропускают ток только в одном направлении, что предотвращает сдвоенное нажатие. Если бы не использовались диоды, то нажатие определенных клавиш могло бы вызвать срабатывание другой не нажатой клавиши, поскольку ток проводился бы через соседние переключатели. Матрица клавиатуры требует количества контактов, равного квадратному корню из числа клавиш, но в данной конструкции клавиатуры всего 11 контактов (а должно быть 16). Контактов 11 потому что в конструкции используется сдвиговый регистр 74HC595. Этот регистр позволяет использовать только три контакта ввода / вывода Arduino для управления до 8-ми выходных контактов. Эти три контакта позволяют отправить байт (восемь бит) в регистр сдвига, который устанавливает для своих восьми выходных контактов значение HIGH или LOW. Используя регистр сдвига для выводов выходной строки, мы экономим 5 полных выводов ввода / вывода. Можно использовать регистр сдвига и для входных контактов, но здесь нужен другой тип регистра. Такой детали у мастера не было в наличии. К тому же использование сдвигового регистра для ввода также усложняет чтение столбцов и может вызвать проблемы с дребезгом клавиш.
Шаг второй: дизайн печатной платы Следующим шагом было назначить посадочные места печатной платы каждому из этих схемных символов. Входящая в комплект KiCAD библиотека схемных символов/посадочных мест имеет необходимые встроенные символы. Обращаем особое внимание на номера контактов. У KiCAD есть проблема, когда номера выводов условного обозначения диода не совпадают с номерами выводов посадочного места. Это приводит к тому, что диоды находятся в обратном порядке, что является серьезной проблемой, учитывая их полярность. Чтобы решить эту проблему мастеру пришлось создать специальную посадочную площадку для диода с зеркальными местами контактов. Создав схему и назначив символы, мастер перешел к разводке печатной платы. Контур платы был создан в Autodesk Fusion 360, экспортирован как DXF, а затем импортирован в KiCAD на слое Edge Cuts. Большая часть работы после этого заключалась в простом расположении кнопок так, чтобы их расположение было похоже на обычную клавиатуру. Создав плату, мастер просто нарисовал все слои и добавил их в zip-папку. Скачать файл для изготовления платы можно здесь .
Шаг четвертый: подключение клавиатуры к Arduino Для подключения сдвигового регистра к Arduino нужно всего три провода:
Шаг пятый: прошивка Если вы хотите изменить то, что печатается при нажатии клавиши, просто измените Serial.print («_»); в операторе if, соответствующем условию. Например, вы можете установить, что будет печататься, когда вы удерживаете FN и нажимаете N. То же самое верно для любой другой клавиши с каждым модификатором. Многие ключи вообще ничего не делают в этом коде, потому что он просто печатает в Serial. Это означает, что клавиша Backspace не действует, потому что вы не можете удалить из последовательного монитора — эти данные уже получены. Однако вы можете изменить это если хотите. Новый код полностью переписан и работает лучше, чем исходный код. В основном это было сделано для решения проблемы с алгоритмом, который не позволял вводить символы при каждом нажатии клавиши. Исходный код проверял, чтобы конкретная клавиша была нажата не последней . Это вызывало проблему, если удерживались 2 или более клавиши, что приводило к вводу чего-то вроде «fgfgfgfgfgfgfgfgfgfg». Это также не позволяло вводить одну и ту же клавишу снова и снова очень быстро, например, когда вы набираете две буквы m в слове «bummer.». |