Part Number:TLV320AIC3107
您好,首先感谢百忙之中查看我们的邮件!
我们近期在调试TLV320AIC3107遇到一个问题,就是在调整增益的时候(寄存器 43、44),耳机内部会出现滋滋的声音,经过多次测试确认在调整旋钮的时候,连续为寄存器赋值的时候产生。
硬件设计如下:
我们通过单片机采集一滑动变阻器的值来确定要调节的增益值,之后通过i2c 来配置寄存器
单片机程序如下:
void tlv320set()
{
uint8_t a = 0x80;
oldvolume = firstadcvulesave;
am_i2c_write(&__i2c_tlv320,1,&a,1);//Èí¼þ¸´Î»
GDelay(2000);
a = 0x32;
am_i2c_write(&__i2c_tlv320,102,&a,1);//CLKDIVIN use MCLK
a = 0x18;
am_i2c_write(&__i2c_tlv320,3,&a,1);//PLL disable and select Q value
a = 1;
am_i2c_write(&__i2c_tlv320,101,&a,1); //CLKIN use CLKDIV_OUT
a = 0xa;
am_i2c_write(&__i2c_tlv320,7,&a,1); //FSref = 48KHz
a = 0x00;
am_i2c_write(&__i2c_tlv320,2,&a,1); //sample
a = 0x00;
am_i2c_write(&__i2c_tlv320,8,&a,1); //SLAVE mode ?
a = 0x20;
am_i2c_write(&__i2c_tlv320,9,&a,1); // i2s mode 24bit ?
a = 0x0f;
am_i2c_write(&__i2c_tlv320,12,&a,1); //audio codec diital filter control register
a = 0x80;
am_i2c_write(&__i2c_tlv320,13,&a,1);
a = 0x80;
am_i2c_write(&__i2c_tlv320,14,&a,1);
a = 0x90;
am_i2c_write(&__i2c_tlv320,14,&a,1);//Headset Configuration Register
// a = 0xc0;
// am_i2c_write(&__i2c_tlv320,25,&a,1);
// a = 0xc0;
// am_i2c_write(&__i2c_tlv320,37,&a,1); //left and right DAC power on
a = 0xf0;
am_i2c_write(&__i2c_tlv320,37,&a,1); //left and right DAC power on
a = 0x00;
am_i2c_write(&__i2c_tlv320,41,&a,1); ///*out path select*/
//a = 0x78;
a = 0;
am_i2c_write(&__i2c_tlv320,42,&a,1);//*out path select a = 0;
am_i2c_write(&__i2c_tlv320,43,&firstadcvulesave,1); /*left DAC not muted*/
am_i2c_write(&__i2c_tlv320,44,&firstadcvulesave,1); /*right DAC not muted*/
a = 0x80;
am_i2c_write(&__i2c_tlv320,47,&a,1); //DAC_L1 to HPLOUT Volume Control Register
a = 0x80;
am_i2c_write(&__i2c_tlv320,64,&a,1);//DAC_R1 to HPROUT Volume Control Register
a = 0xd;
am_i2c_write(&__i2c_tlv320,51,&a,1);
a = 0xd;
am_i2c_write(&__i2c_tlv320,65,&a,1);
a = 0x80;
am_i2c_write(&__i2c_tlv320,82,&a,1);
a = 0x0c;
am_i2c_write(&__i2c_tlv320,73,&a,1);
}
// normaladcvulesave 即为采到的AD值对应到的R43/44寄存器的值
void TLV320volumeset()
{
if(normaladcvulesave != oldvolume)
{
am_i2c_write(&__i2c_tlv320,43,&normaladcvulesave,1);
am_i2c_write(&__i2c_tlv320,44,&normaladcvulesave,1);
oldvolume = normaladcvulesave ;
}
}
我们按照贵司的芯片使用手册介绍做以下尝试
一、手册指导
- 静音(R43\44高位置1)
- 配置寄存器(R43\44 1xxx xxxx)
- 解除增益(R43\44 0xxx xxxx)
- 拓展
- 静音所有相关寄存器 (R43\44 R47\64 R51\65)
- 配置增益寄存器(R43、44)
- 解除静音(R43\44 R47\64 R51\65)
- 解决滋滋声方案
- 我们采取粗调 (R43\44寄存器增益值每次递增大于1)
根据第三个方案,如果我们把R43\44增益值间隔变大,声音调节不连续,声音有突变,且随着间隔值的变大,突变越明显,有一种类似台阶一样的阶梯感。
无论是阶梯感还是滋滋声都无法满足我们这边的需求
请问还有什么好的办法来消除这些噪音?或者有哪些细节我们没有注意?
Amy Luo:
您好,
关于原理图中未使用的输入,建议按照下面链接FAQ连接:
[FAQ] Audio ADCs/CODECs: What should I do with unused inputs on the TLV320ADC and TLV320AIC family of devices?
我感觉这应该与soft-stepping功能的使用有关,我去确认下这个soft-stepping功能具体应该怎样使用
,
JIANFENG WEI:
您好,我们按照320的寄存器配置要求配置输出,并没有采用ADC的数据,ADC的输入端还会对输出数据产生影响吗?
,
Amy Luo:
可能会对输出产生影响,因为设备有混音功能,如果仅是期望输出数字音频数据,建议您关闭ADC功能
同时也建议,将立体声DAC输出直接传递到输出驱动器,绕过模拟音量控制和混音网络: