ПРОСТАЯ MIDI-КЛАВИАТУРА ДЛЯ ПК
Н. ОБОРОТОВ, г. Санкт-Петербург
Предлагаемое устройство представляет собой простейший MIDI-контроллер (клавиатуру), предназначенный для изучения и демонстрации функционирования MIDI-интерфейса. Его можно использовать и для обучения музыкальной грамоте и ввода нот в домашней музыкальной студии, - если вы умеете играть на фортепьяно, это намного проще, чем вводить их с клавиатуры или с помощью "мыши". Читателям, желающим собрать устройство с более широкими возможностями, рекомендуем познакомиться со статьей С. Кононова "MIDI-клавиатура для мультимедиа-компьютеров и MIDI-синтезаторов", опубликованной в "Радио", 1997, № 3, с. 40-42.
Как известно, в настоящее время практически все звуковые карты для персональных компьютеров (ПК) имеют в своем составе MIDI-интерфейс (Roland MPU-401), поддерживающий функции UART, к которому можно подключить любое внешнее MIDI-устройство. Подробнее об этом рассказано в [1]. При наличии программного секвенсора (например, Cakewalk Pro Audio) ПК может озвучивать поток MIDI-команд, источником которых служит файл или внешний контроллер. Внешние MIDI-устройства и ПК общаются между собой посредством интерфейса. Его официальную спецификацию можно приобрести на сайте http://www.midi.org/, а описание на русском языке найти в [2].
Устройство выполнено на микроконтроллере i8751H и собрано по схеме, изображенной на рис. 1. В качестве SA1 применен барабанный переключатель с шестнадцатиричным выходом (от станка с ЧПУ). Его вполне заменит обычный на 16 положений и два направления с шифратором К155ИВ1. Одно направление такого переключателя используют для управления состоянием линии Р2.3 микроконтроллера DD1, другое - входами шифратора. При этом в программе необходимо инвертировать данные, считываемые с порта Р2 (в блоках формирования первого байта MIDI-сообщения).
Puc.1Допустима замена переключателя и на четыре обычных тумблера, но в этом случае следует учесть, что номер канала выбирается в шестнадцатиричном виде. Розетка XS1 - ОНЦ-ВГ-5/16-Р (СГ5). Вместо i8751H можно использовать отечественную однокристальную микро-ЭВМ КР1816ВЕ51, 78L05 заменима на КР142ЕН5А, КР142ЕН5В (при входном напряжении 8...15 В).
Конструкция клавиш - любая. Об особенностях механического устройства клавиатур заводского изготовления читайте в [З].
Текст программы MIDI-клавиатуры приведен в табл. 1, ее коды - в табл. 2. В программе реализованы только основные функции клавиатуры, но поскольку из 2 Кбайт встроенного ПЗУ использовано только 200 байт, при желании можно добавить датчик скорости нажатия клавиш, педаль, функцию транспонирования (сдвига на несколько полутонов вверх или вниз).
Для подключения клавиатуры к обычной звуковой карте требуется адаптер. Необходимость в нем обусловлена тем, что в ПК негде разместить MIDI-разъемы, поэтому требуемую стандартом оптронную развязку и преобразователь
интерфейса в интерфейс "токовая петля" приходится выносить во внешний MIDI-адаптер. Варианты схемных решений этого узла вы найдете в различных телеконференциях, посвященных MIDI-и звуковым картам. Его можно собрать и по схеме, показанной на рис. 2. В качестве U1 допустимо применение любого диодного оптрона с временем задержки включения и выключения не более 2 мкс, чувствительностью не менее 5 мА и ТТЛ-выходом (например, К262КП1А). Разъем ХР1 - кабельная вилка D15 (ее подключают к разъему 'Joystick" звуковой карты), XS2 и XS5 -розетки D15 для печатного монтажа, необходимые для сохранения возможности подключения джойстиков к карте (если в этом нет нужды, их не устанавливают). Чтобы клавиатура работала, необходимо установить драйвер для обслуживания входа MiDI, поставляемый вместе со звуковой картой.
;************************************************ ;ПО контроллера MIDI клавиатуры rev. 1.2.13 ;(С)Николай Оборотов (Nik V.Oborotoff) 1999 ;************************************************ ;Таблица векторов прерывании
••hardware Reeet org 0
ajap init /external INTO org 3
reti ;ti-r 0 org Obh
reti
;external INT1 org 13h
reti ;ti-r 1 org Ibh
reti
;serial interface org 23h
reti
;************************************************
;константы
;************************************************
keyar equ 30h начальный адрес массива плавив
keynu equ 48 число кдавмв
vprea* equ 68h адрес переменной "скорость
vrel* equ 69h адрес переменной '•скорость
отпускания" noteorequ 6*h ;адрес переменной "сме-ние
номера моги"
;************************************************
;****•*******************************************
org lOOh
init:
/установить иауамцт^м и запустить ti-r 1
•ov pcon,t80h BOV fcaod,*22h
•ov thl,t0ffh
•ov tll,"0tth
•etb tcon.6
••установить параметры serial interface
•ov •oon,t42h
;установить в О состояние всех кяавив
•ov rl,•keyar
•ov r0,*keynu
inar:
• •ov ?rl,"0 inc rl djnz r0,inax
;установить значение переменных по умолчанию
•ov vpre"",t63 ;0-в1п, 127--х
•ov vrel",t70 ;0-"in, 127--x
•ov notoof>,t41 ;Да 2-й октавы (F2) - ми б-й
•ov p0,0fth ,-октажы (Жб) , 41-88
•***********************************************
•In proc rO -
rl - адрес обрабатываемой хлавмвм r2 - маска ввода (1 - оправмваемая линия) г3 - маска вывода (0 - опрашиваемая линия) г4 - прелижуее состояние обрабатываемой клавики г5 -
хб - считанное состояние обрабатываемой клавини r7 -
•***********************************************
•can:
•ov r3,t0feh /будет опрашиваться линия рО.О
•ov rl,tkeyar ;будет опрашиваться кдави- О •etnol:
•ov a,tl ,-будет опрашиваться линия pl.O
""v ро.гз Таблица 1
пор пор пор nextii:
•ov r2,a сохранить текущую маску ввода
•ov а,?г1 считать преднцуее состояние обрабатываемой клавиви
•ov г4,а
•ov а,р1 считать состояние клавиатуры
cpl a
ап1 а,г2 выделить состояние
•ov гб,а xrl a,r4 сравнить теку-- и
предыду-- состояния клавши jnz atchng переход, "ели состояние
иамеммлось cont:
inc rl
•ov a,r2 создать новую маску ввода cir с Пс а
jnc nextii переход, если опро-лм все линии ввода
•ov а,г3 создать новую маску вывода rl a
jnb Oe6h,"can если опро-ны все клавивм, то повторить цикл опроса
•ov г3,а
•)тр •etnol
;состояние клавини изменилось etchng:
•ov a, r 6
mov вг1,а сохранить новое состояние
jz keyrel если новое состояние • О, то клав*-а отпущена
;клавивж нажата
BOV а,р2 считать номер канала
ani a,t0fh
orl a,t90h первый байт MIDI сооб-ния
"включить моту в канале п" acall eendby
•ov a,rl второй байт - номер ноты cir с
•ubb a, "48 add a,noteofs acall aendby
•ov a,vpreaa ; третий байт скорость нажатия acall aendby jHp cont
;клавина отпуеиа keyrel:
•ov a,p2 .-считать номер какала
ani a,t0fh
orl a,"80h .-первый байт MIDI сооб-иия
; "выключить ноту в канале п" acall •endby
•ov a,rl ,-второй байт - номер моты cir с
•ubb а,•48 add a,noteofe acall •endby
•ov a,vrel* ;третий байт скорость
;отпускания acall •endby ]•? cont
;посылка байта
;а - отправляемый байт
,.***•********************************************
•endby:
jnb •con.l,•endby
cir •con.l
•ov sbuf,a
епd
Авторские варианты описанных устройств собраны на макетных платах, печатные платы не разрабатывались. Кабель для подключения контроллера к адаптеру (соединяются розетки "MIDI OUT" первого и " MIDI IN" второго) изготовляют по схеме 4-4, 2-2, 5-5 (используют вилки ОНЦ-ВГ-5/16-В (СШ5).
Проверка показала, что при исправных деталях и отсутствии ошибок в монтаже устройства не требуют налаживания и начинают работать сразу после включения питания. Они тестировались со звуковыми картами Gravis Ultrasound Classic rev.3.71, Gravis Ultrasound MAX, Gravis Ultrasound PnP и Creative SoundBlaster Live! Value.
ЛИТЕРАТУРА
1. Application Note AN27. - http://www. crystal.corn/.
2. Музыченко Е. Описание интерфейса MIDI. - http://ixbt.stack.neV.
3. Ижаев Р. Домашняя студия: MIDI-клавиатуры. - http://www.midi.ru/.
Радио 3/2000, с.25,26,44.