Прерыватель для (DR)SSTC i3.

А что мы делаем?
Аватара пользователя
BSVi
Адепт
Сообщения: 3576
Откуда: Киев

Сообщение BSVi » 09 дек 2011, 18:16

После успешной разработки контроллера для теслы, я начинаю новый проект. В этот раз, это будет прерыватель. Так, как flyback завалился, буду рассказывать о конструировании нового прерывателя для Теслы у себя.

Для чего нужен прерыватель
Если кто не в курсе, что такое прерыватель, то это - штуковина, которая включает и выключает теслу. Это делается с четырьмя целями сразу:

  • Прерыватель служит пультом управления теслой. Нужно же ей как-то управлять, правда?
  • DRSSTC вообще не могут работать без прерывателя.
  • Прерывания увеличивают длину стримера - они дают воздуху остыть, а конденсаторам в силовой части зарядиться.
  • Прерыватель обеспечивает спецэффекты - через него можно играть музыку на тесле, синхронизировать с освещением, итп

Прерыватель - вторая по сложности штука в тесле (а может, и первая), поэтому хороший прерыватель не так просто разработать.

Конкуренты

Сейчас практически нет доступных к покупке прерывателей для теслы. Штука эта специфичная и мало кто хочет таким заморачиваться.
Ближайшие конкуренты вот: http://www.easternvoltageresearch.com/modulators.html

Но, во-первых, одни далеко от нас, а во вторых, у них прерыватель совсем простецкий, нету ни MIDI, ни DMX'а, а именно наличие этих двух штуковин может сделать теслу юзабельной для концертных выступлений.

Фичи
Итак, что я хочу организовать в прерывателе? Прерыватель будет батарейным, с переключением на питание от USB. Питаться будет от двух AA батареек/аккумуляторов. Будет небольшой индикатор. Концепт примерно вот такой:

i3_concept.jpg
i3_concept.jpg (65.32 КБ) 41087 просмотров


Список режимов, которые я хочу организовать:
  • Все режимы должны запускаться как один раз, так и постоянно
  • Постоянная модуляция с регулируемой скважностью и частотой
  • Модуляция первой модуляции
  • Еще одна модуляция
  • MIDI - слейв, воспроизводит то. что ему приходит с MIDI устройства, клавы, к примеру. Хотелось бы сделать полифонию, хотябы на 3 голоса, но это может оказаться непростой задачей.
  • MIDI - мастер. Играет сам музычку с внутренней флэшки и передает ее другим устройствам. Таким образом, можно грать на многих теслах одновременно
  • DMX - слэйв. Ну ,тут понятно. Теслой рулят со стандартного DMX - пульта.
  • Audio in - возможность играть на тесле гитарой и другими обычными аудио источниками. На сколько это нужно - непонятно, но сделать это не сложно, поэтому берем :)
  • Хотелось бы еще, чтобы девайс представлялся компьютеру MIDI устройством при подключении по USB и мог играть музычку прямо с компьютера.

Конфигурация этого все будет по USB. Естественно, будет загрузчик с помощью которого можно обновить программу.

--------------------------------
Что осталось сделать до релиза
  1. Собрать требования
  2. Нарисовать схему
  3. Нарисовать механику
  4. Нарисовать плату
  5. Сделать макет
  6. Написать bootloader
  7. Прикрутить основную программу к bootloader'у
  8. Прикрутить ОС
  9. Написать драйвер дисплея
  10. Написать разделяемый таймер (в процессоре не хватает таймеров)
  11. Написать драйвер выходного сигнала
  12. Протестировать выходные уровни и работу оптики.
  13. Прикрутить watchdog
  14. Сделать индикацию причины перезагрузки и номера версии ПО.
  15. Инициализация всех ножек
  16. Отключение ножек программирования после некоторого времени для повышения помехоустойчивости.
  17. Протестировать железо с работающим процессором: правильность работы преобразователей, выходной уровень, потребление
  18. Протестировать с теслой
  19. Написать полифонический выход
  20. Протестировать стабилизатор на BZX55-C2V4
  21. Заменить флэшку
  22. Написать драйвер памяти
  23. Прикрутить USB-mass storage
  24. Прикрутить файловую систему
  25. Написать или найти читатель/писатель xml.
  26. Задача клавиатуры
  27. Написать меню
  28. Сделать загрузку конфигурации из флэша
  29. Написать подменю настроек
  30. Регулятор контраста
  31. Ограничитель длинны/ширины импульсов
  32. Написать одиночный модулятор
  33. Добавить и протестировать MSD пункт меню
  34. Написать модулятор с постоянной частотой
  35. Написать мега модулятор
  36. Написать lock по комбинации кнопок
  37. Текстовый элемент меню
  38. Написать midi-приемник
  39. Написать фазолинейный выход
  40. Написать буфер для активных, но не звучащих нот
  41. Перейти на числа с фиксированной точкой
  42. Написать реакцию на громкость midi
  43. Написать реакцию на pitch bend
  44. Написать многоголосность
  45. режим SSTC для миди проигрывателя
  46. Написать режим midi pass through
  47. Написать проигрыватель midi
  48. Разобратсья с багом с зависшими нотами
  49. Написать контроль частот и ширин импульсов для midi модуля
  50. Тестирование midi-передатчика
  51. Исправить баг с дрожанием фронта и баг с одиночным модулятором.
  52. Написать парсер миди-файлов
  53. Написать контрол, который показывает динамически меняющееся количество строк
  54. Написать плеер миди-фалов
  55. Написать передатчик миди-потока
  56. Тестирование миди-функциональности
  57. Протестировать линейный стабилизатор - 78PC33
  58. Собрать требования по аудио-входу
  59. Написать аудио-вход
  60. Тестирование аудио-входа
  61. Рефакторинг
  62. Сделать макет корпуса
  63. Написать задачу слежения за напряжением батарейки
  64. Написать логику включения - выключения
  65. Собрать требования по DMX'у
  66. Написать приемник DMХ
  67. Тестирование приемника
  68. Тестирование железа: потребления, помехоустойчивости
  69. Корректировка схемы и платы
  70. Написать проверку целосности программы
  71. Заказ плат
  72. Заказ корпусов
  73. Монтаж плат
  74. Сборка
  75. Тестирование
  76. Готово

