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.

ADS1294R: Test signal captured by the ADC.

Part Number: ADS1294R
Other Parts Discussed in Thread: ADS1292

Hi, everyone, i configure the ads1294R in test mode, where i can see the wave of  the signal generated by  the ads.  

But if you see the chart with test wave i have some points that are out of range, they do not seem to me to be noise, but another problem, like a bad SPI configuration or read from ads1294R. Any suggestions what can be this problem? This chart is made without any digital filter or average! Yes i know that is possble clean some of this that but i thinks that is some wrong...

Below is possible to see the configuration registers:

ads1292_drv.reg[ADS1292_REG_CONFIG1] = 0<<BIT7 | 1<<BIT6 | 0<<BIT5 | 0<<BIT4 | 0<<BIT3 | 1<<BIT_REV_DR2 | 1<<BIT_REV_DR1 | 0<<BIT_REV_DR0;
ads1292_drv.reg[ADS1292_REG_CONFIG2] = 0<<BIT7 | 0<<BIT6 | 1<<BIT5 | 1<<BIT4 | 1<<BIT3 | 0<<BIT2 | 0<<BIT1 | 0<<BIT0;
ads1292_drv.reg[ADS1292_REG_CONFIG3] = 1<<BIT7 | 1<<BIT6 | 0<<BIT5 | 0<<BIT4 | 1<<BIT3 | 1<<BIT2 | 0<<BIT1 | 0<<BIT0;

ads1292_drv.reg[ADS1292_REG_CH1SET] = 1<<BIT_PD1 | 0<<BIT_GAIN1_2 | 0<<BIT_GAIN1_1 | 0<<BIT_GAIN1_0 | 0<<BIT3 | 0<<BIT_MUX1_2 | 0<<BIT_MUX1_1 | 0<<BIT_MUX1_0;
ads1292_drv.reg[ADS1292_REG_CH2SET] = 0<<BIT_PD2 | 0<<BIT_GAIN2_2 | 0<<BIT_GAIN2_1 | 1<<BIT_GAIN2_0 | 0<<BIT3 | 1<<BIT_MUX2_2 | 0<<BIT_MUX2_1 | 1<<BIT_MUX2_0;
ads1292_drv.reg[ADS1292_REG_CH3SET] = 1<<BIT_PD1 | 0<<BIT_GAIN1_2 | 0<<BIT_GAIN1_1 | 1<<BIT_GAIN1_0 | 0<<BIT3 | 0<<BIT_MUX1_2 | 0<<BIT_MUX1_1 | 0<<BIT_MUX1_0;
ads1292_drv.reg[ADS1292_REG_CH4SET] = 1<<BIT_PD2 | 0<<BIT_GAIN2_2 | 0<<BIT_GAIN2_1 | 1<<BIT_GAIN2_0 | 0<<BIT3 | 0<<BIT_MUX2_2 | 0<<BIT_MUX2_1 | 0<<BIT_MUX2_0;

SPI mode 1

SPI Speed 512000

I will wait for your opinion,best regards,

