ПРОСТАЯ 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-сообщения).

cif-r3o1.gif
Puc.1

Допустима замена переключателя и на четыре обычных тумблера, но в этом случае следует учесть, что номер канала выбирается в шестнадцатиричном виде. Розетка XS1 - ОНЦ-ВГ-5/16-Р (СГ5). Вместо i8751H можно использовать отечественную однокристальную микро-ЭВМ КР1816ВЕ51, 78L05 заменима на КР142ЕН5А, КР142ЕН5В (при входном напряжении 8...15 В).

Конструкция клавиш - любая. Об особенностях механического устройства клавиатур заводского изготовления читайте в [З].

Текст программы MIDI-клавиатуры приведен в табл. 1, ее коды - в табл. 2. В программе реализованы только основные функции клавиатуры, но поскольку из 2 Кбайт встроенного ПЗУ использовано только 200 байт, при желании можно добавить датчик скорости нажатия клавиш, педаль, функцию транспонирования (сдвига на несколько полутонов вверх или вниз).

Для подключения клавиатуры к обычной звуковой карте требуется адаптер. Необходимость в нем обусловлена тем, что в ПК негде разместить MIDI-разъемы, поэтому требуемую стандартом оптронную развязку и преобразователь

cif-r3o2.gif

интерфейса в интерфейс "токовая петля" приходится выносить во внешний 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


cif-r3o3.gif

Авторские варианты описанных устройств собраны на макетных платах, печатные платы не разрабатывались. Кабель для подключения контроллера к адаптеру (соединяются розетки "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.