Com to MIDI или преобразование скорости USART » Программирование устройств на PIC микроконтроллерах


Логин:
Пароль:
О сайте:

Pic.Rkniga.ru - Сайт как для начинающих, так и для опытных радиолюбителей, разрабатывающих свои устройства на популярных PIC микроконтроллерах.
Здесь можно обмениваться сообщениями на форуме, а также добавлять на сайт статьи и схемы своих устройств.

Меню сайта
Главная Форум по PIC микроконтроллерам Форум Статьи по PIC микроконтроллерам Статьи Справочная информаци по PIC микроконтроллерам Справочник Литература по PIC микроконтроллерам Литература Схемотехника Схемотехника устройств на PIC микроконтроллерах Микроконтроллеры Программаторы Все по программированию PIC микроконтроллеров Программы, Софт Программы Ссылки Написать нам
Опрос

Сколько лет вы занимаетесь программированием PIC микроконтроллеров?


от 0-1 года
1-3 года
3-5 лет
5-10 лет
более 10


Последние материалы
  • Кнопка On/OFF на PIC12F629.
  • Часы с синхронизацией от китайского будильника
  • ШИМ регулятор на PIC16F628A.
  • Счетчики прямого и обратного счета на PIC16F628A.
  • Таймер отключения питания для мультиметра и не только.
  • Измеритель напряжения и тока
  • Маршрутный компьютер для электровелосипеда
  • Простой двухканальный термометр на PIC16F690 и датчиках DS18B20
  • Электронная "Незабудка" для забывчивых
  • Встраиваемый вольтметр на PIC12F675
  • Популярные материалы
    Случайная книга
    Com to MIDI или преобразование скорости USART
    Автор публикации: alex Просмотров: 3374 Добавлен: 9-07-2012, 18:49 Комментарии: 0

    К сожалению, практически все переносные компьютеры не оборудованы приёмопередатчиком MPU-401. В связи с этим, подключать их обычным способом к МИДИ-интерфейсу нельзя. Зато у них всегда имеется COM порт, очень похожий на MPU-401. Для подключения его к МИДИ интерфейсу необходимо: во-первых, доработать электрическую часть ("железо"), а во-вторых, заставить систему видеть ком-порт, как миди устройство ("софт"). Роль второго с успехом может выполнять специальный драйвер. В сети удалось найти продукт фирмы "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

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

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

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

    Файлы в архиве:
    com-midi.asm - исходный код для микроконтроллера
    ycbx201.exe - Yamaha — СВХ Driver версии 2.00-1
    Печатная плата в формате Sprint-LayOut 4.0

    preobrcommidiusart.rar [999,33 Kb] (cкачиваний: 114)

    Категория: Компьютер, PIC16
    « Назад
    Комментарии
    Информация
    Посетители, находящиеся в группе Гости, не могут оставлять комментарии в данной новости.