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.

ADS1293: Garbage output from ADS1293 & Arduino interfacing

Part Number: ADS1293

Hi,

We have interfaced ADS1293 protocentral module with arduino. We have tried all the methods recommended by TI but output looks like some garbage value.

I know that TI does not support other controllers but there should any information on how we can interface ADS1293 with controller. 

everybody is asking the same question since it is not straight forward to interface ads1293 with other controller. 

kindly suggest any solution to this problem.

  • Hi,

    May I ask do you happen to have an evaluation kit/board(EVM)?

    And, have you checked whether the ADS1293 meet the power requirement listed in datasheet

    7.1 Absolute Maximum Ratings and 7.3 Recommended Operating Conditions?

    Arduino is a board with a microcontroller, which are most likely from  AVR, ATmega microcontrollers by Atmel or Microchip Technology.

    The question might be whether customer can use the libraries provided by Adurino or create codes to operate the the MCU on Arduino board to meet the timing diagrams(e.g. SPI) and/or requirement specified in the datasheet and read or write the values from/to registers.

     

    The first thing to check is if you are actually able to communicate with the ADS1293 using your Arduino.  Using the protocol shown in Figure 29 of the datasheet are you able to correctly read the default value from a register? 

    Some possible registers to try with their default values are

    Figure 82. REVID: Revision ID

    and then see if customer could write register shown in 8.6.2 Input Channel Selection Registers Figure 33. FLEX_CH1_CN: Flex Routing Switch Control For Channel 1

    to configure it to test signal and read the test signal from a channel.

    Then, 

    Do you use any ECG simulator and electrodes and cables? Make sure they are all good.

    Suggest to feed in/inject a Known Good Signal(KGS) to one channel at a time and try read only one channel at a time.

    Thanks

  • Hi,

    Thanks, for your reply and time.

    1. No. I am testing on two boards. A) Protocentral module B) Our own PCB 

    2. I have checked 7.1 and 7.3 from datasheet and I am sure that all power requirements had been met.

    3. I have checked REVID's default value and I am getting correct output as "1".

    4. When I am writing the values according to 9.2.1.2 and then reading the same values back, I am getting correct resuluts.

    5. I am using arduino's serial monitor to see output. also i make sure that electrodes and cables used are all good.

    I dont know how  "to feed in/inject a Known Good Signal(KGS) to one channel at a time and try read only one channel at a time."

  • Hi,

    For

    "

    1.  Which module do you encounter issue?"

    You may want to contact "ProtoCentral" if you encounter issue on their board.

    "

    For

    "

    5. I am using arduino's serial monitor to see output. also i make sure that electrodes and cables used are all good.

    I dont know how  "to feed in/inject a Known Good Signal(KGS) to one channel at a time and try read only one channel at a time.

    "

    You may try the ADS internal test signal first and see if you could read the internal test signal correctly. After that, it's highly recommended to use an ECG simulator to inject any ECG or sinusoidal waveform to check.

    Is it possible to provide some waveforms or plots after trying above, action item 5?

    In the meantime, one could take a look at this thread to ensure the SPI communication meet the timing requirement -

    https://e2e.ti.com/support/data-converters-group/data-converters/f/data-converters-forum/775262/faq-ads129x-i-m-having-trouble-communicating-with-my-ads129x-device-via-spi-what-debug-steps-i-should-try/2868427#2868427

    Thanks

  • Hi,

    1. I have already contacted protocentral team. they have tested whole setup at their facility and they got ECG signal. but when we are testing @our facility, it's not working. it is kind of strenge thing. 

    2. Still my question is how to read internal test signal? I am able to get information on this from internet. 

    I have looked the SPI communication timing diagrams. 

    Thanks for the help

  • Hi,

    1. I have already contacted protocentral team. they have tested whole setup at their facility and they got ECG signal. but when we are testing @our facility, it's not working. it is kind of strenge thing. 

    Comments: could you ask what might me the setup or configuration difference? Or, do you consider getting an TI evaluation board/kit(EVM)?

    2. Still my question is how to read internal test signal? I am able to get information on this from internet. 

    Comments: Do your SPI lines signal meet the timing diagram in the datasheet?

    If yes, are you able to write values and read the same value back to&from 8.6.2 Input Channel Selection Registers Figure 33. FLEX_CH1_CN: Flex Routing Switch Control For Channel 1?

    Thanks

  • Hi,

    1. They have the same setup or components as mine still they got the output, and I am not getting it. Actually, TI evaluation board is not usefult to me bcz I am making tiny device.

    2. I am able to write and read values to and from FLEX_CH1_CN: Flex Routing Switch Control for Channel 1. But when I read from 0x37,0x38,0x39 for channel 1, I don't get proper output. 

  • Hi,

    For, "They have the same setup or components as mine still they got the output, and I am not getting it. Actually, TI evaluation board is not usefult to me bcz I am making tiny device."

    TI EVM may not be excellent for making tiny device, but it's excellent reference for debugging/troubleshooting and to understand how to supply the correct power and the communication signals(e.g. SPI) should be to make the host & device work.

    In other words, if you have a EVM, you could check whether the board routing, minimum required registers settings and communication signals are correct and could reproduce on either or both of your board and EVM board.

    Or, Do you ask  "ProtoCentral"  what are their register settings to for them to work on their boards as registers settings depend on the board designs and/or components too.

    For 2,

    Could you read the 0x40 Figure 82. REVID: Revision ID correctly?

    If yes, then continue below -

    Then, when you say "...don't get proper output..." for reading 0x37,0x38,0x39 Figure 79. DATA_CH1_ECG: Channel 1 ECG Data.

    What does that mean?

    What are your signal source?

    Could you try configure 0x01  Figure 33. FLEX_CH1_CN: Flex Routing Switch Control For Channel 1 to supply the Test signal to Channel 1?

    and Could you try

    8.6.1 Operation Mode Registers 0x00h bit 0 to 1?

    Thanks

  • Hi,

    For 2, 

    When I say I don't get proper output while reading 0x37,0x38,0x39 Figure 79. DATA_CH1_ECG: Channel 1 ECG Data, means as per datasheet, we will get ch1 output by reading from these registers.

    Signal source will be when I am connecting to body. 

    I have already configured all registers according to the datasheet and also verified by reading them. 

    Register 0x00 is configured to be value "1". 

  • Hi,

    Could you read the 0x40 Figure 82. REVID: Revision ID correctly?

    If yes, then let's try if you could read the internal Test Signal first before moving on to external input signal -

    Could you try configure 0x01  Figure 33. FLEX_CH1_CN: Flex Routing Switch Control For Channel 1 to supply the Test signal to Channel 1?

    and Could you try 8.6.1 Operation Mode Registers 0x00h bit 0 to 1?

    Can you read the internal Test Signal correctly?

    During the debugging and troubleshooting stage, could you use ECG simulator and preferred with Right Leg(RL) node instead of human body?

    Thanks

  • Hi,

    1. When I am reading 0x40 REVID, I got "1" as answer. 

    2. Again, can you tell me how to read internal test signals?

    3. I have already configured 0x00h bit to "1".

    Thanks for the help.

  • Hi,

    Have you verified and checked the registers value Read & Write all work properly?

    -----------------------------------------------------------

    If Yes, then, after power up and proper RESET, please follow the datasheet 9.2.1 3-Lead ECG Application and 9.2.1.2 Detailed Design Procedure
    However/But, for Address 

    0x01h bit 7:6, please try write 01 or 10, or 11 as stated in 8.6.2 Input Channel Selection Registers

    0x02h bit 7:6, please try write 01 or 10, or 11 as stated in 8.6.2 Input Channel Selection Registers

    Then, configure 8.6.1 Operation Mode Registers 0x00h bit 0 to 1.

    The expected ADC output code is mentioned in 8.3.3 Test Mode.

    Thanks

  • Hi,

    1. Yes. I have checked all register values by writing and reading. it is according to 9.2.1.2. 

    2. I have changed 0x01h to 0x40h and 0x02h to 0x80. also configured 0x00h to "1".

    for 2nd case, output is as attached.  

  • It's suggested to convert to voltage and make plot and  to see/view&compare.

    Please make sure the 0x05h Figure 37. FLEX_VBAT_CN: Flex Routing Switch for Battery Monitoring  VBAT_MONI_CHx iareset to 0

    For 0x01h bit 7:6 and  0x02h bit 7:6, try write 01 or 10, or 11 and plot the signals, to see whether you can see Positive, Negative and Zero(internal short) tests signals.

    Try write all 0s to 0x01h Figure 33. FLEX_CH1_CN: Flex Routing Switch Control For Channel 1, which should give you just random floating noises.

    Thanks

  • Hi,

    I will convert value in to voltages but that does not help. since output i get is not at all an ECG wave.

    I have tried all above. This is the output.

  • Hi,

    We are not there yet.

    And, from our previous discussion, we need to do some tests to see whether we can read the internal tests signals properly.

    Could you please let me know -

    Please make sure the 0x05h Figure 37. FLEX_VBAT_CN: Flex Routing Switch for Battery Monitoring  VBAT_MONI_CHx are set to 0

    For 0x01h bit 7:6 and  0x02h bit 7:6, try write 01 or 10, or 11 and plot the signals, to see whether you can see Positive or Negative or Zero(internal short) tests signals, respectively?

    Please refer to data sheet 8.3.3 Test Mode to validate your ADCout code or voltage reading.

    Try write all 0s to 0x01h Figure 33. FLEX_CH1_CN: Flex Routing Switch Control For Channel 1, which should give you just random floating noises.

    Only If above are validated, then try connect ECG simulator(e.g. RA and LL) to Channel 1 inputs.

    Thanks

  • Hi,

    Following is the output for the scenario " 

    Please make sure the 0x05h Figure 37. FLEX_VBAT_CN: Flex Routing Switch for Battery Monitoring  VBAT_MONI_CHx are set to 0

    For 0x01h bit 7:6 and  0x02h bit 7:6, try write 01 or 10, or 11 and plot the signals, to see whether you can see Positive or Negative or Zero(internal short) tests signals, respectively?"

    ANS: 

    Here is the output I am getting.

    2. Try write all 0s to 0x01h Figure 33. FLEX_CH1_CN: Flex Routing Switch Control For Channel 1, which should give you just random floating noises.

    Here is the output

    values are changing but since change is small relative to value, we are only seeing straight line. 

  • Hi,

    For the 1st graph/plot you post, I see three lines, are they corresponding/with respect to different settings for "0x01h bit 7:6 and  0x02h bit 7:6, 01 or 10, or 11"?

    Could you convert them to voltage?

    For the 2nd graph/plot, could you convert it to voltage as well?

    -------------------------------------------------------------------------------------

    Note, the ADCmax depends on the ODR set by

    Figure 51. AFE_RES,

    Figure 67. R1_RATE,

    Figure 63. R2_RATE and

    Figure 64. R3_RATE_CH 

    selected mentioned in datasheet 8.3.7 Programmable Digital Filters and page 33 section 8.4.1.

    ------------------------------------------------------------------------------

    What might be your "Figure 51. AFE_RES" settings?

    What might be your "Figure 67. R1_RATE: R1 Decimation Rate" settings?

    What might be your "Figure 63. R2_RATE: R2 Decimation Rate" settings?

    What might be your "Figure 64. R3_RATE_CHx: R3 Decimation Rate for Channel x" settings?

    -----------------------------------------------------

    so, depend on the combination selected above,

    ADCmax could be the following -

    0x800000 = decimal 8,388,608  = 24b 1000 0000 0000 0000 0000 0000

    0xF30000 = decimal 15925248 =  24b 1111 0011 0000 0000 0000 0000

    and etc.

    e.g. if above settings are all defaults, then the ADCmax should be 0x800000 = decimal 8,388,608  = 24b 1000 0000 0000 0000 0000 0000 with ODR 25Hz.

    So, please check the above registers settings and use tables to find the correct ADCmax and ODR.

    Thanks

    Thanks

  • Hi,

    1. 

    For the 1st graph/plot you post, I see three lines, are they corresponding/with respect to different settings for "0x01h bit 7:6 and  0x02h bit 7:6, 01 or 10, or 11"?

    Could you convert them to voltage?

    For the 2nd graph/plot, could you convert it to voltage as well?

    1st plot is for 0x01h bit 7:6 is 01 and 0x02h bit 7:6 is 10. you can see two flat lines blue and red corresponds to 0x01h and 0x02h.

    I have a question. 

    I am using following values:

    AFE_RES - 0

    R1_rate - 0

    R2_rate - 2

    R3_rate_ch1 - 2

    can you give some example for converting code output to voltage output.

    2. 

    What might be your "Figure 51. AFE_RES" settings?

    What might be your "Figure 67. R1_RATE: R1 Decimation Rate" settings?

    What might be your "Figure 63. R2_RATE: R2 Decimation Rate" settings?

    What might be your "Figure 64. R3_RATE_CHx: R3 Decimation Rate for Channel x" settings?

    AFE_RES - 0

    R1_rate - 0

    R2_rate - 2

    R3_rate_ch1 - 2

    According to the above setting, I think my ADCmax = 0xB964F0, ODR = 853 AND BW = 175.

    Is it correct?

  • Hi,

    For "1st plot is for 0x01h bit 7:6 is 01 and 0x02h bit 7:6 is 10. you can see two flat lines blue and red corresponds to 0x01h and 0x02h."

    What are their ADC code values?  just report 1 value from each channel is fine or take a median from several samples within the same channel.

    ---------------------------------------------------------

    Could you set 0x01h bit 7:6, 01(positive), 11(zero), and 10(negative)? And, check whether you can see the data can order from High(positive), Zero(middle) and Low(negative), respectively?

    If not, we need to check how the MCU Clock, and/or decode/parse the ADC code.

    -----------------------------------------------------------

    For

    AFE_RES - 0  i.e. 102.4KHz

    R1_rate - 0    i.e. R1 = 4: Standard PACE Data Rate

    R2_rate - 2  i.e. 0010: 5

    R3_rate_ch1 - 2 i.e. 00000010: 6

    so, by referring to page 33 Table 8. Channel Parameters With SDM Running at 102.4 kHz and at Standard Pace Data Rate (R1 = 4)

    The ECG channel's

    ADCmax,      ODR        BW are 

    0xB964F0     853          175

    0xB964F0  = b'1011 1001 0110 0100 1111 0000 = 12150000

    -------------------------------------------------------------------------------------------------

    May I ask what might be your Vref? Did you select it to be 2.4V?

    ------------------------------------------------------------------------------------------------

    "VREF equals 2.4 V if the internal reference voltage generator is used, and ADCMAX represents the maximum output code of the ADC, which would correspond to a theoretical 2.4-V signal at the input of the sigma-delta modulator."

    The Test signal voltage depends on the Vref selected; VTEST = VREF/12.

    so, if Vref is selected to be 2.4V,

    If ADCmax is 0xB964F0  = b'1011 1001 0110 0100 1111 0000 = 12150000 based on the registers settings above, then 2.4V should be around ADCmax code

    0xB964F0 = 12150000.

    And then, VTEST should be solid around 2.4V/12 = 0.2V   Positive or Negative depending on the value set in bit 7:6 mentioned above.

    -------------------------------------------------------------------------------

    Could you try set bit 7:6 of a channel to 11?

    "When TSTx = 11, the inputs of the instrumentation amplifier in the channel can be shorted to provide a zero test signal. The expected ADC output code equation can be simplified to:"

    ADCout = 1/2 ADCmax, so if ADCmax based on the above setting is 0xB964F0 = 12150000, then zero volt or inputs short test should give ADCout code around 12150000/2 = 6,075,000.

    Thanks

    Thanks

  • 1. Please find my plot with ADC values.

    2.  Plot with 0x01h bit 7:6 is 01:

    3. plot with 0x01h bit 7:6 is 10

    4. plot with 0x01h bit 7:6 is 11

    5. I am applying 3.3v to ADS1293 module. so is it the Vref value?

  • May I ask what might be your Vref? Did you select it to be 2.4V?

    Vref depends on whether your board selects/uses Internal Reference or External Reference voltage.

    Can you check if there is anything connect to the VREF pin on your board?

    And, what is the register 0x11 bit 0 SHDN_REF value?

    SHDN_REF Shut down internal 2.4-V reference voltage

    0: Internal reference voltage is on (default)

    1: Shut down internal reference voltage

    Note: Enabling this bit allows driving the IC with an external reference voltage on the CVREF pin. Power-down mode automatically shuts down the internal 2.4-V reference.

    Thanks

  • Hi,

    I think I have selected Vref to be internal 2.4V. My 0x11 bit 0 value is 0 since I have not configured it and when i am reading that register, it shows 0 only. 

  • Hi,

    Due to Thanksgiving holidays in the US, our response will be delayed. Chien will get back to you during the week of Nov 28. Thank you for your patience.

  • Hi,

    If you Vref is set to Internal 2.4V.

    So, based on/from previous discussion-

    Please refer to page 33~36, Table 8~11 to look up your "ADCmax" based on your settings(e.g. SDM, R1, R2, R3)

    Then follow Section 8.4.3 Output Code (ADCOUT)  to calculate the proper ADCout and also convert it to the voltage

    "VREF equals 2.4 V if the internal reference voltage generator is used, and ADCMAX represents the maximum output code of the ADC, which would correspond to a theoretical 2.4-V signal at the input of the sigma-delta modulator."

    The Test signal voltage depends on the Vref selected; VTEST = VREF/12.

    so, if Vref is selected to be 2.4V,

    The ADCmax code you looked up should be equivalent to 2.4V, and then, VTEST should be around 2.4V/12 = 0.2V; Positive or Negative depending on the value set in bit 7:6 mentioned above.

    e.g. So, ADCout code = (3.5*(0.2V)/(2*2.4V) + 1/2) * ADCmax

    -------------------------------------------------------------------------------

    After above calculation,

    from previously

    "

    For "1st plot is for 0x01h bit 7:6 is 01 and 0x02h bit 7:6 is 10. you can see two flat lines blue and red corresponds to 0x01h and 0x02h."

    What are the ADC code and the converted voltage values? Do they make sense, e.g. +0.2V or -0.2V or close to 0 V?

    e.g. ADCout code = (3.5*(0.2V)/(2*2.4V) + 1/2) * ADCmax; you should reverse calculate the input voltage from the ADCout code and ADCmax to input voltage.

    Could you set 0x01h bit 7:6, 01(positive), 11(zero), and 10(negative)? And, check whether you can see the data can order from High(positive), Zero(middle) and Low(negative), respectively?"

    Could you try set bit 7:6 of a channel to 11?

    "When TSTx = 11, the inputs of the instrumentation amplifier in the channel can be shorted to provide a zero test signal. The expected ADC output code equation can be simplified to:"

    ADCout = 1/2 ADCmax, so zero volt or inputs short test should give ADCout code around ADCmax/2.

    ----------------------------------------------------------------------------------

    If the ADCout code and the voltage after conversion is not correct, we need to check how the MCU Clock, and/or how SPI and software decode/parse the digital output and ADC code.

    By the way,

    Arduino is not a TI product so the support we can provide is very limited.

    Thanks