MIDI контроллер
Что-то разбираться придётся значительно больше, чем я планировал. Неужели нельзя не городить огород, а сделать всё на одном МК без всяких преобразований "миди-->юсб"?
- Реклама
Готовую схему и прошивку для клавы под USB найти будет не просто. Если бы я делал клавиши, то упростил бы схему и прошивку проекта C-r-o-w, а выход MIDI через FT232RL подключил бы к USB. Установил бы на комп транслятор UART-MIDI от Roland и наслаждался бы результатом. Куда уже проще.B@R5uk писал(а):Что-то разбираться придётся значительно больше, чем я планировал. Неужели нельзя не городить огород, а сделать всё на одном МК без всяких преобразований "миди-->юсб"?
Midi-клава с усб выходом? Запросто. Берем V-USB стек, и прикручиваем его к процедуре опроса клавиш. Всё! Никаких огородов. Как основу можно взять вот этот http://avargesnano.narod.ru/3/MIDI-DJ-C ... R-3.0.html проект, и выбросить из него ненужное, оставив только работу USB стека. И добавить еще процедуру динамического опроса клавиш, которая пишется за один вечер
По факту, в программе (там есть исходники) есть очень важная процедурка MidiSend () , что и выплевывает в программный усб мидисообщения.
Есть еще более сложный, но надежный способ. Берем связку FT232RL + atmega8 . Первая микруха у нас формирует виртуальный ком-порт - драйвера не требуются. Контроллер же занят только тем, что опрашивает клавиши и передает нажатия-отпускания на выход своего UARTа в FT232. Затем качаем программку Com2Midi (или как-то так, название не помню) и получаем в системе виртуальный midi порт. Что интересно, скорость приема сообщений в этом случае у нас может быть далеко не 31250 бод, можно и 115 все поставить
И метод для тяжеловесов. Берем Xmega с нативным USB на борту, и пишем ему программу "с нуля". Еще и дрова для используемой ОС. Зато в этом случае будет самый легальный метод (в частности многие usb midi фабричные клавиатуры устроены подобным образом).
Есть еще более сложный, но надежный способ. Берем связку FT232RL + atmega8 . Первая микруха у нас формирует виртуальный ком-порт - драйвера не требуются. Контроллер же занят только тем, что опрашивает клавиши и передает нажатия-отпускания на выход своего UARTа в FT232. Затем качаем программку Com2Midi (или как-то так, название не помню) и получаем в системе виртуальный midi порт. Что интересно, скорость приема сообщений в этом случае у нас может быть далеко не 31250 бод, можно и 115 все поставить
И метод для тяжеловесов. Берем Xmega с нативным USB на борту, и пишем ему программу "с нуля". Еще и дрова для используемой ОС. Зато в этом случае будет самый легальный метод (в частности многие usb midi фабричные клавиатуры устроены подобным образом).
Лучше покажите пример работы с динамической клавиатурой ))) А то работы много, некогда взяться )
Большое СПАСИБО! Вот от этого уже можно отталкиваться, как раз то, что я хотел.Очестратор писал(а):Как основу можно взять вот этот http://avargesnano.narod.ru/3/MIDI-DJ-C ... R-3.0.html
- Реклама
B@R5uk, не за что
С динамической клавиатурой работа тоже несложная. По сути - это просто две разные клавиатуры, конструктивно обьединенные в переключающий контакт. Схемка для динамики : Для чего нужны диоды и как организуется динамический опрос на обычной двумерной клаве надеюсь, вы знаете. Это описано в любом самоучителе по МК. А тут у нас - просто две клавы.
По конструктиву может быть как две пары контактов на клавишу, так
и "переключающий" контакт на 2 положения. Рассмотрим самый простой вариант
клавиатуры с одной клавишей. Заранее условимся, что верхний контакт при отжатой клавише у нас замкнут, нижний - разомкнут.
1.Поймать момент размыкания верхнего контакта. Записываем в массив номер ноты и текущее значение системного 16 разрядного таймера МК, который считает по кругу и едем далее.
2. Ни один контакт не замкнут (на деле это 1-2 мм хода клавиши).
Ждем замыкание нижнего контакта или верхнего.Если замкнулся верхний контакт - сбрасываем номер ноты в массиве и выходим к п.1.
3.Если замкнулся нижний контакт, захватываем текущее значение системного таймера и вычисляем разницу между "старым" и "новым" = это уже почти готовое velocity только сырое. Ну и конечно, нужно учитывать переход таймера через ноль, это уже тонкости программирования.
4.Обычно значение громкости клавиши не шлется напрямую, а коррелируется через график, который может быть линейным, логарифмическим, обратнологарифмическим,ступенчатым и т.д. В общем случае, приводим показания таймера к значению 0-127, которое и будет являться искомым velocity. Так как таймер у нас 16-битный, можно его настроить таким образом, чтобы он переполнялся каждые 5 секунд. В любом случае, velocity там будет очень мелкое, около 1. Диапазоны измерений времени нажатия: стаккато 0.01 сек, легато 3-5сек. Вот отсюда и пляшем.
5.Отправляем посылку NOTE ON в компьютер\секвенсор\синтезатор.
6. Далее ждем размыкания нижнего контакта и замыкания верхнего. Тут уже время считать не нужно, будем считать, что при замыкании верхнего контакта музыкант отжал клавишу.Как только это произошло, отправляем NOTE OFF.
Это - общий принцип. Для кучи клавиш нам понадобится всего лишь перебирать ногами контроллера, считывать показания входов и кидать значение в массив. В принципе, алгоритм не сильно усложнится. Главная суть в вышеприведенном методе - то, что не нужно программно бороться с дребезгом контактов. Т.е. можно сканировать на максимальной скорости. Ложные срабатывания в силу использования двух контактов и строгой их очередности нажатия, фактически исключены. А поскольку не нужно будет тупить, ожидая пока пройдет дребезг, можно организовать еще ряд фишечек на том же МК, как-то: колеса модуляции и громкости, жк экран и т.д.
С динамической клавиатурой работа тоже несложная. По сути - это просто две разные клавиатуры, конструктивно обьединенные в переключающий контакт. Схемка для динамики : Для чего нужны диоды и как организуется динамический опрос на обычной двумерной клаве надеюсь, вы знаете. Это описано в любом самоучителе по МК. А тут у нас - просто две клавы.
По конструктиву может быть как две пары контактов на клавишу, так
и "переключающий" контакт на 2 положения. Рассмотрим самый простой вариант
клавиатуры с одной клавишей. Заранее условимся, что верхний контакт при отжатой клавише у нас замкнут, нижний - разомкнут.
1.Поймать момент размыкания верхнего контакта. Записываем в массив номер ноты и текущее значение системного 16 разрядного таймера МК, который считает по кругу и едем далее.
2. Ни один контакт не замкнут (на деле это 1-2 мм хода клавиши).
Ждем замыкание нижнего контакта или верхнего.Если замкнулся верхний контакт - сбрасываем номер ноты в массиве и выходим к п.1.
3.Если замкнулся нижний контакт, захватываем текущее значение системного таймера и вычисляем разницу между "старым" и "новым" = это уже почти готовое velocity только сырое. Ну и конечно, нужно учитывать переход таймера через ноль, это уже тонкости программирования.
4.Обычно значение громкости клавиши не шлется напрямую, а коррелируется через график, который может быть линейным, логарифмическим, обратнологарифмическим,ступенчатым и т.д. В общем случае, приводим показания таймера к значению 0-127, которое и будет являться искомым velocity. Так как таймер у нас 16-битный, можно его настроить таким образом, чтобы он переполнялся каждые 5 секунд. В любом случае, velocity там будет очень мелкое, около 1. Диапазоны измерений времени нажатия: стаккато 0.01 сек, легато 3-5сек. Вот отсюда и пляшем.
5.Отправляем посылку NOTE ON в компьютер\секвенсор\синтезатор.
6. Далее ждем размыкания нижнего контакта и замыкания верхнего. Тут уже время считать не нужно, будем считать, что при замыкании верхнего контакта музыкант отжал клавишу.Как только это произошло, отправляем NOTE OFF.
Это - общий принцип. Для кучи клавиш нам понадобится всего лишь перебирать ногами контроллера, считывать показания входов и кидать значение в массив. В принципе, алгоритм не сильно усложнится. Главная суть в вышеприведенном методе - то, что не нужно программно бороться с дребезгом контактов. Т.е. можно сканировать на максимальной скорости. Ложные срабатывания в силу использования двух контактов и строгой их очередности нажатия, фактически исключены. А поскольку не нужно будет тупить, ожидая пока пройдет дребезг, можно организовать еще ряд фишечек на том же МК, как-то: колеса модуляции и громкости, жк экран и т.д.
У меня есть готовая клава, там два контакта на клавишу оба нормально разомкнутые.
Вопросы у меня прикладного характера как раз.
Вопросы у меня прикладного характера как раз.
По этому делу есть какие-то данные? У меня были проблемы с подбором зависимости...Очестратор писал(а):а коррелируется через график, который может быть линейным, логарифмическим, обратнологарифмическим,ступенчатым и т.д.
Ну уж слишком шировкий диапазон мне кажется... Плюс к тому думаю индивидуально. У меня например контакты оч близко друг к другуДиапазоны измерений времени нажатия: стаккато 0.01 сек, легато 3-5сек. Вот отсюда и пляшем.
BCluster, можно использовать табличный метод. Забить несколько табличек заранее вычислив их. И не придется грузить ядро мудреной математикой. Вычислить можно в том же Маткаде.
Диапазон измерений тут действительно надо подбирать опытным путем, ведь зависит еще и от расстояния между контактами. Вообще механика тут сильно влияет даже на простой пружинной клаве. Основные фазы хода клавиши:
1. От верхнего упора вниз X мм до размыкания верхнего контакта.
2. Расстояние от размыкания верхнего контакта до замыкания нижнего.
3. Ход до упора вниз, зажат нижний контакт.
Вот в зависимости от этих данных следует подбирать переменные.
А еще график велосити позволяют обрабатывать уже в компьютере программы-хосты. Например, это реализовано в Steinberg Grand Piano или Cubase - по сути это даже удобнее, видишь график, тут же по ощущениям рисуешь его или ломаешь как угодно. А клавиатура при этом выдает строго линейное велосити без всяких обработок. Можно и так.
Диапазон измерений тут действительно надо подбирать опытным путем, ведь зависит еще и от расстояния между контактами. Вообще механика тут сильно влияет даже на простой пружинной клаве. Основные фазы хода клавиши:
1. От верхнего упора вниз X мм до размыкания верхнего контакта.
2. Расстояние от размыкания верхнего контакта до замыкания нижнего.
3. Ход до упора вниз, зажат нижний контакт.
Вот в зависимости от этих данных следует подбирать переменные.
А еще график велосити позволяют обрабатывать уже в компьютере программы-хосты. Например, это реализовано в Steinberg Grand Piano или Cubase - по сути это даже удобнее, видишь график, тут же по ощущениям рисуешь его или ломаешь как угодно. А клавиатура при этом выдает строго линейное велосити без всяких обработок. Можно и так.
- Сообщения: 1
- Зарегистрирован: Вс июл 15, 2012 12:02:53
Доброва времени суток
собрал контроллер usb 3.0 от avarges, работает хорошо, определяется, но частенько бывают беспричинные на мой взгляд зависания контроллера, т.е. прекращает обновляться информация на дисплее и по midi прекращает передаваться информация. Помогает только повторное включение. В чем причина может быть ???
не могу понять никак
Хм. Я не повторял ту конструкцию, но сдается мне, виснет контроллер. А причин тысячи - может быть и программный глюк, может быть и неоптимальная разводка, может быть и с портом USB на компе что-то. Попробуй искусственно вызвать это зависание, если таки вообще никакой логики прослеживаться не будет, тогда есть вероятность что где-то косяк в монтаже (например плохо припаянная нога).
- Сообщения: 5
- Зарегистрирован: Пт авг 31, 2012 14:56:18
Выложу свою статью на эту тему, может быть кому то будет интересно. Проект правда для гитарных миди контроллеров, особенность в использовании преимущественно кнопок, а не потенциометров и фейдеров, но работа с ацп описана. В доке есть ссылки на исходники. Хотелось бы развить этот проект именно как open hardware/software, если появятся заинтересованные люди буду рад сотрудничеству!
http://bjdevices.ru/manuals/BJ_Devices_ ... _Guide.pdf
http://bjdevices.ru/manuals/BJ_Devices_ ... _Guide.pdf
- Сообщения: 2316
- Зарегистрирован: Вс июн 26, 2011 20:03:21
Я вот тут поразмыслил и понял, что если делать Диджейский пульт, то лучше сделать отдельно микшер и отдельно вертаки. Можно конечно и на вертаки навешать несколько кнопочек, но не много и вертаки обязательно надо делать на аппаратном USB, иначе будут сильно тупить и пролетать при вращении. Решил возобновить свой проект, но исключить вертаки. Должно получится 256 кнопок и 96 резюков (это максимальное количество, конечно можно все и не ставить). Всё будет с динамическим опросом, поэтому одновременно можно нажимать сколько угодно кнопок, пока Атмега не зависнет
. Вообщем проблем возникнуть не должно, схема будет примитивная - МК, обвязка для программного USB и 8 мультиплексоров для максимального количества крутилок.
Была мысль перевести на дисплей, но не хватает ног. А потом подумал, в принципе он только для "понтов" стоять будет.
К чему я это всё написал? Остались свободные 3 цифровые ноги (и можно одну-две из АЦП взять, 64 резюка я думаю всё равно хватит за уши). Может есть какие-нибудь мысли, чем интересным можно эти ноги забить?
Была мысль перевести на дисплей, но не хватает ног. А потом подумал, в принципе он только для "понтов" стоять будет.
К чему я это всё написал? Остались свободные 3 цифровые ноги (и можно одну-две из АЦП взять, 64 резюка я думаю всё равно хватит за уши). Может есть какие-нибудь мысли, чем интересным можно эти ноги забить?
- Сообщения: 5
- Зарегистрирован: Пт авг 31, 2012 14:56:18
Можно через сдвиговый регистр подключить сколько угодно семисегментников - полноценный дисплей получится. Можно обойтись двумя ногами, но можно использовать три ноги (OE на регистре), чтобы не мерцало при перерисовкеisx писал(а):Я вот тут поразмыслил и понял, что если делать Диджейский пульт, то лучше сделать отдельно микшер и отдельно вертаки. Можно конечно и на вертаки навешать несколько кнопочек, но не много и вертаки обязательно надо делать на аппаратном USB, иначе будут сильно тупить и пролетать при вращении. Решил возобновить свой проект, но исключить вертаки. Должно получится 256 кнопок и 96 резюков (это максимальное количество, конечно можно все и не ставить). Всё будет с динамическим опросом, поэтому одновременно можно нажимать сколько угодно кнопок, пока Атмега не зависнет. Вообщем проблем возникнуть не должно, схема будет примитивная - МК, обвязка для программного USB и 8 мультиплексоров для максимального количества крутилок.
Была мысль перевести на дисплей, но не хватает ног. А потом подумал, в принципе он только для "понтов" стоять будет.
К чему я это всё написал? Остались свободные 3 цифровые ноги (и можно одну-две из АЦП взять, 64 резюка я думаю всё равно хватит за уши). Может есть какие-нибудь мысли, чем интересным можно эти ноги забить?
- Сообщения: 2316
- Зарегистрирован: Вс июн 26, 2011 20:03:21
Семисигмент это не интересно... Я думал если символьник подключу, то можно было бы шкалу сделать, чтоб визуально показывала текущее положение потенциометра или кнопки. Но, всё же и это бесполезная вещь...
Вот никак не могу понять зачем вся эта ерунда, если есть экран монитора. Вот собрал полгода назад - ничего лишнего, работает отлично.isx писал(а):Семисигмент это не интересно... Я думал если символьник подключу, то можно было бы шкалу сделать, чтоб визуально показывала текущее положение потенциометра или кнопки. Но, всё же и это бесполезная вещь...
- Вложения
-
- сjdjmidi2.0.jpg
- (102.9 КБ) 1264 скачивания
- Сообщения: 2316
- Зарегистрирован: Вс июн 26, 2011 20:03:21
Д просто так 
Не знаю чем можно ноги занять свободные... Может есть другие мысли, кроме дисплея?
Не знаю чем можно ноги занять свободные... Может есть другие мысли, кроме дисплея?
как насчет индикации 
- Сообщения: 5
- Зарегистрирован: Пт авг 31, 2012 14:56:18
на фейдеры вот такие штуки можно поставить) имхо нтересно будет выглядеть http://catalog.gaw.ru/index.php?page=co ... l&id=17788
вот еще что можно поставить http://avpg2.homepage.t-online.de/img/RS60N11M9_2.JPG
но это конечно дороговато
вот еще что можно поставить http://avpg2.homepage.t-online.de/img/RS60N11M9_2.JPG
но это конечно дороговато
- Сообщения: 2316
- Зарегистрирован: Вс июн 26, 2011 20:03:21
А что, так сказать, "индицировать" то будем?liv6125 писал(а):как насчет индикации
А зачем так напрягаться то? Будут стоять простые потенциометры, только не радиальные, а линейные. У меня в прошлом проекте такие стояли, и работали отличноBurenkov писал(а):вот еще что можно поставить http://avpg2.homepage.t-online.de/img/RS60N11M9_2.JPG
но это конечно дороговато
- Сообщения: 5
- Зарегистрирован: Пт авг 31, 2012 14:56:18
Ну хз, просто кроме чегонить светодиодного, или вот этой фигни к миди контроллеру вроде и не поключишь


