Форум РадиоКот https://radiokot.ru/forum/ |
|
I2C + аудиопроцессор R2A15900SP https://radiokot.ru/forum/viewtopic.php?f=20&t=76333 |
Страница 1 из 1 |
Автор: | Johnson [ Пт авг 03, 2012 16:55:46 ] |
Заголовок сообщения: | I2C + аудиопроцессор R2A15900SP |
Здравствуйте, уважаемые коты! Пытаюсь завести аудиопроцессор, но он ни как не хочет оживляться... В ссылке выше ДШ на него, инициализировать пытаюсь так: СпойлерКод: #include <i2c.h> #include <delay.h> // I2C Bus functions #asm .equ __i2c_port=0x15 ;PORTC .equ __sda_bit=1 .equ __scl_bit=0 #endasm // Some code i2c_init(); delay_ms(1000); i2c_start(); i2c_write(0b10000011); i2c_write(0); i2c_write(0b00000000); i2c_start(); i2c_write(0b10000011); i2c_write(1); i2c_write(0b00000000); i2c_start(); i2c_write(0b10000011); i2c_write(2); i2c_write(0b00111111); i2c_start(); i2c_write(0b10000011); i2c_write(3); i2c_write(0b00000000); i2c_start(); i2c_write(0b10000011); i2c_write(4); i2c_write(0b00000000); Не могли бы вы более опытным глазом поглядеть на ДШ и ткнуть меня носом, где я ошибся? PS: сразу вопрос... SubAddress нужно обязательно инкрементировать, или можно указывать произвольный? |
Автор: | Ser60 [ Пт авг 03, 2012 18:19:43 ] |
Заголовок сообщения: | Re: I2C + аудиопроцессор R2A15900SP |
При беглом взгляде на код: 1. Адресный байт (slave address) должен быть всегда 0b10000010 2. Subaddress инкрементирется сам при посылке нескольких байтов 3. Формировть start сигнал нужно лишь 1 раз перед посылкой группы байтов при инкрементаци subaddress. Если хотите каждый раз посылать и subaddress, формируйте stop сигнал. 4. Пишите комментарии чего хотите добиться. В настоящем коде выставляется нулевая громкость в левом и правом каналах (по адресам 0 и 1). Вам это действительно надо для оживления? |
Автор: | Johnson [ Пт авг 03, 2012 18:55:06 ] |
Заголовок сообщения: | Re: I2C + аудиопроцессор R2A15900SP |
Ser60 писал(а): При беглом взгляде на код: 1. Адресный байт (slave address) должен быть всегда 0b10000010 2. Subaddress инкрементирется сам при посылке нескольких байтов 3. Формировть start сигнал нужно лишь 1 раз перед посылкой группы байтов при инкрементаци subaddress. Если хотите каждый раз посылать и subaddress, формируйте stop сигнал. 4. Пишите комментарии чего хотите добиться. В настоящем коде выставляется нулевая громкость в левом и правом каналах (по адресам 0 и 1). Вам это действительно надо для оживления? 1. Подумал, что RW должен быть установлен в 1... 2. Эм... Если инкрементируется сам - то что посылать в сабадресе? Там же диаграмма явно показывает, что он должен быть... 3. Получается, что так: "старт - сабадрес - дата - дата - дата - дата - дата - стоп"? 4. На сколько я понял, там при нулях идет уровень громкости 0дБ (максимальная громкость), а при увеличении идет подавление громкости (вплоть до -89дБ)... Или я не прав? Нужно мне всего-лишь инициализировать её, и включить первых вход. Дальше методом проб и ошибок разберусь... |
Автор: | Johnson [ Пт авг 03, 2012 19:04:54 ] |
Заголовок сообщения: | Re: I2C + аудиопроцессор R2A15900SP |
Спасибо большое! Разобрался! ![]() Вот минимальный код, который "завел" микруху: Код: 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(); |
Автор: | Johnson [ Пт авг 03, 2012 21:35:24 ] |
Заголовок сообщения: | Re: I2C + аудиопроцессор R2A15900SP |
Теперь вот только не могу понять... Написал код, регулирует громкость: Код: 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 Показывают как положено, познаково модуль от затухания... |
Автор: | Ser60 [ Пт авг 03, 2012 22:59:13 ] |
Заголовок сообщения: | Re: I2C + аудиопроцессор R2A15900SP |
В коде вроде все красиво. Может в самой микре косяк. Именно, степень затухания десятков децибел не точно согласована с таковой для единиц. Я-бы попробовал подать ей коды с младшим нибблом от 9 ро 15. Знаю, что не по ДШ, но попробовать-то можно. Если не поможет, попробуйте скомпенсировать плавность увеличения громкости программно, или посмотрите в сторону аналогичных процессоров серии TDA. |
Автор: | Johnson [ Сб авг 04, 2012 05:22:02 ] |
Заголовок сообщения: | Re: I2C + аудиопроцессор R2A15900SP |
Про младший ниббл до 15 - идея не плохая, не подумал... Про несогласованность - в акустике эта микруха работает нормально, без перепадов, правда, там предел регулировки до 60ед... скорее всего программно компенсировали. |
Автор: | Johnson [ Сб авг 04, 2012 08:56:49 ] |
Заголовок сообщения: | Re: I2C + аудиопроцессор R2A15900SP |
Про разрядность уровня громкости - не получилось. Когда любой из нибблов выставляешь больше 9 - звук пропадает. |
Страница 1 из 1 | Часовой пояс: UTC + 3 часа |
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |