Как стать автором
Обновить

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

Время на прочтение3 мин
Количество просмотров19K

Приобрёл я как-то своим детям синтезатор Yamaha PSR-550. Инструмент был уже не первой молодости, но исправный. Дети проявили энтузиазм и с синтезатором освоились быстро: разобрались с управлением, научились «писать банки» и т.п. Мне же не давало покоя наличие на задней стенке синтезатора разъёмов «MIDI IN» и «MIDI OUT».

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


В прошлом веке самым простым путем соединения компьютера и синтезатора по 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 разъёма.

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


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

  1. Драйвер VCP для CP2102.
  2. Пакет утилит для конфигурирования CP2102.
  3. Эмулятор порта MIDI Hairless MIDI<->Serial Bridge by Angus Gratton.
  4. Виртуальный шнур MIDI loopMIDI by Tobias Erichsen.
  5. MIDI-редактор Anvil Studio.

Затем в loopMIDI были созданы два шнура — «Synthesizer» и «Keyboard»:



Для связи 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-редактором. Я вновь обрёл душевный покой.

P.S. Как выставить скорость 31250 бит/с взамен 38400 бит/с для PL2303 обсуждалось здесь.

P.P.S. Как выставить скорость 31250 бит/с взамен 38400 бит/с для CH341 нигде не нашёл.
Теги:
Хабы:
Всего голосов 23: ↑22 и ↓1+21
Комментарии7

Публикации

Истории

Ближайшие события

7 – 8 ноября
Конференция byteoilgas_conf 2024
МоскваОнлайн
7 – 8 ноября
Конференция «Матемаркетинг»
МоскваОнлайн
15 – 16 ноября
IT-конференция Merge Skolkovo
Москва
22 – 24 ноября
Хакатон «AgroCode Hack Genetics'24»
Онлайн
28 ноября
Конференция «TechRec: ITHR CAMPUS»
МоскваОнлайн
25 – 26 апреля
IT-конференция Merge Tatarstan 2025
Казань