"Com to MIDI", или преобразование скорости USART.
Перед повторением обязательно прочитать здесь.
(16.12.2006)
(Авторский вариант)*

Com to MIDI
Посмотреть (скачать)
1600x1200


Портативные компьютеры (Notebook’и) хотя и существенней больше "налодонников", но в отличие от них, обладают полноценной клавиатурой, экраном и большим набором портов ввода-вывода, и их также можно "брать с собой". Если говорить о стоимости, то, в отличие от КПК, у таких компьютеров класса Pentium-I, она ничтожно мала, не говоря уже о 486. А между тем, существует много направлений, где данные мощности можно использовать с большим успехом. Скажем, установив на таком Notebook’е программу-секвенсор, например "CakeWalk 5", музыкант получает в руки весьма мощный миди-файлер, с огромным набором сервисных функций, да ещё и с возможностью редактирования.

CakeWalk 5
"CakeWalk 5"

Установив программу "MIDI-OX" (или попроще - "MIDI monitor", "Test MIDI Port"), человек, занимающийся разработкой и ремонтом электронных музыкальных инструментов, сможет получить полнейшую информацию, передающуюся по МИДИ-интерфейсу.

MIDI-OX
"MIDI-OX"

MIDI Monitor
"MIDI Monitor"

Test MIDI Port
"Test MIDI Port"

Кроме того, на таком компьютере могут храниться большие объёмы текстовой справочной информации, быть установлены различные программы прошивки микросхем памяти и микроконтроллеров, и др. Кстати говоря, с точки зрения таких программ, FAT’овые системы лучше, чем NTFS’ные. Короче говоря, такой Notebook можно превратить в переносную мини-лабораторию.
Возвратимся к музыкальной теме. К сожалению, практически все переносные компьютеры не оборудованы приёмопередатчиком MPU-401. В связи с этим, подключать их обычным способом к МИДИ-интерфейсу нельзя. Зато у них всегда имеется COM-port, очень похожий на MPU-401. Для подключения его к МИДИ-интерфейсу необходимо: во-первых, доработать электрическую часть ("железо"), а во-вторых, заставить систему видеть ком-порт, как миди-устройство ("софт"). Роль второго с успехом может выполнять специальный драйвер. В сети удалось найти продукт фирмы "Yamaha Corporation", CBX ver 2.00-1 (для Windows 98, из того же дистрибутива, устанавливается ver 1.85-1). При его установке, необходимо выбрать используемый ком-порт и отключить мультипортовый режим, так как было замечено, что в этом режиме, драйвер начинает передавать дополнительные команды. После инсталляции, в системе появляется новое миди-устройство – Yamaha CBX Driver. Доработка электрической части представляет собой: преобразователь уровней сигнала на основе MAX232, оптронную развязкуАОТ127а, пару сигнальных светодиодов и микроконтроллер фирмы "Microchip Technology Incorporated" PIC16F628A. Последний выполняет роль преобразователя скорости интерфейса, буферного элемента и управления светодиодами. Запитывается данное устройство от 4 контакта разъёма PS/2, также обычно присутствующего на Notebook’е. Про "преобразователь скорости" необходимо сказать особо.

Поскольку скорость стандартного интерфейса MIDI составляет 31250 бод, а в/у драйвер настраивает ком-порт на 38400 бод, то и необходим этот самый преобразователь. Так как одной из главных целей является создание недорогого, легко повторяемого устройства, в качестве элементной базы был выбран в/у микроконтроллер, стоимость которого не превышает 50 рублей, а в состав периферийных модулей уже входит один аппаратный приёмопередатчик USART. Его отводим для работы со скоростью 38400, а для 31250 делаем программную эмуляцию.

Теоретически, для этого надо, при наличии поступивших от ком-порта данных, через одинаковые промежутки времени, равные 32мкс (1/31250Гц), последовательно передать в "линию передачи" эти самые биты, начиная с младшего, включая стартовый (0) и стоповый (1). Также через 32мкс необходимо считывать состояние "лини приёма". При наличии данных, накапливать биты в специально отведённом, для этого, регистре, и после получения всего байта, передавать его в регистр передатчика аппаратного USART. К эмулируемому передатчику такой алгоритм полностью подходит, а вот при приёме, из-за нестабильности реального внешнего передатчика, может возникнуть ситуация, когда принятые данные будут искажены. Это произойдёт тогда, когда выборка будет производиться вблизи границы смены битов.

