Midi usb переходник своими руками

Адаптер USB в MIDI на Arduino

В данной статье мы рассмотрим простейший адаптер USB в MIDI на основе платы Arduino Micro или Arduino Leonardo, опционально с возможностью фильтрации данных MIDI.

Необходимые компоненты

  1. Плата Arduino Micro (купить на AliExpress) или Arduino Leonardo.
  2. Оптопара 6n137 (купить на AliExpress).
  3. Переключатель (коммутационный диод) 1N4148 (купить на AliExpress).
  4. Конденсатор 100 нФ (купить на AliExpress).
  5. Резисторы 220 Ом и 10 кОм (купить на AliExpress).
  6. Резистор для сквозного монтажа (Through Hole Resistor) 470 Ом.
  7. Светодиод (купить на AliExpress).
  8. Держатель для светодиода.
  9. DIN Audio / Video Connector, 5 Contacts (аудио/видео коннектор) – 2 шт.
  10. Пластмассовый корпус.
  11. Печатная плата.

Общие принципы работы проекта

MIDI (Musical Instrument Digital Interface) представляет собой цифровой интерфейс музыкальных инструментов (стандарт сопряжения электронных музыкальных инструментов с компьютером и программным обеспечением).

Автор этого проекта потратил достаточно много времени на поиск в сети Интернет адаптера USB в MIDI на основе платы Arduino, но проекты, которые он нашел, не удовлетворили его (по качеству), поэтому он решил сделать собственный адаптер подобного типа.

Первоначально проект рассматриваемого в данной статье адаптера был сконструирован на основе платы Arduino Leonardo, а после того, как автор убедился в его работе, была изготовлена его версия на основе платы Arduino Micro. Обе этих платы построены на основе микроконтроллера ATmega32u4, который, по сути, сам является преобразователем интерфейсов USB в MIDI.

В проекте используется оптопара и несколько резисторов чтобы создать два полностью изолированных контура тока. В качестве оптопары в проекте использована 6n137 – она достаточно быстрая и широко распространенная. Как показано ниже на приведенной схеме, у коннектор MIDI OUT два контакта замкнуты на землю – это стандартно для MIDI.

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

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

Также вы можете использовать обратную связь чтобы обрабатывать данные перед тем как они будут поступать из MIDI в USB или в другом направлении. Автор данного проекта использовал это чтобы исправить не совсем корректное применение MIDI в его синтезаторе Roland D50. Дело в том, что его синтезатор передает команду «all notes off» каждый раз когда происходит отжатие последней нажатой клавиши. А многие современные аудио приложения интерпретируют это как немедленное прекращение запущенных процессов. А если мы в нашем адаптере будем фильтровать эту фразу «all notes off», то наш синтезатор D50 снова становится полезным в качестве «ведущей клавиатуры (master keyboard)». В представленный ниже код программы добавлена функция фильтрации фразы «all notes off».

При использовании библиотеки Control Surface было обнаружено, что она не может корректно обрабатывать большие пакеты SysEx ( эксклюзивных системных сообщений ). Это приводит к ошибкам в работе с редактором синтезатора D50 поскольку он часто использует большие пакеты SysEx. В связи с этим автором проекта в комментариях к программе добавлены инструкции по поводу того, как бороться с данной проблемой. Автор библиотеки Control Surface указал, что эта проблема будет устранена им в версиях библиотеки 2.x, поэтому, когда вы будете читать эту статью, возможно, эта проблема с большими пакетами будет уже устранена.

Также вы можете попробовать использовать другие библиотеки для работы с MIDI или даже написать свой собственный код для этого – представленная в этом проекте схема устройства должна корректно работать с любыми библиотеками, поддерживающими преобразование USB в MIDI и Serial MIDI.

Схема проекта

Схема адаптера USB в MIDI на основе платы Arduino Micro представлена на следующем рисунке.

После окончательной сборки у автора получилась конструкция следующего вида:

Источник

Конструкция выходного дня: простой MIDI-адаптер

Постановка задачи

В прошлом веке самым простым путем соединения компьютера и синтезатора по MIDI было использование игрового порта. Для согласования сигналов интерфейсов («токовая петля» в MIDI и TTL на разъеме игрового порта) делался простой адаптер, схема которого приведена в посвящённой MIDI статье Википедии:

