Академия гитарной электроники: Midi контроллер - Академия гитарной электроники

Перейти к содержимому

Страница 1 из 1
  • Вы не можете создать новую тему
  • Вы не можете ответить в тему

Midi контроллер маленькая midi управлялка для вашего хост приложения

#1 Пользователь офлайн   Nazarett 

  • то тут то там..
  • Вставить ник
  • Цитировать
  • Раскрыть информацию

Отправлено 20 января 2017 - 00:01

actually!!!
Тут интро
Спойлер

consequently!
Мне в срочном порядке понадобилась "Аппаратная переключалка пресетов для Guitar Rig ". Как известно компания Native Instruments выпускала железный контроллер для своего первого детища (не всякий олдфаг знает что Guitar Rig это первая гитарная софтина от немецкой компании в принципе, которая давала вменяемый звук и формат управления, более того - в огромных возможностях регулировок/крутилок/усилителей/примочек и прочего нужного и не очень барахла) в двух вариантах, именновых как guitar rig kontrol 2 и guitar rig kontrol 3. К сожалению, данные агрегаты на 2016 не доступны в продаже, да и найти их наруках огромная проблема, так ко всему прочему стоят они непомерного бабла (в районе 500евро за тройку), имеют приличные габариты, и нафиг не нужный аудио интерфейс, хотя в свое время это было клево, ибо о ЮСБ картах мы мечтали, и лишь Creative Sound Blaster/Julia ESI нас грели по ночам.
Естественно если родной контроллер не подходит, то надо городить свой, благо хост-программа поддерживает и другие, хотя весьма скверно и более того - без callback эвентов (источник недостоверный). Стает вопрос - что бы имеем на данны текущий момент, а имеем следующее:
  • Клавиатура, мапинг на клавиши
  • Сторонний midi интерфейс (типа монстра Behringer FCB1010 MIDI)
  • MIDI евентлер + UART(RS-232/COM-матьего порт)

Если со вторым все понятно, то с первыми двумя все нот_со_файн, а именно:
- первый вариант зависит от текущего контекста на ПК, да и эти поделки в виде педальки с клавой меня как то бесят
- третий вариант парит тем, что нужно драйвера CDC-девайса (если реализовывать самому), или FTDI-usb контроллер (типа ft232), так еще и наличием богомерзкого прокси ПО для программного проброса команд с UART/COM на MIDI. Таких поделок навалом на всяких AVR-USB и пиках.
Спойлер

Ну ей богу в 2016 юзать СОМ порт когда есть.... стоп стоп. А что у нас есть? А у нас есть, для нормальных разработчиков, USB Audio Class. Это значит что мы имеет стандартное описания usb класса, для аудио устройств и их подклассов, а имеенно: MIDI, DMX, Audio Stream, Audio Control и много чего еще, но самое главное - девайс будет опознан ЛЮБОЙ системой, одинаково и однозначно, и что самое главное, предоставлять native-interface для работы с ним, будь то настройки или что либо другое, и второй немаловажный факт - девайс работает без установки каких либо драйверов/бубнов/шаманов (confirmed XP/Vista/7/10 и какой то линукс).

