• Внешний USB-ЦАП-Аудиопроцессор CDD-010 можно купить

Тонкомпенсированный регулятор громкости (loudness)

Дюжбан

Well-known member
Всем здравствуйте. Идея простая создание тонкомпенсированного регулятора. Модуль адау1761, генератор 12288, рдц2-0032 с памятью, проект 48к, аналоговый вход и выход. Проект прост вход loudness выход. Все получилось наподобие аналогового рт сухова, с его недостатками, а именно уровень регулировки 50 дб, громкости полностью не убирается. Также когда залил все в рдц2-0032 обнаружил что линейным резистором регулировать не получается, шкала от -50 дб сильно растянута. Сделал подобие логарифма. Без тонкомпенсации жить невозможно. Интересно как вы боретесь с подобными проблемами? Есть идеи?
 

Дюжбан

Well-known member
не совсем понятно. пошарился гуглом, не вижу отзывы по РГ и РТ Сухова, где описана эта проблема
В отзывах, точно не скажу, нужно искать, мало кто собирал видать. Есть своя собранная конструкция на импорте и с разводкой в кикаде. Нужны по идее хорошие потенциометры, если брать альпы ценак кусается. Вообще у него лучший блок тонкомпенсации, очень точно. Но с адау уже новые возможности.
 

maxssau

Well-known member
я запилил на адау1701, с глубиной регулировки до -120 дб. управление от МК с энкодером. Вычисление шага логарифмическое. По звуку проблем не вижу, на -120 в наушниках ничего не слышно. блочек Loudness
 

Дюжбан

Well-known member
я запилил на адау1701, с глубиной регулировки до -120 дб. управление от МК с энкодером. Вычисление шага логарифмическое. По звуку проблем не вижу, на -120 в наушниках ничего не слышно. блочек Loudness
Проект в студию. 120 дб с тк не шутка. да и кодер правильно подключить в проект не все могут!
 

maxssau

Well-known member
а шо там может быть сложного?

Управление энкодером не входит в тему.

это код записи в ДСП:

void DSP_SetHumanVolume(unsigned int I2S_AudioFrequency, _Bool state, float gain)
{
__dsp_control_element
// получаем адрес переключателя байпаса
dsp_element=DSP_GetControlAddress(DSP_UI08_ADAU1701_CONTROL_TYPE_VOL_HUM_EN_SELECTOR,I2S_AudioFrequency);
// записываем 0 или 1, 0 - без РГ, 1 - через РГ
SIGMA_ADAU1701_SAFELOAD_WRITE_INT(dsp_element.address[0],1*(int)state);
DSP_Control_SetISTBit(I2S_AudioFrequency);

// получаем адрес блока Loudness
dsp_element=DSP_GetControlAddress(DSP_UI08_ADAU1701_CONTROL_TYPE_VOL_HUM_SW_HUM_VOL_SELECTOR,I2S_AudioFrequency);
// переводим из дБ в обычное число float
float val=1/(pow(10,(gain/-20)));
// записываем значение громкости в блок DC Source, блок подключен к внешнему управлению громкости блока Loudness
SIGMA_WRITE_REGISTER_FLOAT(dsp_element.address[0],val);
}

кусок проекта сигмы:

ui08.png


Проекта для MCU в свободном доступе не будет из-за коммерсов.

Пы.Сы. Через 2-4 недели думаю доделаю и покажу плату ДСП с USB входом и I2S выходом.
 
Последнее редактирование:

Дюжбан

Well-known member
а шо там может быть сложного?

Управление энкодером не входит в тему.

это код записи в ДСП:

void DSP_SetHumanVolume(unsigned int I2S_AudioFrequency, _Bool state, float gain)
{
__dsp_control_element
// получаем адрес переключателя байпаса
dsp_element=DSP_GetControlAddress(DSP_UI08_ADAU1701_CONTROL_TYPE_VOL_HUM_EN_SELECTOR,I2S_AudioFrequency);
// записываем 0 или 1, 0 - без РГ, 1 - через РГ
SIGMA_ADAU1701_SAFELOAD_WRITE_INT(dsp_element.address[0],1*(int)state);
DSP_Control_SetISTBit(I2S_AudioFrequency);

// получаем адрес блока Loudness
dsp_element=DSP_GetControlAddress(DSP_UI08_ADAU1701_CONTROL_TYPE_VOL_HUM_SW_HUM_VOL_SELECTOR,I2S_AudioFrequency);
// переводим из дБ в обычное число float
float val=1/(pow(10,(gain/-20)));
// записываем значение громкости в блок DC Source, блок подключен к внешнему управлению громкости блока Loudness
SIGMA_WRITE_REGISTER_FLOAT(dsp_element.address[0],val);
}

кусок проекта сигмы:

Посмотреть вложение 1082

Проекта для MCU в свободном доступе не будет из-за коммерсов.

Пы.Сы. Через 2-4 недели думаю доделаю и покажу плату ДСП с USB входом и I2S выходом.
Благодарю за помощь. Не все понятно пока. Блок тк с внешним управлением вижу. Dc что такое здесь? Как туда записать? А код это куда девать? Если в стм то понятия не имею как это сделать. Хочу нормальный рг, а это дебри прямо. А значения регистров можно вытащить и заслать в дисплей 1602? Мудрый гуру обьясни проще. Спасибо.
 

