Автор Тема: Проект MiniMoog. Часть 3  (Прочитано 46062 раз)

0 Пользователей и 1 Гость просматривают эту тему.

BSVi

  • Гость
Проект MiniMoog. Часть 3
« Ответ #20 : Октября 10, 2007, 10:15:29 pm »
>На материнках ставили такие переключатели синенькие вместо джамперов, их >можно заюзать.
100% согласен. Более того, можно каналом рулить по  SysEx :) На любом инструменте нажимаем кнопку выбора каналов и ноту, соответствующую каналу. На всех midi клавах так и сделанно.

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

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

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


Хотя, нет 16-битный таймер умеет сразу два ШИМа... Все проблемы решены :)
Единственная - скорость - успеет ли шим вместе со всеми фильтрами эдак за 10-20мС нарастить напряжение?
« Последнее редактирование: Октября 10, 2007, 10:23:31 pm от BSVi »

diyfactory

  • Гость
Проект MiniMoog. Часть 3
« Ответ #21 : Октября 10, 2007, 10:28:01 pm »
Серёга не ругайся. :)

Diz

  • Гость
Проект MiniMoog. Часть 3
« Ответ #22 : Октября 10, 2007, 10:51:38 pm »
Да, похоже midi learn - это выход. Выбор канала по sysex - тоже хороший
вариант, первое, что пришло в голову. Только сложновато это для
оперативной перестройки.

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

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

Энкодер и индикатор несложно, но это излишне ИМХО.

Diz

  • Гость
Проект MiniMoog. Часть 3
« Ответ #23 : Октября 12, 2007, 02:28:01 am »
Добавлю, что от 9 ножек контроллера можно драйвить до 8
таких индикаторов - http://pdfserv.maxim-ic.com/en/an/AN1880.pdf
С динамической индикацией, само-собой.

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

BSVi

  • Гость
Проект MiniMoog. Часть 3
« Ответ #24 : Октября 12, 2007, 12:33:12 pm »
>Как вариант - поставить один восьмисегментный индикатор (0 - F)
>и кнопку, перебирающую каналы.

Классная идея! Только как B и D рисовать, чтобы они отличались от 8 и 0?
 

BSVi

  • Гость
Проект MiniMoog. Часть 3
« Ответ #25 : Октября 12, 2007, 12:40:29 pm »
Народ, давайте тех. задание!

Зависимость напряжения от ноты точно линейная?

Diz

  • Гость
Проект MiniMoog. Часть 3
« Ответ #26 : Октября 12, 2007, 12:52:32 pm »
Хм. Хороший вопрос. Разве что точку ставить для цифр (или букв).
А насчет зависимости нота-CV предлагаю в любом случае делать через
табличку. Тогда можно рулить зависимостью как угодно под конкретный
прибор. Размер таблички всего 256 байт (для 128 нот).

ilya

  • Гость
Проект MiniMoog. Часть 3
« Ответ #27 : Октября 12, 2007, 04:49:43 pm »
Буквы надо делать тогда с точками. А крутилку можно поменять на 2 кнопки (вверх-вниз) либо вообще одну кнопку поставить (с цикличным выбором от 1 до F).

BSVi

  • Гость
Проект MiniMoog. Часть 3
« Ответ #28 : Октября 12, 2007, 09:22:09 pm »
Такс, давайте решатьццо. Предлагаю либо сдвоенный  индикатор, либо два одинарных. А индикация действительно нужна? Может просто запоминать?

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

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

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

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

BSVi

  • Гость
Проект MiniMoog. Часть 3
« Ответ #29 : Октября 12, 2007, 11:04:13 pm »
Дыксь. Организовал 16битную шим на два канала. А что собственно на них должно выводиться?

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

2 канал - это сила нажатия?

ilya

  • Гость
