Автор Тема: Цифровое аудио своими руками (интерфейсы, эффекты, процы и подобное).  (Прочитано 15988 раз)

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

Оффлайн Tander Автор темы

  • Ветеран форума
  • ******
  • Сообщений: 3731
  • Репутация: +475/-0
    • Efremoff
По иронии судьбы мну каждый день дружит с мягко говоря весьма серьезным программистом, который в свою очередь ежедневно дружит с ацкой кодлой программистов всевозможных уровней   :D, А где приобрести подобный программатор?

Я вот таким пользуюсь. https://a.aliexpress.com/_mLQgRlR
Только его прошить сначала нужно специальной прошивкой, чтобы он стал работать как оригинальное USBi. Если нужна будет прошивка под него это - дай знать.

... и добавил:

А программистам там делать нечего от слова совсем. :)
« Последнее редактирование: Мая 08, 2021, 22:44:49 от Tander »

Оффлайн Tander Автор темы

  • Ветеран форума
  • ******
  • Сообщений: 3731
  • Репутация: +475/-0
    • Efremoff
Забавный прототип. ))
Эмулятор кабинета и колонки на готовых модулях, под управлением ардуины про мини 3.3В.

2385057-0

В проекте, кроме стандартной платки DSPmini китайской, Я взял то, что было у меня в наличии и долгое время лежало без дела - ардуина про мини 3.3в (8мгц), экран от нокии 5110, два стандартных модуля энкодера KY-040, кард-ридер pololu 2597 (просто SPI микро-сд ридер, на 3.3в).

К этому добавлен дополнительный стабилизатор 7805, чтобы можно было использовать обычные блоки питания от педалей, и аналоговая часть - два буфера на одном сдвоенном ОУ.

Как обычно для прототипа не обошлось без косяков - пару ног энкодера я привел на A6 и А7 ардуины, а их можно только для аналога использовать, пришлось "проводками" перекидывать. ОУ развел "в зеркале" - в результате пришлось выгибать ему ножки на другую сторону и ставить его "мордой вниз". Так что плату еще дорабатываю. И в стандартный мелкий корпус ну никак не влазит все пока-что... (не влазит разъем для джека по правой стороне). Так что скорее всего либо попрбовать меньший дисплей и по i2c (какой нить OLED, как на Пангеях), либо Gainta 0473. :)  Хотя может влезет, если я откушу максимально ноги у модуля ADAU и впаяю его в плату, но этого бы не хотелось, по крайней мере на прототипе, т.к. я часто вытаскиваю его для каких-то изменений прошивки и тп. )

Функциональность над которой я щас работаю.

1. Управление ADAU по i2c из ардуины, а конкретно:
  • Изменение громкости усилителя
  • Изменение громкости кабинета (импульса)
  • Изменение громкости кабинета (импульса)
  • Включение/Выключение усилителя
  • Включение/Выключение кабинета (импульса)
  • Выбор усилителя из доступных 4 моделей
  • Выбор импульса из карты памяти, либо двух стандартных доступных

Управлять устройством достаточно просто - т.к. у нас всего две крутилко-кнопки. Но при этом удалось повесить на них аж 6 функций. ))
 
Один энкодер регулует громкость усилителя, и включает-выключает его, второй энкодер - тоже самое делает с кабинетом.
А вот выбор усилителя/кабинета будет работать чуток по другому - если мы нажмем и будем держать кнопку, отвечающую за включение усилителя - то второй крутилкой мы сможем пролистывать список доступных усилителей.

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

За счет того, что я взял Arduino Pro Mini - то объем программы равно как и объем доступных байт для хранения дефолтных импульсов - мало. возможно я попробую перейти на какой-то мелкий ARM, хотя они в большинстве своем ощутимо дороже. Либо попрбовать перейти на Raspberry Pi Pico - она компактная и совсем недорогая, но пока что RPi обычная и зеро - у меня совсем не хочет видеть процессор ADAU через i2c.... В общем - пока работаю над этим. А на задачи простой педали на готовых модулях - вроде должно хватить и мини-Ардуинки. ))

Оффлайн akl

  • Живу на форуме
  • *******
  • Сообщений: 8114
  • Репутация: +2265/-69
  • не шарю ваще
нужно больше фоток со всех сторон :stick-punch:

а как импульсы меняются? ардуина их берет с карты памяти и записывает в еепром адау?
а дефолтные импульсы во флеше у ардуины хранятся?