maxssau

Well-known member
Dc что такое здесь?
блок, выдающий одно значение на выходе, я его использую что бы записывать значение по шине i2c. В блоке Loudness значение уровня громкости это число от 0 до 1 в линейной шкале. Что бы была логарифмическая шкала, я пересчитываю значение дБ в линейную шкалу.

Как туда записать?
записывать по i2c или spi шине. адрес регистра можно узнать в заголовочном файле после генерации в сигма студии.

А значения регистров можно вытащить и заслать в дисплей 1602
можно, нужно 100500 строк кода, на пальцах сложно объяснить. проц лучше брать стм32, что бы не возиться с преобразователями уровней на ардуино с процессором мега32.
 

Дюжбан

Well-known member
блок, выдающий одно значение на выходе, я его использую что бы записывать значение по шине i2c. В блоке Loudness значение уровня громкости это число от 0 до 1 в линейной шкале. Что бы была логарифмическая шкала, я пересчитываю значение дБ в линейную шкалу.


записывать по i2c или spi шине. адрес регистра можно узнать в заголовочном файле после генерации в сигма студии.


можно, нужно 100500 строк кода, на пальцах сложно объяснить. проц лучше брать стм32, что бы не возиться с преобразователями уровней на ардуино с процессором мега32.
RDC2-0032 у меня этим занимается. 1761 понравился звук, но в нем почти ничего нет. В 1701 кодер можно к gpio приляпать согласно мануала? У вас какая то другая реализация с мк? С ардуиной бы осилил управление с дисплеем, но отказался: не особо знаю как туда такие обьемы i2c гнать. Примерно понятно. Благодарю.
 

Дюжбан

Well-known member
блок, выдающий одно значение на выходе, я его использую что бы записывать значение по шине i2c. В блоке Loudness значение уровня громкости это число от 0 до 1 в линейной шкале. Что бы была логарифмическая шкала, я пересчитываю значение дБ в линейную шкалу.
А вон оно что, я значения меняю по децибелам оно и растянуто) надо линейную шкалу. То и думаю странно както вышло. Спасибо.
 

Дюжбан

Well-known member
Огромное спасибо @igrushkin @maxssau за развитие актуальной тематики. Создал проект Тонкомпенсированного регулятора громкости на энкодере диапазон регулирования громкости -96Дб шаг 3Дб,. регулировка тембра нч вч -+12Дб, мегабасс и расширение стерео. Железка adau1761 аналоговый вход и выход на наушники, кодер подключен к полюсам питания и контактам gpio0 и 1, модуль rdc2-0032 резисторы кнопки, генератор 12288. Ловите мой проект!
 

Вложения

mikhalych24

Well-known member
Блин, потерял почти день, пока получилось... Ну до чего ж документация у Аналога дерьмо! Итак, в копилку опыта: для 1452 и 1467 в регулятор надо добавить модуль сравнения с нулем - инвертировать сигнал и привести его к виду 8.24. Только тогда заработало. Ну и в Mute надо 8.24 поставить, иначе тоже не работает!
encoder1467.png
 

Дюжбан

Well-known member
Блин, потерял почти день, пока получилось... Ну до чего ж документация у Аналога дерьмо! Итак, в копилку опыта: для 1452 и 1467 в регулятор надо добавить модуль сравнения с нулем - инвертировать сигнал и привести его к виду 8.24. Только тогда заработало. Ну и в Mute надо 8.24 поставить, иначе тоже не работает!
Посмотреть вложение 1127
Вот эта штука interface, перед выключением ее нужно записать с помощью interface write, а при включении прочитать. Но эт ток в теории, нужно разобраться чтобы громкость не забывалась.
 

mikhalych24

Well-known member
Как оказалось для 1452 и 1467 - легко! Там другие Interface Read/Write есть, с записью в EEPROM!
encoder1467wMem.pngencoder1467wMem1.png
 

Александр Ф.

Well-known member
loudness модуль надо на выходе ставить, так как там от "громкости" зависят параметры фильтров.
 

Дюжбан

Well-known member
Здравствуйте. Выражаю благодарность @xkir за "типы данных". Вот мой новый регулятор громкости на переменном резисторе. 64 положения с шагом 2 дб от 0 до -122. Железо: reflex, dspo 12288 link, adau1467v2(адрес 0х70), pcm5242, 2xtpa6120 и переменник. Работает только на 48к это для ютуба!!! Не подойдет для мп3, а то звук будет не очень из-за ресемплинга и лучше перестроиться на 44.1. Питание на все заводить отдельно не с адау, а с бп от 5В2А через DSPO. По пцм5242- прям обязательно расставить джамперы и на подтянутые пины тоже в соответствии с конфигурацией! !! Провод MCLK не подключаем, питание 3.3В тоже, а подаем его на + разъема 5В и отпаиваем нафик C10-C13. Но это в качестве примера если что спрашивайте. Звук супердетальный!!!
 

Вложения

Последнее редактирование:
Верх