Hello Team,
I have problem with conversion results are not accurate while scanning across the input channels of ADS1262 .
I am generating a PWM signal from microcontroller and feeding to start pin of ADS1262.
PWM Signal Details :
Duty cycle : 60% Period : 1083 micro seconds
T on time : 650.4 micro seconds T off time : 432.6 micro seconds
During T 0ff time i am configuring the ADC registers. During T on time (as START pin is High)ADC starts the conversion. I am reading the ADC data
through Mibspi interrupt (falling edge of DRDY pin)
I have connected two poteniometers to the Channels 0 and 1.
channel 0 = 1.968 V (multimeter reading ) AINCOM = 2.53 V
INPMUX A0 means 2.53V - 1.968 = 0.562 V
channel 1 = 1.040 V (multimeter reading ) AINCOM = 2.53 V
INPMUX A0 means 2.53V - 1.968 = 1.49 V
ADC registers configuration is attached in the file.
What i was doing is,
In a for loop of 12, i am reading channels A0 A0 A0 A1 A0 A0 A0 A0 A0 A0 A0 A0. I am getting a output like this
ADC Measurement 0 0.556048
ADC Measurement 1 0 0.555752
ADC Measurement 2 0.555715
ADC Measurement 3 0.896518
ADC Measurement 4 0.795152
ADC Measurement 5 0.693782
ADC Measurement 6 0.637709
ADC Measurement 7 0.604710
ADC Measurement 8 0.584539
ADC Measurement 9 0.572369
ADC Measurement 10 0.565090
ADC Measurement 11 0.565090
The ADC measurements from channel 3 are affected. When i increase the programmable delay (by increasing the T off period ) the outputs are fine as below
New PWM Signal Details :
Duty cycle : 10% Period : 13083 micro seconds
T on time : 1308.8 micro seconds T off time : 11774.2 micro seconds ( 12 ms)
ADC Measurement 0 0.557024
ADC Measurement 1 0.555677
ADC Measurement 2 0.555159
ADC Measurement 3 1.481006
ADC Measurement 4 0.560630
ADC Measurement 5 0.556082
ADC Measurement 6 0.555915
ADC Measurement 7 0.555258
ADC Measurement 8 0.556105
ADC Measurement 9 0.555247
ADC Measurement 10 0.555706
ADC Measurement 11 0.555706
Can please suggest me (w.r.t 38400 SPS ) what is programmble delay required for chanel to channel selection? and why this much 12 ms delay required for ADC settling
void initMeasurementSequence(void) { uint32 i; i = 0; ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////// measurement 0 Definitions ////////////////////////////////////////////////////////////////////////////// TempMeasCon.POWER = 0x03; TempMeasCon.INTERFACE = 0x05; TempMeasCon.MODE0 = 0x06; TempMeasCon.MODE1 = 0x00; TempMeasCon.MODE2 = 0x0F; TempMeasCon.INPMUX = 0xA0; TempMeasCon.OFCAL0 = 0x00; // DEFAULT CALIBRATION TempMeasCon.OFCAL1 = 0x00; // DEFAULT CALIBRATION TempMeasCon.OFCAL2 = 0x00; // DEFAULT CALIBRATION TempMeasCon.FSCAL2 = 0x00; // DEFAULT CALIBRATION TempMeasCon.FSCAL1 = 0x00; // DEFAULT CALIBRATION TempMeasCon.FSCAL0 = 0x40; // DEFAULT CALIBRATION TempMeasCon.IDACMUX = 0xBB; // IDAC NOT CONNECTED TempMeasCon.IDACMAG = 0x00; // IDAC OFF TempMeasCon.REFMUX = 0x00; // REF = INTERNAL 2.5V TempMeasCon.TDACP = 0x00; // TDACP NOT CONNECTED TempMeasCon.TDACN = 0x00; // TDACN NOT CONNECTED TempMeasCon.GPIOCON = 0x00; // ALL GPIO DISCONNECTED TempMeasCon.GPIODIR = 0x00; // ALL GPIO OUTPUTS TempMeasCon.GPIODAT = 0x00; // ALL GPIO = 0 //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// setMeasurement(TempMeasCon, i); i = 1; ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////// measurement 1 Definitions ////////////////////////////////////////////////////////////////////////////// TempMeasCon.POWER = 0x03; TempMeasCon.INTERFACE = 0x05; TempMeasCon.MODE0 = 0x06; TempMeasCon.MODE1 = 0x00; TempMeasCon.MODE2 = 0x0F; TempMeasCon.INPMUX = 0xA0; TempMeasCon.OFCAL0 = 0x00; // DEFAULT CALIBRATION TempMeasCon.OFCAL1 = 0x00; // DEFAULT CALIBRATION TempMeasCon.OFCAL2 = 0x00; // DEFAULT CALIBRATION TempMeasCon.FSCAL2 = 0x00; // DEFAULT CALIBRATION TempMeasCon.FSCAL1 = 0x00; // DEFAULT CALIBRATION TempMeasCon.FSCAL0 = 0x40; // DEFAULT CALIBRATION TempMeasCon.IDACMUX = 0xBB; // IDAC NOT CONNECTED TempMeasCon.IDACMAG = 0x00; // IDAC OFF TempMeasCon.REFMUX = 0x00; // REF = INTERNAL 2.5V TempMeasCon.TDACP = 0x00; // TDACP NOT CONNECTED TempMeasCon.TDACN = 0x00; // TDACN NOT CONNECTED TempMeasCon.GPIOCON = 0x00; // ALL GPIO DISCONNECTED TempMeasCon.GPIODIR = 0x00; // ALL GPIO OUTPUTS TempMeasCon.GPIODAT = 0x00; // ALL GPIO = 0 //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// setMeasurement(TempMeasCon, i); i = 2; ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////// measurement 2 Definitions ////////////////////////////////////////////////////////////////////////////// TempMeasCon.POWER = 0x03; TempMeasCon.INTERFACE = 0x05; TempMeasCon.MODE0 = 0x06; TempMeasCon.MODE1 = 0x00; TempMeasCon.MODE2 = 0x0F; TempMeasCon.INPMUX = 0xA0; TempMeasCon.OFCAL0 = 0x00; // DEFAULT CALIBRATION TempMeasCon.OFCAL1 = 0x00; // DEFAULT CALIBRATION TempMeasCon.OFCAL2 = 0x00; // DEFAULT CALIBRATION TempMeasCon.FSCAL2 = 0x00; // DEFAULT CALIBRATION TempMeasCon.FSCAL1 = 0x00; // DEFAULT CALIBRATION TempMeasCon.FSCAL0 = 0x40; // DEFAULT CALIBRATION TempMeasCon.IDACMUX = 0xBB; // IDAC NOT CONNECTED TempMeasCon.IDACMAG = 0x00; // IDAC OFF TempMeasCon.REFMUX = 0x00; // REF = INTERNAL 2.5V TempMeasCon.TDACP = 0x00; // TDACP NOT CONNECTED TempMeasCon.TDACN = 0x00; // TDACN NOT CONNECTED TempMeasCon.GPIOCON = 0x00; // ALL GPIO DISCONNECTED TempMeasCon.GPIODIR = 0x00; // ALL GPIO OUTPUTS TempMeasCon.GPIODAT = 0x00; // ALL GPIO = 0 //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// setMeasurement(TempMeasCon, i); i = 3; ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////// measurement 3 Definitions ////////////////////////////////////////////////////////////////////////////// TempMeasCon.POWER = 0x03; TempMeasCon.INTERFACE = 0x05; TempMeasCon.MODE0 = 0x06; TempMeasCon.MODE1 = 0x00; TempMeasCon.MODE2 = 0x0F; TempMeasCon.INPMUX = 0xA1; TempMeasCon.OFCAL0 = 0x00; // DEFAULT CALIBRATION TempMeasCon.OFCAL1 = 0x00; // DEFAULT CALIBRATION TempMeasCon.OFCAL2 = 0x00; // DEFAULT CALIBRATION TempMeasCon.FSCAL2 = 0x00; // DEFAULT CALIBRATION TempMeasCon.FSCAL1 = 0x00; // DEFAULT CALIBRATION TempMeasCon.FSCAL0 = 0x40; // DEFAULT CALIBRATION TempMeasCon.IDACMUX = 0xBB; // IDAC NOT CONNECTED TempMeasCon.IDACMAG = 0x00; // IDAC OFF TempMeasCon.REFMUX = 0x00; // REF = INTERNAL 2.5V TempMeasCon.TDACP = 0x00; // TDACP NOT CONNECTED TempMeasCon.TDACN = 0x00; // TDACN NOT CONNECTED TempMeasCon.GPIOCON = 0x00; // ALL GPIO DISCONNECTED TempMeasCon.GPIODIR = 0x00; // ALL GPIO OUTPUTS TempMeasCon.GPIODAT = 0x00; // ALL GPIO = 0 //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// setMeasurement(TempMeasCon, i); i = 4; ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////// measurement 4 Definitions ////////////////////////////////////////////////////////////////////////////// TempMeasCon.POWER = 0x03; TempMeasCon.INTERFACE = 0x05; TempMeasCon.MODE0 = 0x06; TempMeasCon.MODE1 = 0x00; TempMeasCon.MODE2 = 0x0F; TempMeasCon.INPMUX = 0xA0; TempMeasCon.OFCAL0 = 0x00; // DEFAULT CALIBRATION TempMeasCon.OFCAL1 = 0x00; // DEFAULT CALIBRATION TempMeasCon.OFCAL2 = 0x00; // DEFAULT CALIBRATION TempMeasCon.FSCAL2 = 0x00; // DEFAULT CALIBRATION TempMeasCon.FSCAL1 = 0x00; // DEFAULT CALIBRATION TempMeasCon.FSCAL0 = 0x40; // DEFAULT CALIBRATION TempMeasCon.IDACMUX = 0xBB; // IDAC NOT CONNECTED TempMeasCon.IDACMAG = 0x00; // IDAC OFF TempMeasCon.REFMUX = 0x00; // REF = INTERNAL 2.5V TempMeasCon.TDACP = 0x00; // TDACP NOT CONNECTED TempMeasCon.TDACN = 0x00; // TDACN NOT CONNECTED TempMeasCon.GPIOCON = 0x00; // ALL GPIO DISCONNECTED TempMeasCon.GPIODIR = 0x00; // ALL GPIO OUTPUTS TempMeasCon.GPIODAT = 0x00; // ALL GPIO = 0 //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// setMeasurement(TempMeasCon, i); i = 5; ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////// measurement 5 Definitions ////////////////////////////////////////////////////////////////////////////// TempMeasCon.POWER = 0x03; TempMeasCon.INTERFACE = 0x05; TempMeasCon.MODE0 = 0x06; TempMeasCon.MODE1 = 0x00; TempMeasCon.MODE2 = 0x0F; TempMeasCon.INPMUX = 0xA0; TempMeasCon.OFCAL0 = 0x00; // DEFAULT CALIBRATION TempMeasCon.OFCAL1 = 0x00; // DEFAULT CALIBRATION TempMeasCon.OFCAL2 = 0x00; // DEFAULT CALIBRATION TempMeasCon.FSCAL2 = 0x00; // DEFAULT CALIBRATION TempMeasCon.FSCAL1 = 0x00; // DEFAULT CALIBRATION TempMeasCon.FSCAL0 = 0x40; // DEFAULT CALIBRATION TempMeasCon.IDACMUX = 0xBB; // IDAC NOT CONNECTED TempMeasCon.IDACMAG = 0x00; // IDAC OFF TempMeasCon.REFMUX = 0x00; // REF = INTERNAL 2.5V TempMeasCon.TDACP = 0x00; // TDACP NOT CONNECTED TempMeasCon.TDACN = 0x00; // TDACN NOT CONNECTED TempMeasCon.GPIOCON = 0x00; // ALL GPIO DISCONNECTED TempMeasCon.GPIODIR = 0x00; // ALL GPIO OUTPUTS TempMeasCon.GPIODAT = 0x00; // ALL GPIO = 0 //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// setMeasurement(TempMeasCon, i); i = 6; ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////// measurement 6 Definitions ////////////////////////////////////////////////////////////////////////////// TempMeasCon.POWER = 0x03; TempMeasCon.INTERFACE = 0x05; TempMeasCon.MODE0 = 0x06; TempMeasCon.MODE1 = 0x00; TempMeasCon.MODE2 = 0x0F; TempMeasCon.INPMUX = 0xA0; TempMeasCon.OFCAL0 = 0x00; // DEFAULT CALIBRATION TempMeasCon.OFCAL1 = 0x00; // DEFAULT CALIBRATION TempMeasCon.OFCAL2 = 0x00; // DEFAULT CALIBRATION TempMeasCon.FSCAL2 = 0x00; // DEFAULT CALIBRATION TempMeasCon.FSCAL1 = 0x00; // DEFAULT CALIBRATION TempMeasCon.FSCAL0 = 0x40; // DEFAULT CALIBRATION TempMeasCon.IDACMUX = 0xBB; // IDAC NOT CONNECTED TempMeasCon.IDACMAG = 0x00; // IDAC OFF TempMeasCon.REFMUX = 0x00; // REF = INTERNAL 2.5V TempMeasCon.TDACP = 0x00; // TDACP NOT CONNECTED TempMeasCon.TDACN = 0x00; // TDACN NOT CONNECTED TempMeasCon.GPIOCON = 0x00; // ALL GPIO DISCONNECTED TempMeasCon.GPIODIR = 0x00; // ALL GPIO OUTPUTS TempMeasCon.GPIODAT = 0x00; // ALL GPIO = 0 //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// setMeasurement(TempMeasCon, i); i = 7; ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////// measurement 7 Definitions ////////////////////////////////////////////////////////////////////////////// TempMeasCon.POWER = 0x03; TempMeasCon.INTERFACE = 0x05; TempMeasCon.MODE0 = 0x06; TempMeasCon.MODE1 = 0x00; TempMeasCon.MODE2 = 0x0F; TempMeasCon.INPMUX = 0xA0; TempMeasCon.OFCAL0 = 0x00; // DEFAULT CALIBRATION TempMeasCon.OFCAL1 = 0x00; // DEFAULT CALIBRATION TempMeasCon.OFCAL2 = 0x00; // DEFAULT CALIBRATION TempMeasCon.FSCAL2 = 0x00; // DEFAULT CALIBRATION TempMeasCon.FSCAL1 = 0x00; // DEFAULT CALIBRATION TempMeasCon.FSCAL0 = 0x40; // DEFAULT CALIBRATION TempMeasCon.IDACMUX = 0xBB; // IDAC NOT CONNECTED TempMeasCon.IDACMAG = 0x00; // IDAC OFF TempMeasCon.REFMUX = 0x00; // REF = INTERNAL 2.5V TempMeasCon.TDACP = 0x00; // TDACP NOT CONNECTED TempMeasCon.TDACN = 0x00; // TDACN NOT CONNECTED TempMeasCon.GPIOCON = 0x00; // ALL GPIO DISCONNECTED TempMeasCon.GPIODIR = 0x00; // ALL GPIO OUTPUTS TempMeasCon.GPIODAT = 0x00; // ALL GPIO = 0 //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// setMeasurement(TempMeasCon, i); i = 8; ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////// measurement 8 Definitions ////////////////////////////////////////////////////////////////////////////// TempMeasCon.POWER = 0x03; TempMeasCon.INTERFACE = 0x05; TempMeasCon.MODE0 = 0x06; TempMeasCon.MODE1 = 0x00; TempMeasCon.MODE2 = 0x0F; TempMeasCon.INPMUX = 0xA0; TempMeasCon.OFCAL0 = 0x00; // DEFAULT CALIBRATION TempMeasCon.OFCAL1 = 0x00; // DEFAULT CALIBRATION TempMeasCon.OFCAL2 = 0x00; // DEFAULT CALIBRATION TempMeasCon.FSCAL2 = 0x00; // DEFAULT CALIBRATION TempMeasCon.FSCAL1 = 0x00; // DEFAULT CALIBRATION TempMeasCon.FSCAL0 = 0x40; // DEFAULT CALIBRATION TempMeasCon.IDACMUX = 0xBB; // IDAC NOT CONNECTED TempMeasCon.IDACMAG = 0x00; // IDAC OFF TempMeasCon.REFMUX = 0x00; // REF = INTERNAL 2.5V TempMeasCon.TDACP = 0x00; // TDACP NOT CONNECTED TempMeasCon.TDACN = 0x00; // TDACN NOT CONNECTED TempMeasCon.GPIOCON = 0x00; // ALL GPIO DISCONNECTED TempMeasCon.GPIODIR = 0x00; // ALL GPIO OUTPUTS TempMeasCon.GPIODAT = 0x00; // ALL GPIO = 0 //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// setMeasurement(TempMeasCon, i); i = 9; ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////// measurement 9 Definitions ////////////////////////////////////////////////////////////////////////////// TempMeasCon.POWER = 0x03; TempMeasCon.INTERFACE = 0x05; TempMeasCon.MODE0 = 0x06; TempMeasCon.MODE1 = 0x00; TempMeasCon.MODE2 = 0x0F; TempMeasCon.INPMUX = 0xA0; TempMeasCon.OFCAL0 = 0x00; // DEFAULT CALIBRATION TempMeasCon.OFCAL1 = 0x00; // DEFAULT CALIBRATION TempMeasCon.OFCAL2 = 0x00; // DEFAULT CALIBRATION TempMeasCon.FSCAL2 = 0x00; // DEFAULT CALIBRATION TempMeasCon.FSCAL1 = 0x00; // DEFAULT CALIBRATION TempMeasCon.FSCAL0 = 0x40; // DEFAULT CALIBRATION TempMeasCon.IDACMUX = 0xBB; // IDAC NOT CONNECTED TempMeasCon.IDACMAG = 0x00; // IDAC OFF TempMeasCon.REFMUX = 0x00; // REF = INTERNAL 2.5V TempMeasCon.TDACP = 0x00; // TDACP NOT CONNECTED TempMeasCon.TDACN = 0x00; // TDACN NOT CONNECTED TempMeasCon.GPIOCON = 0x00; // ALL GPIO DISCONNECTED TempMeasCon.GPIODIR = 0x00; // ALL GPIO OUTPUTS TempMeasCon.GPIODAT = 0x00; // ALL GPIO = 0 //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// setMeasurement(TempMeasCon, i); i = 10; ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////// measurement 10 Definitions ////////////////////////////////////////////////////////////////////////////// TempMeasCon.POWER = 0x03; TempMeasCon.INTERFACE = 0x05; TempMeasCon.MODE0 = 0x06; TempMeasCon.MODE1 = 0x00; TempMeasCon.MODE2 = 0x0F; TempMeasCon.INPMUX = 0xA0; TempMeasCon.OFCAL0 = 0x00; // DEFAULT CALIBRATION TempMeasCon.OFCAL1 = 0x00; // DEFAULT CALIBRATION TempMeasCon.OFCAL2 = 0x00; // DEFAULT CALIBRATION TempMeasCon.FSCAL2 = 0x00; // DEFAULT CALIBRATION TempMeasCon.FSCAL1 = 0x00; // DEFAULT CALIBRATION TempMeasCon.FSCAL0 = 0x40; // DEFAULT CALIBRATION TempMeasCon.IDACMUX = 0xBB; // IDAC NOT CONNECTED TempMeasCon.IDACMAG = 0x00; // IDAC OFF TempMeasCon.REFMUX = 0x00; // REF = INTERNAL 2.5V TempMeasCon.TDACP = 0x00; // TDACP NOT CONNECTED TempMeasCon.TDACN = 0x00; // TDACN NOT CONNECTED TempMeasCon.GPIOCON = 0x00; // ALL GPIO DISCONNECTED TempMeasCon.GPIODIR = 0x00; // ALL GPIO OUTPUTS TempMeasCon.GPIODAT = 0x00; // ALL GPIO = 0 //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// setMeasurement(TempMeasCon, i); i = 11; ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////// measurement 11 Definitions ////////////////////////////////////////////////////////////////////////////// TempMeasCon.POWER = 0x03; TempMeasCon.INTERFACE = 0x05; TempMeasCon.MODE0 = 0x06; TempMeasCon.MODE1 = 0x00; TempMeasCon.MODE2 = 0x0F; TempMeasCon.INPMUX = 0xA0; TempMeasCon.OFCAL0 = 0x00; // DEFAULT CALIBRATION TempMeasCon.OFCAL1 = 0x00; // DEFAULT CALIBRATION TempMeasCon.OFCAL2 = 0x00; // DEFAULT CALIBRATION TempMeasCon.FSCAL2 = 0x00; // DEFAULT CALIBRATION TempMeasCon.FSCAL1 = 0x00; // DEFAULT CALIBRATION TempMeasCon.FSCAL0 = 0x40; // DEFAULT CALIBRATION TempMeasCon.IDACMUX = 0xBB; // IDAC NOT CONNECTED TempMeasCon.IDACMAG = 0x00; // IDAC OFF TempMeasCon.REFMUX = 0x00; // REF = INTERNAL 2.5V TempMeasCon.TDACP = 0x00; // TDACP NOT CONNECTED TempMeasCon.TDACN = 0x00; // TDACN NOT CONNECTED TempMeasCon.GPIOCON = 0x00; // ALL GPIO DISCONNECTED TempMeasCon.GPIODIR = 0x00; // ALL GPIO OUTPUTS TempMeasCon.GPIODAT = 0x00; // ALL GPIO = 0 //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// setMeasurement(TempMeasCon, i); }