Dear sir or madam,

We have assembled a board utilizing ADAS1000.

We successfully got TESTTONE set up according to DATASHEET, Example 4: Configure 150 Hz Test Tone Sine Wave on Each ECG Channel and Stream Conversion Data.

We wanted to proceed with DATASHEET example 1,Example 1: Initialize the ADAS1000 for ECG Capture and Start Streaming Data.

But upon run we still get the TESTTONE even though we rechecked registers via reading the set up value, everything seems to be fine, but it yields sinusoidal values like this on 3 inputs:

value: 1080607.625000, 1035503.125000, 1035503.125000
value: 1092268.750000, 1048476.750000, 1048476.750000
value: 1103936.125000, 1061541.750000, 1061541.750000
value: 1115422.750000, 1073930.250000, 1073930.250000

Could anyone be so kind to help us what we are doing wrong?

Thank you


  • 0
    •  Analog Employees 
    on Sep 22, 2020 10:12 AM 4 months ago

    Hi Ivo,

    Sounds like there are still samples coming through the signal chain. Can you try issue a hardware reset before configuring the ECG capture?

  • Actually, I switched off the board as well as I have this method to reset the chip:

    void ADAS1000_SoftwareReset(void) {
        // Clear all registers to their reset value.
        ADAS1000_SetRegisterValue(ADAS1000_ECGCTL, ADAS1000_ECGCTL_SWRST);

        // The software reset requires a NOP command to complete the reset.
        ADAS1000_SetRegisterValue(ADAS1000_NOP, 0);

    I also have no Right Leg Drive connected, but I also tried following sequence, which also yields sinusoidal signal, but RLD_OUT is different.

    //CMREFCTL is set to 0x85E0000A
    CMREFCTL[0] = 0x85;
    CMREFCTL[1] = 0xE0;
    CMREFCTL[2] = 0x00;
    CMREFCTL[3] = 0x4A;

    //FILTCTL is set to 0x8B000000
    FILTCTL[0] = 0x8B;
    FILTCTL[1] = 0x00;
    FILTCTL[2] = 0x00;
    FILTCTL[3] = 0x00;

    //FRMCTL is set to 0x8A1FCE00
    FRMCTL[0] = 0x8A;
    FRMCTL[1] = 0x1F;
    FRMCTL[2] = 0xC6; //CE = pace disabled, C6 = pace disabled LOFF enabled
    FRMCTL[3] = 0x00;

    LOFFCTL[0] = 0x82;
    LOFFCTL[1] = 0x00;
    LOFFCTL[2] = 0x00;
    LOFFCTL[3] = 0x15;

    //ECGCTL is set to 0x81F800AE
    ECGCTL[0] = 0x81;
    ECGCTL[1] = 0xF8;
    ECGCTL[2] = 0x00;
    ECGCTL[3] = 0xAE;

  • 0
    •  Analog Employees 
    on Sep 24, 2020 2:37 PM 4 months ago in reply to Ivo Hora

    Hi Ivo,

    It still sounds like the TESTTONE is running. Can you double check that you are setting TONEN bit to 0 in the TESTTONE register. Then enabling the the ECG capture.

  • Actually, I read the entire value of TESTTONE register before I start collecting samples and it yields 0. Therefore I guess all the bits of TESTTONE are set to 0. It is kind of a mystery for me :)

Reply Children
  • Actually, I just realized that I am using MODE=3 for SPI communication, so I will test it with mode 0. I just want to know whether the chip itself is all right. It initializes and sends data, but I don't know whether it could be corrupted even though it is sending SOME data.

    Actually, I also tested the original software for the board:

    Which uses bcm2835 library, but we wanted to utilize generic Linux kernel SPI driver. The original software can function without TESTONE activated so it surprises me that we still get TESTONE sinusoids even though we set up the same register sequence to initialize ADAS1000  like here: and we get different output.

    Sounds like there is something more we are not aware of. I have not a clue whether RLD must be also connected as we have only LA,LL,RA connected, no RLD, actually according to the register initialization sequence the RLD_OUT is set to one of the leads.

  • 0
    •  Analog Employees 
    on Sep 29, 2020 8:02 AM 3 months ago in reply to Ivo Hora

    Hi Ivo,

    Did changing the SPI mode make any difference here? Do you have a logic analyzer that you could use to verify you are sending the correct packets to the ADAS1000? It sounds like you may be inadvertently writing to the TESTTONE register. 

    It is recommended to use the RLD pin to  optimize common mode rejection in the system

  • Hello,

    thank you, unfortunately, I don't have any logic analyzer at home, but I think I resolved it. I noticed I was setting FRMCTL as the first register, but according to the example 1 sequence, I am supposed to set up CMREFCTL first and then FRMCTL. Is it really necessary to set up the registers exactly as it is ordered in the sequence in example 1?

    I also have another question, is it possible to damage ADAS1000 via applying inappropriate voltage on ADAS1000 pins? I accidentally swapped ADUM4400ARWZ to ADUM6400ARIZ and vice versa while soldering. The board was not working and I noticed the mistake I made, I corrected it with resoldering but the board is still not working. I checked all the ADAS1000 pins which should have VCC voltage and there is 3.3V everywhere. I know the problem might be anywhere, but I am just trying to find a way how to identify where the problem might be.

    I can send data via SPI that means there is no problem with SPI bus therefore I compared content of PACECTL register after ASAS1000 reset operation.

    In previous working board, it really contains reset value = 0x000F88, but with current board the reset value = 0

  • Actually, it seems like I can send data via SPI bus, but there is no reply, it leaves the variable content with 0 value.

  • 0
    •  Analog Employees 
    on Oct 22, 2020 7:41 AM 3 months ago in reply to Ivo Hora

    Hi Ivo,

    Yes, it is best to follow sequence as outlined in the datasheet for configuring the part. 

    Yes, it is possible to damage the IC if the applied voltage on any of the pins is beyond the Absolute maximum rating of the part. If you are measuring 3.3V everywhere it would seem like the part is damaged. Since SPI is not responding I would guess the part is indeed damaged and should be replaced.