Дополнительные хотелки, которые не войдут в первый релиз
  • Фильтр MIDI по каналам - принимает миди и воспроизводит звуки только в определенном диапазоне

Аватара пользователя
BSVi
Адепт
Сообщения: 3576
Откуда: Киев

Сообщение BSVi » 13 дек 2011, 23:15

Похоже, первой под снос пойдет полифония. Сколько я не пытался прикинуть алгоритм, как ее организовать, все никак не получается.

Я рассматривал три варианта:
  • Складывать сигналы как синусоиды, и искать пересечения с нулем. В таком варианте Будет "звучать" наиболее громкая нота, а остальные будут выглядеть как модуляция положения импульсов. Такой вариант мне очень нравится, но он очень ресурсоемкий.
  • Вариант синтезировать обычный звук, а потом компаратором из него получать прямоугольники. Такой вариант тоже не особо катит, так как таким образом не получится контролировать частоту следования импульсов, а это важно. Да и ширину импульсов можно будет менять только в довольно грубых шагах
  • Логически суммировать импульсы. Этот вариант самый простой, но частота следования импульсов в таком варианте часто будет превышать максимальную, поэтому тоже не катит

В итоге, я понял, что при ограничениях, которые есть в ДРках, заморачиваться с полифонией не стоит. Тесла будет одноголосной.

Аватара пользователя
BSVi
Адепт
Сообщения: 3576
Откуда: Киев

Сообщение BSVi » 16 дек 2011, 15:06

Тестировал сегодня индикаторы рядом с Теслой. Тестировалось два индикатора: wh0802a и rdx0120.

Первый - обычный знакосинтезирующий индикатор на ks0066 с параллельной шиной, был подключен по 4-х проводной схеме. Второй - COG с i2c интерфейсом.

WH0802A заработал, но он не сразу - отказывался работать, пока я не подключил землю теслы непосредственно к USB разъему на stm32-discovery.
RDX0120 виснет как только я убираю руку от прерывателя, то есть, на нем наводится достаточно, чтобы он повис и без моего прикосновения.

Отчет (сорри за фиговое освещение):

Аватара пользователя
BSVi
Адепт
Сообщения: 3576
Откуда: Киев

Сообщение BSVi » 16 дек 2011, 16:17

Нарисовал примерную схему прерывателя. Там еще не посчитаны катушки и не все блокировочные конденсаторы расставлены, но в общем смысл должен быть понятен. Встречаем :)
Вложения
i3.pdf
(201.05 КБ) 1029 скачиваний

Аватара пользователя
BSVi
Адепт
Сообщения: 3576
Откуда: Киев

Сообщение BSVi » 19 дек 2011, 14:19

На выходных пытался найти тактовые кнопки с длинной штока 21мм. Оказывается, это - редкость, удалось купить только 2 штучки. Тем не менее, заложил их в конструкцию. Иначе, пришлось бы делать еще одну плату на которую устанавливать клавиатуру. Этого я делать не хочу, поэтому, пока не приспичит, буду придерживаться основной линии партии и считать, что смогу достать 21мм кнопки.

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

interface_top.jpg
interface_top.jpg (76.25 КБ) 40926 просмотров

interface_tri.jpg
interface_tri.jpg (156.26 КБ) 40926 просмотров


