MIDI контроллер
- B@R5uk
- Собутыльник Кота
- Сообщения: 2896
- Зарегистрирован: Сб ноя 13, 2010 12:53:25
- Откуда: приходит весна?
Re: MIDI контроллер
Что-то разбираться придётся значительно больше, чем я планировал. Неужели нельзя не городить огород, а сделать всё на одном МК без всяких преобразований "миди-->юсб"?
- servio
- Родился
- Сообщения: 19
- Зарегистрирован: Пт окт 21, 2011 18:27:34
- Откуда: Киев
- Контактная информация:
Re: MIDI контроллер
B@R5uk писал(а):Что-то разбираться придётся значительно больше, чем я планировал. Неужели нельзя не городить огород, а сделать всё на одном МК без всяких преобразований "миди-->юсб"?
Готовую схему и прошивку для клавы под USB найти будет не просто. Если бы я делал клавиши, то упростил бы схему и прошивку проекта C-r-o-w, а выход MIDI через FT232RL подключил бы к USB. Установил бы на комп транслятор UART-MIDI от Roland и наслаждался бы результатом. Куда уже проще.
-
Очестратор
- Первый раз сказал Мяу!
- Сообщения: 21
- Зарегистрирован: Чт апр 19, 2012 12:08:44
- Откуда: г.Киселевск
Re: MIDI контроллер
Midi-клава с усб выходом? Запросто. Берем V-USB стек, и прикручиваем его к процедуре опроса клавиш. Всё! Никаких огородов. Как основу можно взять вот этот http://avargesnano.narod.ru/3/MIDI-DJ-CJ-CONTROLLER-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 фабричные клавиатуры устроены подобным образом).
- BCluster
- Собутыльник Кота
- Сообщения: 2512
- Зарегистрирован: Пн апр 06, 2009 19:33:29
- Откуда: Молдова, Кишинев
- Контактная информация:
Re: MIDI контроллер
Лучше покажите пример работы с динамической клавиатурой ))) А то работы много, некогда взяться )
- B@R5uk
- Собутыльник Кота
- Сообщения: 2896
- Зарегистрирован: Сб ноя 13, 2010 12:53:25
- Откуда: приходит весна?
Re: MIDI контроллер
Очестратор писал(а):Как основу можно взять вот этот http://avargesnano.narod.ru/3/MIDI-DJ-CJ-CONTROLLER-3.0.html
Большое СПАСИБО! Вот от этого уже можно отталкиваться, как раз то, что я хотел.
-
Очестратор
- Первый раз сказал Мяу!
- Сообщения: 21
- Зарегистрирован: Чт апр 19, 2012 12:08:44
- Откуда: г.Киселевск
Re: MIDI контроллер
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.
Это - общий принцип. Для кучи клавиш нам понадобится всего лишь перебирать ногами контроллера, считывать показания входов и кидать значение в массив. В принципе, алгоритм не сильно усложнится. Главная суть в вышеприведенном методе - то, что не нужно программно бороться с дребезгом контактов. Т.е. можно сканировать на максимальной скорости. Ложные срабатывания в силу использования двух контактов и строгой их очередности нажатия, фактически исключены. А поскольку не нужно будет тупить, ожидая пока пройдет дребезг, можно организовать еще ряд фишечек на том же МК, как-то: колеса модуляции и громкости, жк экран и т.д.
- BCluster
- Собутыльник Кота
- Сообщения: 2512
- Зарегистрирован: Пн апр 06, 2009 19:33:29
- Откуда: Молдова, Кишинев
- Контактная информация:
Re: MIDI контроллер
У меня есть готовая клава, там два контакта на клавишу оба нормально разомкнутые.
Вопросы у меня прикладного характера как раз.
По этому делу есть какие-то данные? У меня были проблемы с подбором зависимости...
Ну уж слишком шировкий диапазон мне кажется... Плюс к тому думаю индивидуально. У меня например контакты оч близко друг к другу
Вопросы у меня прикладного характера как раз.
Очестратор писал(а):а коррелируется через график, который может быть линейным, логарифмическим, обратнологарифмическим,ступенчатым и т.д.
По этому делу есть какие-то данные? У меня были проблемы с подбором зависимости...
Диапазоны измерений времени нажатия: стаккато 0.01 сек, легато 3-5сек. Вот отсюда и пляшем.
Ну уж слишком шировкий диапазон мне кажется... Плюс к тому думаю индивидуально. У меня например контакты оч близко друг к другу
-
Очестратор
- Первый раз сказал Мяу!
- Сообщения: 21
- Зарегистрирован: Чт апр 19, 2012 12:08:44
- Откуда: г.Киселевск
Re: MIDI контроллер
BCluster, можно использовать табличный метод. Забить несколько табличек заранее вычислив их. И не придется грузить ядро мудреной математикой. Вычислить можно в том же Маткаде.
Диапазон измерений тут действительно надо подбирать опытным путем, ведь зависит еще и от расстояния между контактами. Вообще механика тут сильно влияет даже на простой пружинной клаве. Основные фазы хода клавиши:
1. От верхнего упора вниз X мм до размыкания верхнего контакта.
2. Расстояние от размыкания верхнего контакта до замыкания нижнего.
3. Ход до упора вниз, зажат нижний контакт.
Вот в зависимости от этих данных следует подбирать переменные.
А еще график велосити позволяют обрабатывать уже в компьютере программы-хосты. Например, это реализовано в Steinberg Grand Piano или Cubase - по сути это даже удобнее, видишь график, тут же по ощущениям рисуешь его или ломаешь как угодно. А клавиатура при этом выдает строго линейное велосити без всяких обработок. Можно и так.
Диапазон измерений тут действительно надо подбирать опытным путем, ведь зависит еще и от расстояния между контактами. Вообще механика тут сильно влияет даже на простой пружинной клаве. Основные фазы хода клавиши:
1. От верхнего упора вниз X мм до размыкания верхнего контакта.
2. Расстояние от размыкания верхнего контакта до замыкания нижнего.
3. Ход до упора вниз, зажат нижний контакт.
Вот в зависимости от этих данных следует подбирать переменные.
А еще график велосити позволяют обрабатывать уже в компьютере программы-хосты. Например, это реализовано в Steinberg Grand Piano или Cubase - по сути это даже удобнее, видишь график, тут же по ощущениям рисуешь его или ломаешь как угодно. А клавиатура при этом выдает строго линейное велосити без всяких обработок. Можно и так.
-
Antonio kotE
- Родился
- Сообщения: 1
- Зарегистрирован: Вс июл 15, 2012 12:02:53
Re: MIDI контроллер
Доброва времени суток
собрал контроллер usb 3.0 от avarges, работает хорошо, определяется, но частенько бывают беспричинные на мой взгляд зависания контроллера, т.е. прекращает обновляться информация на дисплее и по midi прекращает передаваться информация. Помогает только повторное включение. В чем причина может быть ???
не могу понять никак
-
Очестратор
- Первый раз сказал Мяу!
- Сообщения: 21
- Зарегистрирован: Чт апр 19, 2012 12:08:44
- Откуда: г.Киселевск
Re: MIDI контроллер
Хм. Я не повторял ту конструкцию, но сдается мне, виснет контроллер. А причин тысячи - может быть и программный глюк, может быть и неоптимальная разводка, может быть и с портом USB на компе что-то. Попробуй искусственно вызвать это зависание, если таки вообще никакой логики прослеживаться не будет, тогда есть вероятность что где-то косяк в монтаже (например плохо припаянная нога).
Re: MIDI контроллер
Выложу свою статью на эту тему, может быть кому то будет интересно. Проект правда для гитарных миди контроллеров, особенность в использовании преимущественно кнопок, а не потенциометров и фейдеров, но работа с ацп описана. В доке есть ссылки на исходники. Хотелось бы развить этот проект именно как open hardware/software, если появятся заинтересованные люди буду рад сотрудничеству!
http://bjdevices.ru/manuals/BJ_Devices_ ... _Guide.pdf
http://bjdevices.ru/manuals/BJ_Devices_ ... _Guide.pdf
Re: MIDI контроллер
Я вот тут поразмыслил и понял, что если делать Диджейский пульт, то лучше сделать отдельно микшер и отдельно вертаки. Можно конечно и на вертаки навешать несколько кнопочек, но не много и вертаки обязательно надо делать на аппаратном USB, иначе будут сильно тупить и пролетать при вращении. Решил возобновить свой проект, но исключить вертаки. Должно получится 256 кнопок и 96 резюков (это максимальное количество, конечно можно все и не ставить). Всё будет с динамическим опросом, поэтому одновременно можно нажимать сколько угодно кнопок, пока Атмега не зависнет
. Вообщем проблем возникнуть не должно, схема будет примитивная - МК, обвязка для программного USB и 8 мультиплексоров для максимального количества крутилок.
Была мысль перевести на дисплей, но не хватает ног. А потом подумал, в принципе он только для "понтов" стоять будет.
К чему я это всё написал? Остались свободные 3 цифровые ноги (и можно одну-две из АЦП взять, 64 резюка я думаю всё равно хватит за уши). Может есть какие-нибудь мысли, чем интересным можно эти ноги забить?
Была мысль перевести на дисплей, но не хватает ног. А потом подумал, в принципе он только для "понтов" стоять будет.
К чему я это всё написал? Остались свободные 3 цифровые ноги (и можно одну-две из АЦП взять, 64 резюка я думаю всё равно хватит за уши). Может есть какие-нибудь мысли, чем интересным можно эти ноги забить?
Re: MIDI контроллер
isx писал(а):Я вот тут поразмыслил и понял, что если делать Диджейский пульт, то лучше сделать отдельно микшер и отдельно вертаки. Можно конечно и на вертаки навешать несколько кнопочек, но не много и вертаки обязательно надо делать на аппаратном USB, иначе будут сильно тупить и пролетать при вращении. Решил возобновить свой проект, но исключить вертаки. Должно получится 256 кнопок и 96 резюков (это максимальное количество, конечно можно все и не ставить). Всё будет с динамическим опросом, поэтому одновременно можно нажимать сколько угодно кнопок, пока Атмега не зависнет. Вообщем проблем возникнуть не должно, схема будет примитивная - МК, обвязка для программного USB и 8 мультиплексоров для максимального количества крутилок.
Была мысль перевести на дисплей, но не хватает ног. А потом подумал, в принципе он только для "понтов" стоять будет.
К чему я это всё написал? Остались свободные 3 цифровые ноги (и можно одну-две из АЦП взять, 64 резюка я думаю всё равно хватит за уши). Может есть какие-нибудь мысли, чем интересным можно эти ноги забить?
Можно через сдвиговый регистр подключить сколько угодно семисегментников - полноценный дисплей получится. Можно обойтись двумя ногами, но можно использовать три ноги (OE на регистре), чтобы не мерцало при перерисовке
Re: MIDI контроллер
Семисигмент это не интересно... Я думал если символьник подключу, то можно было бы шкалу сделать, чтоб визуально показывала текущее положение потенциометра или кнопки. Но, всё же и это бесполезная вещь...
- headshotbacs
- Вымогатель припоя
- Сообщения: 641
- Зарегистрирован: Пт ноя 28, 2008 20:34:39
- Откуда: Краматорск
Re: MIDI контроллер
isx писал(а):Семисигмент это не интересно... Я думал если символьник подключу, то можно было бы шкалу сделать, чтоб визуально показывала текущее положение потенциометра или кнопки. Но, всё же и это бесполезная вещь...
Вот никак не могу понять зачем вся эта ерунда, если есть экран монитора. Вот собрал полгода назад - ничего лишнего, работает отлично.
- Вложения
-
- сjdjmidi2.0.jpg
- (102.9 КБ) 1255 скачиваний
Re: MIDI контроллер
Д просто так 
Не знаю чем можно ноги занять свободные... Может есть другие мысли, кроме дисплея?
Не знаю чем можно ноги занять свободные... Может есть другие мысли, кроме дисплея?
- liv6125
- Встал на лапы
- Сообщения: 115
- Зарегистрирован: Сб май 02, 2009 22:25:22
- Откуда: Орловская область г. Ливны
- Контактная информация:
Re: MIDI контроллер
как насчет индикации 
Re: MIDI контроллер
на фейдеры вот такие штуки можно поставить) имхо нтересно будет выглядеть 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
но это конечно дороговато
Re: MIDI контроллер
liv6125 писал(а):как насчет индикации
А что, так сказать, "индицировать" то будем?
Burenkov писал(а):вот еще что можно поставить http://avpg2.homepage.t-online.de/img/RS60N11M9_2.JPG
но это конечно дороговато
А зачем так напрягаться то? Будут стоять простые потенциометры, только не радиальные, а линейные. У меня в прошлом проекте такие стояли, и работали отлично
Re: MIDI контроллер
Ну хз, просто кроме чегонить светодиодного, или вот этой фигни к миди контроллеру вроде и не поключишь