Midi контроллер своими руками из клавиатуры. Как сделать дешевый MIDI контроллер на базе Arduino своими руками

Предисловие

Так как и я, и моя жена были в детстве обучены нажимать на клавиши, то дома явно не хватало некоего устройства с черными и белыми клавишами для передачи опыта нажатия на оные подрастающему поколению. Увы в маленькой "однушке" не то что "Стенвею" - простому "Красному октябрю" не было места. Выход был найден - MIDI клавиатура! Тем более, что попытки сделать самому нечто подобное предпринимались еще на заре моего "радиогубительства". Опять же из за нехватки места было решено ограничиться для начала 4 октавами. Да и финансы не позволяли прикупить какой нибудь "Роланд".

Немного поискав в интернете я наткнулся на объявление о продаже за 50 вечнозеленых девайса под названием Fatar 49. Поискав все в той же паутине нашел описание этого чуда.

MIDI клавиатура Fatar StudioLogic CMK 49

  • 4-октавная, полноразмерная, динамическая (чувствительная к скорости нажатия), невзвешенная; 49 клавиш
  • Разъемы MIDI выход, к нему подключается штекер с надписью "IN"
  • Питание Адаптер питания может не входить в комплект поставки.
  • Нужный адаптер питания - 9В, 0.5А. Внутренний контакт "+", внешний "-".
  • Размеры внешние 75.2 х 15 х 8 см
  • Вес 2 кг

Семейный совет постановил - БЕРЕМ!!! Прежний владелец продемонстрировав что она работает даже приложил к ней адаптер питания. MIDI шнурок у меня уже был (запас давно как чуствовал). И вот привезя домой и подключив ее к компьютеру, я наконец смог вспомнить детство. И... понять что за 15 лет все забыто почти полностью.

В просторах сети была добыта очень интересная программа "Play Piano" компании Midisoft. Она может практически любого научить играть. Она следит за правильностью игры и указывает на ваши ошибки, как хороший преподаватель. Жаль только что за это время так и не удалось найти чего-нибудь похожего, но поновее (программка 96-го года).

Было это все в прошлом веке. Как говорят в романах - прошли годы... Родились и подросли дети. Клавиатура на столе и тогда была не особенно удобна - очень высоко получалось по сравнению с обычным пианино.

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

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

Во-первых стало понятно, что делать клавиатуру на высоту стандартного пианино смысла нет, так как делалось это уже под конкретных людей. Во-вторых сделав только подставку под клавиатуру я быстро понял, что придется удлинять MIDI-кабель. И тогда созрело решение сделать полностью автономный музыкальный инструмент. Покопавшись в запасниках компьютерного железа, из него были извлечены вполне рабочие (хотя морально давно устаревшие) компоненты: материнская плата, процессор, видеокарта и жесткий диск. Найден был также старый блок питания. Не хватало малого - памяти. Хороший человек из сервисной службы подарил мне перед новым годом модуль. Теперь было все что нужно.

Конфигурация получилась самая что ни на есть примитивная для нынешних времен:

  • CPU: Pentium MMX 166 MHz разогнаный до 200
  • RAM: SDRAM PC100 128 Mb
  • HDD: Coner 340 Mb
  • VIDEO: TRIDENT
  • AUDIO: Onboard Yamaha OPL3
Но для обработки MIDI слабое место здесь только звуковая карта. Для корпуса пришлось прикупить 4 мебельных щита 800х200х20.

Потратив половину выходного дня получил вот такой агрегат:

Сверлим отверстия для кнопки включения и индикаторов "Power" и "HDD".

Вставляем клавиатуру.

Отпиливаем шасси корпуса по размеру материнской платы. Прикручиваем ее установив процессор память и видеокарточку.

Все пустые гнезда шасси закрываем красивыми блестящими заглушками.

Прикручиваем корзину HDD c диском к корпусу.

Подключаем блок питания и все остальные шлейфы и провода

Операционка была установлена заранее. На такой объем удалось поставить только Win98. Подключаем монитор, клавиатуру и мышь. Убеждаемся, что все работает.

Теперь переходим к акустике. Раньше все шло через компьютер, который был подключен к хорошему усилителю и который, в свою очередь, был подключен к приличным колонкам. В объем нового устройства все это не впихнешь. Да и нет смысла. Для такой звуковой карточки хватит чего-нибудь попроще. Опять ныряем в запасники и достаем вот такую (если можно так сказать) акустическую систему:

Разбираем ее и видим внутри:

Да уж, но на безрыбье и рак рыба. Надо будет съездить на дачу, там где-то лежат неплохие динамики и спаянный мной лет 12 назад усилок на К174УН7 - все же мощности у него побольше будет.

Подключаем этот "Звук".

Ну вот... что получилось.

Динамики на даче не были найдены (очевидно уже где-то использовал и забыл), но мир не без добрых людей и сосед отдал мне два автомобильных среднечастотника.

В процессе перетыкания туда-сюда клавиатуры одна из клавиш стала звучать только при сильном нажатии. Пришлось все разобрать и напоить родимую C 2 H 5 OH. Каждую клавишу, каждую резиночку протер, высушил и поставил обратно. Заодно щелкнул фотиком внутреннее устройство.

Усилитель на К174УН7 был обнаружен, но то ли кондеры на нем за это время приказали долго жить, то ли он слишком чувствительный. В общем, жутко фонит. Пришлось пока оставить старый усилитель.

Клавиатура предназначена для подключения к внешнему саунд-модулю или компьютеру (при наличии соответствующего интерфейса) с использованием MIDI протокола – для записи музыки в секвенсерную программу или живого исполнения. Количество клавиш в предложенном варианте 48, может быть увеличено без переделки схемы до 64. Отличительной особенностью предлагаемой клавиатуры является чувствительность к силе удара по клавише.

История создания устройства

Некоторое время назад в связи с покупкой квартиры я вынужденно лишился шикарного инструмента, выполнявшего у меня роль MIDI клавиатуры – это была легендарная YAMAHA DX-7. Когда печаль поутихла, во всей остроте и неприглядности встал вопрос: а на чем же работать? Именно в этот момент стараниями моего приятеля в мои загребущие ручонки попала полусобранная схема на КР1816ВЕ39 (по супостатски этот процессор зовется 8048). Схема проста и в сборке, и в наладке, и, главное, подвернулась под руку в нужное время. Клавиатуру я собрал в виде матрицы 8x6, применив КР1533ИД7 и КР1533КП7. Не обошлось и без ложки дегтя – два недостатка этой схемы насмерть убивают все ее достоинства: отсутствие чувствительности к скорости нажатия клавиши (динамики) и колеса PITCH WEEL. Ну, я когда-то программировал на Z-80 (и даже сделал работающий секвенсор) и решил тряхнуть стариной. Z-80 как CPU я решительно отмел, как морально устаревший. Кроме того, не хотелось много паять, и я решил взять за основу этот самый девайс на КР1816ВЕ39, оснастив его еще одним мультиплексором для размыкающих (верхних) контактов клавиш. Я отыскал документацию (вы не поверите – в библиотеке, книга «Проектирование цифровых устройств на однокристальных микропроцессорах») на ассемблер КР1816ВЕ39 и накарябал программу… И тут выяснилось, что у приятеля сдох программатор ПЗУ, и зашить программу просто нечем... От горя я совсем потерял разум и решил переписать тот же алгоритм под PIC. За полдня был спаян программатор (LUDIPIPO), затем макет из панельки, КР1533ИД7 и пары КР1533КП7, а весь монтаж сделан МГТФом без всякой печатки. И процесс пошел…