В настоящее время игровые порты со звуковых и материнских плат пропали как класс. Драйверы игрового порта для современных ОС найти невозможно.

«Физика» работы интерфейса в принципе была понятна из статьи Википедии: обмен данными производится по старт-стопному протоколу на скорости 31250 бит/с посылками по 8 бит данных без контроля чётности с одним стоповым битом. Логическому нулю в сигнальных цепях соответствует протекание тока 5 мА, логической единице отсутствие тока в цепи.

В принципе, игровой порт можно заменить на USB UART и присоединить к нему описанный в статье Википедии адаптер.

Первая проблема данного решения заключается в том, чтобы заставить ОС определять COM-порт UART как порт MIDI. Неожиданно для меня, решение проблемы нашлось на форумах, посвященных Arduino. Там я обнаружил ссылку на бесплатный эмулятор порта MIDI «поверх» виртуального COM-порта. Для связи эмулированного порта с MIDI-редактором разработчик рекомендовал использовать виртуальный шнур loopMIDI.

Вторая проблема: заставить UART работать на скорости 31250 бит/с.

Читайте также:  Бетонные опоры для террасы своими руками

Всех этих данных уже было достаточно для формулировки технического предложения:
«Для связи компьютера с синтезатором по интерфейсу MIDI предлагается использовать USB UART совместно с адаптером для согласования сигналов TTL с сигналами «токовая петля 0…5 мА», программным обеспечением loopMIDI, Hairless MIDI Serial Bridge и драйверами UART, позволяющими ему работать на скорости 31250 бит/с».

Аппаратная часть

Выбор аппаратного решения был крайне прост – в закромах автора статьи нашлись:

  • USB UART на базе CP2102;
  • оптрон АОТ101А;
  • микросхема К1533ЛН2;
  • пара разъёмов СШ-5 (другие обозначения: ОНЦ-ВГ-4-5/16-В, DIN 41524);
  • несколько метров экранированного акустического кабеля ШГЭС.

В результате на обрезке универсальной макетной платы размером 40х15 была собрана такая вот схема адаптера:

Работоспособность собранной схемы была проверена следующим образом:

  1. Адаптер был подключен к разъёмам MIDI синтезатора.
  2. У синтезатора было отключено локальное управление (MIDI Local = Off).
  3. После установки перемычки между сигналами RX и TX адаптера синтезатор стал реагировать на нажатия клавиш.

Надеюсь, что работа схемы понятна без пояснений. Замечу только, что:

  • элементы микросхемы К1533ЛН2 имеют выход типа «открытый коллектор», который не работает без внешней нагрузки;
  • конденсатор C1 подключается как можно ближе к выводам питания DD1;
  • оплётка кабеля, идущего к разъёму «MIDI IN» синтезатора, подключена только к общему проводу адаптера;
  • оплётка кабеля, идущего к разъёму «MIDI OUT» синтезатора, подключена только к выводу 2 разъёма.

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

Далее на компьютер было установлено следующее ПО:

Для связи MIDI-редактора с разъёмом синтезатора «MIDI IN» шнур «Synthesizer» был подключен между выходом Anvil Studio и входом эмулятора порта MIDI.

Для связи MIDI-редактора с разъёмом синтезатора «MIDI OUT» шнур «Keyboard» был подключен между выходом эмулятора порта MIDI и входом Anvil Studio.

Последним и очень важным шагом настройки ПО была установка для CP2102 скорости обмена 31250 бит/с взамен 38400 бит/с:

После установки скорости необходимо нажать кнопку «Set Configuration». Затем, и в Диспетчере устройств, и в Hairless MIDI Serial Bridge в настройках скорости обмена данными COM-порта UART CP2102 нужно выбрать значение 38400.

Краткие итоги

В результате MIDI-редактор Anvil Studio получил канал связи с синтезатором Yamaha PSR-550. Дети с энтузиазмом стали осваивать работу с MIDI-редактором. Я вновь обрёл душевный покой.

Источник

MIDI2USB – музыка нас связала

Рис.1 Российско-китайско-американский конвертер MIDI в USB. Фото автора.

