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.

TLV320ADC3120: Configuring VAD on Pure path console

Part Number: TLV320ADC3120
Other Parts Discussed in Thread: ADC3120EVM-PDK

Tool/software:

Hello Team, 

i need any step by step process to perform a VAD on TLV320ADC3120.

Am using VAD on the evaluation board of  TLV320ADC3120 i.e ADC3120EVM-PDK.

i would like to configure VAD like that SDOUT must be active and coming when voice is triggered.

i nedd step by step configuration in Purepath console to perform VAD. 


Thanks,

CJI

  • Hi CJI,

    GPIO should be configured as an interrupt by default, so no changes need to be made on the GPIO/Interrupts tab on PPC3. On the VAD Config tab, click on "Disabled" on the top right corner of VAD Configuration to switch to "Enabled".

    In VAD Mode, you can change to power up the ADCs when the VAD is triggered if that is your application. You can read more about these options in this app note: https://www.ti.com/lit/an/sbaa490a/sbaa490a.pdf The only other change you may need to make is choosing which channel to perform VAD on. You can switch this in the VAD Channel Selection drop-down. You can only monitor one channel at a time. There is an LED on the board that monitors the interrupt, but you can alternatively click "Start Polling" on the VAD interrupts box to see the interrupts light up in the PPC3 window.

    Best,

    Garret

  • Hey Garret, 

    Thanks for the great reply, we able to see the Polling on PPC3. but light is not triggering on board. 

    Next, 

    1. i want to make SDOUT should work only on power detect. means when voice activity is detected then only sdout should be there. i see this feature, but how to configure on PPC3

    2. i want to change the sensitivity of the VAD, How?

    3. will Changing of the sensitivity will work on the go ? sensitivity of the VAD works on Energy or volume ?

    Looking for answers

    Regards,

    CJI


  • Hi CJI,

    1. There are a couple ways to do this. You can switch VAD mode to "VAD interrupt based ADC power-up but user initiated power down", in which case SDOUT will turn on and transmit when voice is detected, and then the ADC will remain on until the user turns it off. Otherwise, you can enable the SDOUT as the VAD interrupt by checking the top box in the VAD section (this will enable SDOUT as interrupt and is a typo in PPC3).  However, for your purposes I think the first option will be better.

    2. There is no place to change the sensitivity, or we call threshold, in PPC3 for this device. However, you can be change the threshold by sending I2C commands to the device page 9 as described here:

    3. The threshold works on volume. You can send I2C commands to change the threshold while the device is recording with standard I2C writes.

    Best,

    Garret

  • HI Garret,

    Thank you for reply.

    Unfortunately its not working as you said.

    Kindly check once and give me an update reply.

    i want to confirm VAD on PPC3.

    Regards,
    CJI

  • Hi CJI,

    I am sorry to hear this. Can you send a picture of your PPC3 VAD window and EVM setup?

    It was working before, correct? So it is only not working in ""VAD interrupt based ADC power-up" mode, correct?

    Best,

    Garret

  • Hi Garret,

    i have configured Vad function like this.

    uint8_t vad_channel = 2;

    uint8_t vad_level = 3;

    // VAD process function

    void VAD_Process(uint8_t vad_channel, uint8_t vad_level) {

    // Validate channel input (1 or 2), default to 2

    if (vad_channel != 1 && vad_channel != 2) {

    vad_channel = 2;

    }

    // Validate level input (1 to 3), default to 3 (high sensitivity)

    if (vad_level < 1 || vad_level > 3) {

    vad_level = 3;

    }

    // Compute VAD_CFG1: Auto mode (bits 7-6: 01), Channel select (bits 5-4: 00 for ch1, 01 for ch2), Internal clock (bits 3-2: 00)

    uint8_t vad_cfg1 = 0x40; // 0b01000000 (Auto mode, internal clock)

    if (vad_channel == 2) {

    vad_cfg1 |= 0x10; // Set bit 4 for channel 2: 0b01010000

    }

    // VAD_CFG2: VAD_PD_DET_EN=1 (bit 3), SDOUT_INT_CFG=0 (bit 6) to disable SDOUT interrupts

    uint8_t vad_cfg2 = 0x08; // 0b00001000

    // Threshold data for -12 dB (high sensitivity, vad_level = 3)

    uint8_t th_data[4] = {0x00, 0x40, 0x40, 0x6D};

    // Select Page 9 for threshold coefficients

    if (ADC_WriteReg(0x00, 0x09) != HAL_OK) Error_Handler();

    if (ADC_WriteMultiReg(0x50, th_data, 4) != HAL_OK) Error_Handler();

    // Select Page 1 for VAD configurations

    if (ADC_WriteReg(0x00, 0x01) != HAL_OK) Error_Handler();

    if (ADC_WriteReg(0x1E, vad_cfg1) != HAL_OK) Error_Handler();

    if (ADC_WriteReg(0x1F, vad_cfg2) != HAL_OK) Error_Handler();

    // Select Page 0

    if (ADC_WriteReg(0x00, 0x00) != HAL_OK) Error_Handler();

    // Enable VAD, keep in sleep mode (PWR_CFG 0x75 = 0x60: SLEEP_EN=1, VAD_EN=1)

    if (ADC_WriteReg(0x75, 0x60) != HAL_OK) Error_Handler();

    }

    and vad is not working

  • Hi Carey,

    You will need the device to be in active mode with a command like this: (ADC_WriteReg(0x02, 0x81) #Wake up device and enable AREG

    Also, your write to address 0x75 does not enable VAD_EN at bit 0. Try to write 0x61 instead.

    Best,

    Garret