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.

Problem with ADS1292 ECG Data

Other Parts Discussed in Thread: ADS1292, ADS1292R

Hello,

         We are interfacing ADS1292 with Arduino UNO. SPI seems to be working fine. But there seems to be some problem in received data. Here is the scenario:
          SPI is set in CPOL=0, CPHA=1, MSB first, 1MHz SCLK. We took reference of register configuration from the software provided with ADS1292 Demo Kit. The only changes done was setting Channel 2 in power down mode and setting sample rate to 125 SPS.

          In setup function, First command after waking up the device is SDATAC, so that we can write the data to registers. After that we send START to start ADC conversion and RDATAC to read continuously.

          In loop function, we wait for ADC_DRDY interrupt (falling edge), and read total 9 bytes of data once interrupted. Data is separated in Status Reg, Channel 1 Data, Channel 2 data (all 3 bytes). 

         After reading that data in PC, we are applying a Software band-pass filter with range in 0.5 to 40Hz.

         Now, the problem here is that when we place electrodes in hand or chest, the data remains the range of -1 to -10, with variation of + or -2 (that is in range of 0xFFFFFF to 0xFFFFF5). Is data supposed to be in this range? or Is there any specific connection or configuration that we are missing?

         Here, is the screen shot taken from evaluation software. These are the values of register that we are giving (except CONFIG1, we changed the data rate to 125SPS instead of 500SPS).


  • Hello Hardik, 

    The ADS1292 outputs the digital codes in 2's compliment, using 224 bits to express the full-scale input range of -Vref / Gain -> +Vref / Gain. (-Full-Scale = 800000 -> FFFFFF -> 0 -> 7FFFFF = +Full-Scale).

    The vales you noted between 0xFFFFFF and 0xFFFFF5 indicate that your differential measurements are close to mid-scale. What is more concerning is that your data only uses 10 codes out of 224 possible codes, which means that your signals are very small relative to your 2.4 V reference.

    Are these the raw output codes from the ADC, or are you processing them afterwards?

    Thanks and regards,

  • Hello Ryan,

    The output codes given here is RAW data, directly coming from DOUT. 

    We are using ADS1292 for single lead differential input operation over finger tips only. That is on index finger of left and right hand only. So we have to powerdown channel2. Can you pls. doulbe check the register setting?

    Thanks,

    Regards,

    HM 

  • Hi Hardik, 

    Thanks for sharing the register settings. I have a few concerns:

    1. When Channel 2 is powered down, the MUXn setting should be set to "input-short". The register value would then be CH2SET = 0x81.
    2. From RLD_SENS, it appears that you are using IN2P and IN2N to derive RLD (although Channel 2 is powered down). Did you mean to use Channel 1 inputs IN1P and IN1N to derive RLD instead?
    3. Your LOFF_STAT register reports that both Channel 1 electrodes are not connected (LOFF_STAT[1:0] = 11).
    Regards,
  • Hello Hardik Madhu, i am also using Arduino Uno to communicate with ADS1292R, I need your help as you are many steps ahead of me.

    i just want to rconnect this device with my arduino and read one register, so i know that the communication is successful.

    I used the connection diagram in the data sheet with AVDD to 3v and DVDD to 1.8 v

    here is my code:



    #include <SPI.h>

    int ADS1292_DRDY_PIN = 6; /// Not used for now
    int ADS1292_CS_PIN = 10; ////// Working
    int ADS1292_START_PIN = 5; /// Working
    int ADS1292_PWDN_PIN = 4;////// Working
    int ADS1292_CLK_SEL = 3; /// Working


    int dat2 = 0;
    int dat1= 0;







    void setup() {
    pinMode(ADS1292_DRDY_PIN, INPUT); //6
    pinMode(ADS1292_CS_PIN, OUTPUT); //10
    pinMode(ADS1292_START_PIN, OUTPUT); //5
    pinMode(ADS1292_PWDN_PIN, OUTPUT); //4
    pinMode(ADS1292_CLK_SEL, OUTPUT); //3



    //////////// Power up sequence////////////
    delay(10);
    digitalWrite(ADS1292_PWDN_PIN, HIGH);
    delay(9000);
    digitalWrite(ADS1292_PWDN_PIN, LOW);
    delay(100);
    digitalWrite(ADS1292_PWDN_PIN, HIGH);
    delay(1000);
    ////////////////////////////////////////////


    ///// Set CLKSEL to 1////////////

    digitalWrite(ADS1292_CLK_SEL, LOW);
    delay(100);
    digitalWrite(ADS1292_CLK_SEL, HIGH);
    delay(10);
    //////////////////////////////////////////



    /////// Setting start pin to LOW////////
    digitalWrite(ADS1292_START_PIN, HIGH);
    delay(100);

    SPI.begin();
    SPI.beginTransaction(SPISettings(1000000,MSBFIRST,SPI_MODE1));

    delay(1000); // Wait for SPI to begin

    Serial.begin(9600);


    }




    void loop() {
    // Sending the first command to ADS for SDAC so registers can be written

    digitalWrite(ADS1292_CS_PIN, LOW);
    delay(1);
    SPI.transfer(0b00000010); //// SPI Command for Wakeup
    delay(1);
    SPI.transfer(0b00010001); //// SPI Command for STOP read data continous mode
    delay(1);

    int dat1 = SPI.transfer(0b00100000); /// read register command
    int dat2 = SPI.transfer(0b00000000); // No of registers -1
    digitalWrite(ADS1292_CS_PIN, HIGH);
    delay(1);


    Serial.print(dat1,BIN);
    Serial.print("\t");
    Serial.print(dat2,BIN);
    Serial.print("\n");




    }


    I am getting 00 in the serial monitor.

    I am new to programming and cannot figure it out,

    Can you please tell me where i am wrong?
  • Hi,

    I am working on ADS1292 interfaced to MSP430F56559

    I am getting same value (data) even after changing the value. My SPI is working fine @ 1Mhz for register read/write. Only problem is it is not reading value on changing input, always gives/read the same value.

    Please refer my circuit diagram for reference

    Need help

    Nitesh