Сначала был запущен нединамический вариант программы (его я тоже привожу для тех, у кого клавиатура имеет один контакт на клавишу). Потом запустилась динамическая версия. И тут созрела мысль добавить кнопки и индикатор. Дело в том, что у меня без дела давно валялась платка WAVEBLASTER (дочерний wavetable синтезатор для очень старых звуковух). Подключивши ее к моему творению, я получил нечто, на чем можно играть (в меру сил и таланта) без компьютера, что иногда довольно удобно. Это и определило набор функций на кнопках – он может пригодиться при подключении к звуковым модулям при “живой” игре. Функции кнопок легко изменить, написав свои обработчики и используя мои процедуры опроса и индикации. Кое-как собранная в железном корпусе клавиатура оказалась удобнее, чем YAMAHA PSS (все же полноразмерные клавиши, педаль и, главное, динамика!). В разгаре творческого процесса возникло труднопреодолимое желание сделать версию MIDI клавиатуры чисто для компьютера – индикатор и кнопки необязательны, но нужны колеса PITCH WEEL и MODULATION. Некоторое время я с ним боролся, но, в конце концов, сдался и снова включил паяльник. Электронику собрать несложно, с механикой – несколько сложнее, и я начал морщить лоб над устройством колеса. Поразмыслив, я решил отказаться от второго колеса - все равно я никогда не кручу их сразу оба, обычно сначала пишу ноты и pitch, затем дописываю modulation. Не последним соображением было и уменьшение в два раза объема столь любимых мною механических работ. Для менее ленивых я ниже объясню, как почти не усложняя схему сделать два колеса. Чтобы все-таки иметь возможность писать modulation, я решил организовать три режима работы колеса: pitch на 2 полутона, pitch на 1 полутон (удобно), и modulation. Переключать это все можно одной кнопкой, а индицировать режим – парой светодиодов. Чтобы упростить схему, остальные кнопки и индикаторы я ликвидировал, для работы с современными программами-секвенсорами это все не нужно.

Колесо, конечно же, должно быть надето на ось потенциометра, это-то понятно, а вот к чему его подключить? Первой мыслью было использовать одновибратор на таймере 555. Но расчет показал, что будет трудно добиться точности и стабильности измерения длительности импульса при попытке обеспечить приемлемую частоту опроса колеса, ведь процессор в основном занят измерением времени переключения клавиатурных контактов. Остался путь использования аналого-цифрового преобразователя (АЦП). Поскольку у меня использовался Pic16F84 без встроенного АЦП, я вспомнил инженерное прошлое (и родной завод) и сделал АЦП из нескольких резисторов с компаратором (и куска программы). Получилось просто, дешево и довольно точно.

Я привожу обе схемы – и с кнопками, и с колесом, а также программы для них. При желании обе схемы можно легко совместить, слегка изменив адреса внешних устройств, нужно только помнить, что режим CHORUS (STEREO) использует pitch для получения расстройки и его нужно или убрать, или озаботится передачей pitch с расстройкой по каналам.

Итак – собственно клавиатура

Схема устройства

Первым появился нединамический вариант, нечувствительный к силе удара по клавише – для проверки работоспособности макета.

Я использовал PIC16F84 в качестве процессора из нескольких соображений: эта микросхема доступна, дешева и удобно программируется, кроме того – именно она оказалась у меня под руками. Внимание: PIC16C84 не годится - у него ОЗУ всего 36 ячеек и программа не будет работать. Впрочем, схема с колесом использует меньше ячеек ОЗУ и ее программу можно втиснуть и в PIC16C84, сократив еще пару ячеек, например MIDCH (присвоив постоянный MIDI канал всем передаваемым данным).

Схема динамической клавиатуры с индикацией приведена ниже:

Схема во многом традиционна - трудно изобрести велосипед без педалей и колес.J Порт B работает на передачу - младшие 7 бит выводят адрес клавиши в матрице или данные для внешних устройств (индикатор и ЦАП колеса). Старший бит используется для вывода MIDI данных последовательным кодом - преобразование и вывод сделаны программными. Поэтому кварц должен быть на 4 MHz, если вы не хотите переписывать процедуру вывода байта по MIDI. Два младших бита порта A работают на прием - на них поступают сигналы с мультиплексоров “отпущенных” и “нажатых” контактов клавиш, а три старших бита определяют адрес внешнего устройства (через еще один дешифратор КР1533ИД7). В схеме с колесом от дешифратора адреса внешнего устройства я отказался для упрощения схемы и освобождения старшего бита порта PA4 для ввода данных с компаратора, поэтому адреса клавиатуры и кнопок другие. При совмещении схем эту микросхему придется вернуть, для дешифрации адреса использовать биты порта PA2 и PA3,и адресовать 4 устройства: клавиатуру, кнопки, регистр данных динамической индикации и регистр знакоместа динамической индикации. Индикацию режимов колеса придется переписать.

Схема с колесом PITCH WEEL / MODULATION выглядит так:

На каждую клавишу ставится один диод для развязки. Резисторы на входах мультиплексоров не должны быть более 8k, иначе возможны глюки из-за емкости монтажа. Индикатор - любой с общим анодом на 3 разряда, если выводы сегментов каждого разряда выведены отдельно, выводы одноименных сегментов нужно объединить - индикация динамическая и разряды зажигаются последовательно. Кнопки любые, без фиксации, дребезг контактов давится программно. Светодиоды установлены возле одноименных кнопок и индицируют включение соответствующих режимов, кнопки «+» и «- » светодиодов не имеют. Транзисторы на индикаторе любые маломощные высокочастотные обратной проводимости. Два регистра КР1533ИР23 использованы для поочередного защелкивания адреса и кода текущего разряда индикатора (светодиоды тоже сгруппированы в два квазиразряда). У меня использована стандартная клавиатура от еще советских электроорганов на 48 клавиш (она выпускалась и отдельно как радиоконструктор «СТАРТ», и довольно широко распространена). Чтобы уменьшить высоту клавиатуры и толщину инструмента, из шести контактных групп под каждой клавишей оставлено две, и все это обрезано и переклеено. Вообще достаточно одной переключающей группы на клавишу, но так было удобней клеить. Сборные шины “отпущенных” и “нажатых” контактов имеют длину 8 клавиш. При желании можно использовать и клавиатуру, где вместо переключающей группы контактов используется две пары замыкающих контактов – одна пара замыкается в начале движения клавиши, другая в конце (как на инструментах YAMAHA). В этом случае сигнал на PA0 нужно подавать с инверсного выхода мультиплексора (вывод 6). Без изменений в схеме можно использовать клавиатуру на 64 клавиши (стандарт – 61, т.е. 5 октав). При необходимости число клавиш может быть увеличено хоть до 127, для этого в схему нужно ввести еще один дешифратор КР1533ИД7.

Очень важно хорошо отстроить механику - верхние контакты ОБЯЗАТЕЛЬНО должны замыкаться при отпускании клавиш. Если этого не сделать, программа считает такие клавиши нажатыми и пытается их обрабатывать, поэтому повторное нажатие этих клавиш звука не дает. Кроме того, максимальное количество одновременно звучащих нот – 10 (если у кого-нибудь на руках выросло больше пальцев, это количество легко изменить), и не отпущенные клавиши уменьшают это количество. Из этих же соображений число клавиш, указанное в процедуре опроса клавиатуры, должно ОБЯЗАТЕЛЬНО совпадать с количеством реальных клавиш. Дребезг контактов давится программно.

