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.

ADS124S06: Calibration issue, please help.

Part Number: ADS124S06


Hi, we recently started to use this AD Converter and almost everything works fine, we can setup it as we want and we can correctly read the converted data, the problem is that we can't run a calibration even if we followed everything that is wrote into the datasheet.

Our startup sequence is (taken from our code):

START
{
Set_ADC(u8_device_i, ENABLE_ADC);                              // Device CS goes DOWN
Send_byte_command(adc_commands.u8_reset_cmd);      // Send RESET COMMAND
Set_ADC(u8_device_i, DISABLE_ADC);                             // Device CS goes HIGH
WAITING_FOR(1);                                                               // Wait for 1 ms

Set_ADC(u8_device_i, ENABLE_ADC);                              // Device CS goes DOWN
Write_all_registers();                                                            // Send WREG COMMAND
Set_ADC(u8_device_i, DISABLE_ADC);                             // Device CS goes HIGH
WAITING_FOR(1);                                                               // Wait for 1 ms

START_ADC = 1;                                                                 // START PIN GOES HIGH
WAITING_FOR(1);                                                               // Wait for 1 ms
START_ADC = 0;                                                                 // START PIN GOES LOW

Set_ADC(u8_device_i, ENABLE_ADC);                              // Device CS goes DOWN
Send_byte_command(adc_commands.u8_sfocal_cmd);    // Send SFOCAL COMMAND
Set_ADC(u8_device_i, DISABLE_ADC);                             // Device CS goes HIGH
WAITING_FOR(1);                                                               // Wait for 1 ms

Read_all_registers(u8_device_i);                                         // Send RREG COMMAND
}
END

Our register setup is:

0x01, // Register 00h: [ID]
0x00, // Register 01h: [STATUS]
0x12, // Register 02h: [Input Multiplexer]
0x0B, // Register 03h: [Gain Setting]
0x34, // Register 04h: [Data Rate]
0x02, // Register 05h: [Reference Control]
0x07, // Register 06h: [Excitation Current Register 1]
0x30, // Register 07h: [Excitation Current Register 2]
0x00, // Register 08h: [Sensor Biasing]
0x10, // Register 09h: [System Control]
0x00, // Register 0Ah: [Offset Calibration Register 1] LSB
0x00, // Register 0Bh: [Offset Calibration Register 2]
0x00, // Register 0Ch: [Offset Calibration Register 3] MSB
0x00, // Register 0Dh: [Gain Calibration Register 1] LSB
0x00, // Register 0Eh: [Gain Calibration Register 2]
0x40, // Register 0Fh: [Gain Calibration Register 3] MSB
0x00, // Register 10h: [GPIO Data]
0x00, // Register 11h: [GPIO Configuration]

I tried to read the registers before and after calibration (SFOCAL) command and nothing happend, I also tried with the other calibration commands (SYOCAL and SYGCAL) but nothing.

NOTE: I tried to manually set SYS_MON[2:0] = 001b and then run the SFOCAL command, but still nothing.

Where am I wrong? Please help and if more information is needed please ask.

Thanks in advance for your support.

  • Hi Lorenzo,

    Welcome to the E2E forum! On page 66 in section 9.5.3.9 SFOCAL in the ADS124S06 datasheet is an important statement in the last sentence of the section.  "Calibration commands must be issued in conversion mode."  

    Prior to issuing the SFOCAL command in your code sequence, you set the START pin high which places the ADS124S06 into conversion mode, then 1ms later you set the START pin low which places the device into standby mode (see the Operating Flow Chart on page 58 in Figure 82).  To place the ADS124S06 into conversion mode, you must either set the START pin high or issue the START command.

    Best regards,

    Bob B

  • Hi Sir. Thanks for fast reply, I tried both solutions (keep START PIN HIGH or By using START COMMAND) but nothing happened, after the SFOCAL I read the calibration registers and everything is 0x00, I modified my code as follow:

    Option 1)
    START_ADC = 1;                                                              

    Option 2)
    Set_ADC(u8_device_i, ENABLE_ADC);
    Send_byte_command(adc_commands.u8_start_cmd);    // SEND START COMMAND
    Set_ADC(u8_device_i, DISABLE_ADC);

    SAME CODE AS BEFORE
    *******************************
    WAITING_FOR(1);

    Set_ADC(u8_device_i, ENABLE_ADC);
    Send_byte_command(adc_commands.u8_sfocal_cmd);
    Set_ADC(u8_device_i, DISABLE_ADC);
    WAITING_FOR(1);

    Read_all_registers(u8_device_i);
    *******************************
    SAME CODE AS BEFORE

    Option 1)
    START_ADC = 0;

    Option 2)
    Set_ADC(u8_device_i, ENABLE_ADC);
    Send_byte_command(adc_commands.u8_stop_cmd);    // SEND STOP COMMAND
    Set_ADC(u8_device_i, DISABLE_ADC);

    NOTE: I'm sure to have CONTINUOUS MODE = ON because DATA RATE REG (04h) is 0001 0100 = 0x14h -> bit [5] = 0b

    NOTE 2: I'm trying to calibrate 3 AD Converter on the same board switched using the CS pin, and none of them is working correctly.


    Thanks for your support.

    - Lorenzo.

  • Hi Lorenzo,

    You code is showing that you are issuing the SFOCAL command then only waiting 1ms before reading the registers.  In the System Control Register (0x09) the settings you are using is 8 samples required to average for the calibration.  This will take at least 400ms before you would see any change in the offset registers.

    I would suggest using continuous conversion mode, start converting, issue the SFOCAL command, wait 500ms, then read the registers.

    Best regards,

    Bob B