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

89rov73oplhqpw8jxrlpugxj4qy.png

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

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


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

yjuqx0na9--s_mgn-7delsdmz78.png

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

«Физика» работы интерфейса в принципе была понятна из статьи Википедии: обмен данными производится по старт-стопному протоколу на скорости 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 была собрана такая вот схема адаптера:

qhuwhioosulgthkxcwpxne2ihi0.png

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

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»:

d-0avfymwl_bqn-rp3luglrwpha.png

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

nlo_o5oszatcm5j-idjtxdlddbk.png

0eb8jm9-gtm3goq2nypyzymjtc4.png

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

wb4qbnqfveploemg0kdxc03xoua.png

После установки скорости необходимо нажать кнопку «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 нигде не нашёл.

© Habrahabr.ru