Оффлайн Tander Автор темы

  • Ветеран форума
  • ******
  • Сообщений: 3731
  • Репутация: +475/-0
    • Efremoff
Дефолтные импульсы хранятся во флеше микроконтроллера (пока что - Ардуины, если влезут). И записываются сразу в адау, при включении. А пользовательские - да, берутся с карты, но не пишутся в еепром, а так же загружаются сразу в проц. С еепромом мы не работаем особо, он достаточно медленный (i2c) - и требует наличие джампера на плате. И чтобы адау подтянула данные из еепром - ее нужно перегрузить...

Фотки пока еще рано со всех сторон.... Не факт что ардуина останется в проекте, т.к. ее 32кб флеши и 2кб рама - это как-то оч.мало.... Поэтому большая часть производителей совмещает адау с стм32. У меня стм-ки только большие платы щас под рукой есть, и интегрировать с ними как-то не хочется. Попробую на днях попробовать соединить с RaspberryPi Pico - компактная плата, с достаточно мощным АРМ-ом на борту.

... и добавил:

В общем - ардуины не хватает, от слова совсем...

Встал вопрос с недорогим ARM-контроллером. STM32 сейчас сильно подорожали, а покупать китайские CH32 и прочий непонятный стафф - как то не хочется. Как уже писал выше - лежит без дела RaspberryPi Pico - стоит она от 4 евро, имеет вполне неплохие параметры - 133мгц, 2Мб флеша, 264кб SRAM'а. ARM Cortex M0+   

Минус - она побольше, чем Arduino pro mini. Аж 51 x 21 мм... Ну придется чот думать, чтобы все уместить в 0124 гаинту. ))

Подключил. Стабильно определяется по i2c и проц и еепром. Используя стандартные библиотеки MicroPython - смог передать значения в регистры (включение-выключение кабинета, включение-выключение эмуляции усилителя, покрутил громкость и прочее). Так что 99% проект переедет на RPi Pico.
Ну и она вроде умеет все что нужно - включая чтение карт памяти, работу с экраном и прочее... 
« Последнее редактирование: Мая 29, 2021, 00:17:57 от Tander »

Оффлайн akl

  • Живу на форуме
  • *******
  • Сообщений: 8114
  • Репутация: +2265/-69
  • не шарю ваще
если целое разбери туда сувать, то по хорошему надо еще каких-нибудь реверов-дилеев-хорусов понапихать чтоб был проц так проц :hitrez:

Оффлайн halvalife

  • Опытный
  • ****
  • Сообщений: 890
  • Репутация: +42/-3
Силами ADAU можно реализовать эфект Whammy?

Оффлайн Tander Автор темы

  • Ветеран форума
  • ******
  • Сообщений: 3731
  • Репутация: +475/-0
    • Efremoff
если целое разбери туда сувать, то по хорошему надо еще каких-нибудь реверов-дилеев-хорусов понапихать чтоб был проц так проц :hitrez:
Я не пихаю туда целое распберри. )) я ставлю туда микроконтроллер (a не микрокомпьютер), подобный STM32, только от распберри. RP2040))

... и добавил:

Силами ADAU можно реализовать эфект Whammy?
Думаю что да, но я не пробовал. Там есть какой-то питч-шифтинг, и его можно в реалтайме "крутить". Но - я никогда его не ковырял еще если честно.

Оффлайн Tander Автор темы

  • Ветеран форума
  • ******
  • Сообщений: 3731
  • Репутация: +475/-0
    • Efremoff
В общем - сделал первый работающий девайс. ))

В базе - готовый модуль ADAU1401 (DSPmini), Raspberry Pi Pico (32битный микроконтроллер), микро-сд кард ридер и пара энкодеров, пока без экрана (все еще едет...) На тестовый образец взял готовые модули энкодеров и... корпус не закрылся. )) Сильно высоко все получилось, поэтому на вторую версию я выпаял энкодеры из модулей и развел их на новой плате.