Для резистивной матрицы R-2R АЦП желательно подобрать резисторы с точностью 1–2%, причем абсолютные значения могут быть и другие, важно отношение. Впрочем, сильно увеличивать номинал не стоит, это увеличит время преобразования из-за входной емкости компаратора. Я использовал SMD резисторы без подбора, хотя измерения показали, что в одной монтажной полоске резисторы обычно согласованы с точностью выше 1%. Я уверен, что схема будет работать и с неточными резисторами, но линейность характеристики ухудшится. Само колесо сделано из ручки от старого телевизора и имеет пружинку на оси потенциометра, возвращающую его в среднее положение. Для удобства настройки механики, при включении питания с нажатой кнопкой режима, включается отладочная программа, зажигающая светодиод, когда колесо находится в среднем положении, это позволяет точно настроить нулевой положение колеса на оси потенциометра. Если есть потребность и желание сделать отдельное колесо MODULATION, его нужно подключить к свободному элементу компаратора (их там четыре), причем матрица R-2R у обоих колес общая. Для коммутации выходов компараторов лучше применить дополнительную микросхему, а в качестве управляющего сигнала использовать PA2.

При желании можно собрать динамический вариант клавиатуры и без индикации, кнопок и колеса PITCH WEEL / MODULATION – просто не собирая неиспользуемую часть схемы. Все изменяемые параметры будут установлены по умолчанию при включении питания…

Питать это все можно от чего угодно, ток потребления зависит от конкретного индикатора и не превышает 100 mA. У меня прямо на плате стоит стабилизатор 7805 без радиатора (его хорошо видно на фотографии). Небольшой радиатор нужен, если на него подавать более 9v. Компаратор питается напряжением 9 – 12 v, желательно стабилизированным. Да, я использовал микросхемы советского производства из старых запасов – существует большое количество их современных аналогов, замена возможна и даже желательна – современные аналоги имеют меньшее потребление.

Программа

Алгоритм обработки нажатых клавиш происходит от предложенного в журнале «Микропроцессорные средства и системы» №5 за 1986г. Именно эта публикация (а точнее, ошибка в предложенной программе) и побудила меня к изучению ассемблера. Собственно, оттуда взята лишь идея записывать номер каждой нажатой клавиши в специально выделенную область ОЗУ (CHAN), чтобы при повторном опросе клавиатуры не обрабатывать снова уже обработанную клавишу. У меня под каждую из нажатых клавиш (всего не более 10) отведено две ячейки ОЗУ: в первой записывается номер нажатой клавиши, во второй – ее VELOCITY (скорость нажатия). Повторюсь – этих ячеек всего 20 и начальный адрес задан именем CHAN. Признаком свободной пары является установленный старший бит первой ячейки. Установленный старший бит второй ячейки означает, что NOTE ON для этой клавиши уже передано и в дальнейшей обработке она не нуждается.

Подробно описывать всю программу я не буду, исходник изобилует комментариями и для подготовленного человека вполне доступен. Для остальных я даю сразу готовые прошивки в файле Dinamic.hex и Pitchmod.hex. Поясню только некоторые неочевидные моменты. Ну, прежде всего о динамике: в момент размыкания верхних контактов клавиши ее номер записывается в первую ячейку первой же свободной пары из области CHAN, одновременно сбрасывая признак свободной пары. Во вторую ячейку записывается начальное значение VELOCITY = 127. Чувствительность клавиатуры определяется частотой следования прерываний, так как обработка прерывания уменьшает значения VELOCITY для всех клавиш, NOTE ON которых еще не передано. Прерывания вызываются встроенным таймером. В момент замыкания нижних контактов клавиши в соответствующей ячейке CHAN устанавливается признак «переданности» и передается NOTE ON с текущей VELOCITY. Для улучшения кривой чувствительности уменьшение значений VELOCITY идет по логарифмическому закону: из текущего значения VELOCITY вычитается 1/16 его часть, уменьшенная на 1. Таким образом, во время движения клавиши от верхнего контакта к нижнему значение VELOCITY в соответствующей ячейке CHAN уменьшается по логарифмическому закону, и чем быстрее движется клавиша, тем больше VELOCITY в момент замыкания нижних контактов клавиши и передачи NOTE ON. Прерывания также управляют динамической индикацией, это сделано для устранения мерцания индикатора.
Функции кнопок: TRANSPOSE - все тональности приводятся к любимому ля-минору: диапазон +/- 15 полутонов. PRG назначает тембр (инструмент) для заданного пресета (UP1-UP5), а VOL – его громкость. Текущий параметр выводится на индикатор и может изменяться кнопками «+» и «-».TWIN выводит «двойной» тембр – звучат одновременно один из пресетов (UP1-UP5) и, одновременно пресет LOWER. STEREO выводит звук текущего пресета в правый и левый стереоканалы с небольшой «расстройкой» (эффект «хорус»). Кнопка SPLIT не задействована. Педаль SUSTAIN схемотехнически выполнена, как одна из кнопок, емкость ее провода не должна быть очень большой. Адреса обработчиков кнопок собраны в таблицу в начале программы, при изменении функций кнопок можно подставить свои.

АЦП колеса наполовину программный, работает по алгоритму последовательных приближений, матрица R-2R выполняет преобразование “цифра - аналог”. Вначале на матрицу R-2R подается 1 в старшем разряде, и компаратор определяет, много это или мало. Если мало, в старшем разряде остается 1, если много – 0.Далее то же самое происходит с каждым следующим младшим разрядом (всего 6 шагов) и мы получаем шестибитное число, соответствующее углу поворота колеса. Такая точность мне представляется достаточной, но можно добавить еще один бит, увеличив матрицу и программу преобразования.

Конструкция

В качестве собственно клавиатуры я использовал конструктор «Старт» советского производства, сейчас, пожалуй, легче найти старую неработоспособную Ямаху или Касио, это решит и проблему изготовления корпуса – если он конечно у старого инструмента относительно цел…

Печатная плата не разрабатывалась – я посчитал нецелесообразным для изготовления единичного экземпляра устройства тратить время на разводку и изготовление платы, а макет был изготовлен на монтажной плате с помощью перемычек из МГТФа. В качестве разъема и шлейфа к клавиатуре был использован шлейф от флоппи-дисководов из компьютера с соответствующим разъемом с каждой стороны – это облегчает сборку/разборку готового устройства.

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

Ну вот, вкратце, и все. Творческих успехов!

Список радиоэлементов

Обозначение Тип Номинал Количество Примечание Магазин Мой блокнот
Схема №1.
Микроконтроллер PIC16F84 1 В блокнот
Микросхема КР1533ИД7 1 В блокнот
Микросхема КР1533КП7 1 В блокнот
Линейный регулятор

LM7805

1 В блокнот
Диод

КД522А

64 В блокнот
Конденсатор 22 пФ 2 В блокнот
Конденсатор 0.1 мкФ 2 В блокнот
100 мкФ 2 В блокнот
Резистор

220 Ом

2 В блокнот
Резистор

6.8 кОм

8 В блокнот
Кварцевый резонатор 4 МГц 1 В блокнот
Клавишная кнопка 64 В блокнот
Схема №2.
Микроконтроллер PIC16F84 1 В блокнот
Микросхема КР1533ИД7 2 В блокнот
Микросхема КР1533КП7 2 В блокнот
Микросхема КР1533ИР23 2 В блокнот
Линейный регулятор

LM7805

1 В блокнот
Биполярный транзистор

КТ315А

5 В блокнот
Диод

КД522А

80 В блокнот
Конденсатор 22 пФ 2 В блокнот
Конденсатор 0.1 мкФ 2 В блокнот
Электролитический конденсатор 100 мкФ 2 В блокнот
Резистор

180 Ом

7 В блокнот
Резистор

220 Ом

2 В блокнот
Резистор

6.8 кОм

16 В блокнот
Резистор

8 кОм

