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.

ADS122C04: Sometimes returning zero, then stuck returning zeros

Part Number: ADS122C04
Other Parts Discussed in Thread: LMP7701, TPS63002

I am using the ADS122C04, and have been quite successful using the Turbo Mode at 2000 SPS.

Recently I have switched to Normal Mode at 20 SPS and have been met with a strange issue.

Here is how the device is setup in my initialization:

resetADS122C04()

//Configue the device how we want it
writeRegister(CONFIG_REG_0, (DEFAULT_REGISTER_VALUE | AIN_P_AIN0_AIN_N_AIN2 | PGA_DISABLE | GAIN_1))

writeRegister(CONFIG_REG_1, (DEFAULT_REGISTER_VALUE | CONVERSION_MODE_CONTINUOUS | DATA_RATE_20_40 | OPERATING_MODE_NORMAL))


//Reading back the registers to determine if they are set the way we want.
uint8_t reg0, reg1;
readRegister(CONFIG_REG_0, &reg0)

readRegister(CONFIG_REG_1, &reg1)

//I then compare the read results to the expected results and confirm the settings are correct

This code works great and I am able to switch between modes easily.

Now when in the slow mode, every now and then the ADC returns zero in all 3 bytes of the conversion. I know the value should not be zero, and once it goes to zero, it stays that way until I stop the conversions and restart them.

I have read and re-read the data sheet and can't seem to find a time when the ADC should be reporting a zero value.

