www.diyfactory.ru



Страницы: (9) 1 [2] 3 4 ... Последняя »  ( Перейти к первому непрочитанному сообщению ) Ответ в темуСоздание новой темыСоздание опроса

> Проект MiniMoog. Часть 3, Midi to CV
BSVi
Дата 10.10.2007 - 21:15
Цитировать сообщение




Unregistered












ќткуда:


>На материнках ставили такие переключатели синенькие вместо джамперов, их >можно заюзать.
100% согласен. Более того, можно каналом рулить по SysEx smile.gif На любом инструменте нажимаем кнопку выбора каналов и ноту, соответствующую каналу. На всех midi клавах так и сделанно.

Из неприятных вещей - 16битные часики с аппаратным ШИМом в маленьких контроллерах встречаются только по одиночки. Программный же ШИМ - есть некий изврат, хотя... Если 8 бит хватит, то тогда вообще без проблем.

Кстате в АВРках даже 8битовыми таймерами можно делать шим с большой разрядностью - менять прескаллер, правда каждый раз нужно будет вываливаться в прерывание, но у нас система будет совсем не загруженна даже на младших АВРках, так что можно сделать и так.

Энкодер с цифровым табло - совсем не сложно, но ест много ножек контроллера, для 16 - это 9 ножек - один 8-сегментник и второй не показывает ничего или показывает еденицу.


Хотя, нет 16-битный таймер умеет сразу два ШИМа... Все проблемы решены smile.gif
Единственная - скорость - успеет ли шим вместе со всеми фильтрами эдак за 10-20мС нарастить напряжение?

Это сообщение отредактировал BSVi - 10.10.2007 - 21:23
Top
diyfactory
Дата 10.10.2007 - 21:28
Цитировать сообщение




Unregistered












ќткуда:


Серёга не ругайся. smile.gif
Top
Diz
Дата 10.10.2007 - 21:51
Цитировать сообщение




Unregistered












ќткуда:


Да, похоже midi learn - это выход. Выбор канала по sysex - тоже хороший
вариант, первое, что пришло в голову. Только сложновато это для
оперативной перестройки.

Насчет 16-битного ШИМ-а все проще. Берем ту же avr, используем
два ШИМ-выхода одного 8-битного таймера. Одним выводим
старший байт, другим младший. Снаружи суммируем через
резисторы R и R/256 на одном операционнике.

Как раз укладываемся в счетверенный операционник - два
сумматора (с усилением до 10 В), два активных фильтра,
два CV-канала :-)

Энкодер и индикатор несложно, но это излишне ИМХО.
Top
Diz
Дата 12.10.2007 - 01:28
Цитировать сообщение




Unregistered












ќткуда:


Добавлю, что от 9 ножек контроллера можно драйвить до 8
таких индикаторов - http://pdfserv.maxim-ic.com/en/an/AN1880.pdf
С динамической индикацией, само-собой.

Как вариант - поставить один восьмисегментный индикатор (0 - F)
и кнопку, перебирающую каналы.
Top
BSVi
Дата 12.10.2007 - 11:33
Цитировать сообщение




Unregistered












ќткуда:


>Как вариант - поставить один восьмисегментный индикатор (0 - F)
>и кнопку, перебирающую каналы.

Классная идея! Только как B и D рисовать, чтобы они отличались от 8 и 0?
Top
BSVi
Дата 12.10.2007 - 11:40
Цитировать сообщение




Unregistered












ќткуда:


Народ, давайте тех. задание!

Зависимость напряжения от ноты точно линейная?
Top
Diz
Дата 12.10.2007 - 11:52
Цитировать сообщение




Unregistered












ќткуда:


Хм. Хороший вопрос. Разве что точку ставить для цифр (или букв).
А насчет зависимости нота-CV предлагаю в любом случае делать через
табличку. Тогда можно рулить зависимостью как угодно под конкретный
прибор. Размер таблички всего 256 байт (для 128 нот).
Top
ilya
Дата 12.10.2007 - 15:49
Цитировать сообщение