Отыграл на данном приборе пару мероприятий, и что я могу сказать? В целом работает.
По функционалу:
1. Эмуляция усилителя с небольшим подгрузом (Я как басист - взял ампег свт4про как основу, дальше крутил ее уже по своему вкусу). Усилитель можно включить/выключить и регулировать громкость. Причем громкость стоит перед ограничителем - т.е. на меньшей громкости - подгруза меньше, на большей громкости - подгруза больше. канал усилителя разделен на 2 независимые ветки частотно - все что ниже 800гц - проходит без ограничения/подгруза, все что выше 800гц - идет через дополнительные модули ограничения. Т.е. на выходе у нас и низ сочный и не пердящий, и поджатый, насыщенный весь остальной спектр. Такого плана подгруз сигнала очень добавляет читаемости в миксе.
2. Эмуляция кабинета. Кабинет тоже можно включить-выключить и регулировать его громкость, независимо от громкости усилителя. Что помогает значительно варьировать окраску звука, при этом подбирая адекватную громкость.
3. Буфер на ОУ по входу. на случай если захочу подключить пассивный бас или гитару.
4. Симметричный выход, реализованный с помощью процессора, что облегчает подключение на площадке ("Вы мне просто XLR дайте, а дальше я сам").
5. Загрузка импульса из карты памяти. Пока нет экрана - я просто держу один файлик на карте памяти, который читает микроконтроллер и передает его в понятном формате для адау, при подаче питания.

Плюсы:
1. У 1401 достаточно мощные аудио выходы, и вполне адекватное соотношение сигнал/шум. Я не заметил каких-либо существенных шумов, которые бы мешали использованию устройства.
2. При выключенных "усилителе" и "кабинете" - у нас по сути - активный дибокс.
3. Возможность быстро подменить импульсы, не прибегая к помощи компьютера. Даже при отсутсвии экрана - я просто кидаю один импульс на карту памяти - и его передает в адау микроконтроллер.
4. Использование готовых модулей упрощает повторение прибора. ))
5. Микроконтроллер (raspberry pi pico) который умеет работать и в C и в Python - отличная штука.

Минусы:
1. Ресурсов в 1401 маловато. При более-менее нормальной эмуляции усилителя - у меня на кабинет остается около 680 сэмплов, что сказывается на низких частотах. Они менее "кабинетные", если можно так сказать, а более ровные, без выраженной ачх. Вариантов решения тут 2:
  • Перейти на более старший процессор типа ADAU1452/1467 - там можно уже делать очень сложные штуки и практически не переживать по поводу ресурсов доступных. Минусы - процессор дороже ощутимо, плюс он не имеет своих конвертеров как 1401 - т.е. нужно еще докупить конверторы/кодеки для аналогового сигнала.
  • Поставить второй 1401 и соеденить их последовательно по цифре (i2s). И пусть "первая" адау - занимается эмуляцией усилителя, а "вторая" - занимается кабинетом. Тогда можно увеличить длинну IR до 1024 сэмплов (как минимум, надо будет проверить). При этом ими будет управлять один контроллер, по цене - тоже достаточно адекватно выходит. Минус в том, что это 2 независимых девайса, для которых нужно приготовить 2 проекта, ну и готовые модули в таком случае - отпадают из-за габаритов. Нужно делать плату с двумя адау на борту, что усложняет повторение.
2. Готовые модули - они увеличивают габариты конструкции в целом. От энкодеров пришлось отказаться сразу же - т.к. они добавляют около 10мм высоты, и гаинта даже увеличенная BS13 - просто не закроется (и гнездо XLR упирается в плату и не влазит...). Так же пришлось исползовать низкие "голд-пины" для остальных модулей - просто чтобы все влезло по высоте.... При использовании 473 гаинты - уже можно больше развернутся конечно, но энкодеры все равно придется ставить не модулем готовым, а разводить на плате его с 3мя резисторами подтяжки (хотя... в мк можно включить внутренние резисторы подтяжки... но я не пробовал если честно).


Итого:

Прототип пока продолжу на одной адау - нужно дождаться дисплей, подключить его и организовать простенький UI, чтобы было можно те же импульсы из списка на лету выбирать и вообще. Для того чтобы мне играть живьем - этого будет достаточно. низ пусть правит звукореж на пульте, если нужно. ))) Так же думаю добавить переключалку, которая будет полностью выключать подгруз оконечника. Мало ли - если захочется совсем чистый-чистый, но с небольшой коррекцией по АЧХ - это может быть полезным.

Ну и надо попробовать развести платку на 2 адау - посмотреть насколько усложнится все.  :)
Так же в планах попробовать заменить микроконтроллер на ESP32 в версии "мини" - сам Core-модуль, который можно просто впаять на плату.

Если кому интересно - могу скинуть рабочую плату, актуальной на данный момент версии с двумя разными кард-ридерами, а так же проект для SigmaStudio и скриптик для RPi Pico на питоне, который умеет общаться с адау.

