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: reading 3 input channels alternately

Part Number: ADS1220

Hi everyone,

I am a new user with the ADS-1220 Analog to Digital Converter. This ADC has 3 analog input lines, AIN0, AIN1, AIN2. I am using a micro-controller (I've established 4 wire SPI communication bw the controller and ADC) to read these three inputs alternately so that I can switch bw different input lines and send respective data to my app. 

The TI datasheet for ADS1220 says that the registers have to be re-written (reconfigured) in order for the ADC to switch from AIN0 to AIN1. When I try doing this in run time when the ADC is in single-shot mode, my program does not work. I receive all highs as all my input data (i.e. in hex I receive "FFF..." on all channels which I think means that my ADC is not getting enough time to perform its conversions). 

 
When I put my ADC in continuous conversion mode instead, and then re-configure my regs in run time to read different inputs, everything works fine. 

My question is: Is there a way to re-write to the ADC registers and get data from multiple channels when it is in its default one-shot mode?  Because the continuous conversion mode uses a lot of power and this isn't the most power efficient way to run my application... 

If there is another way I can switch from AIN0 to AIN1 or AIN2 during run time (other than re-writing to my CONFIG Registers) please do let me know.  Thank you. 

  • Hi Isha,

    Welcome to the TI E2E Forums!

    The ADS1220 does not have any kind of channel sequencing, most multiplexed ADCs don't. In order to change the selected input channel it will require writing to the device registers.

    Writing to a configuration register in single-shot mode, do you then issue a START command to begin a new conversion. If not, I would recommend doing so.

    If that doesn't resolve the issue, then I would want to know how you are reading the data. Do you use a /DRDY interrupt to detect when a conversion has completed, or do you poll /DRDY to check for /DRDY low, or do you have a delay/timer that simply reads after a set amount of time?

    Also, do you issue the RDATA command, or do you just send "0x00" on DIN to clock out the data?