Люди любят музыку. Многие умеют играть на музыкальных инструментах. А некоторые пробуют импровизировать и даже сочинять музыку. Электронные музыкальные инструменты можно подключать к компьютеру и получать дополнительные творческие возможности. Это вроде бы простое дело, но большинство дешёвых китайских адаптеров USB-MIDI работают посредственно. Кому интересно, как я сделал свой MIDI2USB-адаптер, приглашаю читать

Постановка задачи

Пару лет назад мой племянник, который учится музыке, начал импровизировать и сочинять музыку. Мне хотелось, чтобы его творчество не пропало, но записывать его музыкальные этюды удавалось только на диктофон. Качество такой записи было неудовлетворительным. Хотелось осуществлять запись нот напрямую в Cubase или MuseScore, а затем их редактировать. Для этого я решил купить китайский адаптер (конвертер) USB-в-MIDI.

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

Способы доработки китайского адаптера

В интернете есть немало дискуссий как улучшить или доработать китайский адаптер. В некоторых версиях этого адаптера предусмотрен, но не распаян оптрон, который обеспечивает гальваническую развязку компьютера и синтезатора. Увы, в моём случае доработка была затруднительна, т.к. вместо оптрона установлены два NPN-транзистора. Отмечу, что MIDI-стандарт прямо указывает использовать оптоизолятор, например, PC900V или 6N138. Схожими характеристикам обладают оптопары H11L1M (DIP-8) или H11L1SM (SO-6). Можно использовать и другие компоненты с подходящими параметрами.


Рис.2. Китайский адаптер в процессе демонтажа. Фото автора.

На фото видно, что в корпусе достаточно места чтобы разместить оптоизолятор и сопутствующие элементы. Некоторые умельцы выпаивают имеющиеся компоненты и на их место устанавливают оптоизолятор с «обвесом». Очевидно, что для этой операции требуются не только знания, но и хорошая моторика рук.

Но недостаточно обеспечить оптическую изоляцию музыкального инструмента и компьютера. Требуется ещё точный кварцевый генератор или резонатор, чтобы обеспечить тактирование последовательного интерфейса UART в соответствии со стандартом MIDI. В китайском адаптере, который я купил, отсутствует не только оптопара, но и кварцевый резонатор. Конечно, существуют микросхемы, в которых блоки тактирования калибруются на заводе, но тут ничего подобного нет. В общем, работоспособность этого китайского изделия низкая. Существуют адаптеры, построенные на микросхеме CH345 – преобразователе USB в MIDI в корпусе SSOP-20, но это не мой случай. Микросхема CH345 имеет аппаратные USB-метки Vendor ID: 1a86, Product ID:752d. Впрочем, любая «левая» микросхема может выдавать (и выдаёт) такие же идентификаторы и даже может «притвориться» чем угодно.

Последний небольшой недостаток, который я выявил в китайском адаптере – это программное обеспечение (прошивка). Если говорить точнее – это малый размер буфера для конечных точек (EndPoints), всего по 8 байт. Этого достаточно для передачи нажатых нот, потому что MIDI-сообщение по USB интерфейсу состоит из 4 байт (номер кабеля, номер команды и 2 байта данных). А вот всякие расширения, например SysEx, могут быть большего размера.

Через некоторое время я купил другой кабель-адаптер, который носил громкое название “Professional USB MIDI Interface”. Этот адаптер стоил существенно дороже и работал значительно лучше, но всё равно с ошибками. Проявлялось это в том, что спустя несколько минут игры на синтезаторе, он вдруг начинал пропускать нажатия клавиши или наоборот – не воспринимал отпускание клавиши. Я был разочарован результатами работы китайских адаптеров я и решил последовать совету: «Если хочешь сделать что-то хорошо, то сделай это сам».

Читайте также:  Аудио bluetooth передатчик своими руками

Аппаратная часть

Сначала надо было продумать схему будущего устройства и изучить опыт других инженеров. Имеющийся адаптер внешне выглядел очень хорошо, поэтому я решил использовать от него корпус, светодиоды и экранированные кабели. Тем более, что в Москве MIDI-кабели стоят дороже, чем готовый китайский адаптер. Китайскую плату я вытащил, измерил её габариты и стал изучать MIDI-стандарт и удачные MIDI-проекты в открытом доступе.


