Вопросы настройки, программирования, прошивки микроконтроллеров и микросхем программируемой логики
Тема закрыта

I2C + аудиопроцессор R2A15900SP

Пт авг 03, 2012 16:55:46

Здравствуйте, уважаемые коты!

Пытаюсь завести аудиопроцессор, но он ни как не хочет оживляться...
В ссылке выше ДШ на него, инициализировать пытаюсь так:


Не могли бы вы более опытным глазом поглядеть на ДШ и ткнуть меня носом, где я ошибся?

PS: сразу вопрос... SubAddress нужно обязательно инкрементировать, или можно указывать произвольный?

Re: I2C + аудиопроцессор R2A15900SP

Пт авг 03, 2012 18:19:43

При беглом взгляде на код:
1. Адресный байт (slave address) должен быть всегда 0b10000010
2. Subaddress инкрементирется сам при посылке нескольких байтов
3. Формировть start сигнал нужно лишь 1 раз перед посылкой группы байтов при инкрементаци subaddress. Если хотите каждый раз посылать и subaddress, формируйте stop сигнал.
4. Пишите комментарии чего хотите добиться. В настоящем коде выставляется нулевая громкость в левом и правом каналах (по адресам 0 и 1). Вам это действительно надо для оживления?

Re: I2C + аудиопроцессор R2A15900SP

Пт авг 03, 2012 18:55:06

Ser60 писал(а):При беглом взгляде на код:
1. Адресный байт (slave address) должен быть всегда 0b10000010
2. Subaddress инкрементирется сам при посылке нескольких байтов
3. Формировть start сигнал нужно лишь 1 раз перед посылкой группы байтов при инкрементаци subaddress. Если хотите каждый раз посылать и subaddress, формируйте stop сигнал.
4. Пишите комментарии чего хотите добиться. В настоящем коде выставляется нулевая громкость в левом и правом каналах (по адресам 0 и 1). Вам это действительно надо для оживления?


1. Подумал, что RW должен быть установлен в 1...
2. Эм... Если инкрементируется сам - то что посылать в сабадресе? Там же диаграмма явно показывает, что он должен быть...
3. Получается, что так: "старт - сабадрес - дата - дата - дата - дата - дата - стоп"?
4. На сколько я понял, там при нулях идет уровень громкости 0дБ (максимальная громкость), а при увеличении идет подавление громкости (вплоть до -89дБ)... Или я не прав? Нужно мне всего-лишь инициализировать её, и включить первых вход. Дальше методом проб и ошибок разберусь...

Re: I2C + аудиопроцессор R2A15900SP

Пт авг 03, 2012 19:04:54

Спасибо большое!
Разобрался! :)

Вот минимальный код, который "завел" микруху:


Код:
    i2c_init();
    delay_ms(1000);
    i2c_start();
    // Slave address
    i2c_write(0b10000010);
    // SubAddress
    i2c_write(0x00);
    // Volume
    i2c_write(0b00100010);
    i2c_write(0b00100010);
    // Input selector
    i2c_write(0b00111111);
    // Bass
    i2c_write(0b00000000);
    // Treble
    i2c_write(0b00000000);

    i2c_stop();   

Re: I2C + аудиопроцессор R2A15900SP

Пт авг 03, 2012 21:35:24

Теперь вот только не могу понять...

Написал код, регулирует громкость:
Код:
void R2A_set_volume(){
    unsigned char vol_H = (89-Volume)/10 , vol_L = (89-Volume)%10;
    i2c_start();
    i2c_write(0b10000010);
    i2c_write(0x00);
    i2c_write((vol_H << 4) | vol_L);
    i2c_write((vol_H << 4) | vol_L);
    i2c_stop();
    LCD_draw_volume();
}


Но, есть косяк.
разница в уровне звука между 49 и 50 заметно выше, чем между 50 и 51...
И так со всеми переходами между десяток.
прибавляешь, к примеру, от 40 до 49 - растет звук плавно. Однако, после увеличения с 49 до 50 - резкий скачек уровня громкости, а дальше в пределах десятки опять нормально растет.

Проблемы в самом звуке быть не может: источником взял тактовую частоту дисплея 2кГц. На слух очень заметные перепады, особенно если прибавляешь резко (вообще "лесенка" получается"...

Думал, что опять натупил с логикой, вывел в отдельные знакоместа выражения:
(89-Volume)/10 и (89-Volume)%10
Показывают как положено, познаково модуль от затухания...

Re: I2C + аудиопроцессор R2A15900SP

Пт авг 03, 2012 22:59:13

В коде вроде все красиво. Может в самой микре косяк. Именно, степень затухания десятков децибел не точно согласована с таковой для единиц. Я-бы попробовал подать ей коды с младшим нибблом от 9 ро 15. Знаю, что не по ДШ, но попробовать-то можно. Если не поможет, попробуйте скомпенсировать плавность увеличения громкости программно, или посмотрите в сторону аналогичных процессоров серии TDA.

Re: I2C + аудиопроцессор R2A15900SP

Сб авг 04, 2012 05:22:02

Про младший ниббл до 15 - идея не плохая, не подумал...

Про несогласованность - в акустике эта микруха работает нормально, без перепадов, правда, там предел регулировки до 60ед... скорее всего программно компенсировали.

Re: I2C + аудиопроцессор R2A15900SP

Сб авг 04, 2012 08:56:49

Про разрядность уровня громкости - не получилось.
Когда любой из нибблов выставляешь больше 9 - звук пропадает.
Тема закрыта