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: ADS1247/8 Calibration

Part Number: ADS1248
Other Parts Discussed in Thread: ADS1247

hello,

I'm trying to calibrate the ads1247 and ads1248, but the self offset calibration isn't doing anything. Here is the pseudo code of what I'm doing:

  1. reset ADC
  2. setup to read internal temperature
  3. read internal temperature 
  4. set registers:
    1. MUX1: VREFCON always on, REFSELT default, MUXCAL default
    2. SYS0: GAIN 4, DATARATE 5 sps
    3. MUX0: BCS default, MUX_SP ain0, MUX_SN ain1
    4. IDAC0: DRDY MODE default, IMAG 1000uA
    5. IDAC1: both disconnected
  5. set FSC registers to : 0xff, 0x00, 0xff
  6. set OFC registers to : 0xf0, 0x00, 0x0f
  7. read full scale and offset registers
  8. run self offset calibration by
    1. SS low
    2. set mux1 to offset calibration (0b001)
    3. send 0x62
    4. return MUX1 to previous state
    5. SS high
  9. read full scale and offset registers

if the command were working I would see different values, but I'm not. here is what I am getting from the ADC:

internal Temp. : 27.11
Offset register: 111100000000000000001111
Full S register: 111111110000000011111111

After calibration 

Offset register: 111100000000000000001111
Full S register: 111111110000000011111111

  • Daniel,


    Reading through your pseudo code, I don't see anything specifically wrong. I do have a couple of recommendations and things to try.

    First, I would leave the FSC register alone. The value is factory programmed and generally it will get you very good performance in gain error. Also, the FSR value you used is much larger than normal, and I'm not sure if there will be issues in scaling. If you want to test the gain calibration later, that's fine, but I'd use smaller changes in the value. However, I don't think this is the real problem with the communication.

    Second, I would break up the calibration command into the separate parts with the SS line. You would change this to:

    SS low
    set mux1 to offset calibration (0b001)
    SS high

    SS low
    send 0x62
    SS high

    SS low
    return MUX1 to previous state
    SS high

    I just wanted to break it up just in case there were problems in the SPI write. This way each communication starts a new SPI transaction.

    If this doesn't work, can you please post a scope shot of your SPI communications? There might be some sort of timing violation in the communication, or some other issue in the SPI. We might be able to see more if you can grab the /CS, DIN, DOUT, and SCLK lines.


    Joseph Wu
  • I made the changes to the code, but it didn't work. Also the FSC and OFC registers were both 0, I read them before changing. I don't believe that there is a problem with the spi communication seeing as everything but the calibration works, but I'll post the SPI lines within a week.
  • Daniel,


    I'll wait for your plots. Just to check, you didn't write 00 00 00 to the FSC values before that did you? That could completely mess up your calibration output.


    Joseph Wu
  • Daniel,


    I haven't heard back from you for a while. Were you able to find a solution? If you figured out the problem, great. If not, then you can post back with some scope shots of your SPI transaction. Also, let me know if you've changed the FSC values. A large change in FSC can cause a large scaling error in the offset.

    Regardless, I'll close the post if don't hear from you. Hopefully, you were able to find a solution.


    Joseph Wu