Unregistered












ќткуда:


Буквы надо делать тогда с точками. А крутилку можно поменять на 2 кнопки (вверх-вниз) либо вообще одну кнопку поставить (с цикличным выбором от 1 до F).
Top
BSVi
Дата 12.10.2007 - 20:22
Цитировать сообщение




Unregistered












ќткуда:


Такс, давайте решатьццо. Предлагаю либо сдвоенный индикатор, либо два одинарных. А индикация действительно нужна? Может просто запоминать?

Вот нарисовал заготовку под Atmega8, частота - 8Мгц
Компилить avr-gcc

Пока это только каркас, умеет принимать миди, сортировать их и вызывать функцию при принятии чего-либо. Компилится в 282байта. Осталось дописать ШИМ, переключатели-индикаторы, и чтение из таблицы.

Сегодня я устал, так что не факт, что допишу.

Кстате - midi у меня в компе нет чтобы загружать таблицы sad.gif может сделать загрузку через COM или LPT порт? Или проектик сбацать MIDI-USB ^))

Присоединённый файл ( Кол-во скачиваний: 23 )
Присоединённый файл  main.c
Top
BSVi
Дата 12.10.2007 - 22:04
Цитировать сообщение




Unregistered












ќткуда:


Дыксь. Организовал 16битную шим на два канала. А что собственно на них должно выводиться?

как я понимаю 1 канал - это нота по таблице + питчбенд?? (питчбенд - логарифм или линейный??)

2 канал - это сила нажатия?
Top
ilya
Дата 12.10.2007 - 22:10
Цитировать сообщение




Unregistered












ќткуда:


Не, надо Pitch Bend отдельно выводить. И модуляцию тоже отдельно. Еще сигнал Gate (типа, Note On).
Top
BSVi
Дата 12.10.2007 - 22:15
Цитировать сообщение




Unregistered












ќткуда:


Е-мае, так нужно 4 канала ?

Посмотрел доку на миди, все каналы можно смело делать 8 битными.

Без проблем организуются 3 канала, 4 уже будет геммор.

Это сообщение отредактировал BSVi - 12.10.2007 - 22:17
Top
Diz
Дата 13.10.2007 - 00:33
Цитировать сообщение




Unregistered












ќткуда:


Несколько соображений:

1) Pitch 8-битным делать не стоит - слишком грубый шаг, невозможно
подстроить строй синтезатора и смысл в таблице пропадает.

2) В таблице можно задать и экспоненциальную
зависимость нота-CV, тогда аналоговый экспоненциальный
преобразователь в самом синте можно спокойно убрать (а он традиционно нестабильный элемент - требует согласованные пары транзисторов, резистор с положительным ТК и т.д.). Если при этом выводить CV 8-битами, то экспонента
в начале диапазона будет сильно ступенчатой :-)

3) Если не ошибаюсь, то Pitch bend имеет 14-битное значение.

4) BSVi, бегло проглядел шаблон, немного критики (могу ошибаться):

Нет обработки Note On с нулевой velocity - она должна
восприниматься как Note Off.

Сообщения группы realtime (>0xF7) могут приходить в любом месте
потока и ничего не должны портить - у тебя они будут портить обработку при совпадении младших четырех бит с номером канала.

System reset (0xFF) обрабатывается после принятия байта данных, а должен
сразу при получении.

Running status должен поддерживаться только для voice команд
(0x80 - 0xEF), у тебя он будет поддерживаться для всех
с четырьмя младшими битами = номеру канала.

5) Модуляцию можно сделать 8-битной, должно хватить.

6) В чем смысл отдельного канала Pitch bend ? :-)

PS USB-MIDI делал, на одном из ранних Cypress EZ-USB.
Не считая кривой обработки sysex (по вине винды), все работает.

Это сообщение отредактировал Diz - 13.10.2007 - 01:23
Top
BSVi
Дата 13.10.2007 - 01:24
Цитировать сообщение




Unregistered












ќткуда:


Diz
Я с миди до этого не работал... Так, почитал на gaw.ru описание протокола.
Поэтому много нубовских вопросоа и недоразумений.

1) Согласен, всеравно 16битные шими есть

2) Для нот - да, таблица рулез форева, а вот для питч бенда? Миди передает абсолютное значение? а как его интерпретировать в вольты?

3) P/b - Задает смещение высоты тона для всех нот в канале - как звучащих, так и последующих. Значение, образованное двумя 7-разрядными величинами, изменяется в диапазоне 0..16383; среднее значение - 8192 - принимается за относительный нуль, что дает условный диапазон изменения -8192..8191. Чувствительность Pitch Bend может изменяться при помощи RPN 0; по умолчанию принимается предельное смещение на два полутона в любую сторону.

4) Не знал, исправлюсь smile.gif

5) Да,
Контроллер Modulation
Задает глубину частотной модуляции в канале. Управление абсолютное. Значение 0 отключает модуляцию, значение 127 устанавливает максимальную глубину. Стандартное значение - 0. Действует на последующие и уже звучащие ноты.

6) ХЗ sad.gif
Top
Diz
Дата 13.10.2007 - 01:37
Цитировать сообщение




Unregistered












ќткуда:


В присоединенном файле обработка миди из одного старого проекта
(сейчас я бы написал как машину состояний :-)
Номер канала не отслеживается, было не нужно.

Это сообщение отредактировал Diz - 13.10.2007 - 01:38

Присоединённый файл ( Кол-во скачиваний: 19 )
Присоединённый файл  midi_parse_old.c
Top
Diz
Дата 13.10.2007 - 01:48
Цитировать сообщение




Unregistered












ќткуда:


Для Pitch Bend, думаю, так: берем CV из таблицы для текущей ноты
и CV для ноты на тон выше (или ниже) и линейно интерполируем
между в зависимости от текущего Pitch bend.
Top
BSVi
Дата 13.10.2007 - 01:48
Цитировать сообщение




Unregistered












ќткуда:


Почитал, в принципе тоже самое, только у меня значительно более заоптимизированно под gcc smile.gif

Так что делать с pitchbend'ами?
Неужто аппаратный шим smile.gif... Или так (что, конечно, изврат)

нота, питчбенд - 16бит ШИМ
велосити - 8бит ШИМ
модуляция - матрица R-2R smile.gif))
Top
BSVi
Дата 13.10.2007 - 01:52
Цитировать сообщение




Unregistered












ќткуда:


> и линейно интерполируем
>между в зависимости от текущего Pitch bend
Я тож, так думаю, правда изменения не линейные всеравно будут, нужно узнать, что музыки наши скажут по этому поводу... Еще круче вариант - интерполяция полиномом smile.gif) Коэфиценты считает компьютер и шьет в память вместе с кривой. Тода можно и к экспоненте подобраться, даже на 2-3порядке будет хорошо smile.gif
Top
diyfactory
Дата 13.10.2007 - 10:34
Цитировать сообщение




Unregistered












ќткуда:


Цитата
Я с миди до этого не работал... Так, почитал на gaw.ru описание протокола.

Поводу MIDI - на молайне был большой цикл статей - немного может не то что нужно, но вдруг полезным сочтёте...
http://www.muzoborudovanie.ru/articles/midi/midi1.php
Top
VARI-MU
Дата 13.10.2007 - 10:45
Цитировать сообщение




Unregistered












ќткуда:


IMHO если реалмзовать то, что Вы обсуждаете,это будет не аналоговый синтезатор, тем более не MiniMoog. Без экспоненциального преобразователя
в VCO не обойтись, хоть это и есть самая сложная задача, можно лишиться многих незаменимых функций ( глиссандо-портаменто , модуляция от LFO и др.)
12 бит для управления VCO слишкм мало даже в диапазоне 4 октав.16 бит уже не дешево да и не просто. ...
Top
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:

Опции темы Страницы: (9) 1 [2] 3 4 ... Последняя » Ответ в темуСоздание новой темыСоздание опроса

 

<% COPYRIGHT %>