MIDI-box/MIDI-синтезатор

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

В режиме самоизоляции, наконец, дошли руки до конструкции, которую уже давно собирался сделать. 

На данный момент, правда, она еще не закончена, но уже практически завершен корпус, сделаны почти все платы и есть понимание, что хочется от него получить. И основа софта уже была разработана в проекте http://arduino.ru/forum/proekty/analog-analogovogo-sintezatora , который все никак не соберусь закончить публикацию. Но, еще жду с Али нефиксируемые кнопки, а особенность сборки конструкции такова, что фиксируемые кнопки можно установить только после всего остального. 

Тем более, на форуме уже неоднократно возникали вопросы MIDI-контроллеров.

Собственно, поэтому я и решил сделать у темы двойное название. А для меня лично это будет именно MIDI синтезатор, но с полноценным MIDI выходом. Т.е. его можно будет использовать и как MIDI-box, если к выходу синтезатора не подключать усилитель.

Итак, поехали...

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

В качестве звукового модуля синтезатора был использован Dream Blaster S1 на чипе SAM2195, который позиционируется в качестве основы профессиональных синтезаторов начального уровня (т.е. того, что принято продавать в музыкальных магазинах, а не магазинах игрушек). Куплен 2 года назад на Али примерно за $60.

Корпус выглядит так:

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

Заготовки для фальшпанели и лицевой панели:

Панели сделаны из пластика толщиной 1.5-1.7 мм, который в магазине назывался "Фартук для кухни".

На сегодня - все, завтра продолжу. А пока пойду собирать все это в корпус.

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Работа несколько затормозилась из-за возникшей проблемы. Сама проблема описана здесь: http://arduino.ru/forum/apparatnye-voprosy/neponyatki-s-samovozbuzhdeniem-ili-pomekhami

Вкратце: плата MIDI-синтезатора эпизодически входила в самовозбуждение. Проблема (как я надеюсь) была решена при помощи синфазного дросселя, включенного в цепь питания синтезатора. Дроссель содержит 2х56 витков провода ПЭВ-2 на колечке, снятом с системной платы ПК: диаметр внешний - 12.7 мм, внутренний - 6.9 мм, высота - 5.0 мм, цвет - желтый.

В процессе решения проблемы было сделано:

- в плату синтезатора впаяны дополнительные керамические конденсаторы по 10 мкФ в цепи питания 5 и 3.3 В,

- в переходную плату добавлен конденсатор 1000 мкФ (тоже в питание - а куда же еще!),

- параллельно плате синтезатора на расстоянии 2-3 мм от нее установлен заземленный экран из фольгированного гетинакса,

- некоторые корпусные детали оклеены алюминиевой фольгой, соединенной с землей,

- внесены изменения в схему MIDI интерфейса с целью обострить фронты цифрового сигнала (после оптрона добавлен буфер на триггерах Шмитта),

- в цепь питания добавлен описанный выше дроссель.

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

В настоящий момент устройство представляет собой "глухой" MIDI синтезатор, т.е. без органов управления - MIDI-интерфейс напрямую подключен к синтезатору, минуя контроллер:

 

Следующий этап - окончательно определиться с размещением контроллера (Mega 2560) в корпусе. Естественно, контроллер будет расположен параллельно лицевой панели. Но сама лицевая панель целиком занята органами управления, соответственно, контроллер будет расположен над ними (когда коробка перевернута для осуществления монтажа. В рабочем положении, естественно, контроллер располагается под органами управления). В проекте http://arduino.ru/forum/proekty/analog-analogovogo-sintezatora контроллер был размещен над 2 и 3 рядами потенциометров при том, что потенциометры своими выводами были развернуты в сторону промежутков между 1 и 2, а также 3 и 4 рядами. Таким образом, контроллер был расположен над "пустым" промежутком. В данном проекте рядов потенциометров всего 2. Естественно, между ними только один промежуток, поэтому если разместить контроллер над ним, то замена неисправного потенциометра потребует полной разборки устройства, т.к. будет сопряжена с отключением от контроллера всех устройств (а по моим прикидкам из 70 пинов Меги будет занято 67-68).

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

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Следующий этап - плата энкодеров. Ручки энкодеров будут выходить на переднюю панель, соответственно, плата будет расположена параллельно панели. 

Плата вырезана из макетки 15х9. выемки по верхней и нижней стороне - для других органов управления.

К обратной стороне платы крепится контроллер, который будет принимать внешний MIDI сигнал, опрашивать органы управления, добавлять в поток собственные MIDI команды и выдавать "обогащенную" последовательность команд по выбору:

- на встроенный синтезатор,

- на MIDI OUT,

- и туда, и туда.

Для обработки энкодеров было решено использовать код "от Леонида Ивановича". Указанный код требует по два PCINT на энкодер. В отличие от кода, который ориентирован на внешние цепи подавления дребезга. В отличие от 328 у 2560 PCINT есть далеко не на всех ногах. Мне хватило буквально впритык. Если бы по проекту было 6 энкодеров, от кода Л.И. пришлось бы отказаться, т.к. все 16 аналоговых входов (на которых тоже есть PCINT) заняты под "крутилки".

Ниже код, которым проверял работу платы и энкодеров. Скажу сразу - код одноразовый, т.е. только для проверки платы, а не для постоянной работы. Но, учитывая, что адаптация "кода от Леонида Ивановича" для Меги мне не попадалась, решил все-таки опубликовать.

 

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Закончил последнюю плату. К ней будут подключаться 2 блока потенциометров по 8 шт, дисплей и MIDI-плата. В принципе, предусмотрен разъем и для платы синтезатора, но, скорее всего, я оставлю ее запитанной напрямую от стабилизатора.

Плата изготовлена из заготовки шилда для Меги.

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

После существенной доработки решил выделить меню, используемое в проекте, в отдельный проект: http://arduino.ru/forum/proekty/menyu-dlya-dvukhstrochnogo-displeya

Видео: https://youtu.be/PyOdQMH7JxU

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Работа продолжается.

Постепенно буду выкладывать код.

Обработка MIDI сообщений:

файл MIDIfn.h:

файл MIDIfn.cpp:

эти файлы требуют заголовочного файла comm_ctrl.h, в котором определены константы. Имена констант говорящие, так что, думаю, восстановить их не будет большой проблемой, ну, например, для "MIDIport" следует взять "Serial1" или "Serial2".

 

PS. Почему-то рисунок ужался до 625 пикселей, хотя я специально подгонял его под разрешенные на форуме 780.

 

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

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

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

Ну да ладно...

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