Скорее всего, буду делать именно так. Места на плате совсем не много.
Придется тулиться. Возможно, даже на обратной стороне детальки ставить.

До сих пор думаю над управлением, особенно - включением и выключением. Ставить больше кнопок не хочется. Скорее-всего, включаться и выключатся прерыватель будет при удержании кнопки вверх (или вниз). Но это созадет неудобства - придется проматывать меню не нажатием кнопки, а постоянным нажиманием.

Аватара пользователя
BSVi
Адепт
Сообщения: 3576
Откуда: Киев

Сообщение BSVi » 21 дек 2011, 00:26

Фууух, развел плату. Потратил на это порядка 2х дней О_о. Очень сложная плата вышла.

layout.jpg
layout.jpg (319.65 КБ) 40865 просмотров


Не получилось нормально разместить кварц (а кварц - самая чувствительная штука), поэтому кварц заменен на кварцевый генератор. Он хоть и дороже в 10 раз, зато надежнее.
Теперь нужно сварганить эту платку хотя бы, на коленке.

Я сейчас думаю вот о чем: я ведь заказал STMки с 32к памяти. А этого в легкую может не хватить: 8к на загрузчик, 8к на юсб + 2 к на дисплей + 5к на операционку, 5к на файловую систему, 5к на миди-декодер. И это все - еще очень оптимистично.

И тут есть небольшой подвох - я использую 48-пиновый корпус. Фишка в том, что STMки до 32к в таком корпусе стоят дешевле, чем 64-пиновый корпус. А вот после 32к, 48-пиновый стояит дороже, чем 64. Плату переразводить я не буду (да я и не уверен, что вмещусь даже если корпус поменять), но на всякий пожарный, заказал еще и 64к STMку.

Аватара пользователя
BSVi
Адепт
Сообщения: 3576
Откуда: Киев

Сообщение BSVi » 21 дек 2011, 12:38

Таки решился, что экспериментальную плату буду делать на коленке и даже сделал. Теперь считаю себя настоящим психом.

pcb.jpg
pcb.jpg (163.6 КБ) 40853 просмотра


Как это я запаивать буду - пока не знаю :D
Статистика: 162 отверстия, 82 компонента.

Аватара пользователя
unidk
Сообщения: 88
Откуда: Германия

Сообщение unidk » 21 дек 2011, 23:14

У меня есть хороший знакомый психиатр. Сходи к нему - он расскажет, как это все теперь запаять... :lol:

Аватара пользователя
BSVi
Адепт
Сообщения: 3576
Откуда: Киев

Сообщение BSVi » 22 дек 2011, 14:45

У меня есть хороший знакомый психиатр.

Да нет, это мне нужно ему рассказать как это запаять:

asm2.jpg
asm2.jpg (132.21 КБ) 40826 просмотров

asm1.jpg
asm1.jpg (163.3 КБ) 40826 просмотров


Таки впаял stm32f103c8 (это на 64кБайта). Хотя бы, в разработческих целях. Самое интересное, что при запуске оно не пустило дымок, а очень даже нормально заработало. Вот что успел измерить:

  • Потребление при включении от батарейки (контроллер работает от 8МГц RC генератора, работает кварц, работает 485 приемник, преобразователь уровней и два преобразователя напряжения): 10мА
  • Потребление от батареек в отключенном состоянии: 450нА
  • Потребление от батареек при включеном USB: -15мкА (тоесть, USB немного заряжает батарейки)

Теперь нужно пробовать это все пл нормальному обмерять и программировать.

Aleph
Сообщения: 1
Откуда: г. Мытищи

Сообщение Aleph » 22 дек 2011, 15:20

Вкусная печенька. Хочу съесть!

Аватара пользователя
BSVi
Адепт
Сообщения: 3576
Откуда: Киев

Сообщение BSVi » 24 дек 2011, 03:33

Итак, небольшое счастье. Написал самый сложный и самый нужный кусок - загрузчик. Тут я решил не жлобиться. Загрузчик сделан в виде Mass storage класса. Поменять прошивку можно просто записав новый файл на диск, который появляется если зажать кнопки влево и вправо и воткнуть USB-шнур.

Пока тестил только на win7, нужно попробовать и на других операционках. Там есть небольшое "допущение", что кластеры будут писаться последовательно. Не знаю, насколько это правда.
Прошивки хранятся в виде файлов v1.i3, v2.i3 итп, то есть перепутать версии сложно. Загрузчик шифрующий, используется aes128.

Круто? А вот теперь смотрите, сколько это все весит при максимальной оптимизации IAR'а:

Код: Выделить всё

  10 112 bytes of readonly  code memory
     496 bytes of readonly  data memory
   3 102 bytes of readwrite data memory