1 В блокнот
Кварцевый резонатор 4 МГц 1 В блокнот
3-х разрядный светодиодный цифровой индикатор, с общими анодами. 1 В блокнот
Светодиод Красный 12 В блокнот
Клавишный переключатель 64 В блокнот
Кнопка 16 В блокнот
Схема №3.
Микроконтроллер PIC16F84 1 В блокнот
Микросхема КР1533ИД7 1 В блокнот
Микросхема КР1533КП7 2 В блокнот
Компаратор

Олег Якубов

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

Схему миди-клавиатуры я, выбрал из журнала Радио за 1997 год № 3, 4. Если кто действительно хочет собрать себе хороший инструмент, то рекомендую сходить в библиотеку и взять там журналы, ну а для тех, кому не хочется бегать и тратить время, я отсканировал полностью эту статью (думаю, не в ущерб автору). Миди-клавиатурой я очень доволен. Проблем со сборкой не было в общем-то никаких, за исключением некоторых опечаток в схеме (допущенных, наверное, редакцией при верстке статьи). Я перед сканированием сделал поправки, это можно увидеть при внимательном изучении схемы. Прошу обратить внимание: при "прошивке" ПЗУ не делайте ошибок при введении кодов, иначе инструмент или вообще не заиграет, либо будет работать неправильно. Особую благодарность я хотел бы передать самому автору этой статьи, за распечатку контрольных кодов таблицы ПЗУ, так как без ошибок трудно ввести все символы, и при вводе я сам ошибся в двух местах, и благодаря контрольным суммам я быстро нашел у себя ошибки. Так же в отсканированной мною таблице, я выделил те места, где автором указывается в случае замены двух символов. Это на случай, если клавиатура начинается не с ноты Фа, а с ноты До. Все детали и узлы устройства, я смонтировал на монтажной плате, а соединения между выводами микросхем, я распаял тонким проводом во фторопластовой оплетке, только между клавиатурой и платой, я распаял плоским кабелем. Единственно, что я сделал, так это увеличил емкость конденсатора С1, так как не запускался процессор. Миди-клавиатура работает очень устойчиво, и никаких проблем я не испытываю до сих пор!!! Если для кого-то эта схема покажется очень сложной, тогда попробуйте собрать другую схему, напечатанную так же в журнале Радио за 1993 год № 11. Но в этой схеме, нет таких возможностей, как в схеме, о которой я только что писал. Поэтому рекомендую запастись небольшим терпением и собрать схему из журнала Радио за 1997 год № 3, 4. Отсканированная статья находится ниже. Если все же у кого-то возникнут проблемы со сборкой, обращайтесь ко мне, может что-нибудь посоветую. Единственный недостаток этой схемы, я считаю, это неудобство быстрого выбора инструмента, и так же маленькая возможность эффекта "PITCH". Обычно на клавиатурах стоит этот эффект в виде колеса с левой стороны клавиатуры.

Желаю приятной сборки!!!

MIDI-КЛАВИАТУРА ДЛЯ МУЛЬТИМЕДИА-КОМПЬЮТЕРОВ И MIDI-СИНТЕЗАТОРОВ

С. Кононов, г. Тула

Разработанная автором этой статьи MIDI-клавиатура относится к электронно-музыкальным инструментам повышенной сложности и адресуется, прежде всего, читателям, имеющим определенные знания и опыт конструирования подобной аппаратуры. Поэтому и описание конструкции дается в кратком изложении. Редакция полагает, что содержание этой публикации привлечет внимание и тех, кто вообще интересуется электронной музыкой и, возможно, собирается заняться конструированием современной аппаратуры. Для них полезно будет познакомиться со статьями А. Студнева "Что такое MIDI?" и "MIDI-клавиатура", опубликованными в январском и ноябрьском номерах "Радио" за 1993 г., а также статьей К. Быструшкина "Мультимедиа придет в каждый дом" ("Радио", 1996, № 3).

Рекомендуемая MIDI-клавиатура представляет собой "глухой" клавишный инструмент, основное назначение которого - совместная работа с персональными компьютерами, оснащенными музыкальными картами Creative, Sound Blaster, Gravis, YAMA-HA и другими, имеющими midi-вход. Он, кроме того, позволяет работать и с внешними синтезаторами, тон генераторами и любой аппаратурой, также имеющими midi-вход.При разработке сервисных функций MIDI-клавиатуры образцами для "подражания" были изделия итальянской фирмы "MASTER STAR". Сначала я сконструировал универсальный MIDI-пульт для баяна и аккордеона, который был представлен на выставке MUSIKMESSE-95 (Франкфурт-на-Майне). Именно тогда возникла мысль превратить это конструктивно сложное устройство в более простую MIDI-клавиатуру, доступную для повторения читателями журнала "Радио". Инструмент располагает солидным сервисом. В частности, он позволяет каждой клавишей управлять двумя MIDi-каналами, задавая каждому из них собственные программы (тембры), и запоминать их вместе с уровнем громкости каждого канала в памяти устройства. Таким образом, можно произвольно комбинировать и наслаивать любые два образца звуков из имеющихся в подключенном к клавиатуре тон генераторе. В "крутых" аппаратах этот режим называют "COMBY".Клавиатура позволяет также изменять строй инструмента на одну октаву вверх или вниз, назначать до 127 программ, управлять большим числом MIDI-каналов (от 1 до 16), контролировать звуковые эффекты PITCH BEND, VOLUME, MODULATION, SUSTAIN и многое другое. Темп исполняемого произведения - от 20 до 240 ударов в мин. Граница деления клавиатуры на два мануала произвольная.Инструмент, схема , состоит из трех функционально законченных частей: блока процессора (А1), пульта управления (А2) и блока клавиатуры (A3). Комплект используемых в них микросхем аналогичен комплектующим таких устройств, как Спектрум и АОН, так что любители конструирования ЭМИ не будут испытывать затруднений в поисках элементной базы.Блок процессора по схемотехнике похож на процессор АОНа. На логических элементах DD1.1 - DD1.3 и кварцевом резонаторе ZQ1 собран задающий генератор процессора Z80 (DD2). Собственная частота кварцевого резонатора должна быть 4 МГц, иначе изменится скорость передачи MIDI-информации со старшего разряда регистра С микросхемы DD6 через буферный элемент DD1.4.На транзисторах VT1, VT2 собран узел, обеспечивающий сигнал сброса на входе RES (RESET - вывод 26) микросхемы DD2 при включении/выключении источника питания, когда его напряжение не превышает +4,5 В. Это повышает надежность хранения информации в энергонезависимой памяти микросхемы DD5 в момент включения или выключения питания. Батарея GB1 совместно с конденсатором C3, резистором R8 и диодом VD2 поддерживает питание микросхемы DD4 для долговременного хранения в ней информации при отключенном общем источнике питания инструмента.Микросхемы DD7 и DD8 панели управления обеспечивают опрос кнопок SB1-SB19 пульта управления, динамическую индикацию четырехразрядного семиэлементного дисплея, образованного индикаторами HG1, HG2, и оцифровку единственной аналоговой части устройства - регулятора громкости R40 "Volume". Для дисплея я применил очень удобные, на мой взгляд, яркие сдвоенные индикаторы VQE14 (старое название КИПЦ09И), установленные в телевизорах "Горизонт" 4-го и 5-го поколений. Включение индикатора HQ2 аналогично показанному на схеме включению индикатора HG1.

