
DIYFACTORY.RU |
ФОРУМ |
УЧАСТНИКИ |
ПОМОЩЬ |
КАЛЕНДАРЬ |
ПОИСК |
ГАЛЕРЕЯ |
ФАЙЛЫ |
ПРАВИЛА |
РЕПУТАЦИЯ
|
Здравствуйте Гость ( Вход | Регистрация ) | Выслать повторно письмо для активации |
Страницы: (9) 1 [2] 3 4 ... Последняя » ( Перейти к первому непрочитанному сообщению ) | ![]() ![]() ![]() |
BSVi |
Дата 10.10.2007 - 21:15
|
Unregistered ќткуда: ![]() |
>На материнках ставили такие переключатели синенькие вместо джамперов, их >можно заюзать.
100% согласен. Более того, можно каналом рулить по SysEx ![]() Из неприятных вещей - 16битные часики с аппаратным ШИМом в маленьких контроллерах встречаются только по одиночки. Программный же ШИМ - есть некий изврат, хотя... Если 8 бит хватит, то тогда вообще без проблем. Кстате в АВРках даже 8битовыми таймерами можно делать шим с большой разрядностью - менять прескаллер, правда каждый раз нужно будет вываливаться в прерывание, но у нас система будет совсем не загруженна даже на младших АВРках, так что можно сделать и так. Энкодер с цифровым табло - совсем не сложно, но ест много ножек контроллера, для 16 - это 9 ножек - один 8-сегментник и второй не показывает ничего или показывает еденицу. Хотя, нет 16-битный таймер умеет сразу два ШИМа... Все проблемы решены ![]() Единственная - скорость - успеет ли шим вместе со всеми фильтрами эдак за 10-20мС нарастить напряжение? Это сообщение отредактировал BSVi - 10.10.2007 - 21:23 |
|
diyfactory |
Дата 10.10.2007 - 21:28
|
Unregistered ќткуда: ![]() |
Серёга не ругайся.
![]() |
|
Diz |
Дата 10.10.2007 - 21:51
|
Unregistered ќткуда: ![]() |
Да, похоже midi learn - это выход. Выбор канала по sysex - тоже хороший
вариант, первое, что пришло в голову. Только сложновато это для оперативной перестройки. Насчет 16-битного ШИМ-а все проще. Берем ту же avr, используем два ШИМ-выхода одного 8-битного таймера. Одним выводим старший байт, другим младший. Снаружи суммируем через резисторы R и R/256 на одном операционнике. Как раз укладываемся в счетверенный операционник - два сумматора (с усилением до 10 В), два активных фильтра, два CV-канала :-) Энкодер и индикатор несложно, но это излишне ИМХО. |
|
Diz |
Дата 12.10.2007 - 01:28
|
Unregistered ќткуда: ![]() |
Добавлю, что от 9 ножек контроллера можно драйвить до 8
таких индикаторов - http://pdfserv.maxim-ic.com/en/an/AN1880.pdf С динамической индикацией, само-собой. Как вариант - поставить один восьмисегментный индикатор (0 - F) и кнопку, перебирающую каналы. |
|
BSVi |
Дата 12.10.2007 - 11:33
|
Unregistered ќткуда: ![]() |
>Как вариант - поставить один восьмисегментный индикатор (0 - F)
>и кнопку, перебирающую каналы. Классная идея! Только как B и D рисовать, чтобы они отличались от 8 и 0? |
|
BSVi |
Дата 12.10.2007 - 11:40
|
Unregistered ќткуда: ![]() |
Народ, давайте тех. задание!
Зависимость напряжения от ноты точно линейная? |
|
Diz |
Дата 12.10.2007 - 11:52
|
Unregistered ќткуда: ![]() |
Хм. Хороший вопрос. Разве что точку ставить для цифр (или букв).
А насчет зависимости нота-CV предлагаю в любом случае делать через табличку. Тогда можно рулить зависимостью как угодно под конкретный прибор. Размер таблички всего 256 байт (для 128 нот). |
|
ilya |
Дата 12.10.2007 - 15:49
|
Unregistered ќткуда: ![]() |
Буквы надо делать тогда с точками. А крутилку можно поменять на 2 кнопки (вверх-вниз) либо вообще одну кнопку поставить (с цикличным выбором от 1 до F).
|
|
BSVi |
Дата 12.10.2007 - 20:22
|
Unregistered ќткуда: ![]() |
Такс, давайте решатьццо. Предлагаю либо сдвоенный индикатор, либо два одинарных. А индикация действительно нужна? Может просто запоминать?
Вот нарисовал заготовку под Atmega8, частота - 8Мгц Компилить avr-gcc Пока это только каркас, умеет принимать миди, сортировать их и вызывать функцию при принятии чего-либо. Компилится в 282байта. Осталось дописать ШИМ, переключатели-индикаторы, и чтение из таблицы. Сегодня я устал, так что не факт, что допишу. Кстате - midi у меня в компе нет чтобы загружать таблицы ![]() Присоединённый файл ( Кол-во скачиваний: 23 ) ![]() |
|
BSVi |
Дата 12.10.2007 - 22:04
|
Unregistered ќткуда: ![]() |
Дыксь. Организовал 16битную шим на два канала. А что собственно на них должно выводиться?
как я понимаю 1 канал - это нота по таблице + питчбенд?? (питчбенд - логарифм или линейный??) 2 канал - это сила нажатия? |
|
ilya |
Дата 12.10.2007 - 22:10
|
Unregistered ќткуда: ![]() |
Не, надо Pitch Bend отдельно выводить. И модуляцию тоже отдельно. Еще сигнал Gate (типа, Note On).
|
|
BSVi |
Дата 12.10.2007 - 22:15
|
Unregistered ќткуда: ![]() |
Е-мае, так нужно 4 канала ?
Посмотрел доку на миди, все каналы можно смело делать 8 битными. Без проблем организуются 3 канала, 4 уже будет геммор. Это сообщение отредактировал BSVi - 12.10.2007 - 22:17 |
|
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 |
|
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) Не знал, исправлюсь ![]() 5) Да, Контроллер Modulation Задает глубину частотной модуляции в канале. Управление абсолютное. Значение 0 отключает модуляцию, значение 127 устанавливает максимальную глубину. Стандартное значение - 0. Действует на последующие и уже звучащие ноты. 6) ХЗ ![]() |
|
Diz |
Дата 13.10.2007 - 01:37
|
Unregistered ќткуда: ![]() |
В присоединенном файле обработка миди из одного старого проекта
(сейчас я бы написал как машину состояний :-) Номер канала не отслеживается, было не нужно. Это сообщение отредактировал Diz - 13.10.2007 - 01:38 Присоединённый файл ( Кол-во скачиваний: 19 ) ![]() |
|
Diz |
Дата 13.10.2007 - 01:48
|
Unregistered ќткуда: ![]() |
Для Pitch Bend, думаю, так: берем CV из таблицы для текущей ноты
и CV для ноты на тон выше (или ниже) и линейно интерполируем между в зависимости от текущего Pitch bend. |
|
BSVi |
Дата 13.10.2007 - 01:48
|
Unregistered ќткуда: ![]() |
Почитал, в принципе тоже самое, только у меня значительно более заоптимизированно под gcc
![]() Так что делать с pitchbend'ами? Неужто аппаратный шим ![]() нота, питчбенд - 16бит ШИМ велосити - 8бит ШИМ модуляция - матрица R-2R ![]() |
|
BSVi |
Дата 13.10.2007 - 01:52
|
Unregistered ќткуда: ![]() |
> и линейно интерполируем
>между в зависимости от текущего Pitch bend Я тож, так думаю, правда изменения не линейные всеравно будут, нужно узнать, что музыки наши скажут по этому поводу... Еще круче вариант - интерполяция полиномом ![]() ![]() |
|
diyfactory |
Дата 13.10.2007 - 10:34
|
||
Unregistered ќткуда: ![]() |
Поводу MIDI - на молайне был большой цикл статей - немного может не то что нужно, но вдруг полезным сочтёте... http://www.muzoborudovanie.ru/articles/midi/midi1.php |
||
|
VARI-MU |
Дата 13.10.2007 - 10:45
|
Unregistered ќткуда: ![]() |
IMHO если реалмзовать то, что Вы обсуждаете,это будет не аналоговый синтезатор, тем более не MiniMoog. Без экспоненциального преобразователя
в VCO не обойтись, хоть это и есть самая сложная задача, можно лишиться многих незаменимых функций ( глиссандо-портаменто , модуляция от LFO и др.) 12 бит для управления VCO слишкм мало даже в диапазоне 4 октав.16 бит уже не дешево да и не просто. ... |
|
![]() |
![]() ![]() ![]() |