Рис.3 Адаптер USB-MIDI в корпусе и с кабелями.

На момент написания этой статьи мне известны несколько интересных проектов:

  1. Схема из документации на чип CH345 фирмы «Nanjing Qinheng Microelectronics».
  2. Старые проекты на микроконтроллерах Atmega с программной реализацией протокола USB в режиме только Low Speed. А начиная с Windows 7 для USB-устройств типа Audio Class требуется минимум режим Full Speed.
  3. Библиотека MIDIUSB для плат семейства Arduino с аппаратной поддержкой USB-интерфейса (Atmega32u4, Cortex-M), а также Maple и т.д.

Электрические принципиальные схемы во всех проектах содержат много типовых фрагментов, основанных на рекомендациях стандарта MIDI. Поэтому оставалось выбрать микроконтроллер с поддержкой USB режима Full Speed, найти в продаже оптрон PC900V и розетку DIN-5 (MIDI).

Принципиальная электрическая схема платы

Сердцем моего MIDI2USB адаптера стал 8-битный микроконтроллер EFM8UB20F64G фирмы Silicon Laboratories. Мне он очень нравится, и я использую его везде, где могу. Этот контроллер является преемником (после ребрендинга) контроллера С8051F380, который пришёл на смену легендарному C8051F320 – удачной разработке фирмы Cygnal, которую в 2003 купила SiLabs.

Перечислю свои аргументы в пользу микроконтроллера EFM8UB20F64:

  • удобство разработки ПО, которое выражается в наличии быстрых и простых в использовании GPIO, SPI, UART, USB, PCA;
  • улучшенное 8051-ядро (1-2 такта на команду, 48MIPS), изменение частоты «на лету»;
  • встроенный регулятор напряжения, толерантность выводов к +5В, ток до 100 мА;
  • встроенный точный тактовый генератор с калибровкой от USB-хоста (± 0.25%);
  • наличие библиотек USBXpress, VCPXpress, USB Device API и примеры для быстрого старта;
  • чистая errata.

Программировать этот контроллер приятно, т.к. регистров мало и можно сосредоточиться на решении прикладной задачи. Увы, арифметические операции (особенно 32-битные) выполняются медленно, но в остальном EFM8 хорош. Разработка программного обеспечения для USB-устройств – это не простая задача. И тут есть главное преимущество контроллеров SiLabs – это библиотеки USBXpress, VCPXpress, USB Device API. Даже фирма Texas Instruments в своих платах SmartRF использует контроллеры C8051F320.

Оптрон – это второй по важности компонент в адаптере. Я решил взять Sharp PC900V, потому что именно он указан в рекомендуемой схеме MIDI-спецификации. Особенность этого оптрона – быстрые времена включения и выключения (1мкс и 2мкс), а также наличие цифрового выхода. Но есть и недостатки – большие размеры микросхемы (7х10мм) и выгорание на 50% через 5 лет эксплуатации. Габариты оптрона не позволили разметить все компоненты на одной стороне платы. Ещё мне не хотелось отказываться от разъёма MIDI, который занимал много места.


Рис.4 Задняя сторона платы с оптроном PC900V и светодиодами. Фото автора.

Выходной каскад собран по рекомендованной стандартом схеме на логической микросхеме 74LVC2G04, состоящей из двух инверторов. Основная цель этого компонента – преобразование уровней логических сигналов из 3В => 5В и обеспечение выходного тока не менее 10 mA.

Остальные компоненты выполняют вспомогательные функции и не оказывают существенного влияния на работу устройства. Резисторы, конденсаторы, диоды и светодиоды могут быть заменены в разумных пределах. Вместо разъёма mini-USB можно поставить micro-USB или сделать штыревой разъём под пайку кабеля, как делают китайцы. Разъём MIDI занимает много места и в корпус не помещается, поэтому он используется только в версии адаптера без корпуса. Сигналы MIDI-IN и MIDI-OUT выведены на штыревой разъём для распайки кабеля. В общем, следовало бы скорректировать расположение светодиодов и разъёмов для их оптимального расположения в корпусе.


Рис.5 Отладочная и коробочная версии адаптера MIDI2USB. Фото автора.