Не очень круто :(

Итого: 2 бессонных ночи, литр колы, два литра живчика, 12к флэша, изучил fat в доль и поперек.

Естественно, нужно показать картинки, только показывать особо нечего, за это я не люблю программирование:
drives.gif
drives.gif (5.45 КБ) 40104 просмотра

Аватара пользователя
BSVi
Адепт
Сообщения: 3576
Откуда: Киев

Сообщение BSVi » 26 дек 2011, 13:59

Прикрутил к прерывателю операционку (scmrtos) и написал драйвер дисплея. Драйвер довольно хитрый - он практически не загружает процессор и работает чисто на прерываниях. (хотя, часто непонятно что хуже - загружать в тупом простое в user-mode или делать лишние прерывания)

Вот код того, что на видео, который показывает как примерно будет выглядеть меню:

Код: Выделить всё

    display.Initialize();
    display.SetContrast(20);
   
    layouter.Suspend();
    DisplayField text(1,  0, 7, "i3 solid state tesla coil interrupter");
    DisplayField text2(1, 1, 7, "by bsvi.ru. It's awesome!");
    DisplayField text3(0, 0, 1, ">");
   
    layouter.Add(&text);
    layouter.Add(&text2);   
    layouter.Add(&text3);
    layouter.Resume();
   
    while(1){
        layouter.Suspend();
        text.Scrolling(true);
        text2.Scrolling(false);
        text3.SetPos(0, 0);
        layouter.Resume();
       
        OS::sleep(MS(10000));
        layouter.Suspend();
        text.Scrolling(false);
        text2.Scrolling(true);
        text3.SetPos(0, 1);
        layouter.Resume();
        OS::sleep(MS(10000));   
    }

Красиво, не правда ли? :)


Вот как это выглядит в реале:

Аватара пользователя
BSVi
Адепт
Сообщения: 3576
Откуда: Киев

Сообщение BSVi » 27 дек 2011, 01:57

Сегодня немного подумал над структурой меню. Я думаю, что меню должно состоять из двух частей:

Первая - пресеты для быстрого доступа, они показываются первыми, в названии пресеты отображаются основные параметры:

Код: Выделить всё

single modulator 100uS/200Hz
triple modulator 100uS/200Hz-10mS/1Hz-10S/5S-SS
midi player: kirkorov-zaika / vol:off / out: off
--etc---


При нажатии кнопки "выстрел" и стрелок влево-вправо изменяется ширина импульсов.
при нажатии кнопки "выстрел" и стрелки вверх, отключается кнопка мертвица

Для добавления пресетов и экспериментов существует раздел modulators:

Код: Выделить всё

Modulators
|-> Single modulator
|      |-> Pulse width
|      |-> Frequency
|      |-> Single shot
|      |-> Save as preset
|-> Dual modulator
|      |-> Pulse width 1
|      |-> Frequency 1
|      |-> Pulse width 2
|      |-> Frequency 2
|      |-> Single shot
|      |-> Save as preset
|-> Triple modulator
|      |-> Pulse width 1
|      |-> Frequency 1
|      |-> Pulse width 2
|      |-> Frequency 2
|      |-> Pulse width 3
|      |-> Frequency 3
|      |-> Single shot
|      |-> Save as preset
|-> MIDI player
|      |-> File
|      |-> Channel
|      |-> Volume sensitivity
|      |-> Output enable
|      |-> Save as preset
|-> MIDI input
|      |-> Channel
|      |-> Volume sensitivity
|      |-> Save as preset
|-> DMX input
|      |-> TBD
|      |-> TBD
|      |-> Save as preset
|-> Audio input
|      |-> Sensitivity
|      |-> Envelope sensitivity
|      |-> Noise gate
|      |-> Save as preset


Ну, и для настройки всяческих параметров - раздел Settings:

Код: Выделить всё

Settings
|-> Display contrast
|-> Pulse width limit
|-> Frequency limit


Как вам такое? Какими параметрами управлять через DMX ?

Sharix
Сообщения: 46
Откуда: Киев-Кременчуг

Сообщение Sharix » 27 дек 2011, 11:43

По поводу ДМХ, то нуно сделать возможность выбора адреса от 0 до (512 минус кол-во изменяемых параметров). А параметры могут быть:
-вкл/откл - типо если один канал больше 20 к примеру то вкл.
-частота
-длинна импульса
ну и другие....))))

Аватара пользователя
BSVi
Адепт
Сообщения: 3576
Откуда: Киев

Сообщение BSVi » 27 дек 2011, 11:49

Я вот думаю - стоит ли в управление DMX'ом пихать управления несколькими модуляторами? или одного будет достаточно?

Аватара пользователя
BSVi
Адепт
Сообщения: 3576
Откуда: Киев

Сообщение BSVi » 27 дек 2011, 12:38

