SBAA288A July   2018  – January 2019 ADS7142

 

  1.   TM4C1294 interface to ADS7142 software library
    1.     Trademarks
    2. 1 Introduction
    3. 2 Hardware
    4. 3 Software
      1. 3.1 Header Files
      2. 3.2 ADS7142 Device Functional Modes Overview
      3. 3.3 Software Functions
    5. 4 Using the Software
      1. 4.1 Prerequisites
      2. 4.2 Getting Started
      3. 4.3 Using the Library
    6. 5 Main Routines and Test Data
      1. 5.1 Manual Mode
      2. 5.2 Autonomous Mode With Pre-Alert
      3. 5.3 Autonomous Mode With Post-Alert
      4. 5.4 Autonomous Mode With Start Burst Data
      5. 5.5 Autonomous Mode With Stop Burst Data
      6. 5.6 High Precision Mode
    7. 6 References
  2.   Revision History

High Precision Mode

High precision mode increases the accuracy of the data measurement to 16-bit accuracy. In this mode, 16 12-bit conversions are placed into an accumulator that sums up the conversions in the accumulator. Equation 2 calculates the high precision data for each channel.

Equation 2. eq_high_prec_data_sbas773.gif

Each channel has an accumulator. Figure 33 shows the high precision mode conversion dynamics.

high_prec_mode_dual_channel_sbas773.gifFigure 33. High Precision Mode With Dual-Channel Configurations

The main routine is the following:

#include "ADS7142RegisterMap.h" /* ADS7142_HighPrecisionMode_AutoSequencing_CH0_CH1_Scan.c */ int main(void) { //Initialize the master MCU (0 = 100 kHz SCL, 1 = 400 kHz SCL) TM4C1294Init(0); //Calibrate the offset out of ADS7142 ADS7142Calibrate(); //Let's put the ADS7142 into High Precision Mode with both channels enabled in Single-Ended Configuration //Select the channel input configuration ADS7142SingleRegisterWrite(ADS7142_REG_CHANNEL_INPUT_CFG, ADS7142_VAL_CHANNEL_INPUT_CFG_2_CHANNEL_SINGLE_ENDED); //Confirm the input channel configuration uint32_t channelconfig; ADS7142SingleRegisterRead(ADS7142_REG_CHANNEL_INPUT_CFG, &channelconfig); //Select the operation mode of the device ADS7142SingleRegisterWrite(ADS7142_REG_OPMODE_SEL, ADS7142_VAL_OPMODE_SEL_HIGH_PRECISION_MODE); //Confirm the operation mode selection uint32_t opmodeselconfig; ADS7142SingleRegisterRead(ADS7142_REG_OPMODE_SEL, &opmodeselconfig); //Set the I2C Mode to High Speed (optional) //ADS7142HighSpeedEnable(ADS7142_VAL_OPMODE_I2CMODE_HS_1); //Check the I2C Mode Status uint32_t opmodei2cconfig; ADS7142SingleRegisterRead(ADS7142_REG_OPMODE_I2CMODE_STATUS, &opmodei2cconfig); //Auto Sequence both channels 0 and 1 ADS7142SingleRegisterWrite(ADS7142_REG_AUTO_SEQ_CHEN, ADS7142_VAL_AUTO_SEQ_CHENAUTO_SEQ_CH0_CH1); //Confirm Auto Sequencing is enabled uint32_t autoseqchenconfig; ADS7142SingleRegisterRead(ADS7142_REG_AUTO_SEQ_CHEN, &autoseqchenconfig); //Select the Low Power Oscillator or high speed oscillator ADS7142SingleRegisterWrite(ADS7142_REG_OSC_SEL, ADS7142_VAL_OSC_SEL_HSZ_HSO); //Confirm the oscillator selection uint32_t oscselconfig; ADS7142SingleRegisterRead(ADS7142_REG_OSC_SEL, &oscselconfig); //Set the minimum nCLK value for one conversion to maximize sampling speed ADS7142SingleRegisterWrite(ADS7142_REG_nCLK_SEL, 21); //Confirm the nCLK selection uint32_t nCLKselconfig; ADS7142SingleRegisterRead(ADS7142_REG_nCLK_SEL, &nCLKselconfig); //Enable the accumulator ADS7142SingleRegisterWrite(ADS7142_REG_ACC_EN, ADS7142_VAL_ACC_EN); //Set SEQ_START Bit to start the sampling sequence ADS7142SingleRegisterWrite(ADS7142_REG_START_SEQUENCE, ADS7142_VAL_START_SEQUENCE); //Begin High Precision Mode Scanning Ch0 and Ch1 continuously while(1) { //Sample 16 conversions from each channel while (ADS7142DataRead_count(32) < 0); //Check the Accumulator Status to count the number of conversions complete uint32_t accstatus; ADS7142SingleRegisterRead(ADS7142_REG_ACCUMULATOR_STATUS, &accstatus); //Read the MSB of Ch0 Accumulated Data after 16 accumulations are complete uint32_t accch0MSB; ADS7142SingleRegisterRead(ADS7142_REG_ACC_CH0_MSB, &accch0MSB); //Read the LSB of Ch0 Accumulated Data after 16 accumulations are complete uint32_t accch0LSB; ADS7142SingleRegisterRead(ADS7142_REG_ACC_CH0_LSB, &accch0LSB); //Read the MSB of Ch1 Accumulated Data after 16 accumulations are complete uint32_t accch1MSB; ADS7142SingleRegisterRead(ADS7142_REG_ACC_CH1_MSB, &accch1MSB); //Read the LSB of Ch1 Accumulated Data after 16 accumulations are complete uint32_t accch1LSB; ADS7142SingleRegisterRead(ADS7142_REG_ACC_CH1_LSB, &accch1LSB); //Set the SEQ_START Bit again ADS7142SingleRegisterWrite(ADS7142_REG_START_SEQUENCE, ADS7142_VAL_START_SEQUENCE); } //Return no errors return 0; }

Figure 34 shows the channel configuration and the selection of the opmode and oscillator for this ADS7142 functional mode.

ADS7142HighPrecisionModeDualChannelSamplingData1.gifFigure 34. High Precision Mode Dual-Channel Sampling Test Data 1

Figure 35 shows the setting of clock cycles required for a conversion, the enabling of accumulators, and the start of the conversion sequence.

ADS7142HighPrecisionModeDualChannelSamplingData2.gifFigure 35. High Precision Mode Dual-Channel Sampling Test Data 2

Figure 36 shows the number of conversions that fill the accumulator and the results of the high precision accumulation.

ADS7142HighPrecisionModeDualChannelSamplingData3.gifFigure 36. High Precision Mode Dual-Channel Sampling Test Data 3

Figure 37 shows the accumulated results and restart of the conversion sequence.

ADS7142HighPrecisionModeDualChannelSamplingData4.gifFigure 37. High Precision Mode Dual-Channel Sampling Test Data 4