Jaime Lopes

  • Hello Jaime,

    Thanks for your interest in our ADS1294R!

    The first thing I would check is your SPI transactions. It looks like there may be new samples coming in while you are still reading the previous samples. You can verify this with a logic analyzer. If you see /DRDY transition from high to low while you are reading data (i.e. /CS is low and you are sending SCLKs), that would explain the issue.

    Best Regards,

  • I have not seen anything out of the ordinary in SPi, I will try reading in single shot . But I have another question,  

    I connect a external signal in the elctrodes pins, and the signal that i put is a square wave amplitude 1V and 5Hz but if only connect the gnd and signal wire to the input of ads i not recieved a good signal but if i connect the gnd wire of signal generator to the input of ads and connect the gnd of circuit together the signal data stay fine but i lost some amplitude not ready the exactly de value. And i make a test of read the voltage of a battery and if a connect the reference of ads the voltage is ok is not have a lot of noise i think is normal the functon but with singbal generator not work why?

    Below you can see the wave when i acquired the data from signal generator and have the reference of ads connect:

    Below you can see the same signal with gnd of singla generator and ads connect together the wave is good but i lost some voltage... in the image above the signal is more or less 1V belor is half of that.

    Voltage read from a 1,5 battey and we can read a cc signal with 1,6V rms

    below the some battery read the voltage with no RLD reference of the ads. 

    why ads not work very well with de signal generator?  

    Pleasel help me, best regards,

    Jaime Lopes

  • Hello Jaime,

    Please excuse my delay.

    There may be a couple things going here. First, as you discovered, it is important to share the signal generator ground with the ADS1294R circuit ground. This is to ensure that all signals are referenced to the same ground potential.

    The other important thing to note is that the ADC will convert the differential input voltage between the INxP and INxN pins of each channel. This differential input voltage must be less than +/-VREF / Gain. The absolute voltage on each pin must be within the supply voltage (AVSS and AVDD).

    Make sure that you are converting the ADC output code correctly. For positive inputs, the MSB will be set to 0, ranging from 0x000000 to 0x7FFFFF. Convert the code to decimal and multiply by [ (2 x VREF / Gain / 2^24 ]. For negative inputs, the MSB will be set to 1, ranging from 0x800000 to 0xFFFFFF. Convert the code to decimal, subtract 2^24, then multiply by [ (2 x VREF / Gain / 2^24 ].

    What is the source of the ADC reference voltage? Are you using the internal reference? Remember that VREFN must be tied to AVSS. If you are having some grounding issue, then that could affect the reference as well.

    Best Regards,

  • Hi Ryan Andrews,  i will send my details below:

    Esquematic:

    The waves with internal signal to test:

     The noise measurament input short internally. As you can see in the noise measurament we have a big ofset but the amplitude of noise without  the offset is more or less in the range...

    And then, when i connect the signal generator externally, i have a wave like for a square signal with 1v 5Hz, 

    if i make zoom in the image the amplitude in the error is not zero but near of that.

    My ploblems is when i measurament any signal externally, i´m using the internal reference.

    To convert digital word to voltage i´m make the next process:

    I see the last bit of 24 and if is "1" and put the 32 bits to one for the microcontroller interpret line a negative number the i just put the formula, at this moment  the gain is 1.

    float ads_1294_convert_to_volts(unsigned int number1){

    float temp_read_float=0;
    int number=0;

    if ((number1 & 0x00800000) > 0)
    {

    //number1=number1&0x00FFFFFF;
    //number=~number1;
    //number+=1;
    //number*=-1;
    number=number1&0x00FFFFFF;
    number =(int)number1| 0xFF000000;

    }
    else
    {
    number =number1& 0x00FFFFFF;
    }




    if ( number > 0)
    {

    temp_read_float= (float)number * ((float)2.42 / 8388607);

    }
    else
    if (number == 0)
    {

    temp_read_float= (float)0.0;

    }
    else
    if (number <= -1)
    {

    temp_read_float = (float)((float)(2.42) / 8388607) * number;

    }

    return temp_read_float;

    }

    i already try using your way to convert is the same...

     All my issues are when i feed signal externally and i can´t measurament any ecg signal of a body.

    I hope you can help me with your experience and knowledge.

    Best regards,

    Jaime Lopes

  • Hello Jaime,

    Thanks for the update. It looks like the internal test signal is working well, very nice!

    I would like to focus on making the internal short measurement working first. I'm concerned that I only see 4 distinct voltage levels. 30uVpp should include about 104 codes. For Gain = 1 V/V, 1 LSB = (2.42V * 2 / 2^24) = 288.5nV.

    Can you please share your complete register settings? I only need to see a table of Register Address (0xXX) | Register Value (0xXX).

    Best Regards,
  • Hi, Ryan, as you asked, I sent you my records configuration:

    This first table is to read channel 2 the imput
    Register Bits
    0x01 0 0 0 0 0 1 0 0
    0x02 0 0 1 1 0 0 1 0
    0x03 1 1 0 0 1 1 0 0
    0x04 0 0 0 1 0 0 1 0
    0x05 1 0 0 0 0 0 0 0
    0x06 0 0 0 1 0 0 0 0
    0x07 1 0 0 1 0 0 0 0
    0x08 1 0 0 1 0 0 0 0
    0x0d 0 0 0 0 1 1 1 1
    0x0e 0 0 0 0 1 1 1 1
    0x0f 0 0 0 1 1 1 1 1
    0x10 0 0 0 1 1 1 1 1
    0x11 0 0 0 0 0 0 0 0
    0x12 0 0 0 0 0 0 0 0
    0x13 0 0 0 0 0 0 0 0
    0x14 0 0 0 0 0 0 0 0
    0x15 0 0 0 0 0 0 0 0
    0x16 0 0 1 0 0 0 0 0
    0x17 0 0 1 0 0 0 0 0
    0x18 x x x x x x x x
    0x19 x x x x x x x x


    For channel 2 read the test signal
    Register Bits
    0x01 0 0 0 0 0 1 0 0
    0x02 0 0 1 1 0 0 0 0
    0x03 1 1 0 0 1 1 0 0
    0x04 0 0 0 1 0 0 1 0
    0x05 1 0 0 0 0 0 0 0
    0x06 0 0 0 1 0 1 0 1
    0x07 1 0 0 1 0 0 0 0
    0x08 1 0 0 1 0 0 0 0
    0x0d 0 0 0 0 1 1 1 1
    0x0e 0 0 0 0 1 1 1 1
    0x0f 0 0 0 1 1 1 1 1
    0x10 0 0 0 1 1 1 1 1
    0x11 0 0 0 0 0 0 0 0
    0x12 0 0 0 0 0 0 0 0
    0x13 0 0 0 0 0 0 0 0
    0x14 0 0 0 0 0 0 0 0
    0x15 0 0 0 0 0 0 0 0
    0x16 0 0 1 0 0 0 0 0
    0x17 0 0 1 0 0 0 0 0
    0x18 x x x x x x x x
    0x19 x x x x x x x x


    For the input shorted:
    Register Bits
    0x01 0 0 0 0 0 1 0 0
    0x02 0 0 1 1 0 0 0 0
    0x03 1 1 0 0 1 1 0 0
    0x04 0 0 0 1 0 0 1 0
    0x05 1 0 0 0 0 0 0 0
    0x06 0 0 0 1 0 0 0 1
    0x07 1 0 0 1 0 0 0 0
    0x08 1 0 0 1 0 0 0 0
    0x0d 0 0 0 0 1 1 1 1
    0x0e 0 0 0 0 1 1 1 1
    0x0f 0 0 0 1 1 1 1 1
    0x10 0 0 0 1 1 1 1 1
    0x11 0 0 0 0 0 0 0 0
    0x12 0 0 0 0 0 0 0 0
    0x13 0 0 0 0 0 0 0 0
    0x14 0 0 0 0 0 0 0 0
    0x15 0 0 0 0 0 0 0 0
    0x16 0 0 1 0 0 0 0 0
    0x17 0 0 1 0 0 0 0 0
    0x18 x x x x x x x x
    0x19 x x x x x x x x


    My big problem is when i read the inputs i cant read stable the input, but now that you give the advice about the shorted option i can´t now what is happening.

    I will wait for your advice.

    Best Regards,
    Jaime Lopes
  • Hello Jaime,

    Jaime Lopes13 said:
    This first table is to read channel 2 the imput

    • CONFIG2[1:0] - do not use '10'
    • LOFF[1:0] - do not use '10'
    • CHnSET[2:0] - use '001' if the channel is powered down

    Jaime Lopes13 said:
    For channel 2 read the test signal

    • LOFF[1:0] - do not use '10'
    • CHnSET[2:0] - use '001' if the channel is powered down

    Jaime Lopes13 said:
    For the input shorted:

    • LOFF[1:0] - do not use '10'

    Other than the comments listed above, I do not see any mistakes in your register configuration.

    Best Regards,

  • Hi Ryan, after make the change in the registers and  solve a mistake in the round the float number, i have the next waves.

    This is the test signal:

    Noise measurament;

    The issue is when i want measurament a external signal like a square wave with a 0,1V and 10 Hz, if you see it´s possible to see the square wave but we have a lot of samples that afe wrong there is like a flutuation, i can´t solve this, why i can measurament all the signal but when i put to measure the signal externaly and hav e this behavior.  If  instead of a singla generator i use a a small 1.5 battery i can read like 1.61 volts but hae some flutuation even when i connect the reference signal the signal stays better but not   but not the desired one.

    Do you have any ideia what is happening in here.

    Best  Regards,

    Jaime Lopes

  • Hi Ryan, and when i put the electrodes in the body i have the next result:

    This is a result withou any digital filter...

  • Helo Jaime,

    The results you shared yesterday for the Test Signal and Input Short settings look much better. I'm not sure what else is affecting your external square wave results, but something clearly is messed up as you only see 3 distinct voltage levels. Make sure that your signal generator ground is shared with your system ground. Also check the output impedance setting and common-mode voltage. You can verify the output of the signal generator is correct with a scope probe on the INxP and INxN input for that channel.

    Best Regards,
  • Hi Ryan Andrews, i have some doubts, yes when i connect the gnd of system and signal generator the signal stay betther,  but I should not be able to measure, just by connecting the signal generator to the differential input? And the common-mode voltage in the case of signal generator is made by the signal generator or with the RLD connection?

    Because when you connect the electrodes to human body you have a lead and the reference(RLD), i thinking that RLd beyond  the create a signal in opposite of fase to anulate signals like 50/60Hz it´s create a common-mode voltage in the middle of power supply to make possible to read positive and negative signal like  CM+-VREF is right?

    Just to ensure, i will put how to make the connections from ads1294R and the signal generator.

    I try this way, just connecting the differecial input and the signal generator and GND

     

     

    With this configuration i have the next wave

    Then i try this way, i connect the GND of system to In3N and the GND of signal generator. I connect the sigal to IN3P.

    wih this configuration i have the next wave 

    And try like that, i connect the IN3N and GND of system and the signal generator and RLD. 

    with this configuration i have the next wave:

    And like that i connect the RLD to the GND of signal generator and the In3N and not connect the GND of system. 

    with this configuration i have the nextr wave

    In last i put the wave from oscilloscope 

    Please give-me your recomendation!

  • One lead measurament wave still with alot of noise

  • Can someone give me some tips on why the signal got to be like this?

    Best Regards,

    Jaime Lopes