Добавил в начало темы список того, что осталось сделать viewtopic.php?f=27&t=66&p=509#p509
Список получился весьма внушительным, хотя и написан весьма высокоуровнево.

Аватара пользователя
BSVi
Адепт
Сообщения: 3576
Откуда: Киев

Сообщение BSVi » 27 дек 2011, 22:56

Написал драйвер выходного сигнала. Это было прям мегаэпично. Штука вроде простая - должна выдавать сигнал наружу при соблюдении некоторых ограничений (не превышать частоту повторения импульсов и их ширину, даже если сверху сказали, что "нада!").

Проблема осложняется тем, что в процессоре только 4 юзабельных таймера. Одни из них рулит операционкой, второй - дисплеем, третий должен выдавать точные импульсы. На что-то осталось положить обязанности формирования двух модуляторов, тактовых сигналов для миди, начало преобразования АЦП и управление DMA. Ситуация омрачняется тем, что таймера 16битные и одновременно формировать интервал в 3 секунды с точностью в 1мкс не получится. Тоесть, я пишу

Код: Выделить всё

    output.SetMinBBT(50000);    // BBT = Bang to Bang Time
    output.SetMaxPulseWidth(300);
    output.SetMode(Output::Random);
    output.Bang(100);
    output.Bang(100);
    output.Bang(100);


Из последних строчек сработает только одна, верхняя.
Осталась проблема с формированием нескольких модуляторов, так как занимать дополнительные таймера не хотелось. В итоге я сочинил мега-монстра, который таки делал тройную модуляцию на одном таймере. Но у него был неустранимый баг, который мне очень не понравился. В итоге, я все это дело вырезал и сделал относительно простой Output плюс сделал один разделяемый между задачами таймер, который и будет заниматься всем подряд.

Кроме Bang, драйвер может и просто выдавать постоянный модулированный сигнал, который нужен, к примеру, для MIDI.

Оптика работает хорошо, но есть пульсации по шине 5в когда срабатывает передатчик (он потребляет 30мА). Нужно немного пошаманить с питанием.

Аватара пользователя
BSVi
Адепт
Сообщения: 3576
Откуда: Киев

Сообщение BSVi » 28 дек 2011, 15:48

В процессе разбирательство с преобразователями появилось сразу несколько "пичалек".

Первая - классическая. LD1117 заводится с керамическими конденсаторами. Так как под тантал места нету, придется ставить TLV1117 - это техасовская реализация, в даташите написано, что она с керамикой хорошо дружит.

Вторая - оба повышающих стабилизатора работают пачками. Естественно, эти пачки пролезают всюду. Вот, к примеру, AVCC:
avcc.gif
avcc.gif (5.6 КБ) 40040 просмотров


В принципе, 20мВ не так уж и страшно (да и на выходе фильтра стоит всего 0.1мкф, можно еще прилепить), но не приятно. Застабилизировать это дело "в ручную" не получается, потому как пина для компенсации ОС в NCP1400A нету. Индуктивности увеличивать не получится - у прерывателя большой динамически диапазон по потреблению 1:100. Мешают эти пачки или нет, я узнаю только после того, как напишу аудио-часть.

Аватара пользователя
Intra
Сообщения: 95
Откуда: Волгоград

Сообщение Intra » 28 дек 2011, 16:36

