ADS1235EVM: issues running at 1200 sps

Part Number: ADS1235EVM
Other Parts Discussed in Thread: ADS1235,

ADS1235 Drops from 1200 SPS to 20 SPS

I am testing an ADS1235 with an nRF device running nRF Connect SDK and Zephyr.

The ADC is configured for:

1200 SPS

Sinc4 digital filter

Continuous conversion

SPI mode 1

1 MHz SPI clock

DRDY interrupt-driven sampling

VREF = 5.0 V

PGA gain = 1

Pin configuration

The ADS1235 control and SPI pins are configured as follows:

CS: GPIO output, active low

DRDY: GPIO input, active low

RESET: GPIO output, active low

START: GPIO output, active high

SCLK: SPI clock output, 1 MHz

MOSI: SPI controller output connected to the ADS1235 DIN pin

MISO: SPI controller input connected to the ADS1235 DOUT pin

The SPI interface uses mode 1:

CPOL = 0
CPHA = 1
MSB first
8-bit words

The GPIO polarity definitions in the Devicetree are:

cs-gpios = GPIO_ACTIVE_LOW
drdy-gpios = GPIO_ACTIVE_LOW
reset-gpios = GPIO_ACTIVE_LOW
start-gpios = GPIO_ACTIVE_HIGH

During initialization:

CS is configured as an inactive output, which physically holds CS high.

RESET is configured as an inactive output, which physically holds RESET high.

START is configured as an inactive output, which physically holds START low.

DRDY is configured as an input.

DRDY interrupts are triggered using GPIO_INT_EDGE_TO_ACTIVE, corresponding to the physical falling edge because DRDY is active low.

START is held low during reset and register configuration.

START is driven high after initialization to begin continuous conversions.

The reset sequence asserts RESET low for approximately 10 microseconds, releases it high, and then waits 10 milliseconds before configuring the ADC.

Register configuration

The input multiplexer and MODE0 register are configured as follows:

#define ADS1235_INPMUX_AIN0_AIN1 0x34U
#define ADS1235_MODE0_1200_SPS_SINC4 0x4BU

The register readback matches the values that were written:

INPMUX = 0x34, expected 0x34
MODE0 = 0x4b, expected 0x4b (1200 SPS, sinc4)

The ADC initially runs at approximately 1200 SPS:

samples=1200 code=-126 voltage=-0.000075 V rate=1197.60 SPS average=1197.60 SPS read_errors=0 timeouts=0
samples=2400 code=-120 voltage=-0.000072 V rate=1201.20 SPS average=1199.40 SPS read_errors=0 timeouts=0
samples=3600 code=-114 voltage=-0.000068 V rate=1201.20 SPS average=1200.00 SPS read_errors=0 timeouts=0
samples=4800 code=-113 voltage=-0.000067 V rate=1201.20 SPS average=1200.30 SPS read_errors=0 timeouts=0
samples=6000 code=-117 voltage=-0.000070 V rate=1200.00 SPS average=1200.24 SPS read_errors=0 timeouts=0
samples=7200 code=-117 voltage=-0.000070 V rate=1201.20 SPS average=1200.40 SPS read_errors=0 timeouts=0
samples=8400 code=0 voltage=0.000000 V rate=1201.20 SPS average=1200.51 SPS read_errors=0 timeouts=0

After 8,400 samples, the measured rate drops significantly:

samples=9600 code=8 voltage=0.000005 V rate=20.03 SPS average=143.50 SPS read_errors=0 timeouts=0
samples=10800 code=7 voltage=0.000004 V rate=20.02 SPS average=85.14 SPS read_errors=0 timeouts=0
samples=12000 code=8 voltage=0.000005 V rate=20.02 SPS average=64.24 SPS read_errors=0 timeouts=0

The same code and hardware were also tested at 100 SPS, and the ADC ran perfectly without the rate dropping.

I have also confirmed that the CLKIN pin is connected to ground.

What could cause the sampling rate to drop so quickly from approximately 1200 SPS to 20 SPS? 

Thank you for your time.

  • Hello Skyler,

    20sps is the default data rate after reset.  When the ADC drops to 20sps, can you read back the configuration registers to see if the values have changed to the default values?

    My best guess is the part is getting reset.  This could be caused by a high noise power supply (not likely an issue if you are using the ADS1235EVM), or the RESET line is inadvertently toggling, causing a reset.

    I suggest connecting a scope or logic analyzer to the reset line and monitor to see if it is held continuously high.

    Regards,
    Keith Nicholas
    Precision ADC Applications