Общий ток потребления не превышает 50 mA. Он складывается из следующих частей:

  • микроконтроллер, 15mA;
  • три светодиода, 15mA (3х5mA);
  • микросхема 74LVC2G04, 10 mA;
  • оптрон PC900V, 10 mA.

Двухслойная печатная плата была изготовлена американцами в OSH Park, толщина 1.6мм, медь 0.035мм, материал FR-4.

Программная часть

Создание программного обеспечения для оборудования – важный и ответственный этап разработки. К счастью, во всех современных операционных системах есть драйверы для MIDI устройств, подключаемых к порту USB. Задача сокращается и требуется написать только прошивку (firmware) для адаптера.

Обычно я использую Keil uVision PK51 совместно с Configuration Wizard 2, иногда IAR Embedded Workbench, и совсем редко SiLabs Simplicity Studio. Каждая среда имеет достоинства и недостатки. В этом проекте я решил использовать IAR, потому что хотелось иметь «С с классами». Кроме того, компилятор IAR предоставляет доступ ко всем битам системных регистров. Например, P2_bit.B0 = 1; или PCA0MD_bit.WDTE = 0;

Нет необходимости использовать «магические константы» или многоэтажные битовые выражения, которыми пестрят CMSIS или «SI_EFM8UB2_Register_Enums.h». Увы, весь этот функционал объявлен в файле «ioEFM8UB20F64G.h», который оказался не совместим с библиотеками «si_toolchain.h» (например, макрос B0..B3). Переводить проект в Keil uVision PK51 я не стал, а просто писал совместимый код на С для всех сред разработки.