Миди полифонию можно попробовать реализовать примерно таким образом:
На порт миди-ин приходит сигнал и попадает в очередь "миди событий". из очереди берётся нота, к примеру из септаккорда, которая пришла первая и попадает в один из четырёх "блоков обработки". если сигнал нот офф первой ноты ещё не пришёл, а уже пришёл сигнал нот он для второй ноты, то вход к первому блоку обработки блокируется и нота идёт в ближайший по порядку пустой блок обработки. когда сработал нот офф первой ноты, в блок 1 поступает сигнал об освобождении блока и туда может следовать другая нота. таким образом можно разделить обработку нескольких нот идущих из одного миди канала или аккордов идущих из разных каналов, в зависимости от режима работы. в блоке обработки формула! определяет частоту этой ноты. нельзя использовать 88 константный массив, потому что получается хроматическая хуита. для реализации питчбенда нужно либо сделать общий массив констант на 88 нот с промежутками в 100 центов(переменных) между каждыми полутонами, но тогда получается массив из ахахахаха 8200 констант, либо формула определяет хроматическую принадлежность, а внутри цикла другой цикл определяет скользящую принадлежность частоты к определённому месту между полутоном. лучше не отходить от равномерно-темперированного строя и делать циклы по формулам расчёта частот равномерно-темперированного строя из википедии. далее после определения частоты блок должен определить рабочее время в микросекундах для этой ноты. за рабочим временем можно обращаться к другому блоку. например блоку длительности импульса, значение которого можно менять в цифровом виде кнопочками + и - соответственно. причём можно с этим поковырятся и выставить работу с кнопками так, чтобы по нажатию меньше секунды длительность импульса менялась на 1 мкс. а если зажать больше секунды значение могло быстро поползти вверх или вниз, но не так быстро, чтобы вообще, а с дилеем внутри цикла, конечно же, чтобы не заёбывать кнопки, если нужно поменять значение длительности в большом диапазоне. после того, как блок обработки первой ноты с определённой частотой поступившей к нему на обработку ноты получил запрошенное значение длительности импульса, то имея частоту и длительность он посылает на выход блока обработки сигнал нужной формы, который можно сразу выводить на выводной порт номер 1 или не сразу, в зависимости от наличия или отсутствия блока режимов. то же самое с остальными, ну например тремя нотами. и после чего сигналы, вышедшие из мк суммируются трёмя сумматорами. сначала сигнал 1 и 2 суммируются и получается сигнал номер 5. потом сигналы 3 и 4 суммируются и получается сигнал номер 6 а потом сигналы 5 и 6 суммируются и сигнал номер 7 идёт на трансмиттер, или сигналы суммируются внутри мк в блоке суммирования, а выводные порты идут на 4 разных трансмиттера. из кнопочек нужны только кнопочки регулировки длительности импульса. имея дисплей можно конечно организовать ещё много всяких удобных режимов, вроде: разделение низких и высоких звуков на правый и левый трансмиттер(в смысле первый и второй, если тесел две), 1,2,4 разных миди канала в 1,2,4 разных теслы, один миди канал во все 1, 2, 4 теслы, каждая из четырех тесел играет по одной ноте от, например септаккорда и если нот две, то только две теслы играют а две молчат, "фленджер"(один миди канал на вход и по уровню скорости фленджера начинать можно от: каждая следующая нота идет по очереди на одну из тесел, если их две-четыре, до пять секунд мелодию играет только одна тесла, через пять секунд другая и так по очереди от 2 до 4 тесел), DMX имхо лишняя вещь. дрка должна иметь свой управляющий тракт и подстраивать всё под целую систему различных дмксов пятое колесо, имхо. аудио прерыватель это отдельная тема. обычно, его нет смысла реализовывать на микроконтроллере. связка фильтра низких частот, компаратора и таймера легко решают эту задачу. другое дело, к примеру, реализовать аудио прерыватель как на видео у Стива Коннера - амплитуда звукового сигнала контролирует длительность импульса от и до определённого порога, тогда в нашу шумящую машину смерти добавляется прелюбезнейшая фича - громкость.. относительная, конечно, но всё же Громкость.. я думаю, такая штука реализовывается либо как то на 555, либо всё таки на мк, где берется длительность импульса от нуля до хз-микросекунд, и программно уравнивается с выходным сигналом какой нибудь пидольки. тогда максимум вольт пидольки это почти максимальная длительность импульса дрки для конкретного максимального уровня звуковой частоты, а всё остальное преобразуется посредством градиента вниз до конкретно минимального уровня звуковой частоты. не знаю, возможно ли это реализовать на STM, хватит ли памяти или можно попробовать atxmega256.. но я бы не пожалел и 100 баксов за мк, если в нём будут исправно работать вышеописанные фичи. без 4-нотной полифонии и питч-бенда, дрка полностью лишена незабываемого биения частот консонансных и диссонансных интервалов. предлагаю этот алгоритм на рассмотрение, поскольку сам программировал только детские задачки на паскале, когда учился в тёхникуме, и потому не знаю С++ и Ассемблер, на котором можно было бы все это реализовать. чтобы избежать помех от теслы на чипе дисплея, а также на самом мк можно попробовать засунуть все в алюминиевый корпус и оставить дырку только под стеклянный экран. USB порт следует упразднить. для прерывателя лучше всего использовать только входящий миди порт со стандартной оптопарной развязкой внутри. так же упразднить внутреннюю память для миди файлов. лучше играть все мелодии либо с компа с какого нибудь фрутилупса в реальном времени, либо с синтезатора в реальном времени, либо с гитары в реальном времени. ковыряться с закачкой мелодий это геморрой.

Аватара пользователя
Intra
Сообщения: 95
Откуда: Волгоград

Сообщение Intra » 28 дек 2011, 16:56

или если сумматор\сумматоры не подходят, то можно организовать блок в который поступают 4 разных значения о единице и нуле сигнала, а в этом блоке выстраивается общее значение этих единиц и нулей, чтобы исключить пересечение импульсов из разных блоков исключением одного из двух. таким образом можно избежать и сложения амплитуд и элементарной звуковой каши, если таковая будет на выходе.


Аватара пользователя
BSVi
Адепт
Сообщения: 3576
Откуда: Киев

Сообщение BSVi » 28 дек 2011, 17:18

