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.

ADS112C04 : data rate What's wrong

Part Number: ADS112C04

Configuration Register 1 (0X00)

Vout1_Ad = d88, Vout1 = 0.216507, Vout2_ad = f109, Vout2 = -0.239445, temp_AD = e811, temp = -5598

Configuration Register 1 (0XA0) (NORMAL DATA)

Vout1_Ad = eff1, Vout1 = -0.256945, Vout2_ad = e817, Vout2 = -0.382574, temp_AD = d8c, temp = 270

During the same operation, only the data rate of register 1 is changed. Data value comes out of previous data value 

What's wrong



  • Hi Kim Sungsoo,

    Welcome to the E2E forum!  It would seem that there is considerable noise in your measurement.  When operating at the slower data rate the noise averages out.  The noise can come from a number of sources including the analog supply, poor grounding, noise from the input supplies, pickup of EMI/RFI in cabling as well as power line-cycle pickup in wiring.

    For verification, try running in continuous conversion mode and take a series of measurement to see how much noise is affecting the returned result.

    Also, can you give more detail:

    • On your mux settings and how you are connecting the input voltages being measured? 
    • How close to the input voltage is the measured result? 
    • Do you have a schematic you can share? 
    • And what does 'temp_AD' represent?  If this is the internal temp sensor, then you are changing the contents of Register 1.
    • Have you verified that your communication is working correctly for register reads and writes?

    Best regards,

    Bob B

  • Thank you for quick response.

    Vout1 = Configuration Register 0 (0X00)

        Configuration Register 1 (0X00)

    Vout2 = Configuration Register 0 (0X60)

                  Configuration Register 1 (0X00)

    TEMP = Configuration Register 1 (0X01) (Temperature)

    Vout1_Ad = d8a Vout1 = 0.216632 Vout2_ad = 3d83 Vout2 = 0.984217 temp_AD = c26b  temp = -6351
    Vout1_Ad = d88 Vout1 = 0.216507 Vout2_ad = 3d8c Vout2 = 0.984780 temp_AD = c26c  temp = -6351

    Vout1_Ad = d88 Vout1 = 0.216507 Vout2_ad = 3d8a Vout2 = 0.984655 temp_AD = c266  temp = -6352
    Vout1_Ad = d87 Vout1 = 0.216444 Vout2_ad = 3d92 Vout2 = 0.985155 temp_AD = c26b  temp = -6351

    Vout1 = Configuration Register 0 (0X00)

        Configuration Register 1 (0XA0)

    Vout2 = Configuration Register 0 (0X60)

                  Configuration Register 1 (0XA0)

    TEMP = Configuration Register 1 (0XA1) (Temperature)

    Vout1_Ad = 3dd7 Vout1 = 0.989468 Vout2_ad = c1b2 Vout2 = -0.996905 temp_AD = d94  temp = 271
    Vout1_Ad = 3e63 Vout1 = 0.998218 Vout2_ad = c188 Vout2 = -0.999530 temp_AD = d92  temp = 271

    Vout1_Ad = 3e78 Vout1 = 0.999530 Vout2_ad = c188 Vout2 = -0.999530 temp_AD = d90  temp = 271
    Vout1_Ad = 3e56 Vout1 = 0.997405 Vout2_ad = c1c4 Vout2 = -0.995780 temp_AD = d8f   temp = 270

    Voutx_AD * 0.0000625019 = Voutx

    temp_AD >> 2 * 0.3125 = temp

    Input voltage = 1v

    The ads112c04 test takes place in the office.
    Change only Configuration Register1 value
    The input voltage is supplied by the power supply.
    Isn't a lower data rate better for noise?
    I would like to know why I need to speed up my data to get the right value.
    Are there any problems with the work sequence below? (1 second per lead time)


    VOUT1

    ADS112C04_WrConfig (AD112_WRCFG_0,0x00); // AIN0-AIN1

    ADS112C04_WrConfig (AD112_WRCFG_1,0xA0); // or 0X00
    ADS112C04_start ();
    ad [0] = ADS112C04_ReadData ();

    VOUT2

    ADS112C04_WrConfig (AD112_WRCFG_0,0x60); // AIN2-AIN3

    ADS112C04_WrConfig (AD112_WRCFG_1,0xA0); // or 0X00
    ADS112C04_start ();
    ad [1] = ADS112C04_ReadData ();

    Temperature

    ADS112C04_WrConfig (AD112_WRCFG_1,0xA1); // or 0X01

    ADS112C04_start ();

    temp_AD = ADS112C04_ReadData ();



    The data value seems to be correct. This is a problem because the previous data values ​​come out.

    Thank you.

  • Hi Kim Sungsoo,

    You have not given the SCL frequency you are using for the I2C clock, but I will make the assumption that in the case with the faster data rate, the conversion has enough time to complete before being read from the device whereas the slower data rate it does not.  You are issuing the START command following the register write and then you immediately issue the ADS112C04_ReadData function.  You must make sure that the conversion has completed before attempting to read the conversion result.  

    There are several methods that can be used to make sure the conversion has completed.  One is to monitor DRDY looking for a high to low transition.  Another method is to monitor the DRDY (bit 7) in register 0x02.  A third method is to use a timer set to wait until the conversion has completed before attempting to read it.

    Best regards,

    Bob B