Фоток пока смысла выкладывать нету - т.к. девайс выглядит щас просто как корпус с двумя крутилками/кнопками и входом и выходом. Приедет дисплей, сделаю UI - тогда можно будет как-то оформить это в полноценный девайс.


« Последнее редактирование: Июня 23, 2021, 15:08:46 от Tander »

Оффлайн DGray

  • Эксперт
  • *****
  • Сообщений: 1576
  • Репутация: +306/-29
  • Зарегистрированный
    • http://

Оффлайн Tander Автор темы

  • Ветеран форума
  • ******
  • Сообщений: 3731
  • Репутация: +475/-0
    • Efremoff
« Последнее редактирование: Июня 23, 2021, 23:39:58 от Tander »

Оффлайн Tander Автор темы

  • Ветеран форума
  • ******
  • Сообщений: 3731
  • Репутация: +475/-0
    • Efremoff
Вопрос к знающим. Сижу вот ваяю себе платку с двумя адау1701/1401, и возник вопрос по еепрому.... У нас при SelfBoot адау загружает данные с еепрома. еепром подключен по i2c к адау. На форме AD - пишут что я не могу использовать разные разделы памяти еепрома для двух адау, т.к. у них хардкодно зашито, с какого адреса они читают... И казалось бы - простое решение - взять просто 2 еепрома, для каждой адау... Только они подключаются по i2c - т.е. шина у обоих eepromов - общая.... Как какая адау будет знать, из какого из двух еепромов ей читать данные? Кто-то сталкивался с решением данного вопроса?

... и добавил:

Короче - никак. в ADAU жестко прописан адрес еепрома, из которого читает она, и его нельзя изменить. Так же как нельзя изменить адрес в еепроме, из которого читает адау. (всегда читает "с начала").
Соответсвенно есть печаль по поводу реализации двух адау на одной плате. Единственным на сегодняшний день решением, которое мне пришло в голову, за счет того, что я использую микроконтроллер - это использовать 1 еепром, и при старте прибора - микроконтроллер закидывает в еепром прошивку для первого проца, "включает" первый проц (отпускает ему ногу RESET), но продолжает держать выключенным второй. Первый проц читает прошивку, после удачного прочтения еепрома загружается и сообщает об этом микроконтроллеру (например поднимает свою GPIO ногу, на выбор), после чего микроконтроллер записывает в еепром прошивку для второго адау - и "включает" второй проц. Второй проц загружает прошивку "свою" и стартует. Все.

Минусы - время записи в еепром - если МК будет писать в еепром с той же скоростью что и на компе из сигма-студии - то это секунд 10-12 на все про все... Ну и лет через 10 таких перезаписей еепром устанет очень. )) Ну и дополнительная работа в виде написания функций для вышеописанного алогритма.  :)
« Последнее редактирование: Июня 29, 2021, 12:41:02 от Tander »

Оффлайн akl

  • Живу на форуме
  • *******
  • Сообщений: 8114
  • Репутация: +2265/-69
  • не шарю ваще
. Только они подключаются по i2c - т.е. шина у обоих eepromов - общая....
немного не понял, а зачем им сидеть на общей шине? запилить каждому по отдельной шине.

... и добавил:

Единственным на сегодняшний день решением, которое мне пришло в голову, за счет того, что я использую микроконтроллер - это использовать 1 еепром, и при старте прибора - микроконтроллер закидывает в еепром прошивку для первого проца, "включает" первый проц (отпускает ему ногу RESET), но продолжает держать выключенным второй. Первый проц читает прошивку, после удачного прочтения еепрома загружается и сообщает об этом микроконтроллеру (например поднимает свою GPIO ногу, на выбор), после чего микроконтроллер записывает в еепром прошивку для второго адау - и "включает" второй проц. Второй проц загружает прошивку "свою" и стартует. Все.
можно сделать так же, но с двумя еепромами и без записи в них прошивки на ходу - так же вместе с процами включать-выключать еепромы. не знаю есть ли там нога вроде енаблед - можно например дергать одну из ног задания адреса, тогда нужная еепромка не будет реагировать на запросы проца
« Последнее редактирование: Июля 06, 2021, 11:24:02 от akl »

Оффлайн Tander Автор темы

  • Ветеран форума
  • ******
  • Сообщений: 3731
  • Репутация: +475/-0
    • Efremoff