Ух, какая простыня.

На порт миди-ин приходит сигнал и попадает в очередь "миди событий".

Дак, как буффер реализовать я и сам прекрасно понимаю. Другое дело, что у ДРки есть ограничение по частоте следования импульсов. И тут вот какая беда получается. К примеру, звучат две ноты. Сигнал с прерывателя должен выглядеть вот так:
dual.gif
dual.gif (7.72 КБ) 40252 просмотра

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

определяет частоту этой ноты. нельзя использовать 88 константный массив, потому что получается хроматическая хуита. для реализации питчбенда

А про питчбэнд я то и забыл. Похоже, это будет отдельный гемморой :)

далее после определения частоты блок должен определить рабочее время в микросекундах для этой ноты. за рабочим временем можно обращаться к другому блоку. например блоку длительности импульса

Да, примерно так я это себе и представлял.

вроде: разделение низких и высоких звуков на правый и левый трансмиттер(в смысле первый и второй, если тесел две

Это черезчур, если хочется играть файл на нескольких теслах, то файл нужно будет подготовить в любом миди-редакторе. Делать миди-редактор в прерывателе-это слишком жирно.

DMX имхо лишняя вещь. дрка должна иметь свой управляющий тракт и подстраивать всё под целую систему различных дмксов пятое колесо

Да нет, DMX - стандарт для специэффектов. Вообще, тесла больше под DMX подходит. чем под MIDI. По крайней мере, концертчики у меня просили именно DMX.

аудио прерыватель это отдельная тема. обычно, его нет смысла реализовывать на микроконтроллере. связка фильтра низких частот, компаратора и таймера легко решают эту задачу.

А вот и нет. Такая связка не может гарантировать того, что не будет превышена частота испульсов, и реагировать на огибающую сменой заполнения. Если это все на аналоге сделать,п олучится здоровый монстр, которого можно лицезрать в первом посте в разделе "конкуренты".

возможно ли это реализовать на STM, хватит ли памяти или можно попробовать atxmega256..

Скорее, наоборот :)

без 4-нотной полифонии и питч-бенда, дрка полностью лишена незабываемого биения частот консонансных и диссонансных интервалов.

Дак ничего не мешает поставить две ДРки :)

чтобы избежать помех от теслы на чипе дисплея, а также на самом мк можно попробовать засунуть все в алюминиевый корпус и оставить дырку только под стеклянный экран.

Про это я уже рассказывал. От металлического корпуса будет биться :) Только пластик, возможно с экраном.

USB порт следует упразднить. для прерывателя лучше всего использовать только входящий миди порт со стандартной оптопарной развязкой внутри. так же упразднить внутреннюю память для миди файлов. лучше играть все мелодии либо с компа с какого нибудь фрутилупса в реальном времени, либо с синтезатора в реальном времени, либо с гитары в реальном времени. ковыряться с закачкой мелодий это геморрой.

Это кому как. Подключенный к компу прерыватель при работающей тесле будет биться. Да еще и неизвестно. будет ли компьютер работать рядом с теслой. У меня, к примеру, отваливается мышка и клава. А так - залил мидишку, в нужный момент нажал кнопку и готово.

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

Я это все видел. У меня планы гораздо круче :)

Аватара пользователя
BSVi
Адепт
Сообщения: 3576
Откуда: Киев

Сообщение BSVi » 29 дек 2011, 01:30

Лоханулся в еще одном месте. Заложил флэшку M25P16. Так как спешил, даташит прочитал не внимательно и не заметил буквы "к" в размере сектора: 512кБит. Подумал, что 512байт, как раз для ФАТа, и впаял в плату.

Теперь пришел час расплаты :) придется заменить ее либо at45db161d, либо m25pe16.

Похоже, использовать буду все таки флэшку от атмела: она хоть и подороже слегка, но быстрее в два раза, я ее уже использовал, и она прямо сейчас валяется под рукой. Еще одно достоинство флэшки от атмела в том, что в линейке с таким-же футпринтом есть еще флэшка на 4МБайта - если не хватит на 2 можно легко поменять, а у Numonyx 2Мбайта - потолок.

Проблема омрачняется еще и тем, что футпринты at45db161d и m25pe16 несовместимы! Руки поотрывать хочется тем кто делает такой-же девайс, но с другим футпринтом.

Аватара пользователя
Intra
Сообщения: 95
Откуда: Волгоград

Сообщение Intra » 29 дек 2011, 16:05