Следуя выше описанным размышлениям, спустя какое то время родилась данная приблуда (на данный момент альфа-версии), которой я хочу поделиться с вами. Заранее хочу сказать, на данном этапе, ценность девайся представляется предоставляемой прошивкой по причине, того что:
- основой является микроконтроллер ARM от компании STM в непаябельном для простолюдины корпусе
- девайс завязан на USB, которое требует особого внимания к входным цепям, что заслуживает отдельной лекции и подходам к печатке ибо FullSpeed USB это не 192кбит UARTa.
- цена кристала/печатки/пасивщины будет гораздо дороже, чем мой вариант.
- как я и сказал ранее, мне реально лень делать 1+2 пункты... писать программки приятнее)
Схемотехника:
Для реализации железки нам понадобится отладочная плата для Cortex-M3 контроллеров от STM, и желательно с STM32F1xx на борту. Самым простым маленьким и дешевым вариантом будет платка для Maple-проекта. На ней есть все нам необходимое, и даже больше, что позволит нам при любом удобном случае обновить прошивку/задействовать пины.
Далее, для заливки прошивки, лучше всего не поскупиться и купить обычный SWD программатор.
(Да, я в курсе, что STM32 подерживает не один способ прошивки, но я выбрал стандартный путь, так как он гарантирован, и не вызовет проблем у людей которым мир МК совершенно не известен).
Итого чуть больше 3уе, за практически готовый контроллер+st link который можно будет использовать для сових целей. Осталось прошить.
Прошивка:
Комутируем прошивальщик к платке. Нам нужен SWD интерфейс (у st-link это 2,4,6 и 8 выводы) На ST-Link все пины подписаны, и нужно 4-проводной шиной (идет в коплекте с st-link вроде) соединить с одноименными контактами на плате (4 штырьковый 2.54-ряд в торце).
Далее, нам понадобится ST-Link Utility, которая позволит залить прошивку в кристалл, и заодно обновить прошивку самого St-Link (по правде говоря, любой STM кристал, можно превратить в st-link, и наш прошивальщик, это ничто иное как обрубаная макетная платка типа Maple).
После того как ПО установленно, платы скомутированы, нужно просто подсоединить st-link, к компьютеру и дождаться когда он будет обнаружен, запустить утилиту.
Обновление прошивки st-link:
Открываем утилиту, жмакаем менюST link->Firmware->Device Connect. Окошко обновится информацией о текущей прошивке st-link, и последней, если цифры разные жмем yes>>> и ждем окончания прошивки, после нужно заново переподключить st-link
Для прошивки нашего кристалла, в открытой утилите жмакаем Target->connect и Target-> Erase Chip что бы подключить кристал к прошивальщику, и второе что бы очистить кристалл (не обязательно, но лучше это сделать)
Далее, Target->Programm&Verify и выбираем бинарник прошивки. Программа зальется на кристалл и заодно проверит целостность результата.
Проверка и использование:
Программу мы залили, осталось несколько штрихов.
В текущей прошивке реализовано две по умолчанию разомкнутые кнопки, которые нужно подключить к A0 и А1 пинам контроллера, относительно ПЛЮСОВОГО провода питания 3.3в . Тобишь, один вывод на пины А0 или А1 (для каждой кнопки свой), второй на плюс шину (шина питания выведена по углам платы и обозначена "3.3")
Warning!! Не нужно цеплять подтягивающих резисторов, и подключать кнопки к 5-ти вольтной шине. Пины толерантны к 5-вольтам, но не долго, а подтягивающие резисторы есть прямо в корпусе МК, а при подключении, они запаралелятся, и ваша кнопка может не сработать.Теперь когда все готово, подключаем micro-usb к отладочной платке, и включаем его в компуктер. ПК нам сообщит что добавлено новое устройство, созерцать его можно в "менеджере девайсов".
запускаем Guitar Rig, или любой другой софт, который способен коннектится к шине MIDI (cubase, fl studio, софтверные миди-клавиатуры...тысячи их) и проверяем девайс, при этом присвоив свои кнопки, к каким нибудь контролам в самой программею. Логично предположить, что если у нас реализованы кнопки, то не имеет смысла тулить их на поворотные контролы, или лампочки/микшеры/другие отличающиеся от кнопок.
Опишу настройку для Guitar Rig (предполагаю что он у вас был установлен/настроен на вывод звука и подключения гитары):
Идем в Audio&MIDI settings выбираем вкладку MIDI и в таблице, напротив нашего девайса ставим ON. Девайс подключен.
Далее, так как это не нативный контроллер его нужно размапить по нужным контролам. Проще всего поставить наши кнопки на функции Следующий Пресет и Предыдущий Пресет.Поехали
В главном окне GR тыцаем вкладку Options и попадаем на маппинг. Жмем Add controller добавится пустой шаблон контрола. Жмем кнопку Learn, и нажимаем одну из кнопок нашего MIDI контроллера. На шаблоне должна появиться надпись кода кнопки. Теперь остается прилинковать данный event на какую нибудь функциональность. На шаблоне жмем Menu->Preset Selection->Next или Prev. Готово. Теперь нажимаем прилинкованную кнопку еще раз - пресет должен переключиться в зависимсоти от выбранного вами направления.
Нужно залочить контрол, что бы он не слетел ненароком и ни мы ни программа его не изменила. На нужном нам контроле (у нас он пока один) тыцаем Menu->Lock, появится замочек, который говорит о том что контрол (контрол - это заполненый событием и функциональностью шаблон) зафиксирован и только молнии Зевса в вашу розетку смогут его поменять.Если позже вы захотите сменить что либо в контроле, то нужно его разлочить (в меню только эта функция и будет присутствовать)
To be continued
Как я и сказал, что данная версия контроллера пока рання альфа, но я неудержался поделится ею с вами. В целом, общая цель, которую я ставил себе, была достигнута (хотя осадочек некоторый остался) но честно сказать это далеко не предел. Развитие прошивки всецело зависит от того насколько она будет интересна, и, от степени моей мотивации/прибыльности, но версия набольшее количество кнопок будет однозначно ( аппетит приходит во время еды). В целом, что еще задуманно реализовать:
- callback фичи, некоторые хосты умеют отправлять обратно состояние своих контролов, это очень ок так как можно выводить какую нить индикацию на контроллере (например если кнопка toggle типа то ее состояние на светодиод)
- on-board память на пару мегабайт. Заче мнужно? Ну например хранить на СВОЕМ контроллере СВОИ настройки мапинга, которые кстати експортируются из того же гитар рига, очень удобно....можно ненароком купить ноут и начать ходить на репы с софт процессором и контроллером, а второй гитарист пусть продолжает носится по городу со своей головой у ведром примочек.
- пару тройку енкодеров, ведь мы ж не только о гитар риге говорим? Быть может кто то захочет себе что то типа микшера, или ему нужны будут миди-крутилки...более того, можно повесить крутилки на In/Out регуляторы, и регулировать громкость неотходя от кассы...да много чего возможно.
- потенциометр, с надеждой что когда то я таки сооружу еще и педаль експрессии для него, ибо играть без вах-вах, вух-вух не дело.
- проброс внешних миди-гнезд, да, не плохо иметь хотябы одну пару I/O MIDI на родных 5-ти штырьках....вдруг понадобится подключить древнюю MIDI клаву.
- SysEx команды, нужная вещь для более правильной работы MIDI, потому что позволяет на должном уровне работать с хостом, короче тема сложная.
По большей части, основная часть проекта - связь с ПК на MIDI реализована, и дополнительные фичи - это чистый полет фантазии, и при опереденной сноровке, навернуть можно что и как угодно в пределах MIDI спецификации и возможностей самого МК, а если учесть что линейки STM32F pin-to-pin совместимы, то при замене МК можно хоть управлять ракетами (на вскидку ставим МК в корпусе на 144 ноги, и хоть миди рояль делай)
Дополнения:
- все платки продаются БЕЗ НОЖЕК, но в комплекте идет набор 2.54 штырьков, при запайке расположите их вниз платы, иначе потом будет сложно ресетить/смотреть номера пинов - они будут очень сильно мешать (да да, я лох запаял их сверху, теперь ресечусь карандашом)
- st link немножко чувствителен к хреновым удлиннителям USB и длинным проводам, поэтому если у вас пропадает связь с утилитой, попытайтесь укоротить провода, использовать более качественный usb удлиннитель, поотключайте хабы. Лучше всего подключиться к порту который находится на мат. плате.
- после прошивки МК, может случиться что повторная прошивка не возможна. St link коннектится но не может опознать камень, в таком случае зажимаем Reset на платке (одна единственная кнопка), держим, а в утилите нажимаем "очистка памяти", и практически сразу отпускаем ресет. (проблема обусловленна ремапом SWD, и так же бывает решается пре-ресетом платы при прошивке, настраивается в настройках утилиты)
- память МК расчитана на более чем 32тыс циклов записи, поэтому не надо боятся пробовать перепрошивать, так же в МК есть встроенный бутлоадер, который сломать практически не возможно - камень не убиваемый.
- Если у вас есть продукция STM в виде отладочных плат (дискавери, или другие китайские аналоги), не спешите затариваться на Али, на них так же можно все реализовать, более того, на официальных платах уже есть st-link, и его можно использовать для внешних действи (дисковери, нуклео и похожие)
- если вы решительно собираетесь собрать готовое устройство, не выпаивайте с платы micro-usb, не пытайтесь его удлиннить проводами, лучше сделайте доп плату, в которую вы штырьками вставите платку с СТМ, и ее закрепите уже по отношению к usb отверстию в вашем корпусе. По правде говоря, для таких устройств микро-usb не самый лучший выбор, но пока другого нет.
- прошивка организована по стандарту USB 2.0, и не тестировалась на хостах c USB 1.0.
[i]Описание атачей:[/i]
с8е6.rar - прошивка для контроллера STM32F103C8T6 (имеено такой стоит в борде с Али)
stlink.zip - Утилита прошивки stm-контроллеров, через st-link
ЗЫ. Если кому ломает мозг, прошу прощения за стиль изложения.
ЗЫЫ. Я короче так торопился, что забыл отключить дебажный светодиод на плате, а значит при нажатии любой из клавиш он загорится, а при отпускании должен потухнуть, если он горит поумолчанию, значит у вас кнопка поумолчанию зажата(оу, даже польза от него есть)

Прикрепленные изображения

  • Прикрепленное изображение: GR_contr_done.png
  • Прикрепленное изображение: dev_man.png
  • Прикрепленное изображение: midi_sett.png

Прикрепленные файлы

  • Прикрепленный файл  stlink.zip (22,7МБ)
    Количество загрузок:335
  • Прикрепленный файл  c8t6.rar (4,04К)
    Количество загрузок:362

а сегодня качественно играть на гитаре могут не только лишь все... мало кто может...
6

#2 Пользователь офлайн   Данила-мастер 

  • Вставить ник
  • Цитировать
  • Раскрыть информацию

Отправлено 20 января 2017 - 11:37

Отличный проект !
Жаль под Visual Studio STM не очень хорошо подкручивается.
колеблюсь в выборе МК для своего проекта:
1 - AVR 8 Bit + USB Bootloader
2 - AVR 8 Bit + AVR ISP
3 - AVR 8 Bit с USB на борту
4 - STM или другой МК с Hardware USB
хочется иметь возможность обновления прошивки по USB и по возможности USB MIDI
0

#3 Пользователь офлайн   Nazarett 

  • то тут то там..
  • Вставить ник
  • Цитировать
  • Раскрыть информацию

Отправлено 20 января 2017 - 14:55

Данила-мастер, если это обращение за советом, то я бы однозначно выбирал STM, хотя бы потому что возможностей он предлагает больше.
Что касается твои требований, выбирай аппаратный USB, ибо с ним из без програмной реализации хватает определенных проблем, и на програмном высокой скорости не добъешься.
В плане обновления прошивки, есть usb dfu класс, но как его раелизовывать я пока не вникал и для обновления нужна какая нить программа для ПК, а в таком случае, можно особо не париться и через нулевой ендпоинт просто писать и все, и нахрен эот DFU. Другой момент конечно это через Mass Storage и бинарник ложить прямо на флеш, но тогда нужна память внешняя, так как EEPROM у STM нету (есть пляски с батарейкой и писанина в память программ, но это как по излишки, и не стоит использования однодоларовой SPI FLASH, которых с BIOS микросхем можно использовать). Тут тебе нужно просто более точно определиться что ИМЕННО ты преследуешь.
IDE для прикладных программ как среда для МК ничего хорошего не дают, кроме редактирования кода (это к слову о VS), поэтому я использую только Keil с его отличным компилятором, кстати снедавна он является как бы официальным ARMмовским, есть триал версия на 32кб кода - хватает заглаза.
а сегодня качественно играть на гитаре могут не только лишь все... мало кто может...
0

#4 Пользователь офлайн   Данила-мастер 

  • Вставить ник
  • Цитировать
  • Раскрыть информацию

Отправлено 21 января 2017 - 19:14

Позволю себе еще немного пофлудить )
Я крутил Arduino IDE в начале знакомства с МК. Но он очень топорный.
А потом открыл для себя Visual Studio и модуль для ардуины.
По факту от ардуино осталась только часть синтаксиса и компилятор. МК отдельный, программатор отдельный.
А в Visual Studio одно удовольствие работать. Знакомая до боли среда с кучей удобных фич.
Плюс с недавних пор бесплатная для обучения и некоммерческого использования.
0

#5 Пользователь офлайн   Сергей K. 

  • Вставить ник
  • Цитировать
  • Раскрыть информацию

Отправлено 22 января 2017 - 13:07

исходники добавишь (для быстрого старта доработки) или пока секрет?
0

#6 Пользователь офлайн   Nazarett 

  • то тут то там..
  • Вставить ник
  • Цитировать
  • Раскрыть информацию

Отправлено 22 января 2017 - 15:16

Цитата

А в Visual Studio одно удовольствие работать.

Та работать никто не спорит, но ставить 30Гб ради покодить в МК. Я Кстати, предпочитаю продукты jetbrains
Сергей K., Исходников пока, увы не будет.
а сегодня качественно играть на гитаре могут не только лишь все... мало кто может...
0

#7 Пользователь офлайн   Сергей K. 

  • Вставить ник
  • Цитировать
  • Раскрыть информацию

Отправлено 23 января 2017 - 20:11

Просмотр сообщенияNazarett (22 января 2017 - 15:16) писал:

.....
Сергей K., Исходников пока, увы не будет.

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

#8 Пользователь офлайн   Данила-мастер 

  • Вставить ник
  • Цитировать
  • Раскрыть информацию

Отправлено 23 января 2017 - 20:13

Сергей K., Ну кто умеет кодит кто не умеет но хочет прибор будет рад готовому рабочему бинарнику.
0

Поделиться темой:


Страница 1 из 1
  • Вы не можете создать новую тему
  • Вы не можете ответить в тему

1 человек читают эту тему
0 пользователей, 1 гостей, 0 скрытых пользователей

Спасибо админам и создателям форума, которые развивали ресурс вплоть до мая 2022 года: Kanistra, Nazarett, Satriani, Плохиш, Тяп !