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.

ADS7142-Q1: Data conversion does not happen if there is a 0 V input signal on AIP_AIN0

Part Number: ADS7142-Q1

We are testing our fault monitoring of our signal and the converter works fine if we have the voltage coming in.  But if we zero out the signal to force an error, the convesion on the ADC does not complete.

Here is our code for setting up the converter:

static void ADS7142Init(uint8_t address)
{
uint8_t buf[16];
uint8_t len = 0;

// Do a block write for register to be updated are incremented by 1
buf[len++] = BLOCK_WRITE_CMD;
buf[len++] = REG_ALERT_CHAN; // Start register address
buf[len++] = 0x03; // REG 0x34 Alert enabled for channels 0 & 1
buf[len++] = 0x00; // NOTE* Register 0x35 doesn't exist so setting it 0
buf[len++] = 0x00; // REG 0x36 Pre Alert count set to 1
buf[len++] = 0x01; // REG 0x37 Enable window comparator
// 44V high limit (44000 << 12)/52800 = D55 ceil to D60
buf[len++] = 0x60; // REG 0x38 Channel 0 High Threshold LSbs
buf[len++] = 0x0D; // REG 0x39 Channel 0 High Threshold MSbs
// 36V low limit (36000 << 12)/52800 = AE8 floor to AE0
buf[len++] = 0xE0; // REG 0x3A Channel 0 Low Threshold LSbs
buf[len++] = 0x0A; // REG 0x3B Channel 0 Low Threshold MSbs
// current limit to 2A (2000 << 12)/3300 = 9B2 ceil to 9C0
buf[len++] = 0xC0; // REG 0x3C Channel 1 High Threshold LSbs
buf[len++] = 0x09; // REG 0x3D Channel 1 High Threshold MSbs
buf[len++] = 0x00; // REG 0x3E Channel 1 Low Threshold LSbs
buf[len++] = 0x00; // REG 0x3F Channel 1 Low Threshold MSbs
buf[len++] = 0x00; // REG 0x40 Channel 0 Hysteresis
buf[len++] = 0x00; // REG 0x41 Channel 1 Hysteresis
I2CBlockWriteByte(address, buf, len);

// normal oscillator
ADSWriteSingle(address, REG_OSC_SEL, 0x00);

// REG 0x1C Channels 0 & 1 set for auto sequencing
ADSWriteSingle(address, REG_OPMODE_SEL, 0x06);

// REG 0x20 Channels 0 & 1 set for auto sequencing
ADSWriteSingle(address, REG_AUTO_SEQ_CHEN, 0x03);

// REG 0x24 Channel set for two channel, single ended
ADSWriteSingle(address, REG_CHANNEL_INPUT_CFG, 0x03);

// REG 0x28 Data format 12 bit followed by channel id
ADSWriteSingle(address, REG_DOUT_FORMAT_CFG, 0x01);

// REG 0x2C Pre alert data buffer mode
ADSWriteSingle(address, REG_DATA_BUFFER_OPMODE, 0x04);

// REG 0x1E Set SEQ_START to start conversion
ADSWriteSingle(address, REG_START_SEQUENCE, 0x01);
}

  • Hello,

    If you are setting up the device, and it works, and then ONLY changing the input signal, then I doubt it is a register issue. 

    Would you explain what you mean by, "the conversion on the ADC does not complete."   What does the device do? What does the device output when reading the channel result? Or is alarm not triggering?

    How are you zero-ing the input? I would suggest grounding the input, and not letting it float. 

    Regards

    Cynthia

  • Here is the response from our SW designer:

    "We have configured the device in Manual trigger mode where s/w controls start/stop conversion.

    Would you explain what you mean by, "the conversion on the ADC does not complete."   What does the device do? 
       The s/w skips readding databuf status
     
     What does the device output when reading the channel result?
       The device does not complete data conversion for both channels. The databuf status register(0x04) value is (0x01) when input is 0.
       When input is present the databuf status (0x04) register value is (0x4) or more as we expect atleast databuf status to have filled data for both channels."
  • After reviewing his code, the SW guy found the issue.  It is now working.  Not a device issue.