Можно на уровне микроконтроллера разделить их на разные шины, это да, я уже думал об этом. Но пока что - мне на днях приехали ESP32, оледы мелкие и прочие разности - я вот щас думаю о том, какую платформу все же оставить как основную для мини-девайса. Т.к. Raspberry Pi Pico - очень неплохо, но ESP32 и помощнее, и ресурсов поболее, и если брать только сам модуль без дополнительной обвязки - очень компактно (в 2 раза меньше, чем Rapsberry pi Pico) и впаивать их просто в "главную плату" девайса. А программировать - использовать либо внешний программатор предназначенный именно для ESP32, либо вывести на главной плате ноги для UART'a и менять прошивку через USB-TTL свисток какой-то. )

В общем все очень динамично меняется и развивается. Я нарисовал платы для одной адау пока что - но более компактные, чем стандартные miniDSP c али - 35x30mm - заказал на фабрике местной пару плат по знакомству - попробую распаять и запустить. Ну и в свободное время рисую плату для двух адау на одной плате. )

... и добавил:

Кстати - кому интересно - нашел еще вот такую штуку на ESP32.

https://www.deeptronic.com/blackstomp/


Оффлайн Tander Автор темы

  • Ветеран форума
  • ******
  • Сообщений: 3731
  • Репутация: +475/-0
    • Efremoff
Кстати, обратил внимание, что большая часть тем о "IR-кабсимах" у нас на форуме заглохла без какого либо конкретного окончания/проекта. Либо людям это не нужно, либо - не хватает умений-знаний для завершения, либо - просто заканчивают проект, но переводят его в коммерческий.
 
И вот я задумался - а все же наверное хорошо бы иметь проект открытый для повторения, и может кому-то это все же и будет интересно.
Я вот уже почти месяц регулярно на большой сцене играю на своем прототипе, но останавливаться на этом не собираюсь... ))

И давайте выберем - для "открытого" и повторяемого простого проекта амп-каб сима - что лучше выбрать в качестве управляющего микроконтроллера? ESP32 или Raspberry Pi Pico? С одной стороны ESP32 немного дешевле, и более доступна. С другой стороны - я практически на 100% уверен, что через год-два RPi Pico будет все так же продаваться скорее всего (может в более новой, более мощной версии, но с такой же распиновкой и способом работы), а вот ESP32 значительно изменились за последнюю пару лет, и кто знает, как оно будет дальше. ))

Второй вопрос - какой язык приложения был бы предпочтительный? для выбора - С (Arduino IDE) или Python (любой текстовый редактор).


Я последние пару дней достаточно активно сижу с ESP32 и в целом - гаджет очень и очень достойный. Я перешил его на работу с Python, адаптировал библиотеку для экрана (родная достаточно бедная была) и в общем-то все что нужно для простого управления парой эффектов на мелкой адау - все хватает. Только обратил внимание, что когда ESP32 запрограммирована в С - то запуск всего и вся происходит очень быстро, а вот питон - пока прогрузит библиотеки и прочие мелочи - пройдет пара секунд - хотя может дело просто в оптимизации кода моего. ) И вото после этого думаю - заморачиваться ли дальше в работе с Python на ESP32 или же перевести все в C и продолжать проект уже в С с использованием IDE от ардуины... (для меня плюсом Python является более простой синтаксис, плюс - если я когда-то захочу реализовать на ESP32 веб-сервер полноценный с управлением прибором через браузер (в телефоне, на компе и тп) - то на Python это гораздо проще сделать, чем на С). И - важное замечание - на ESP32 имеется шина I2S - для работы с цифровым аудио - можно например тюнер запилить прям на ESP32 (на адау это достаточно сложно) или какой-то еще дополнительный простенький эффект. ))

Может создать отдельную тему, с опросом, и дальнейшним обсуждением, дать на нее тут ссылку, а эту тему оставить как общие наработки по теме "цифры"? А то как-то она "мыслями" зарастать начинает с разных областей... ))
« Последнее редактирование: Июля 08, 2021, 10:30:55 от Tander »

Оффлайн akl

  • Живу на форуме
  • *******
  • Сообщений: 8114
  • Репутация: +2265/-69
  • не шарю ваще
ESP32 или Raspberry Pi Pico?
а нужна ли там вообще такая мощщь и жирнота? в обычную маленькую ардуину разве не впихнётся?
в крайнем случае экран можно упростить