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.

ADS1220: Switching between Analog Inputs and Internal Temperature Sensor

Part Number: ADS1220


We have been using the ADS1220 for a wheatstone bridge sensor and now we would like to do temperature measurements using the internal temperature sensor as well. However, we found that data received from the ADS1220 is mixed up so that temperature measurements are bridge values and that  bridge sensor measurements have an intermittently wrong value, which we suspect is a temperature value.

The implementation we would like is: Bridge measurement every 15millisec, Int Temp measurements every 1sec. During Int Temp measurement, Bridge measurement is paused. 

Configuration Registers are as follows:

  • Register: 00  /  01   /  02  /  03 
  • Bridge:    3E  /  40  /   88  /   00
  • Int Temp: 3E /   42  /   88  /  00  

Psuedo-code for sampling the Bridge Sensor and Int Temp sensor is as follows:

  1. Send All Configuration Registers 
  2. Send Start Command
  3. Wait for Data Ready
  4. Read Data Register
  5. Power Down
  6. Compute output

When we run each sample individually (ie. Bridge measurement every 15millisec only  -or- Int Temp every 1 sec only), the values received are correct. However, when ran together so that the ADS1220 has to switch inputs, it mixes up the values. We monitored DRDY pin and it seems that there is a 100millisec gap when the switch occurs.


Is our setup the ideal way to handle the switch between Bridge and Int Temp? Is there a way to ensure that the RDATA is the right value we want? (ie. perhaps read back the Configuration registers?) 


  • Leo,

    I am reviewing your application and will get back with you soon.

  • Leo,

    I had a chance to review your post.  Your pseudo-code looks correct.  I checked your registers and they are also correct.  I am a little unclear on what you mean by "when ran together so that the ADS1220 has to switch inputs, it mixes up the values".  Can you adjust your pseudo-code to show where the transition happens from the bridge sensor to the internal temperature sensor.   Also, show the loop that you are using for multiple reads.


  • Hi Art, 

    Thank you for reviewing our question. Here is the broader pseudo code which is within our while loop

    1. Increment counts
    2. If countA = 1sec
      1. Set Temp Measure Flag
      2. Send All Configuration Registers (Int Temp)
      3. Send Start Command
      4. Wait for Data Ready
      5. Read Data Register
      6. Power Down
      7. Compute output
      8. Clear Temp Measure Flag
      9. Zero CountA
    3. If countB = 15ms
      1. If Temp Measure Flag is clear
        1. Send All Configuration Registers (Bridge)
        2. Send Start Command 
        3. Wait for Data Ready
        4. Read Data Register
        5. Power Down
        6. Compute output
        7. Zero CountB
    4. Delay
    5. Back to #1

    In the context of my previous post, when comment out step #2 or step #3 it works well; computed values are correct. When we try to do both steps #2 & #3, the values get mixed up. 

    For temperature measurements, is typically ~0 and responds to bridge changes

    For bridge measurements, value is mostly correct and responds to bridge changes. However, every 1sec or so, we get an out of range value. 

    I hope that clarifies the question

  • Leo,

    1.  Great clarification, thank you.
    2.  I see the power down in your pseudo code but I do not see power up.  I am curious where this is done.  As an experiment, I would like you to try commenting out the power down and power up.  I want to make sure that something strange isn't happening during power up and down (e.g. not fully power down or digital i/o is on when power is off).  The ADS1220 has a strict power supply ramp rate that must be met (figure 83).
    3.  Another good trouble shooting test would be to read back register 1.  If it seems like the temp sensor and analog input are swapped it would be good to see what this register is.  I know you mentioned this in the original post (good idea!).
    4. I think it is possible that something is getting out of sync when the power up / down happens.  You may consider issuing a reset before writing the registers (after power up).  Technically this shouldn't be needed as the power-up should automatically reset the device, but maybe the power up isn't clean.

    I hope this helps.  Thanks for the great documentation of your problem.