Блок клавиатуры образуют пяти-октавная (61 клавиша) музыкальная клавиатура, начинающаяся с ноты "Фа", микросхемы D09, DD10 и разъемы Х1-ХЗ для подключения к инструменту ао двух внешних MIDI-приемников и педали "SUSTAIN". Каждая клавиша клавиатуры оснащена парой нормально разомкнутых контактов, которые объединены в матрицу 8х8 с диодной (VD14-VD74) развязкой. На схеме символом SA1 обозначена крайняя левая клавиша, символом SA61 - крайняя правая. Опрос матрицы обеспечивают микросхемы DD9 и DD10. Если музыкальная клавиатура, используемая для конструируемого инструмента, начинается с ноты "До", то строй матрицы необходимо сместить на семь клавиш. Для этого в ПЗУ нужно увеличить на семь единиц код в ячейках, с адресами 025FH и 0268Н (см. таблицу программирования ПЗУ КР573РФ5 ) , т. е. вместо кода "05" записать "ОСН". Блок питания клавиатуры представляет собой микросхемный стабилизатор напряжения КР142ЕН5В, на вход которого подают от внешнего источника постоянное напряжение 9 В. Таким источником может быть любой малогаборитный сетевой блок питания, в том числе импортный, обеспечивающий ток нагрузки не менее 500 мА. Конденсаторы С6-С9 на выходе стабилизатора - блокиривочные для цепей питания микросхем.Детали и узлы устройства смонтированы на четырех печатных платах, которые соединены между собой плоскими кабелями и размещены под лицевой панелью корпуса клавиатуры. Нажимные кнопки переключателей SB1-SB19, индикаторы HG1, HG2 и вал переменного резистора R40, пропущенные через отверстия в панели, образуют пульт управления MIDI-клавиатуры.Педаль SUSTAIN может быть любой конструкции с парой нормально разомкнутых контактов. Ее подключают к инструменту через разъем Х3 типа Джек (1/4 JACK), расположенный на задней панели инструмента. Внешний вид МIDI-клавиатуры и схема размещения на ее панели управления дисплея (индикаторы HG1, GH2), регулятора громкости (резистор R40 "VOLUME") и кнопок (SB1 - SB19) показаны на рис. Пользуясь ими, музыкант может выполнять все необходимые MIDI-опeрации по выбору тембров, номера каналов, перераспределению голосов и т. д., а также управлять внешними ритм-компьютером или секвенсером. Оцифрованными кнопками, находящимися справа от дисплея, вводят соответствующие номера программы, MIDI-канала, темпа, а функциональными кнопками слева от дисплея управляют различными параметрами клавиатуры. При последовательном нажатии на кнопку "PROG" (программа) дисплей индицирует параметры клавиатуры: -тип трека и номер звуковой программы этого трека. Буквы в левой части дисплея обозначают: А - левый (нижний) мануал, В - правый (верхний) мануал, С - дополнительное midi-устройство. За буквой следует трехзначный номер (000-127) звуковой программы, присвоенной данному треку;

- контроль темпа для генератора ритма; при этом на дисплее, индицируется буква Т и трехзначное число, характеризующее частоту ударов (сильных долей) в минуту, а запятые на дисплее создают эффект "бегущих огней"" для визуального контроля скорости генератора темпа. Диапазон перестройки темпа - от 20 до 240; - режим каналов и номер собственной программы инструмента: в этом случае буква Р в левой части дисплея означает, что вся клавиатура "сидит" а треке *А*. буква U - информация с клавиатуры передается одновременно и в трек "В" (режим "COMBY"), буква L - левый мануал, т. е. трек "А" (правый мануал - "В"). За буквой на дисплее индицируется двузначный номер (00-99) собственной программы, хранящейся в памяти ОЗУ DD5. Собственная программа инструмента характеризует номера звуковых программ и MIDI-каналов для треков, а также следующую информацию: PITCH - скорость тональной перестройки, MODULATION - уровень глубины модуляции, VOLUME - уровень громкости, SPUT - граница разделения мануалов, MODE-режим каналов (Р. U, L), Ost A - +/- октава для левого мануала, Ost В - +/- октава для правого мануала. Кнопки "-1" и +1 обеспечивают уменьшение (увеличение) числовых данных на дисплее. Кнопка "MIDI" служит для назначения MIDI-канала каждому треку, а последовательным нажатием на нее выбирают трек. На дисплее при этом отображаются трек Ac (Bc, Сс) и номер (1-16) MIDI-канала. Кнопкой "START" запускают или останавливают (вторым нажатием) внешний ритм-компьютер или сeквенсер - на дисплее на пару секунд высвечиваются соответственно "Strt" или "Stop". У кнопки "WHITE" два функциональных назначения. Если все выбранные параметры клавиатуры удовлетворяют и их необходимо запомнить под текущим номером собственной программы, дважды нажимают на эту кнопку. При первом нажатии дисплей высветит четыре черточки, приглашая устройство к режиму программирования. При втором нажатии происходит запоминание всех режимов и параметров в памяти собственных программ устройства, а дисплей индицирует текущий номер собственной программы. Второе назначение кнопки "WRITE" - работа с устройством в режиме программирования функций. Этот режим включают первым нажатием на кнопку "WRITE". На дисплее появляются четыре черточки, символизирующие приглашение к режиму программирования. Оцифрованные кнопки при этом начинают выполнять функции программаторов следующих режимов: - PITCH - скорость тональной перестройки. Дисплей высвечивает "РЬ" (PITCH BEND) и цифру (1-4). Индикация "РЬ" соответствует минимальной, "РЬ4" - максимальной скоростям изменения этого параметра; - MODULATION - глубина модуляции 25, 50, 75 и 100%. Индицируется буквами LF (LONG FREQUENCY) и цифрами 1. 2, 3 и 4 соответственно; - VELOCFTY - скорость нажатия клавиши - фиксированная для всей клавиатуры. На дисплее индицируется трехзначным числом (000-127); - VOLUME - уровень громкости (О- 15). На дисплее отображается двумя цифрами: слева - для левой части клавиатуры (трек А) в режиме разделения мануалов, справа - для правой части (трек В): - SPLIT - граница разделения клавиатуры на два мануала. Дисплей высвечивает "SP" (SPLIT) и двузначный номер клавиши, последней для левой части клавиатуры; - MODE - программирование режима каналов (Р, U, L). Дисплей высвечивает "Рг" - соответствующую режиму каналов букву (Р, U, L); - TRANSPORT - транспонирование, т. е. изменение высоты тона клавиатуры на 12 полутонов вниз или на столько же полутонов вверх. Режим транспонирования вниз дисплей индицирует двузначным числом 01-12 со знаком "-", транспонирования вниз - без знака. Число 00 обозначает отсутствие транспонирования; - Ost A - +/- октава для левого мануала. Это значит, что строй клавиатуры трека А может быть сдвинут на октаву вниз или на октаву вверх. Дисплей высвечивает "Ао"-1", "Ao-0", "Aо-1, что означает соответственно сдвиг на октаву вниз, отсутствие сдвига и сдвиг на октаву вверх: - Ost В - +/- октава для правого мануала. Дисплей соответственно индицирует "Во -1, "Во 0" и "Во 1"; - PAUSE - размер паузы между MIDI-посылками. Дисплей высвечивает "РА" и двузначное число 01-50, означающее размер паузы в условных единицах.