у меня на выходе прерывателя n-микросекунд и это на тесле четыре периода в импульсе, частота вторки 100кгц, это позволяет току вырасти на определённое значение за импульс, и только после ряда импульсов отрастить стример и нагреть транзюки. если увеличить количество периодов в пачке, то за каждый импульс ток будет повышаться на большее количество ампер, где после ряда импульсов увеличит стример на большую длинну, но вместе с этим увеличит и нагрев кристалла. однако. если взять за основу нагрев кристалла, как критическую угрозу, то въёб неизбежно будет только если ряд импульсов полифонического сигнала будет одинаково "fail" для каждого следующего импульса.. перекладывая это на твою картинку я хочу сказать, что на третьем зелёном и синем импульсе ничего не случится, потому что нагрев кристалла от превышения частоты следования импульсов происходит тогда, когда импульсов несколько в ряду. допустим у ноты ля первой октавы их 440 за секунду. первые зелёный и синий импульсы далеко друг от друга, вторые далеко друг от друга, четвёртые далеко друг от друга.. а если так дальше продолжить ряд зелёных и синих, то фейл будет лишь иногда, а не постоянно на каждом следующем импульсе и потому частота следования импульсов если и будет превышаться, то лишь иногда, а не систематически, что не должно вызвать нагрева, а так же перенагрева и въёба.

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

т.е. вот эта
http://www.youtube.com/watch?v=jTVyB4Hfee8
и эта видюшка
http://www.youtube.com/watch?v=N4K6cAyiILs
могла получится только, если прерывателей было несколько, а не один? но мк то там один и прер один. =) опиши последовательное подключение прерывателей. я не могу себе это представить.

аудио прерыватель это отдельная тема. обычно, его нет смысла реализовывать на микроконтроллере. связка фильтра низких частот, компаратора и таймера легко решают эту задачу.
А вот и нет. Такая связка не может гарантировать того, что не будет превышена частота испульсов, и реагировать на огибающую сменой заполнения. Если это все на аналоге сделать, получится здоровый монстр, которого можно лицезрать в первом посте в разделе "конкуренты".

однако, почему тогда тесла работает с advanced modulator? почему ничего не взрывается от превышения частоты следования импульсов?
а так же почему всё нормально работает здесь?
http://www.youtube.com/watch?v=lSAExHBrfwU
http://www.youtube.com/watch?v=83spVawPnQg
ведь там тесла жужжит уже из за одного фона гитары. я полагаю у неё достаточно обертонов, чтобы свести с ума частоту следования импульсов от одной только ноты, не говоря уже об аккордах.


без 4-нотной полифонии и питч-бенда, дрка полностью лишена незабываемого биения частот консонансных и диссонансных интервалов.
Дак ничего не мешает поставить две ДРки :)

нет.. ну это понятно.. но не заморачиваться же с шестью монофоническими дрками, чтобы сыграть баха? =\
http://www.youtube.com/watch?v=VOXygoQkXsQ
имхо, лучше поставить две дрки с трёх-четрыёхнотной полифонией.

Аватара пользователя
BSVi
Адепт
Сообщения: 3576
Откуда: Киев

Сообщение BSVi » 29 дек 2011, 16:36

то фейл будет лишь иногда, а не постоянно на каждом следующем импульсе и потому частота следования импульсов если и будет превышаться, то лишь иногда, а не систематически, что не должно вызвать нагрева, а так же перенагрева и въёба.

Проблема в том, что просчитать эту "систематичность" не так то и просто. Вот три подряд это уже въеб? а четрые? а если они склеятся в один, так, что накачка будет не 100мкс, а 400? Последний случай. конечно. погасит ограничитель тока но всеравно, не хорошо.


Спасибо за видушки, годные.

могла получится только, если прерывателей было несколько, а не один?

Нет. конечно, прерыватель там один. Ты неверное немного не понял. Вот что я пердлагал: Если хочется полифонию на нескольких теслах, то у прерывателя есть как вход для миди, так и выход. На выход он пропускает миди поток, который потом может подхватывать следующий прерыватель и воспроизводить его на другой тесле. Теслы получаются монофоническими, но работают синхронно несколько штук.

Еще раз повторюсь - реализовать полифонию совсем не сложно, проблема в том, что полифония может привести к въебу в зависимости от того, что играют на прерывателе. Естественно, при достаточной дубовости теслы можно и "насиловать" ее, но в среднем по палате это - плохо. Возможно, дабы угодить всем, сделаю пункт в меню "разрешить полифонию".

однако, почему тогда тесла работает с advanced modulator? почему ничего не взрывается от превышения частоты следования импульсов?

Потому, что там все это сделано. Ты видал конструкцию этого модулятора? Там же мильен микросхем.

нет.. ну это понятно.. но не заморачиваться же с шестью монофоническими дрками, чтобы сыграть баха? =\ имхо, лучше поставить две дрки с трёх-четрыёхнотной полифонией.

Ну, с тем-же успехом можно сказать, что не заморачиваться-же с шестью флейтами, чтобы сыграть баха...

Вернуться в «Наши проекты»



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 23 гостя