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.

ADS1248

Other Parts Discussed in Thread: ADS1248

Hello,

I have 2 ADS1248 on my board .
They are wired in the same way : 4 RTD 3 wires . Like Figure 85 in the ADS1248 datasheet.
SPI is the same but CS, DRDY, and START are independant.

I have several questions:

When I read the diode temperature in ADS1248, I have the first component which returns 0x05ED5F (~ 20 °C) and the second return 0x701269 (much tro hot :-)) ! (All discret value is the same for 2 components)

When I read the revision ID , the first one return 0x00 and 0x09 for the second ! What is the most plausible revision ID ?

On the first ADS1248 , when I put a PT100 , and I did the conversion , I get consistent values ​​. But I'm not sure I use correctly the offset and gain.
Here is my procedure :
At startup :

        SpiWrite(0x16); //STOP Automatic Conversion
        SpiWrite(0x06); //reset
        __delay_ms(2);
        Rev = ADSRegRead(0x0A); //Lecture de revision

        ADSRegWrite(0x04, 0b00000000);	// OFC0:  0 => reset offset calibration
        ADSRegWrite(0x05, 0b00000000);	// OFC1:  0 => reset offset calibration
        ADSRegWrite(0x06, 0b00000000);	// OFC2:  0 => reset offset calibration

        ADSRegWrite(0x0c, 0b00000000);	// GPIOCFG: we don't use them
        ADSRegWrite(0x0d, 0b00000000);	// GPIODIR: we don't use them
        ADSRegWrite(0x0e, 0b00000000);	// GPIODAT: we don't use them

For each cycle :
I read offset
I read the gain
I read the value on the channel.
Then I calculated the following :

Rtd = (Value - Offset) ;
Rtd *= R_REF * 2.0 ;
Rtd /= gain ;
Rtd += R_COMP ;

Is this correct?

Thank you in advance .

  • Hi Philbiche,

    It sounds to me like you are having a communication issue.  I would compare the register reading between the two devices to the default values.  They should be the same (except for the OFC and FSC registers).  I believe the current ID bits setting is 0111 for bits 7:4 of the IDAC0 register.

    SCLK should dwell low, and the data should change on the rising edge of SCLK and remain steady on the falling edge of SCLK.  CS should remain low throughout the entire communication transaction.

    You should not set the OFC (or FSC) registers to 0.  You should run the SELFOCAL command once you have configured the ADS1248.  This will place an internal short on the ADS1248 and automatically calibrate the offset so that the result returned will remove the offset of the ADS1248.

    Using RCOMP can be an issue with drift, and the accuracy can diminish.  I would suggest not to use it.  Calibration requires a known specific value and adjust the measurement to correspond.  If the offset is dealt with by the SELFOCAL, then the only adjustment is the gain.  The actual measurement is not a value directly corresponding to ohms of the RTD.  It is a voltage measurement unless you make the measurement ratiometric whereby the reference uses the same current that excites the RTD.  In this way the ADC result is a ratio of the RTD to the reference resistor.  This requires a reference resistor that is very precise and low drift.  The calculation is now relative to accuracy of the value used for the reference resistor that is used in the RTD calculation.  This becomes a different offset of the theoretical to the actual value of resistance.

    You will most likely have some gain error as well, which requires 2 points to determine the actual slope to the ideal slope (rise over run).  This calculation will need to be multiplied to the result then you subtract the offset.  Once you have the resistance result you will need to convert to temperature, which is another whole set of calculations.

    Best regards,

    Bob B

  • Hi Bob,

    Thanks for your answer.

    I have found my problem... it's a short circuit between AIN0 and GND !

    I use the call to SELFOCAL, and all is OK.

    Regards,

    Gaétan