К сожалению, некоторые музыкальные карты а мультимедиа-компьютерах при смене зеуковой программы "буксуют", т. е. останавливают прием MIDI-сообщеиий на время загрузки новой звуковой программы, что приводит к потере принимаемой информации. Например, карта YAMAHA SW20 меняет звуки за 0.5...1 с, a GRAV1S ULTRASOUND загружает звуковые программы с жесткого диска, на что уходит еще больше времени. Для четкой работы звуковой карты YAMAHA SW20 размер паузы соответствует 16. Для дешевых же карт типа SOUNDBLASTER и для музыкальных инструментов с MIDI-входом PAUSE=1. " Параметры перечисленных функций можно изменять кнопками "-1" и "+1". При повторном нажатии на кнопку "WRITE" в память собственных программ устройства вводятся звуковая программа трека А(0-127), звуковая программа трека В (0-127), звуковая программа трека С (0-127), номер MIDI-канала A (1-16), номер MIDI-канала В (1-16), номер MIDI-канала С (1-16), громкость трека А (0-15), громкость трека В (0-15), октава А (-1,0,1),октава В (-1, 0. 1),режим работы мануалов (Р, U, L), уровни, модуляции (1-4), скорость PITCH BEND (1-4). Независимо от порядковой нумерации собственных программ описываемого инструмента в его памяти хранятся также граница раздела SPLIT (1-61), смещение высоты тона TRANSPORT (-12, 0, +12), скорость нажатия VELOCITY (0-127), темп исполняемой композиции (2&-240). Регулятор "VOLUME" и кнопки "PITCH-", "Р1ТСН+", "MOD" на пульте MlDI-клавиа-туры относятся к органам оперативного контроля. Первым из них регулируют громкость внешнего устройства. Если клавиатура обслуживает два MIDI-канала (режимы U, L), значит и регулятор обслуживает эти каналы, но по очереди. К какой части клавиатуры (мануалу) в последний момент прикасалась рука человека, по такому MIDI-каналу и будут передаваться параметры регулятора громкости. Нагляднее это можно сделать, выйдя в режим программирования функций - нажать на кнопку "WRITE" и кнопкой "4" включить функцию VOLUME. При плавном вращении ручки резистора R40 по часовой стрелке дисплей должен отобразить 16 градаций уровня от 0 до 15. Если работаем на левой части клавиатуры, то регулятор будет действовать только на громкость канала "А", а уровень громкости покажет левая часть дисплея. При работе на правой части клавиатуры регулятор будет влиять Кнопки "PITCH-" и "PITCH+"" обеспечивают удобство имитации работы колеса-регулятора PITCH BEND с плавным смещением тона вниз / вверх и обратно. В режиме программирования функций можно ускорить или замедлить работу имитатора PITCH BEND. выбрав одну из четырех скоростей изменения высоты тона. Кнопка "MOD" - орган контроля четырех уровней модуляции (25, 50, 75 и 100%). При нажатии и удержании ее в таком положении включается по MIDI модуляция тона. При отпускании кнопки модуляция отключается. Владельцам компьютеров, оснащенных звуковыми картами с MIDI-интерфейсом, понадобится еще переходник (MIDI-адаптер), необходимый для гальванической развязки между MIDI-входом инструмента и ТТЛ midi-входом звуковой карты компьютера. Его схема приведена на рис. 2.

Развязку обеспечивает оптрон АОТ127А (U1). Питание переходника осуществляется через разъем звуковой карты (выводы 1,8 и 9 - +5 В, выводы 4 и 5 - общий). Входы "MIDI THRU- и "MIDI OUT" предназначены для подключения синтезаторов, тон генераторов и других внешних MIDI-приемников, не встроенных в компьютер. При налаживании MIDI-клавиатуры особое внимание следует уделить настройке узла R38-R40 аналого-цифрового преобразования уровня регулятора громкости. Делайте это на отлаженном и полностью функционирующем инструменте в таком порядке. Включите инструмент, нажмите кнопку "WRITE" на пульте и тут же кнопкой "4" включите функцию VOLUME. При плавном вращении ручки резистора R40 по часовой стрелке дисплей должен отобразить все шестнадцать градаций уровня - от 0 до 15. Если диапазон регулировки смещен или узок, нормальной работы аналого-цифрового преобразования добивайтесь подбором резистора R38.

Наличие midi-посылок контролируйте следующим образом. К выводу 5 разъема "MIDI OUT подключите щуп входа осциллографа, нажмите на педаль "SYS-TAIN" или соедините (временно) входы РСО и PC1 микросхемы DD6 с общим проводником, после чего включите питание инструмента. При таком соединении работает циклическая программа вывода MIDI-кода 55Н. На экране осциллографа это выглядит как последовательность пачек из пяти импульсов. Длительность каждого бита кодовой посылки равна 32 мне, что соответствует 31250 бит/с-скорости передачи MIDI-сообщений.

Думаю, что те, кто пытался работать со звуком на компьютере, наверняка слышали о таких устройствах, как midi-контроллеры. Да и многие люди, далёкие от создания музыки имели возможность лицезреть артистов на выступлениях с разнообразными «крутилками» и «нажималками» за баснословную цену. Как же заиметь такую полезную штуку, не потратив ни копейки? Достойный вариант – это самодельная MIDI-клавиатура.

Небольшой ликбез по миди-конроллерам

Midi-контроллер (от английской аббревиатуры “MIDI” – обозначение интерфейса, используемого в программах) – устройство, позволяющее расширить возможности компьютера в плане midi-коммуникации.

Что позволяют делать данные устройства?

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

Главная проблема данного класса «примочек», для начинающего музыканта, состоит в их высокой цене: средняя стоимость полноценного нового клавишного MIDI-инструмента составляет 7 тысяч. Сумма, конечно, смешная, если вы где-то работаете и неплохо зарабатываете. (Ведь в России зарплата на душу населения составляет 28 тысяч, считая рабочим населением младенцев и пенсионеров).

Но если вы, к примеру, студент, то для вас такой ценник будет «кусачим». Из-за этого аспекта, использование самодельной MIDI-клавиатуры становится оптимальным решением проблемы.

Что нужно делать, чтобы у вас появилась самодельная миди-клавиатура?

Начнем с того, что на вашем компьютере должен быть установлен секвенсор. (Все нюансы будут рассмотрены на примере секвенсора Fl Studio и программы-эмулятора Vanilin MIDI Keyboard – одной из самых популярных в своем классе).

  1. Вам нужно скачать и установить Vanilin MIDI Keyboard. Найти программу можно на её официальном сайте.
  2. Допустим, что вы уже установили это (или подобное) приложение, теперь вернитесь на рабочий стол – там должен появиться ярлык. С помощью этого ярлыка запускаете эмулятор и заходите в настройки.
  3. Если на компьютере стоит стандартная звуковая карта, встроенная в чипсет, то после клика на пункт меню «Device» вы должны увидеть два подпункта: «Устройство переназначения MIDI» и «Программный синтезатор звуковой». Кликните на «Устройство переназначения MIDI».
  4. Сверните программу. В правом нижнем углу панели задач (где-то рядом с часами) должен появиться уже знакомый вам значок программы.
  5. Запустите секвенсор. Выберите меню опций («Options») и кликните на подпункт настроек MIDI («MIDI settings»)
  6. В строке выходов MIDI («Output») выберите «Устройство переназначения MIDI»

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

Все, теперь у вас в руках настоящий клавишный инструмент! Теперь вы сможете не только видеть и слушать звук, но и ощущать прикосновения к клавишам вашего собственного фортепиано.



Клавиатура предназначена для подключения к внешнему саунд-модулю или компьютеру (при наличии соответствующего интерфейса) с использованием MIDI протокола – для записи музыки в секвенсерную программу или живого исполнения. Количество клавиш в предложенном варианте 48, может быть увеличено без переделки схемы до 64. Отличительной особенностью предлагаемой клавиатуры является чувствительность к силе удара по клавише.

История создания устройства

