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.

ADS112C04: VREF Monitoring fails

Part Number: ADS112C04

Tool/software:

Dear TI forum,

I'm trying to establish a wire break check for a 4-wire Pt1000 input stage according to SBAA483.

The device ist already measuring properly and everything is working fine except for this check. 

This is the circuit:

This is the code:

bool ADS112C04_checkWireBreak(void)
{
    uint16_t VREF_MON;
    // REG0 = 11000001: VREF Monitor, Gain 1, PGA Bypass
    ADS112C04_writeRegister(CMD_WREG0, 0xC1);
    // REG1 = 11010000: 2000 SPS, SingleShot, Internal Ref., No Tempsens.
    ADS112C04_writeRegister(CMD_WREG1, 0xD0);
    // REG2 = 00001100: No Counter, No CRC, No Burnout-Dect, IDAC 250 µA
    ADS112C04_writeRegister(CMD_WREG2, 0x0C);
    // REG3 = 10000000: IDAC1 on AIN3, IDAC2 off
    ADS112C04_writeRegister(CMD_WREG3, 0x80);
    // Check current path
    if (!ADS112C04_measure()) return (STATUS_FAIL);
    __delay_cycles(4640); // 580 µs
    if (!ADS112C04_receive()) return (STATUS_FAIL);
    ((unsigned char *)&VREF_MON)[1] = ADS112C04_RxBuf[0];
    ((unsigned char *)&VREF_MON)[0] = ADS112C04_RxBuf[1];
    if (VREF_MON < VREF_THRESHOLD) return (STATUS_FAIL);
    // Check pos. voltage path
    // REG3 = 00100000: IDAC1 on AIN0, IDAC2 off
    ADS112C04_writeRegister(CMD_WREG3, 0x20);
    if (!ADS112C04_measure()) return (STATUS_FAIL);
    __delay_cycles(4640); // 580 µs
    //delay_us(580);
    if (!ADS112C04_receive()) return (STATUS_FAIL);
    ((unsigned char *)&VREF_MON)[1] = ADS112C04_RxBuf[0];
    ((unsigned char *)&VREF_MON)[0] = ADS112C04_RxBuf[1];
    if (VREF_MON < VREF_THRESHOLD) return (STATUS_FAIL);
    // Check neg. voltage path
    // REG3 = 01000000: IDAC1 on AIN1, IDAC2 off
    ADS112C04_writeRegister(CMD_WREG3, 0x40);
    if (!ADS112C04_measure()) return (STATUS_FAIL);
    __delay_cycles(4640); // 580 µs
    if (!ADS112C04_receive()) return (STATUS_FAIL);
    ((unsigned char *)&VREF_MON)[1] = ADS112C04_RxBuf[0];
    ((unsigned char *)&VREF_MON)[0] = ADS112C04_RxBuf[1];
    if (VREF_MON < VREF_THRESHOLD) return (STATUS_FAIL);

    return (STATUS_SUCCESS);
}

All the 3 measurements that this code triggers return a value of around 16,000 increments, even

if he RTD has been disconnected for a while and all the capacitors are dischharged.

What am I doing wrong?