Проект Eldigi.ru пережил своё новое становление. В связи с этим на сайте могут быть ошибки. Нашли ошибку? Помогите проекту, выделите её и нажмите Ctrl+Enter. Подробнее...

COM to MIDI или преобразование скорости USART (PIC16F828A, asm)

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

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

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

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

Все остальные варианты будут промежуточными. Так как выборка осуществляется по второму сигналу (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

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

Печатная плата для преобразователя COM to MIDI

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

Преобразователь COM to MIDI Собранный преобразователь COM to MIDI Подготавливаем коробку для преобразователя

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

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

Скачать исходный код для микроконтроллера и прошивку (7 Кб). Загрузок: 234
Yamaha СВХ Driver версии 2.00-1 (960 Кб). Загрузок: 210
Скачать печатную плату в формате Sprint-LayOut 4.0 (15 Кб). Загрузок: 191
Электронный калькулятор для расчёта настроек USART PIC контроллеров (5 Кб). Загрузок: 222

Автор статьи: Дубровенко Д., г. Санкт-Петербург E-mail: gregoryr [собачка] imail.ru

Просмотров: 2561

Splan 7.0.0.9 Rus + Portable + Viewer Fiinal
26.04.2014
sPlan – удобный инструмент для черчения электронных схем. Имеет простой и интуитивно понятный интерфейс. В программе заложены... подробнее...

Очень удобная программа для чтения pdf Foxit Reader
26.04.2014
Foxit Reader - Компактная и шустрая программа для чтения PDF файлов. Может служить альтернативой для популярного просмотрщика PDF - Adobe Reader.... подробнее...

Proteus 7.7 SP2 + Crack v1.0.2 + RUS
22.04.2014
Proteus VSM - программа-симулятор микроконтроллерных устройств. Поддерживает МК: PIC, 8051, AVR, HC11, ARM7/LPC2000 и другие распространенные процессоры.... подробнее...

Новое становление сайта Eldigi.ru
01.04.2014
Проект Eldigi.ru который долгое время находился в застывшем состоянии снова принимается за работу с новымы силами, с новыми статьями и с... подробнее...

Proteus 7.7 SP2 + Crack v1.0.2 + RUS
22.04.2014
Proteus VSM - программа-симулятор микроконтроллерных устройств. Поддерживает МК: PIC, 8051, AVR, HC11, ARM7/LPC2000 и другие распространенные процессоры.... подробнее...

Splan 7.0.0.9 Rus + Portable + Viewer Fiinal
26.04.2014
sPlan – удобный инструмент для черчения электронных схем. Имеет простой и интуитивно понятный интерфейс. В программе заложены... подробнее...

Цифровая паяльная станция своими руками (ATmega8, C)
27.05.2012
Состав: ATmega8, LM358, IRFZ44, 7805, мост, 13 резисторов, один потенциометр, 2 электролита, 4 конденсатора, трехразрядный светодиодный семисегментный... подробнее...

Тахометр на AVR микроконтроллере (ATtiny2313, C)
13.01.2010
Данное устройство представляет собой неплохой тахометр, предел его измерений составляет 100 - 9990 об/мин. Точность измерения - ± 3 об/мин.... подробнее...

Публикация статьи на сайте eldigi.ru
01.08.2008
Если у вас есть интересная схема или статья по микроэлектронике, которой нет на нашем сайте и вы хотите разместить её у нас, то пришлите... подробнее...

Цифровая паяльная станция своими руками (v1.0) (ATmega8, C)
09.08.2008
Начать нужно с того, что однажды я озадачился приобретением паяльной станции, ибо "вечные" жала портятся от перегрева, а мой... подробнее...

Сенсорный регулятор освещения с дистанционным управлением (ATtiny2313)
08.03.2009
Предлагаемое устройство — один из вариантов микроконтроллерных регуляторов яркости ламп накаливания, конструкции которых можно... подробнее...

Домашняя метеостанция с часами, календарем и будильниками (ATmega32, C)
21.04.2008
Предлагаемый прибор отличается от аналогов использованием современной базы, исчерпывающим в домашних условиях набором измеряемых... подробнее...