Некоторое время назад в связи с покупкой квартиры я вынужденно лишился шикарного инструмента, выполнявшего у меня роль MIDI клавиатуры – это была легендарная YAMAHA DX-7. Когда печаль поутихла, во всей остроте и неприглядности встал вопрос: а на чем же работать? Именно в этот момент стараниями моего приятеля в мои загребущие ручонки попала полусобранная схема на КР1816ВЕ39 (по супостатски этот процессор зовется 8048). Схема проста и в сборке, и в наладке, и, главное, подвернулась под руку в нужное время. Клавиатуру я собрал в виде матрицы 8×6, применив КР1533ИД7 и КР1533КП7. Не обошлось и без ложки дегтя – два недостатка этой схемы насмерть убивают все ее достоинства: отсутствие чувствительности к скорости нажатия клавиши (динамики) и колеса PITCH WEEL. Ну, я когда-то программировал на Z-80 (и даже сделал работающий секвенсор) и решил тряхнуть стариной. Z-80 как CPU я решительно отмел, как морально устаревший. Кроме того, не хотелось много паять, и я решил взять за основу этот самый девайс на КР1816ВЕ39, оснастив его еще одним мультиплексором для размыкающих (верхних) контактов клавиш. Я отыскал документацию (вы не поверите – в библиотеке, книга «Проектирование цифровых устройств на однокристальных микропроцессорах») на ассемблер КР1816ВЕ39 и накарябал программу… И тут выяснилось, что у приятеля сдох программатор ПЗУ, и зашить программу просто нечем… От горя я совсем потерял разум и решил переписать тот же алгоритм под PIC. За полдня был спаян программатор (LUDIPIPO), затем макет из панельки, КР1533ИД7 и пары КР1533КП7, а весь монтаж сделан МГТФом без всякой печатки. И процесс пошел…

Сначала был запущен нединамический вариант программы (его я тоже привожу для тех, у кого клавиатура имеет один контакт на клавишу). Потом запустилась динамическая версия. И тут созрела мысль добавить кнопки и индикатор. Дело в том, что у меня без дела давно валялась платка WAVEBLASTER (дочерний wavetable синтезатор для очень старых звуковух). Подключивши ее к моему творению, я получил нечто, на чем можно играть (в меру сил и таланта) без компьютера, что иногда довольно удобно. Это и определило набор функций на кнопках – он может пригодиться при подключении к звуковым модулям при “живой” игре. Функции кнопок легко изменить, написав свои обработчики и используя мои процедуры опроса и индикации. Кое-как собранная в железном корпусе клавиатура оказалась удобнее, чем YAMAHA PSS (все же полноразмерные клавиши, педаль и, главное, динамика!). В разгаре творческого процесса возникло труднопреодолимое желание сделать версию MIDI клавиатуры чисто для компьютера – индикатор и кнопки необязательны, но нужны колеса PITCH WEEL и MODULATION. Некоторое время я с ним боролся, но, в конце концов, сдался и снова включил паяльник. Электронику собрать несложно, с механикой – несколько сложнее, и я начал морщить лоб над устройством колеса. Поразмыслив, я решил отказаться от второго колеса – все равно я никогда не кручу их сразу оба, обычно сначала пишу ноты и pitch, затем дописываю modulation. Не последним соображением было и уменьшение в два раза объема столь любимых мною механических работ. Для менее ленивых я ниже объясню, как почти не усложняя схему сделать два колеса. Чтобы все-таки иметь возможность писать modulation, я решил организовать три режима работы колеса: pitch на 2 полутона, pitch на 1 полутон (удобно), и modulation. Переключать это все можно одной кнопкой, а индицировать режим – парой светодиодов. Чтобы упростить схему, остальные кнопки и индикаторы я ликвидировал, для работы с современными программами-секвенсорами это все не нужно.

Колесо, конечно же, должно быть надето на ось потенциометра, это-то понятно, а вот к чему его подключить? Первой мыслью было использовать одновибратор на таймере 555. Но расчет показал, что будет трудно добиться точности и стабильности измерения длительности импульса при попытке обеспечить приемлемую частоту опроса колеса, ведь процессор в основном занят измерением времени переключения клавиатурных контактов. Остался путь использования аналого-цифрового преобразователя (АЦП). Поскольку у меня использовался Pic16F84 без встроенного АЦП, я вспомнил инженерное прошлое (и родной завод) и сделал АЦП из нескольких резисторов с компаратором (и куска программы). Получилось просто, дешево и довольно точно.

Я привожу обе схемы – и с кнопками, и с колесом, а также программы для них. При желании обе схемы можно легко совместить, слегка изменив адреса внешних устройств, нужно только помнить, что режим CHORUS (STEREO) использует pitch для получения расстройки и его нужно или убрать, или озаботится передачей pitch с расстройкой по каналам.

Итак – собственно клавиатура

Схема устройства

Первым появился нединамический вариант, нечувствительный к силе удара по клавише – для проверки работоспособности макета.

Я использовал PIC16F84 в качестве процессора из нескольких соображений: эта микросхема доступна, дешева и удобно программируется, кроме того – именно она оказалась у меня под руками. Внимание: PIC16C84 не годится – у него ОЗУ всего 36 ячеек и программа не будет работать. Впрочем, схема с колесом использует меньше ячеек ОЗУ и ее программу можно втиснуть и в PIC16C84, сократив еще пару ячеек, например MIDCH (присвоив постоянный MIDI канал всем передаваемым данным).

Схема динамической клавиатуры с индикацией приведена ниже:

Схема во многом традиционна – трудно изобрести велосипед без педалей и колес.J Порт B работает на передачу – младшие 7 бит выводят адрес клавиши в матрице или данные для внешних устройств (индикатор и ЦАП колеса). Старший бит используется для вывода MIDI данных последовательным кодом – преобразование и вывод сделаны программными. Поэтому кварц должен быть на 4 MHz, если вы не хотите переписывать процедуру вывода байта по MIDI. Два младших бита порта A работают на прием – на них поступают сигналы с мультиплексоров “отпущенных” и “нажатых” контактов клавиш, а три старших бита определяют адрес внешнего устройства (через еще один дешифратор КР1533ИД7). В схеме с колесом от дешифратора адреса внешнего устройства я отказался для упрощения схемы и освобождения старшего бита порта PA4 для ввода данных с компаратора, поэтому адреса клавиатуры и кнопок другие. При совмещении схем эту микросхему придется вернуть, для дешифрации адреса использовать биты порта PA2 и PA3,и адресовать 4 устройства: клавиатуру, кнопки, регистр данных динамической индикации и регистр знакоместа динамической индикации. Индикацию режимов колеса придется переписать.

Схема с колесом PITCH WEEL / MODULATION выглядит так:

На каждую клавишу ставится один диод для развязки. Резисторы на входах мультиплексоров не должны быть более 8k, иначе возможны глюки из-за емкости монтажа. Индикатор – любой с общим анодом на 3 разряда, если выводы сегментов каждого разряда выведены отдельно, выводы одноименных сегментов нужно объединить – индикация динамическая и разряды зажигаются последовательно. Кнопки любые, без фиксации, дребезг контактов давится программно. Светодиоды установлены возле одноименных кнопок и индицируют включение соответствующих режимов, кнопки «+» и «- » светодиодов не имеют. Транзисторы на индикаторе любые маломощные высокочастотные обратной проводимости. Два регистра КР1533ИР23 использованы для поочередного защелкивания адреса и кода текущего разряда индикатора (светодиоды тоже сгруппированы в два квазиразряда). У меня использована стандартная клавиатура от еще советских электроорганов на 48 клавиш (она выпускалась и отдельно как радиоконструктор «СТАРТ», и довольно широко распространена). Чтобы уменьшить высоту клавиатуры и толщину инструмента, из шести контактных групп под каждой клавишей оставлено две, и все это обрезано и переклеено. Вообще достаточно одной переключающей группы на клавишу, но так было удобней клеить. Сборные шины “отпущенных” и “нажатых” контактов имеют длину 8 клавиш. При желании можно использовать и клавиатуру, где вместо переключающей группы контактов используется две пары замыкающих контактов – одна пара замыкается в начале движения клавиши, другая в конце (как на инструментах YAMAHA). В этом случае сигнал на PA0 нужно подавать с инверсного выхода мультиплексора (вывод 6). Без изменений в схеме можно использовать клавиатуру на 64 клавиши (стандарт – 61, т.е. 5 октав). При необходимости число клавиш может быть увеличено хоть до 127, для этого в схему нужно ввести еще один дешифратор КР1533ИД7.

