Тут интро
Спойлер
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
ЗЫ. Если кому ломает мозг, прошу прощения за стиль изложения.
ЗЫЫ. Я короче так торопился, что забыл отключить дебажный светодиод на плате, а значит при нажатии любой из клавиш он загорится, а при отпускании должен потухнуть, если он горит поумолчанию, значит у вас кнопка поумолчанию зажата(оу, даже польза от него есть)
Прикрепленные файлы
-
stlink.zip (22,7МБ)
Количество загрузок:335 -
c8t6.rar (4,04К)
Количество загрузок:362