This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

TLV320ADC3101 ADC Fine Volume Control

Other Parts Discussed in Thread: TLV320ADC3101

Hello,

we have some problems with the adc fine volume control (Page0/Register 82) together with the adc coarse volume control (Page 0/Register 83 and 84) in the TLV320ADC3101. We use the following configuration:

if (src == AUDIO_SRC_LINE)

{

  xtwi_WriteReg(&TwiMaster, SLAVE_ADDRESS_ADC3101, 0, 0x00); // Select Page 0
  xtwi_WriteReg(&TwiMaster, SLAVE_ADDRESS_ADC3101, 1, 0x01); // Reset
  xtwi_WriteReg(&TwiMaster, SLAVE_ADDRESS_ADC3101, 61, 0x00); // ADC Processing Block=1

  if (main_Config.AClk == AUDIO_CLK_0) // 18MHz
  {
    xtwi_WriteReg(&TwiMaster, SLAVE_ADDRESS_ADC3101, 4, 0x00); // CODEC_CLKIN = MCLK
    xtwi_WriteReg(&TwiMaster, SLAVE_ADDRESS_ADC3101, 18, 0x82); // NADC=2, NADC Clock power up
    xtwi_WriteReg(&TwiMaster, SLAVE_ADDRESS_ADC3101, 19, 0x82); // MADC=2, MADC Clock power up
    xtwi_WriteReg(&TwiMaster, SLAVE_ADDRESS_ADC3101, 20, 0x60); // AOSR=96
  }

  if (main_Config.AClk == AUDIO_CLK_1) //49 MHz
  {
    xtwi_WriteReg(&TwiMaster, SLAVE_ADDRESS_ADC3101, 4, 0x03); // CODEC_CLKIN = PLL_CLK
    xtwi_WriteReg(&TwiMaster, SLAVE_ADDRESS_ADC3101, 5, 0b10110001); // P = 3, R = 1
    xtwi_WriteReg(&TwiMaster, SLAVE_ADDRESS_ADC3101, 6, 0x05); // J = 5
    xtwi_WriteReg(&TwiMaster, SLAVE_ADDRESS_ADC3101, 7, 0x18); // D = 6250
    xtwi_WriteReg(&TwiMaster, SLAVE_ADDRESS_ADC3101, 8, 0x6A); //

    xtwi_WriteReg(&TwiMaster, SLAVE_ADDRESS_ADC3101, 18, 0x8A); // 82 NADC=10, NADC Clock power up
    xtwi_WriteReg(&TwiMaster, SLAVE_ADDRESS_ADC3101, 19, 0x82); // 82 MADC=2, MADC Clock power up
    xtwi_WriteReg(&TwiMaster, SLAVE_ADDRESS_ADC3101, 27, 0x2C); // 2C ADC IF=I2S, Word Length=24Bit,           BCLK=Output, WCLK=Output

    xtwi_WriteReg(&TwiMaster, SLAVE_ADDRESS_ADC3101, 20, 0x60); // 60 AOSR=96
    xtwi_WriteReg(&TwiMaster, SLAVE_ADDRESS_ADC3101, 22, 0x04); // ADC IADC
  }

  xtwi_WriteReg(&TwiMaster, SLAVE_ADDRESS_ADC3101, 26, 0x81); // 90 CLKOUT Devider M power up
  xtwi_WriteReg(&TwiMaster, SLAVE_ADDRESS_ADC3101, 25, 0x00); // 00 MCLK
  xtwi_WriteReg(&TwiMaster, SLAVE_ADDRESS_ADC3101, 38, 0x02); // 02 I2S Control Register
  xtwi_WriteReg(&TwiMaster, SLAVE_ADDRESS_ADC3101, 30, 0x84); // 84 BCLK Power up N Devider
  xtwi_WriteReg(&TwiMaster, SLAVE_ADDRESS_ADC3101, 29, 0b00000110); // ADC Interface Control 2, BCLK   and WCLK active
  xtwi_WriteReg(&TwiMaster, SLAVE_ADDRESS_ADC3101, 61, 0x01); // ADC Processing Block=1
  xtwi_WriteReg(&TwiMaster, SLAVE_ADDRESS_ADC3101, 81, 0b11000000); // ADC Left/Right power up
  xtwi_WriteReg(&TwiMaster, SLAVE_ADDRESS_ADC3101, 82, 0x00); // ADC Left/Right not muted
  xtwi_WriteReg(&TwiMaster, SLAVE_ADDRESS_ADC3101, 83, 0b00010011); // ADC Left Volume control
  xtwi_WriteReg(&TwiMaster, SLAVE_ADDRESS_ADC3101, 84, 0b00010011); // ADC Right Volume control
  xtwi_WriteReg(&TwiMaster, SLAVE_ADDRESS_ADC3101, 0, 0x01); // Select Page 1
  xtwi_WriteReg(&TwiMaster, SLAVE_ADDRESS_ADC3101, 52, 0xFC); // LCH_SEL1 = 0dB
  xtwi_WriteReg(&TwiMaster, SLAVE_ADDRESS_ADC3101, 55, 0xFC); // RCH_SEL1 = 0dB
  xtwi_WriteReg(&TwiMaster, SLAVE_ADDRESS_ADC3101, 59, 0x00); // Left PGA not muted
  xtwi_WriteReg(&TwiMaster, SLAVE_ADDRESS_ADC3101, 60, 0x00); // Right PGA not muted
  
}

We put a signal on the line input and check the output amplitude while changing the adc coarse and fine volume control registers (Page0/Registers 82,83,84). The fine volume control doesn't work as expected. We can see a change in the output amplitude when changing from 0 to -0.4db. When using the others settings (-0.3db, -0.2db, -0.1db, 0db) there is absolutely no change in the output amplitude.

Is there any precondition in order to be able to use the fine volume control?

Thanks in advance and have a nice day

Marc

  • Hi Marc,

    The fine volume control should work as expected. How are you measuring the output?

  • Hi,

    we use an arbitration generator to generate a 1Khz sine signal as input. This signal is converted by TLV320ADC3101 and transmitted to our receiver where it is converted back to an analog output signal. We measure the input and output signals with a dc coupled oscilloscope while changing the fine volume control. The output signal only changes when we use -0.4db setting for the fine volume control. All other settings don't change the output signal.

  • Perhaps there is some gain that is changing elsewhere in your system?

    Can you check directly at the digital output of the ADC3101? This feature should work as advertised and has been well tested at the IC level.

  • We have connected an arbitration generator with the TLV320ADC3101 Evaluation Module (EVM) from TI and transferred the digital output data to the PC via USB. On the PC we recorded the audio stream with different settings for the fine volume control. On the Screenshot below you can see the settings 0, -0.1, -0.2, -0.3db from top to bottom. There's no change in amplitude when changing fine volume control. The amplitude of the sine changes slowly for a fixed setting of fine volume control?!

     

     

    The next picture shows the same data when zoomed in. We can see the amplitudes of the sine signal.

     

     

    The setting -0.4dB is not shown in the pictures above. When we use this setting, the amplitude changes to 0.9 (see scale above). Thats the same amplitude jump we can see in the analogue output signal in our devices. All other settings have no effect.

     

    Thanks

    Marc