Очень важно хорошо отстроить механику – верхние контакты ОБЯЗАТЕЛЬНО должны замыкаться при отпускании клавиш. Если этого не сделать, программа считает такие клавиши нажатыми и пытается их обрабатывать, поэтому повторное нажатие этих клавиш звука не дает. Кроме того, максимальное количество одновременно звучащих нот – 10 (если у кого-нибудь на руках выросло больше пальцев, это количество легко изменить), и не отпущенные клавиши уменьшают это количество. Из этих же соображений число клавиш, указанное в процедуре опроса клавиатуры, должно ОБЯЗАТЕЛЬНО совпадать с количеством реальных клавиш. Дребезг контактов давится программно.

Для резистивной матрицы R-2R АЦП желательно подобрать резисторы с точностью 1–2%, причем абсолютные значения могут быть и другие, важно отношение. Впрочем, сильно увеличивать номинал не стоит, это увеличит время преобразования из-за входной емкости компаратора. Я использовал SMD резисторы без подбора, хотя измерения показали, что в одной монтажной полоске резисторы обычно согласованы с точностью выше 1%. Я уверен, что схема будет работать и с неточными резисторами, но линейность характеристики ухудшится. Само колесо сделано из ручки от старого телевизора и имеет пружинку на оси потенциометра, возвращающую его в среднее положение. Для удобства настройки механики, при включении питания с нажатой кнопкой режима, включается отладочная программа, зажигающая светодиод, когда колесо находится в среднем положении, это позволяет точно настроить нулевой положение колеса на оси потенциометра. Если есть потребность и желание сделать отдельное колесо MODULATION, его нужно подключить к свободному элементу компаратора (их там четыре), причем матрица R-2R у обоих колес общая. Для коммутации выходов компараторов лучше применить дополнительную микросхему, а в качестве управляющего сигнала использовать PA2.

При желании можно собрать динамический вариант клавиатуры и без индикации, кнопок и колеса PITCH WEEL / MODULATION – просто не собирая неиспользуемую часть схемы. Все изменяемые параметры будут установлены по умолчанию при включении питания…

Питать это все можно от чего угодно, ток потребления зависит от конкретного индикатора и не превышает 100 mA. У меня прямо на плате стоит стабилизатор 7805 без радиатора (его хорошо видно на фотографии). Небольшой радиатор нужен, если на него подавать более 9v. Компаратор питается напряжением 9 – 12 v, желательно стабилизированным. Да, я использовал микросхемы советского производства из старых запасов – существует большое количество их современных аналогов, замена возможна и даже желательна – современные аналоги имеют меньшее потребление.

Программа

Алгоритм обработки нажатых клавиш происходит от предложенного в журнале «Микропроцессорные средства и системы» №5 за 1986г. Именно эта публикация (а точнее, ошибка в предложенной программе) и побудила меня к изучению ассемблера. Собственно, оттуда взята лишь идея записывать номер каждой нажатой клавиши в специально выделенную область ОЗУ (CHAN), чтобы при повторном опросе клавиатуры не обрабатывать снова уже обработанную клавишу. У меня под каждую из нажатых клавиш (всего не более 10) отведено две ячейки ОЗУ: в первой записывается номер нажатой клавиши, во второй – ее VELOCITY (скорость нажатия). Повторюсь – этих ячеек всего 20 и начальный адрес задан именем CHAN. Признаком свободной пары является установленный старший бит первой ячейки. Установленный старший бит второй ячейки означает, что NOTE ON для этой клавиши уже передано и в дальнейшей обработке она не нуждается.

Подробно описывать всю программу я не буду, исходник изобилует комментариями и для подготовленного человека вполне доступен. Для остальных я даю сразу готовые прошивки в файле Dinamic.hex и Pitchmod.hex. Поясню только некоторые неочевидные моменты. Ну, прежде всего о динамике: в момент размыкания верхних контактов клавиши ее номер записывается в первую ячейку первой же свободной пары из области CHAN, одновременно сбрасывая признак свободной пары. Во вторую ячейку записывается начальное значение VELOCITY = 127. Чувствительность клавиатуры определяется частотой следования прерываний, так как обработка прерывания уменьшает значения VELOCITY для всех клавиш, NOTE ON которых еще не передано. Прерывания вызываются встроенным таймером. В момент замыкания нижних контактов клавиши в соответствующей ячейке CHAN устанавливается признак «переданности» и передается NOTE ON с текущей VELOCITY. Для улучшения кривой чувствительности уменьшение значений VELOCITY идет по логарифмическому закону: из текущего значения VELOCITY вычитается 1/16 его часть, уменьшенная на 1. Таким образом, во время движения клавиши от верхнего контакта к нижнему значение VELOCITY в соответствующей ячейке CHAN уменьшается по логарифмическому закону, и чем быстрее движется клавиша, тем больше VELOCITY в момент замыкания нижних контактов клавиши и передачи NOTE ON. Прерывания также управляют динамической индикацией, это сделано для устранения мерцания индикатора.

Функции кнопок: TRANSPOSE – все тональности приводятся к любимому ля-минору: диапазон +/- 15 полутонов. PRG назначает тембр (инструмент) для заданного пресета (UP1-UP5), а VOL – его громкость. Текущий параметр выводится на индикатор и может изменяться кнопками «+» и «-».TWIN выводит «двойной» тембр – звучат одновременно один из пресетов (UP1-UP5) и, одновременно пресет LOWER. STEREO выводит звук текущего пресета в правый и левый стереоканалы с небольшой «расстройкой» (эффект «хорус»). Кнопка SPLIT не задействована. Педаль SUSTAIN схемотехнически выполнена, как одна из кнопок, емкость ее провода не должна быть очень большой. Адреса обработчиков кнопок собраны в таблицу в начале программы, при изменении функций кнопок можно подставить свои.

АЦП колеса наполовину программный, работает по алгоритму последовательных приближений, матрица R-2R выполняет преобразование “цифра – аналог”. Вначале на матрицу R-2R подается 1 в старшем разряде, и компаратор определяет, много это или мало. Если мало, в старшем разряде остается 1, если много – 0.Далее то же самое происходит с каждым следующим младшим разрядом (всего 6 шагов) и мы получаем шестибитное число, соответствующее углу поворота колеса. Такая точность мне представляется достаточной, но можно добавить еще один бит, увеличив матрицу и программу преобразования.

Конструкция

В качестве собственно клавиатуры я использовал конструктор «Старт» советского производства, сейчас, пожалуй, легче найти старую неработоспособную Ямаху или Касио, это решит и проблему изготовления корпуса – если он конечно у старого инструмента относительно цел…

Печатная плата не разрабатывалась – я посчитал нецелесообразным для изготовления единичного экземпляра устройства тратить время на разводку и изготовление платы, а макет был изготовлен на монтажной плате с помощью перемычек из МГТФа. В качестве разъема и шлейфа к клавиатуре был использован шлейф от флоппи-дисководов из компьютера с соответствующим разъемом с каждой стороны – это облегчает сборку/разборку готового устройства.

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

Ну вот, вкратце, и все. Творческих успехов!