Проект MiniMoog. Часть 3
« Ответ #30 : Октября 12, 2007, 11:10:14 pm »
Не, надо Pitch Bend отдельно выводить. И модуляцию тоже отдельно. Еще сигнал Gate (типа, Note On).

BSVi

  • Гость
Проект MiniMoog. Часть 3
« Ответ #31 : Октября 12, 2007, 11:15:40 pm »
Е-мае, так нужно 4 канала ?

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

Без проблем организуются 3 канала, 4 уже будет геммор.
« Последнее редактирование: Октября 12, 2007, 11:17:54 pm от BSVi »

Diz

  • Гость
Проект MiniMoog. Часть 3
« Ответ #32 : Октября 13, 2007, 01:33:32 am »
Несколько соображений:

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 (по вине винды), все работает.
« Последнее редактирование: Октября 13, 2007, 02:23:04 am от Diz »

BSVi

  • Гость
Проект MiniMoog. Часть 3
« Ответ #33 : Октября 13, 2007, 02:24:24 am »
Diz
Я с миди до этого не работал... Так, почитал на gaw.ru описание протокола.
Поэтому много нубовских вопросоа и недоразумений.

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

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

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

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

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

6) ХЗ :(
 

Diz

  • Гость
Проект MiniMoog. Часть 3
« Ответ #34 : Октября 13, 2007, 02:37:13 am »
В присоединенном файле обработка миди из одного старого проекта
(сейчас я бы написал как машину состояний :-)
Номер канала не отслеживается, было не нужно.
« Последнее редактирование: Октября 13, 2007, 02:38:21 am от Diz »

Diz

  • Гость
Проект MiniMoog. Часть 3
« Ответ #35 : Октября 13, 2007, 02:48:06 am »
Для Pitch Bend, думаю, так: берем CV из таблицы для текущей ноты
и CV для ноты на тон выше (или ниже) и линейно интерполируем
между в зависимости от текущего Pitch bend.

BSVi

  • Гость
Проект MiniMoog. Часть 3
« Ответ #36 : Октября 13, 2007, 02:48:30 am »
Почитал, в принципе тоже самое, только у меня значительно более заоптимизированно под gcc :)

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

нота,  питчбенд - 16бит ШИМ
велосити - 8бит ШИМ
модуляция - матрица R-2R :)))
 

BSVi

  • Гость
Проект MiniMoog. Часть 3
« Ответ #37 : Октября 13, 2007, 02:52:12 am »
> и линейно интерполируем
>между в зависимости от текущего Pitch bend
Я тож, так думаю, правда изменения не линейные всеравно будут, нужно узнать, что музыки наши скажут по этому поводу... Еще круче вариант - интерполяция полиномом :)) Коэфиценты считает компьютер и шьет в память вместе с кривой. Тода можно и к экспоненте подобраться, даже на 2-3порядке будет хорошо :)

diyfactory

  • Гость
Проект MiniMoog. Часть 3
« Ответ #38 : Октября 13, 2007, 11:34:23 am »
Цитировать
Я с миди до этого не работал... Так, почитал на gaw.ru описание протокола.
Поводу MIDI - на молайне был большой цикл статей - немного может не то что нужно, но вдруг полезным сочтёте...
http://www.muzoborudovanie.ru/articles/midi/midi1.php
« Последнее редактирование: Октября 13, 2007, 11:47:47 am от diyfactory »

VARI-MU

  • Гость
Проект MiniMoog. Часть 3
« Ответ #39 : Октября 13, 2007, 11:45:43 am »
IMHO если реалмзовать то, что Вы обсуждаете,это будет не аналоговый синтезатор, тем более не MiniMoog. Без экспоненциального преобразователя
в VCO не обойтись, хоть это и есть самая сложная задача, можно лишиться многих незаменимых функций ( глиссандо-портаменто , модуляция от LFO и др.)
12 бит для управления VCO слишкм мало даже в диапазоне 4 октав.16 бит уже не дешево да и не просто. ...