Считать-то можно, только смысл? Исходник из неё всё равно не получить. Проще с нуля написать.
Считать-то можно, только смысл? Исходник из неё всё равно не получить. Проще с нуля написать.
Проверил. ADAU1701 в режиме selfboot команды принимает.
В сигмастудии в окне "Capture" смотрим столбцы "Address" и "Data". Одной посылкой шлём по I2C первым байтом адрес ADAU и бит R/W (стандартно для интерфейса I2C, адрес ADAU смотрим в даташите), затем адрес ячейки памяти 2-мя байтами (старшим байтом вперед), а затем данные 4-мя (тоже старшим байтом вперед). В одной посылке данные можно слать и дальше без указания адреса, он инкрементируется автоматически.
Пока сделал минимальный проект, только вход, выход и регулятор громкости, но суть, в общем, понятна.
Последний раз редактировалось Alexey-Rus.; 24.02.2020 в 20:15.
Offтопик:
Ардуина да релюхи - наше всё, накрайняк ставится каскад 74HC595 усиленный mpsa42 если высоковольтное.
Я бы понял тяжелый случай с использованием одного канала АДАУ для динамической подстройки внешнего мастерклока, но увы и ах, чем морочиться с битперфектом девелоперам проще сделать накристальный интерполятор.
Есть ЧипДип плата на ADAU1701, решил начать с более бюджетного DSP процессора. Строю многополосную акустическую систему на 8 каналов. Можно ли с помощью библиотеки SigmaDSP для arduino, на гитхабе и Arduino с подключенными переключателями на входы, загружать разные конфигурации(пресеты) с EEPROM? В зависимости от положения переключателя, грузится соответствующий проект из своей области памяти, и соответственно сохраняется проект из SigmaStudio в свою область памяти. Например, есть комплект колонок -саб, фронт 2 полосы, центр 2 полосы- одно положение, стерео трехполоска другое положение, и т.д. Чтобы не подключаться каждый раз и не грузить проект с ПК, а вывести DIP переключатели с снаружи корпуса усилителя. Как можно реализовать данную задачу?
Фильтры(кроссоверы) очень много памяти программ жрут. 8 каналов на 1701, только если 48 кГц проект. Насчет нескольких конфигураций, для 1452 вроде что-то есть такое (variant editor).
Да, такая возможность имеется, но для этого не обязательно перезаливать проекты, достаточно одного проекта, просто с переключателями, а уже с помощью arduino их переключать.
Вот пример такого проекта:
То есть с помощью arduino и SigmaDSP библиотеки из гитхаба вы можете переключать выделенные красным элементы проекта:
Для управления узлами Nx2-1,Nx2-1_2 и Mute1 из Adruino нужно немного модифицировать библиотеку:
1. В файле SigmaDSP.h нужно добавить выделенную жирным строчку:
Скрытый текст
void volume_slew(uint16_t memoryAddress, float dB, uint8_t slew = 12);
void input_slew(uint16_t memoryAddress, int iputIndex);
void mute(uint16_t memoryAddress, int muteStatus);
[свернуть]
2. В файле SigmaDSP.cpp нужно будет добавить следующие строчки выделенные жирным:
Скрытый текст
/***************************************
Function: volume_slew()
Purpose: Volume control with slew
Inputs: uint16_t startMemoryAddress; DSP memory address
float dB; Volume to set in dB
uint8_t slew; slew rate (optional, default 12)
Returns: None
***************************************/
void SigmaDSP::volume_slew(uint16_t startMemoryAddress, float dB, uint8_t slew)
{
float volume = pow(10, dB / 20); // 10^(dB / 20)
int32_t slewrate = 0x400000 / (1 << (slew - 1)); // 0x400000/2^(slew - 1))
safeload_write(startMemoryAddress, volume, slewrate);
}
/***************************************
Function: index_slew()
Purpose: Switch stereo multiple intup to single stereo output
Inputs: uint16_t startMemoryAddress; DSP memory address
int index; switch input index
Returns: None
***************************************/
void SigmaDSP::input_slew(uint16_t startMemoryAddress, int iputIndex )
{
safeload_write(startMemoryAddress, iputIndex );
}
/***************************************
Function: mute()
Purpose: Mute toggle
Inputs: uint16_t startMemoryAddress; DSP memory address
int index; toggle mute status
Returns: None
***************************************/
void SigmaDSP::mute(uint16_t startMemoryAddress, int muteStatus)
{
safeload_write(startMemoryAddress, muteStatus);
}
[свернуть]
После этого вы можете в Arduino по условия if ... else if ... else менять значения узлов Nx2-1,Nx2-1_2 и Mute1 следующим образом:
Скрытый текст
if (digitalRead(4) == HIGH){
dsp.input_slew( MOD_NX2_1_STEREOSWSLEW_ADDR, 0);
dsp.input_slew( MOD_NX2_1_2_STEREOSWSLEW_ADDR, 0 );
dsp.mute( MOD_MUTE_1_STEREOSWSLEW_ADDR, 1);
} esle {
dsp.input_slew( MOD_NX2_1_STEREOSWSLEW_ADDR, 1);
dsp.input_slew( MOD_NX2_1_2_STEREOSWSLEW_ADDR, 1 );
dsp.mute( MOD_MUTE_1_STEREOSWSLEW_ADDR, 0);
}[свернуть]
Таким образом можно будет контролировать кнопкой, подцепленной к цифровому пину 4 выходы в двух комбинациях. Наращивать комбинаторику, думаю, не составит проблем.
Если в проекте выставите 48kHz, то в DSP Core в разделе Hardware Configuration вам нужно будет выставить 1024 Instructions.
При такой комбинации и такой сложности проекта в output логе будет такая информация:
Скрытый текст
################## Summary ########################
(Note: Estimates are based on a 48 kHz sample rate)
Number of instructions used (out of a possible 1024 ) = 434
Data RAM used (out of a possible 2048 ) = 233
Parameter RAM used (out of a possible 1024 ) = 131[свернуть]
То есть задействовано меньше половины инструкций, при 96kHz проекте будет близко к максимуму в 512 инструкций, которые также нужно назначить DSP core, но я, честно говоря не понимаю, зачем в домашних условиях нужно 96kHz, когда 48 хватит с головой.
Прикрепил файл Sigma Studio, если захотите поэкспериментировать
Multi_output_01.zip
Последний раз редактировалось onefabis; 26.02.2020 в 17:35.
Спасибо огромное за развернутый подробный ответ, в сети мало подобных примеров, доделаю в железе буду пробовать.
Рад помочь, только учитывайте, что у adau1701 всего 4 аналоговых выхода, поэтому если будете делать 8 каналов, то обзаведитесь минимум 2-я ЦАПами с I2S
Последний раз редактировалось Alex; 27.02.2020 в 13:12.
"Замполит, чайку?"(с)"Охота за Красным Октябрем".
"Ну что, можете меняться обратно."(с)типа анек.
<-- http://altor1.narod.ru --> Вопросы - в личку, е-мейл, скайп.
Конечно не хочется, поэтому и делать надо на 44.1, в котором большинство музыки.
А 48 я вообще не знаю где это, у меня в 48 только на нескольких многоканальных DVD-Audio, больше нигде не встречал.
Я не занимаюсь никакими "сведениями", и примерно половина того что слушаю - это 96, 192 и DSD, остальное - 44.1
"Замполит, чайку?"(с)"Охота за Красным Октябрем".
"Ну что, можете меняться обратно."(с)типа анек.
<-- http://altor1.narod.ru --> Вопросы - в личку, е-мейл, скайп.
Ясно. Когда я говорил, что 48кГц - хватит с головой, имел ввиду, что 48 - максимум, так как 44.1 - для музыки, 48 - для фильмов.
То есть на каком-то этапе произошел ресемплинг с 44.1 на 48 и затем оверсемплинг до 96 или 192? Или напрямую со звукозаписывающих студий файлы?
Боже упаси! Не кратный ресемплинг, типа 44.1 в 48 - это плохо. А оверсемплинг в 96 или 192 - не имеет смысла.
Естественно хайрезовские записи, в т.ч. с ДВД-А.
Там 5.1 каналов хотя бы надо, так что, совсем не по теме.
Там обычно 352-384.
"Замполит, чайку?"(с)"Охота за Красным Октябрем".
"Ну что, можете меняться обратно."(с)типа анек.
<-- http://altor1.narod.ru --> Вопросы - в личку, е-мейл, скайп.
Социальные закладки