Приобрёл я как-то своим детям синтезатор 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 была собрана такая вот схема адаптера:
Работоспособность собранной схемы была проверена следующим образом:
- Адаптер был подключен к разъёмам MIDI синтезатора.
- У синтезатора было отключено локальное управление (MIDI Local = Off).
- После установки перемычки между сигналами RX и TX адаптера синтезатор стал реагировать на нажатия клавиш.
Надеюсь, что работа схемы понятна без пояснений. Замечу только, что:
- элементы микросхемы К1533ЛН2 имеют выход типа «открытый коллектор», который не работает без внешней нагрузки;
- конденсатор C1 подключается как можно ближе к выводам питания DD1;
- оплётка кабеля, идущего к разъёму «MIDI IN» синтезатора, подключена только к общему проводу адаптера;
- оплётка кабеля, идущего к разъёму «MIDI OUT» синтезатора, подключена только к выводу 2 разъёма.
Программное обеспечение
Далее на компьютер было установлено следующее ПО:
- Драйвер VCP для CP2102.
- Пакет утилит для конфигурирования CP2102.
- Эмулятор порта MIDI Hairless MIDI<->Serial Bridge by Angus Gratton.
- Виртуальный шнур MIDI loopMIDI by Tobias Erichsen.
- 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 нигде не нашёл.