Time diagrams 1

Чтобы этого избежать, необходимо гарантировано делать выборку в середине битов. Для этого, в данной конструкции, временной интервал приёма одного бита разбит на три части. Возможны два "крайних" варианта распределения временных сигналов.

Time diagrams 2

Все остальные варианты будут промежуточными. Так как выборка осуществляется по второму сигналу (t2), нестабильность скорости внешнего передатчика, при которой данные будут считаны правильно, составляет: +/- (1/3):10x100% = +/- (3.33)%. Коэффициент 10 появляется из-за того, что для правильного приёма, необходимо принять весь байт, а так же стартовый и стоповый биты. То есть, десять бит.

Программа работает следующим образом. Один из таймеров микроконтроллера настраивается на генерацию прерываний через время равное 1/3 32мкс. Таким образом, каждый полный цикл приёма и/или передачи бита происходит за три прерывания.

В начале и конце подпрограммы обработки прерывания находятся стандартные операции, рекомендуемые разработчиком.

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

Далее идёт блок передатчика. Работает он так. При каждом третьем прерывании, проверяется наличие данных, для передачи, в специальном регистре. Если данные присутствуют, включается индикаторный светодиод, и устанавливается стартовый бит на линии передачи. Теперь операция будет повторяться каждое третье прерывание, с той лишь разницей, что сперва будут передаваться восемь информационных бит, а затем устанавливаться стоповый бит и выключаться светодиод. Такой алгоритм является несколько "неправильным". Логичнее было бы проверять наличие данных для передачи каждое прерывание. Это сделано, для уменьшения количества операций, так как было необходимо уложить всю подпрограмму обработки прерывания в 64 машинных цикла. Все ветки блока выровнены по времени исполнения. Таким образом, к началу следующего блока приёма, рабочая точка программы приходит за равное время.

Блок приёма функционирует так. Наличие стартового бита проверяется каждое прерывание. Если бит обнаружен, то по второму прерыванию снова проверяется его наличие. В случае подтверждения, зажигается светодиод, и включается механизм приёма. Дальнейшее считывание информации также осуществляется по каждому второму прерыванию. Данные помещаются в специальный регистр. При приёме десятого бита, гасится светодиод, механизм приёма выключается, и проверяется соответствие значения принятого бита стоповому. В случае совпадения, данные из в/у регистра, переписываются в буфер передатчика аппаратного USART, для отправки в ком-порт. Таким образом, данные будут приняты только при наличии стопового бита (если быть точным, при значении десятого бита, равном единице). Третье прерывание последнего цикла в приёме данных не участвует, и, при его возникновении, происходит новая проверка наличия стартового бита. Этим достигается вышесказанная нестабильность, равная "-3,33%", так как, в противном случае, она была бы только "+3,33%".

Для передачи данных из MIDI в Com, то есть от более медленного интерфейса к более скоростному, никаких сложностей не возникает, а вот из Com в MIDI, такие сложности есть. Разница скоростей интерфейсов составляет 18,62%, и, за период приёма данных из Com, в MIDI передадутся только 81,38% данных. Таким образом, при наличии однобайтного буфера, после приёмки 7-го байта, возникнет ситуация, когда данные, из приёмного регистра, уже некуда будет поместить. В данном микроконтроллере имеется два аппаратных буфера, позволяющих повысить это число до 12-ти, что всё равно недостаточно. Для существенного повышения данного показателя, организован программный буфер, из 160 байт. Следовательно, общее количество непрерывно передаваемых байт, достигло 860, что, для нормального режима функционирования MIDI-интерфейса, более чем достаточно.

