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.

ADS1247 for ECG

Other Parts Discussed in Thread: ADS1247, ADS1294, ADS1194, TMS320F28335, MSP430F2274, ADS1298, MSP430F2013

Hi,

 

is ADS1247 suitable for a 2 or 3-lead 3.6V Li-Po battery powered single supply ECG? If it is, which way is to follow when conditioning the electrode signals:

 

a. feed the lead signals into  the differential inputs via simple RC antialiasing filter (only 2 leads this way), with PGA at G=5...10;

b. convert the differential signal to single ended with an INA (G=5...10, single supply, REF pin at mid supply) then option a. with/without  additional PGA. This way ADS1247 gives 4 channels.

c.  convert the differential signal to single ended with an INA (G=5...10, single supply, REF pin at mid supply), AC couple using a 0.05Hz RC HP filter with a level shift of 20-50 mV then option a. with/without  additional PGA

 

Thank you.

  • Hi JustGreg,

    The ADS1247 features are optimized for use on temperature sensors and pressure sensor applications.

    There are other converters that may offer a better fit and offer more flexibility for ECG applications. For example, the ADS1194/8 and ADS1294/98 combination of PGA gains, sinc filter stage, and low power, makes it ideal for these applications. If you are concern about power, the ADS1294 consumes only 0.75mW/ channel. Another benefit is that it offers 4 ADC's so you can simultaneously monitor different sensors without having to change channels on the multiplexer.

    Thank you and Regards,

    Luis

  • Hi Luis, thank you for your reply. I thought there is something more simple solution since I'm overly frustrated with that ADS1x9x chip. I simply cannot get it to work, it is like a bad dream for me. Thanks anyway.
  • Hi JustGreg,

    I remember you had some issues with the RESV1 pin, but I had kind of thought you got that straightened out.  Can you possibly post a screen capture from that setup and let us have a look at the way you are implementing the SPIn interface?  Are you trying to work this through the C2000 processor?  I've noticed a few other posts regarding the TMS320F28335 so I am a little curious if that is the controller you are using here.

  • Hi Tom,

     

    thank you for dropping by. Well, I had problems with that design, but since there were quite a few bugs on that PCB board I abandoned it. Instead, I've soldered a new chip on a Schmartboard with all the necessary circuitry, for testing purposes. I am interfacing the chip with an MSP430F2274 mcu with a proven SPI code. The mcu outputs the correct signals but the ASIC doesn't want to answer correctly - 0x00 or $60 is all I receive when I send read CONFIG1. Here is the schematic I am using. I checked the circuit for shorts, checked all pins, the power supply circuit voltages, all seems to be fine. Double checked the RESV1 pin. No idea what's the problem here.

     

    Here is the SPI code for reset, read&write reg operations:


    void ADS1298_PowerUp(void){

    P4OUT &=~PWDN;
    P4OUT &=~RST;

    SPI_CS_ADS_LO();
    P4OUT |=START;

    //CLOCKSEL to DVDD -> internal clock 2.048 MHz
    // tclk=488 ns

    P4OUT |=PWDN;

    P4OUT |=RST;

    __delay_cycles(1000000); // MCU clock @1 MHz, wait 1s for tpor

    P4OUT &=~RST;
      __delay_cycles(2); //trst=2 tclk, equals ~1 MCLK cycle but changed to 2 for safety reasons
    P4OUT |=RST;
    __delay_cycles(10); //18 tclk, equals ~9 MCLK cycles but changed to 10

      ADS1298_SendCommand(ADS1298_SDATAC);

    }//ADS1298_PowerUp

     

    unsigned char ADS1298_RREG(unsigned char address){

    unsigned char status;
    unsigned char data;

    data=0x20|((address&0x1F));

    SPI_CS_ADS_LO();

    status=SPI_Write(data); //address

    status=SPI_Write(0); //bytes to read - 1

    status=SPI_Write(0xAA); //dummy byte

    SPI_CS_ADS_HI();

    return status;

    }//ADS1298_RREG

     


    void ADS1298_WREG(unsigned char address, unsigned char value){

    unsigned char status;

    status=0x40|((address&0x1F));

    SPI_CS_ADS_LO();

    SPI_Write(status);

    SPI_Write(0);

    SPI_Write(value);

    SPI_CS_ADS_HI();

    }//ADS1298_WREG

     


    void ADS1298_SendCommand(unsigned char value){

    SPI_CS_ADS_LO();
    SPI_Write(value);
    SPI_CS_ADS_HI();

    }//ADS1298_SendCommand

     

  • Hi Greg,

    Sorry for the slow reply here - its been a busy couple weeks.  I don't recall ever seeing a screen shot from you with the actual SPI communications setup you use.  If there is a phase inversion or large delays in the transmission to the ADS1298 from your host processor, you could get corrupted data.  The code snippet is great, but without know exactly what all the function calls do, it's a little difficult to try and put a finger on the root cause of your problem.  Can you capture the SPI transfer from that old board and send it along or perhaps sketch it out on the back of a (virtual) napkin and send it along to us? 

  • Hi Tom,

     

    thank you for your response. Tried again the whole thing with a MSP430F2013 in a LaunchPad. My SPI setup is: MCLK ~ 1.2 MHz (MSP430 default), clock source SMCLK (=MCLK), all other settings are default (CPHA=0, CPOL=0). Here are some pictures: SCLK/CS , SCLK/SIMO , SCLK/SOMI. The main loop is:

     

    BoardInit();
    SPI_Init();
    ADS1298_PowerUp();
    P1OUT |=LEDR;



    ADS1298_WREG(ADS1298_CONFIG3, 0xC0);
    ADS1298_WREG(ADS1298_CONFIG1, 0x86);
    ADS1298_WREG(ADS1298_CONFIG2, 0x00);


    while(1){

    status=ADS1298_RREG(ADS1298_CONFIG1);     //3 bytes: 0x21 0x00 0xdummy

    __delay_cycles(1000);

    }

    }//main

     

      There is no answer from ADS1298, status always returns zero. Stepping into the RREG function, all the three spi write returns zero.  The START pin is low, RST, PWDN is high.

     

    I went through the board with a conductivity tester. There are no shorts, all connected pins are following this schematic. The AVDD/AVSS/DVDD levels are also fine. DRDY is high and not changing. Seems like the SPI interface is not working correctly in my ADS1298. I really don't know what's wrong here.

     

    Greg

  • Hi Greg,

    I can't see your file postings due to some IT and firewall issues.  Could you possibly zip them all up and post them here?

  • Tom,

     

    here you are. Thanks for taking the time.

    package.rar
  • Hi Greg,

    Attached is a file that I used to capture the device ID data from the ADS1298 using the MSP430F2013.  In this code I've sent two 8-bit words which provide SDATAC and STOP commands followed by a 24-bit RREG command.  Try it out and let me know what you get as a result.

  • Hi Tom,

     

    thank you very much for your efforts. I'll able to try this on Tuesday. Have a nice Easter ham till then.

  • Hi Tom,

     

    I managed to solve the problem. Found a bug on my PCBs:   the soldermask below the chip was unusually thick and some pins did not touch the pads. With two hypodermic needles and a conductivity tester I was able to detect that the pwdn was not connected firmly to its pad.  I removed the chip, sandpapered the bump off and soldered it back. From that point onwards all seemed to work fine. Tomorrow I'll check my code since I used yours. Thank you for your input - it really helped me to focus on the hardware alone.

     

  • Great! 

    Glad to hear you found the problem.  I think you should go out and enjoy a good 'health drink' to celebrate!