Код проекта разделён на несколько функциональных частей

  1. В файле «main.c» находится точка входа, объявления глобальных переменных, вызов инициализация периферии и главный цикл программы.
  2. В файл «init.c» содержит настройку тактирования, портов, UART и его прерываний.
  3. В файле «descriptors.c» можно найти USB-дескрипторы для устройства типа Audio Class.
  4. В файле «midi.c» находятся две функции для преобразования MIDI-сообщений в USB-события и обратно. Используется автомат состояний.
  5. Файл «usbconfig.h» содержит макросы и определения (#define) для настройки режимов работы библиотеки USB Device API.
Читайте также:  Енота своими руками ребенку

Посмотрим на функцию main() с настройкой портов, периферии и главным циклом.

Библиотека фирмы SiLabs для USB-устройств состоит из набора подпрограмм, которые компилируются и включаются в проект в зависимости от настроек в файле «usbconfig.h». Это очень напоминает библиотеку «libusb, V-USB», которую можно встретить в коде для микроконтроллеров фирмы Atmel (ныне Microchip). Надо отметить, что у SiLabs получилась хорошая и удобная библиотека с точки зрения программиста.

Важную роль в работе любого USB-устройства играют описатели (дескрипторы) устройства, конфигурации и интерфейсов. С помощью этих дескрипторов устройство сообщает хосту (компьютеру) о своих требованиях, возможностях, параметрах и т.д. Функция обработки запросов дескрипторов обычно имеется в каждой USB-библиотеке, а от программиста требуется лишь правильно заполнить структуры данных, содержащих эти дескрипторы.

Обо всех дескрипторах, топологии и терминологии подробно и детально написано в стандарте «Universal Serial Bus Device Class Definition for MIDI Devices». А для быстрого старта и погружения в тему достаточно изучить информацию, которую предоставляют программы «usbview.exe» из пакета Windows Driver Kit 7600 или «USB Descriptor Dumper». Кое-что можно даже скопировать к себе в программу.


Рис.6 Информация о дескрипторах в программе «usbview.exe»

Дескрипторы и соответствующие массивы и структуры размещается во флэш-памяти микроконтроллера (сегмент кода), потому что эти данные не изменяются (константы). Хранение констант во флэш-памяти – типичный программистский приём, который позволяет экономить оперативную память.

Следует обратить внимание на поля Vendor_ID и Product_ID в структуре описателя устройства. Это пара чисел для уникальной идентификации USB-устройства. Чтобы получить для своего устройства такой номер надо заплатить денег организации USB-IF или направить запрос владельцу существующего Vendor_ID (производителю микроконтроллеров) и получить Product_ID. А можно, например, как китайцы использовать чужие наиболее подходящие VID & PID. Для открытых проектов есть вариант получить бесплатно Product_ID.

Ещё один момент, на который следует обратить внимание при разработке USB-устройств звукового класса MIDI Streaming – это разъёмы (Jack). Разъёмы – это воображаемые (виртуальные) сущности для описания топологии и связей между устройством и хостом. Они бывают входные (In Jack) и выходные (Out Jack), внутренние (Embedded) и внешние (External). У каждого разъёма есть уникальный идентификатор Jack_Id (число от 0 до 15). Выходные разъёмы содержат номер источника Source Id, т.е. номер разъёма для подключения. Наконец, поверх образованных каналов (потоков ввода и вывода) работают звуковые конечные точки (audio end-point, EP). Это почти обычные Bulk EP, у которых в дескрипторах есть информация о привязке к разъёму.


Рис. 7 Разъёмы Jacks и виртуальные потоки в USB (класс MIDI).

Обмен данными в звуковом USB-устройстве класса MIDI заключается в передаче 32-битных пакетов (USB-MIDI Event Packet). Из MIDI-устройства приходят сообщения длиной 1, 2 или 3 байта. При передаче по USB к этим байтам добавляется головной байт с номером кабеля и кодом команды. Если пакет получается менее 4 байт, то он дополняется 0. В текущей версии прошивки я не заполняю нулями до 32-битной границы. Это работает. Вопрос остаётся открытым.

Например, в кабеле №1 команда нажатия клавиши Note On (время передачи 960us) преобразуется в следующий пакет:

MIDI: 0x90 0x60 0x7f => USB: 0x19 0x90 0x60 0x7f


Рис.8 Схема пакета USB-MIDI Event Packet из USB спецификации.

Прямое и обратное преобразование выполняются функциями MIDI2USB() и USB2MIDI (). В этих функциях применён автомат состояний, когда по мере поступления входных данных функция переходит из состояния ожидания (IDLE) в состояние приёма команд (STATUS), а затем в состояние приёма данных (DATA), и, наконец, отправка данных с возвратом в исходное состояние ожидания.

В MIDI-протоколе байты данных в сущности являются 7-битными (0..127). У них всегда старший 8-ой бит установлен в 0. Команды (байты статуса) наоборот всегда идут с установленным старшим битом в 1, т.е. имеют значения от 128 до 255.


Рис. 9 Типы байтов в MIDI-протоколе.

Все схемы и исходные тексты, а также готовая прошивка находятся у меня в git-хранилише. Лицензия MIT.

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

После монтажа платы следует запрограммировать микроконтроллер. Для этого можно использовать или фирменный/клон SiLabs C2 Debug Adapter, или J-Link v10+ (с поддержкой EFM8), или прошитый на заводе bootloader (ревизия Rev-B), или, наконец, Arduino с соответствующим скриптом. Для проверки и отладки MIDI-сообщений очень помогает программа MIDI-OX.


Рис.10 Интерфейс программы MIDI-OX.

Если работать с Cubase, то следует установить Asio-драйверы, потому что при использовании DirectSound и DirectInput наблюдается задержка между нажатием клавиши и воспроизведением ноты. Задержка не связана с аппаратной частью и является особенностью реализации ОС. В общем, устройство отлично выполняет свои функции с инструментом Casio CDP-100.


Рис.11 Интерфейс программы Cubase 5.

Экспериментальные прошивки генерировали максимально возможный поток нот и других MIDI-команд. Какофония была ужасная, но всё работало, как задумано. А с помощью MuseScore 3.2 можно записывать и воспроизводить mid-файлы.

Результаты работы

Решение применить 8-битный микроконтроллер EFM8UB20 кому-то может показаться спорным. Конечно, есть и другие варианты и контроллеры. Альтернативный путь – это выбрать сугубо аппаратное решение на преобразователе CH345 и сделать устройство по рекомендованной китайцами референс-схеме. Но мой вариант универсальный, т.к. позволяет изменить прошивку, добавить нужный функционал или исправить найденные ошибки. В конце концов я получил знания, опыт и моральное удовлетворение от законченного проекта. И, наконец, я дописал статью, а вы её дочитали.

Источник

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