По яркости свечения светодиодов можно судить об интенсивности потока данных в линиях интерфейса MIDI (VD2-приёмник, VD3-передатчик). Например, при включении режима передачи сигналов синхронизации, в том же CakeWalk’е, начинается постоянная передача однобайтовой команды Time Clock. Так как команда передаётся на 1/96 ноты (то есть, довольно редко, с точки зрения интерфейса), светодиод передатчика светится тускло (происходит эффект широтно-импульсной модуляции). При включении воспроизведения, начинают передаваться команды типа Note On/Off. Так как такие команды сами по себе – трёхбайтные, и вдобавок передаются группами (аккорды + для различных каналов), светодиод начинает ярко вспыхивать, в такт передаваемому произведению. Светодиод приёмника, как было сказано выше, включается по стартовому биту, а выключается по десятому, независимо от наличия стопового бита (в конечном итоге, передачи данных в Com). Эту особенность необходимо учитывать при эксплуатации.

Принципиальная схема настолько проста и была столько раз описана в различных источниках, что подробно останавливаться на ней не имеет смысла.

Com to MIDI
Посмотреть (скачать)
1594x857


Обратим внимание на некоторые особенности конструкции. Для обеспечения необходимых временных параметров, микроконтроллер функционирует на тактовой частоте, несколько превышающей максимальную паспортную. Из нескольких проверенных экземпляров (куплены в разное время, и в разных местах, так что, скорее всего партии – разные), все функционировали нормально. При этом отклонение тактовой частоты аппаратного USART составляет +0,16%.
"Электронный калькулятор", для расчёта настроек аппаратного USART (необходимо задать данные, помеченные синим цветом).

PCB

Версия для печати (1003x676)
Оригинал (в формате Abacom, Sprint-LayOut 4.0)


Печатная плата разрабатывалась под пластиковую телефонную коробку-розетку, у которой предварительно удаляются и стачиваются напильником некоторые части, а, образовавшееся после удаления разъёма отверстие, заклеивается куском пластика (можно использовать одну из удалённых частей).

Удаляемые части в телефонной коробке
Посмотреть (скачать)
1600x1200
Переделанная коробка с установленной платой
Посмотреть (скачать)
1600x1200

Разводка коммутации устройства с Com-портом выполнена исключительно исходя из "нужд автора". Поэтому, желающие упростить изготовление, могут попробовать осуществить соединение контактов 4-6 и 7-8 порта перемычками прямо на подсоединяемом разъёме, подключение осуществить четырёхжильным проводом, а все дорожки на печатной плате, связанные с этими линиями, исключить. Электролитические конденсаторы C3-C6 можно уменьшить до 1мкФ x 16В (зависит от конкретного варианта микросхемы 232). Резистор R3 необходимо устанавливать только в том случае, если, по какой-либо причине, устройство отказывается функционировать с внутренним "подтягивающим" резистором микроконтроллера. Диод VD1 – любой маломощный, импульсный. Для сохранения возможности подключения внешних устройств, коммутация к разъёму PS/2 выполнена в виде "сквозного переходника".

В заключении надо сказать, что хоть данное устройство и разработано для MIDI-интерфейса, оно, с незначительными изменениями, может использоваться и в других случаях, где требуется преобразование скорости USART. Однако, для данного микроконтроллера, скорость эмулируемого интерфейса, равная 31250 бод, видимо является предельной.

Прошивки
Ver Description
1.0 Выявлены ошибки.
1.1 Выявлены ошибки.
2.0 Не корректирует разницу входа в обработку прерывания.
2.1 Добавлена корректировка разницы входа в обработку прерывания.


"Исходник"


Обсудить на форуме

Обсудить на форуме "Pro-radio"


Источники:

1. А.Студнев "Что такое MIDI?", журнал "Радио" 1993-1-32
2. С.Кононов "MIDI-клавиатура для мультимедиа-компьютеров и MIDI-синтезаторов", журнал "Радио" 1997-4-42
3. Д.Дубровенко "MIDI-адаптер", www.dubrovenko.ru



Упоминающиеся программы здесь.




* - Статья опубликована в журнале "Радио" 2007-09-28
Нумерация элементов отличается




НаписАть отзывE-mail            Other electronics  Другая электроника

Home
На главную



счётчик посещений

Copyright © 2007-2008 by Dmitry Dubrovenko.