Any ideas? Let me know if you need more information.

  • Hi James,

    Welcome to the E2E forum!  It may also be possible that a transient has affected the device operation and perhaps the ADS122C04 has reset.  What do you have connected to the ADC inputs?  You could check by reading the registers when the issue takes place to see if the device has reset.  How do you have the reset pin connected?  It should not be floating.

    Best regards,

    Bob B

  • Hello Bob,

    Thank you for the reply. There is a photodiode connected to the ADC. Today I did perform a test where I read all 4 registers after the ADC started spitting out zeros. The registers were still programmed with the values that are set at initialization of my program. So, I thought the same thing that the device was resetting, that is not the case though. I don’t know any other time when that register value would be zero.

  • Hi James,

    How are you determining when to read the conversion result?  Are you monitoring DRDY, reading the register bit or using a timer?  I would like to know if the DRDY is toggling when you see the 0 readings.  It would be interesting to know if the ADC somehow got into the POWERDOWN state and monitoring DRDY would tell us if the device is still converting.   Also, when you start to see a 0 result, does anything change if you issue the START/SYNC command?

    Best regards,

    Bob B

  • Hey Bob,

    How are you determining when to read the conversion result? 

    I am reading register 2 and analyzing the DRDY bit to determine if the conversion result is ready.

     I would like to know if the DRDY is toggling when you see the 0 readings.  

    I do not have the DRDY line connected, so I cannot monitor for interrupts, but the bit is certainly flipping in the register. I need to check if the state of this bit changes once the zeros start to hit regularly.

    does anything change if you issue the START/SYNC command?

    It appears as though issuing a new START command does get the device to begin performing conversions again.

  • I think I just confirmed that the DRDY bit is not changing state once the zeros begin.

  • Hi James,

    It is possible that the device could be affected by a transient event that stops conversions without resetting the device.  Are you using a prototyping solution?  Do you have wires from the photodiode to the ADC inputs?

    Best regards,

    Bob B

  • Hi Bob,

    Thanks for working with me here.

    This is not on a breadboard, it is a PCBA.

    [REMOVED IMAGE]

    I just forced the ADC into powerdown mode after taking one conversion in continuous mode and the device operated as expected. My code has error states and it immediately picked up on the fact that the DRDY bit was never changing (staying 0)and timed out accordingly.

    When the device is in this weird mode, it appears that the DRDY bit is always set (1), and doesn't change state when the RDATA command is sent like it is supposed to.

  • Hi James,

    This is a strange scenario, but I think that it is transient related.  The LMP7701 is powered by +/-5V supplies which then has the potential to drive the output below ground.  For the ADS122C04, the absolute maximum voltage ratings for the input is 300mV below AVSS (GND).  Perhaps you can monitor with an oscillocope at TP1 and see if there is negative going transient.

    One other thought, the LMP7701 is rail to rail output, so do you need to set V- to -5V?  Could you not set this to GND so that the op amp cannot go negative?

    Best regards,

    Bob B

  • Hey Bob,

    Im going to get the Electrical Engineer on here to explain his thoughts on his design.

  • Hi Bob, this is Ken the EE on the James' project.  The design does require a slightly negative response from the photodiode circuit, grounding the negative rail of the op-amp does not allow us to read near zero and slightly negative which is very important for our low level photodiode readings (picoamp input range).  We do see readings as low as -300 counts, but no where near the -3mV the data sheet describes as absolute.

    Two follow on questions:

    1 - Can the ADS122C04 tolerate any negative input values?  We want to be sure we've selected the proper part!

    2 - Can you share what type of "transients" have you seen before that affect the ADS122C04 in this way?  Perhaps we should provide additional bulk capacitance on the power rail to the ADS122C04?  We currently have two 22UF caps across the output of a TPS63002 providing +5V, and a 10UF cap across the output of a LD1117S33 providing +3.3V.

    Thank you!

    Ken

  •  Hi Ken,

    Welcome to the E2E forum!  It appears that you attempted to attach some pictures which didn't come through.  This editor doesn't allow drag and drop, so to attach pictures or files please attach using the appropriate icons.

    When you attempt to measure a voltage below AVSS you are actually limited to 100mV below the AVSS with the PGA disabled to remain in the linear operating range (see sction 6.3 in the ADS122C04 datasheet).  The absolute maximum rating is 300mV below the rail.  So a small voltage can be measured below AVSS without an issue.

    The actual issue at hand with the ADS122C04 halting conversion is something that can happen with a transient event.  How much of a transient voltage can cause this issue is difficult to say.  Unfortunately there has been no absolute conclusion that a transient is causing this issue, but it could.  So here we need some sort of verification as to check if this is taking place.

    With the op amp output that could potentially traverse the rails, you need to have adequate input protection.  There is no guarantee that the op amp will never go toward the negative supply rail, especially on power-up.  So this potential issue alone is often overlooked as the design is not meant to go negative to the supply rail.  However, the analog input should be designed to limit any current should this happen.  The absolute maximum ratings for the ADS122C04 is limited to +/- 10mA through the input pin.  If the op amp should rail to the negative supply, even for a short duration, the -5V will be applied to the input pin.  At this point the ESD diode will conduct internally only limited by the filter resistor.  As the resistor value being used is 100 Ohms, the potential current could be nearly 50mA.  So this resistor should be sized to limit the current to 10 mA or less.  I would suggest sizing up the resistor to around 500 to 1k Ohms.  I would try 500 Ohms first so as to limit the gain error during normal operation.

    Best regards,

    Bob B

  • Thanks, Bob I received your reply and nice explanation.  Does TI have a recommended external part we can place across the input to protect from such transient events (maybe a zener diode)?  I'm also very concerned we will damage the device during ESD testing since both polarities are applied and we could easily swing to a large negative voltage.

    We also noted higher noise with the 100ohm resistor in series with the input during our initial testing, and are planning to replace it with a 10K in the next board revision.

    Ken

  • Hi Ken,

    To protect the input, the large concern is to prevent excessive current from running through the internal ESD structure.  The limit is defined as +/- 10mA through the analog input pins as specified in the Absolute Maximum Ratings in the ADS122C04 datasheet.  Low leakage TVS diodes seem to work the best for must customers.  Zeners are also used, but not for precision applications due to the high reverse leakage current.  When using the TVS diode the clamp voltage will be the maximum voltage that the input will see, and then the series resistance must limit the current to 10mA or more.  The series resistance will actually need to be 2 resistors with 1 resistor to protect the TVS diode to limit power dissipation. The second resistor limits the current through the ADC input pin.

    Schottky diode arrays are also used.

    There are many TVS diode options available.  TI has a TVS diode that has a flat-clamp response that is kind of interesting, but there are also other options available.

    https://www.ti.com/interface/circuit-protection/esd-protection-and-tvs-surge-diodes/overview.html?keyMatch=TVS%20DIODE&tisearch=Search-EN-everything

    Best regards.

    Bob B