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.

ADS127L11EVM-PDK: Didn't get proper data in ADS127L11 or Sometime get 0x00.

Part Number: ADS127L11EVM-PDK
Other Parts Discussed in Thread: ADS127L11

Hello TI Team,

I have used ADS127L11 EVM with Teensy 4.0 ( MIMXRT1062DVL6B) Development Board.

Needful Setup in EVM : (ADS127L11EVM with an external controller board)

I have provide +5V to J12 at +Vin side and +2.5V to J13 IOVDD supply.

Jumper Connections:

Attached JP3 jumper. (as default)

Attached JP4 jumper with +Vin & +LDOVin pin.

Attached JP5 jumper with AVSS & GNS pin.

Attached JP6 jumper with 2&3 EVM Clk pin.

Attached JP7 jumper with 2&3 PHI Clk pin.

Connect RST,START,SDI,CS,SCLK,SDO and Ground pin with Teensy 4.0 SPI Interface.

Also I here attached connection picture for the same.

Please verify above connections and suggest if any changes required. 

Firmware Development :

I will try to read and write register from ADS127L11 and also try with DEV_ID.

I make Start and Reset Pin High then try to send data in SDI.

For getting 24 Bit ADC Raw data according to datasheet I have sent 0x00 0x00 0x00 (NOP) frame in SDI.

In that after sometimes I got RAW data in hex format and convert into codec format (5400662, 5400672,5399097 etc. Codec data). Also got 1.66V at J4 side.

I have check with change voltage at J4 side and got data in codec format but this changes is not instant it's take long time 2 to 5 minutes and also i din't get proper output voltage.

One thing also mention to here I didn't get this data continuously even though i have sent frame in SDI, unexpectedly at that time i got value 0x00. So, i need to set any other register from Firmware side?

Also i have observed when I power off Bench Power supply from +5V to J12 side and also +2.5V to J13 IOVDD supply side then i got same problem i got 0x00. So, Is there any Hardware side power sequence i need to follow to get RAW data?

I attached my .c & .h file for your reference.

SPIWrapper.c
/* -- driver library Includes -- */
#include "fsl_lpspi.h"
#include "fsl_gpio.h"
#include "fsl_debug_console.h"
#include "math.h"
/* -- Ended driver library Includes -- */

/* -- User defined library Includes -- */
#include "SPIWrapper.h"
#include "SystemDelay.h"
/* -- Ended User defined library Includes -- */

/* -- User defined variables -- */
static int32_t _errCode 				= kStatus_Fail;
static uint8_t _masterRxData[3] 		= {0U};
static uint8_t _masterTxData[4] 		= {0U};
/* -- Ended User defined variables -- */

void SW_LPSPI_Init(void)
{
	uint32_t _srcClock_Hz;
	lpspi_master_config_t _masterConfig;

   /*Master config*/
   LPSPI_MasterGetDefaultConfig(&_masterConfig);
   _masterConfig.baudRate = TRANSFER_BAUDRATE;
   _masterConfig.whichPcs = EXAMPLE_LPSPI_MASTER_PCS_FOR_INIT;
   _masterConfig.pcsToSckDelayInNanoSec        = 1000000000U / (_masterConfig.baudRate * 2U);
   _masterConfig.lastSckToPcsDelayInNanoSec    = 1000000000U / (_masterConfig.baudRate * 2U);
   _masterConfig.betweenTransferDelayInNanoSec = 1000000000U / (_masterConfig.baudRate * 2U);

   _srcClock_Hz = LPSPI_MASTER_CLK_FREQ;
   LPSPI_MasterInit(EXAMPLE_LPSPI_MASTER_BASEADDR, &_masterConfig, _srcClock_Hz);

   PRINTF("\r\n--- LPSPI Initialization Completed ---\r\n");
}

void SW_LPSPI_SetClockSource(void)
{
	PRINTF("LPSPI Set Clock Source\n");

    /*Set clock source for LPSPI*/
    CLOCK_SetMux(kCLOCK_LpspiMux, EXAMPLE_LPSPI_CLOCK_SOURCE_SELECT);
    CLOCK_SetDiv(kCLOCK_LpspiDiv, EXAMPLE_LPSPI_CLOCK_SOURCE_DIVIDER);
}


void SW_LPSPI_Write(void)
{
	uint32_t _index;
	lpspi_transfer_t _masterXfer;

	 memset(_masterTxData, 0, sizeof(_masterTxData));

   /*Start master transfer, transfer data to slave.*/
	_masterTxData[0]=0x00;
	_masterTxData[1]=0x00;
	_masterTxData[2]=0x00;
//	_masterTxData[3]=0x00;
//	_masterTxData[4]=0x00;
//	_masterTxData[5]=0x00;

   /* Print out transmit buffer */
   PRINTF("\r\n Master transmit:\r\n");
   for (_index = 0U; _index < TRANSFER_SIZE; _index++)
   {
       /* Print 16 numbers in a line */
       if ((_index & 0x0FU) == 0U)
       {
           PRINTF("\r\n");
       }
       PRINTF(" %02X", _masterTxData[_index]);
   }
   PRINTF("\r\n");

   _masterXfer.txData   = _masterTxData;
   _masterXfer.rxData   = NULL;
   _masterXfer.dataSize = 3;
   _masterXfer.configFlags =
   EXAMPLE_LPSPI_MASTER_PCS_FOR_TRANSFER | kLPSPI_MasterPcsContinuous | kLPSPI_MasterByteSwap;

   LPSPI_MasterTransferBlocking(EXAMPLE_LPSPI_MASTER_BASEADDR, &_masterXfer);

   /* Delay to wait slave is ready */
   if (SysTick_Config(SystemCoreClock / 1000U))
	{
		while (1)
		{
		}
	}
}

void SW_LPSPI_Read(void)
{
   uint32_t _errCount;
   uint32_t _index;
   lpspi_transfer_t _masterXfer;
   int32_t adc_val_raw = 0;
   float Voltage = 0;

   /* Start master transfer, receive data from slave */
   _masterXfer.txData   = NULL;
   _masterXfer.rxData   = _masterRxData;
   _masterXfer.dataSize = 3;
   _masterXfer.configFlags = EXAMPLE_LPSPI_MASTER_PCS_FOR_TRANSFER | kLPSPI_MasterPcsContinuous | kLPSPI_MasterByteSwap;

   LPSPI_MasterTransferBlocking(EXAMPLE_LPSPI_MASTER_BASEADDR, &_masterXfer);

   _errCount = 0U;
   for (_index = 0U; _index < TRANSFER_SIZE; _index++)
   {
       if (_masterTxData[_index] != _masterRxData[_index])
       {
           _errCount++;
       }
   }

   if (_errCount == 0U || _errCount != 0U)
   {
       PRINTF(" \r\nLPSPI transfer all data matched! \r\n");

       /* Print out receive buffer */
       PRINTF("\r\n Master received:\r\n");
       for (_index = 0U; _index < TRANSFER_SIZE; _index++)
       {
           /* Print 16 numbers in a line */
           if ((_index & 0x0FU) == 0U)
           {
               PRINTF("\r\n");
           }
           PRINTF(" %02X", _masterRxData[_index]);
       }
       PRINTF("\r\n");
   }
   else
   {
       PRINTF("\r\nError occurred in LPSPI transfer ! \r\n");
   }

   adc_val_raw = (_masterRxData[0]<<16)|(_masterRxData[1]<<8)|_masterRxData[2];

   PRINTF("\r\n ADC Codec Data in Hex %02X\r\n",adc_val_raw);
   PRINTF("\r\n ADC Codec Data in decimal %d\r\n",adc_val_raw);

   // Take Refrence voltage 2.5
   Voltage = (float)(adc_val_raw)*(0.000000298);

   PRINTF("\r\n Data in Votlage ! %f\r\n",Voltage);

}

void SW_GetSlaveData(void)
{
	uint32_t _loopCount = 1U;

#if LOOP_BACK_TEST
    PRINTF("LPSPI Start.\r\n");

	uint8_t _index;
    lpspi_transfer_t _masterSPI;
    uint8_t _masterRxData[LPSPI_TRANSFER_SIZE] = {0};
    uint8_t _masterTxData[LPSPI_TRANSFER_SIZE] = {0};

    for (_index = 0; _index < LPSPI_TRANSFER_SIZE; _index++)
    {
        _masterTxData[_index] = _index;
    }
    /*Start master transfer*/
    _masterSPI.txData      = _masterTxData;
    _masterSPI.rxData      = _masterRxData;
    _masterSPI.dataSize    = LPSPI_TRANSFER_SIZE;
    _masterSPI.configFlags = BOARD_LPSPI_PCS_FOR_TRANSFER | kLPSPI_MasterPcsContinuous;
    LPSPI_MasterTransferBlocking(BOARD_EEPROM_LPSPI_BASEADDR, &_masterSPI);

    /* Compare Tx and Rx data. */
    for (_index = 0; _index < LPSPI_TRANSFER_SIZE; _index++)
    {
        if (_masterTxData[_index] != _masterRxData[_index])
        {
            break;
        }
    }

    if (LPSPI_TRANSFER_SIZE == _index)
    {
        PRINTF("LPSPI loopback test pass!!!\r\n");
    }
    else
    {
        PRINTF("LPSPI loopback test fail!!!\r\n");
    }
#endif

    PRINTF("LPSPI Polling.\r\n");
    PRINTF("Master uses polling way and slave uses interrupt way. \r\n");
    PRINTF("Please make sure you make the correct line connection. Basically, the connection is: \r\n");
    PRINTF("LPSPI_master --  LPSPI_slave   \r\n");
    PRINTF("   CLK       --    CLK  \r\n");
    PRINTF("   PCS       --    PCS \r\n");
    PRINTF("   SOUT      --    SIN  \r\n");
    PRINTF("   SIN       --    SOUT \r\n");
    PRINTF("   GND       --    GND \r\n");

    GPIO_PinWrite(EXAMPLE_START_GPIO, EXAMPLE_START_GPIO_PIN, 1U);

    while (1)
    {
        /* Set up the transfer data */
        for (uint32_t _index = 0U; _index < TRANSFER_SIZE; _index++)
        {
            _masterRxData[_index] = 0U;
        }

        /*Start master transfer, transfer data to slave.*/
        SW_LPSPI_Write();

 		/* Delay 20 ms */
        SW_Delay_Ms(20U);

 		/* Start master transfer, receive data from slave */
 		SW_LPSPI_Read();

        /* Wait for press any key */
        PRINTF("\r\n Press any key to run again\r\n");
        GETCHAR();

        /* Increase loop count to change transmit buffer */
        _loopCount++;
    }
}
SPIWrapper.h

Once this problem solve also I need to Implement Daisy-chained.

Please help out to resolve this problem or provide guidance if i am doing any wrong direction. 

  • Hello Anil,

    Welcome to the TI E2E community!

    The ADS127L11 needs a clock source for the main CLK input.  The EVM includes a 25MHz oscillator, which needs to be enabled in order for the ADS127L11 to function properly.

    Jumper positions:

    JP3:  Jumper not installed to enable local 25MHz clock oscillator (Please remove jumper)

    JP6:  Jumper installed in EVM CLK position, 1-2. (Correct)

    JP7:  Jumper installed in EXT/EVM CLK position, 2-3. (Please move jumper to 2-3)

    JP4:  Jumper installed in +Vin position, 2-3.  (Correct)

    JP5:  Jumper installed in AVSS/GND position, 1-2 (Correct)

    External power, +Vin, on J12 should be set to +5.5V for best performance.  

    Looking at the Teensy40 specs, digital IO uses 3.3V.  For proper operation, provide +3.3V to J13, IOVDD.  

    Also, looking at your code, you are not use the /DRDY signal.  Normal operation of the ADS127L11 is continuous conversion mode.  In this mode, the START pin is held high and the MCU monitors the /DRDY line for a falling edge.  When the falling edge is detected, then data is transferred over SPI by asserting /CS low.

    You can also operate the ADS127L11 in START/STOP mode by pulsing the START pin high to start a conversion (refer to section 8.4.6.2 of the datasheet).  In this mode, you will either need to monitor the /DRDY line for a conversion ready (falling edge) or simply delay by the latency time of the conversion process, which depends on the filter configuration.  The latency times are specified in tables 8-3 through 8-8.  Since these times assume a CLK frequency of 25.6MHz, you will need to multiple the latency times by 25.6/25=1.024 to get the corrects times when using a 25MHz clock.

    If you still have problems getting communications to work, please provide a logic capture of the RST,START,SDI,CS,SCLK,SDO and /DRDY pins.

    Regards,
    Keith Nicholas
    Precision ADC Applications

  • Thanks for the quick support Keith Nicholas,

    I have made the changes according to you suggestion.

    All jumper positions are installed properly, providing the necessary voltages to J13 (3.3V), IOVDD, and J12 (+5.5V at +Vin).

    The MCU is continuously monitoring the /DRDY line for a falling edge. Upon detection of a falling edge, data is transferred over SPI.

    I am currently using single-ended inputs, so i have connected header J4 to the AINN/GND position 2-3. Upon observation, I am getting a default voltage nearby 1.625763V at the AINP pin.

    Now, I am applying Input voltage at AINP pin for get ADC data.

    Results & Problem :

    1. Once If i got the data then every time when i read adc data i got properly voltage even if i change the voltage. I got data in the range from 0.4mv to 2.5V. But if i apply less then 0.4mv in that case i didn't get output voltage less then 0.4 mv. So, Is it minimum saturation voltage? or How i get less then 0.4mv?. V ref is 2.5 V so maximum saturation voltage is perfectly working for me if i apply more than 2.5 V then also i got below 2.5 V.
    2. Also I observed that when I power off any Bench Power supply (+5.5V to J12 side, +3.3V to J13 IOVDD and Input voltage at AINP J4 ) then Restart Power supply in that case i didn't get data as well as Interrupt on /DRDY pin for a long time. So, Is there any power sequence i need to follow to get ADC data?
    3. After that if i trying many time to read ADC data but i didn't get data as well as /DRDY interrupt. For resolve this problem i power on/off any of supply and try to read data and once i got data then it's work proper as i mention in case 1. So, What's happening here i didn't understand!!

    8176.SPIWrapper.c
    /* -- driver library Includes -- */
    #include "fsl_lpspi.h"
    #include "fsl_gpio.h"
    #include "fsl_debug_console.h"
    #include "math.h"
    #include "board.h"
    /* -- Ended driver library Includes -- */
    
    /* -- User defined library Includes -- */
    #include "KB_SW_SPIWrapper.h"
    #include "KB_SW_SystemDelay.h"
    /* -- Ended User defined library Includes -- */
    
    /* -- User defined variables -- */
    static int32_t _errCode 				= kStatus_Fail;
    static uint8_t _masterRxData[10] 		= {0U};
    static uint8_t _masterTxData[6] 		= {0U};
    /* Whether the SW is turned on */
    static bool g_InputSignal = false;
    /* -- Ended User defined variables -- */
    
    #define EXAMPLE_SW_GPIO         BOARD_INITPINS_DRDY_GPIO
    #define EXAMPLE_SW_GPIO_PIN     BOARD_INITPINS_DRDY_GPIO_PIN
    
    #define EXAMPLE_SW_IRQ          BOARD_USER_BUTTON_IRQ
    #define EXAMPLE_GPIO_IRQHandler BOARD_USER_BUTTON_IRQ_HANDLER
    
    /*!
     * @brief Interrupt service fuction of switch.
     */
    void EXAMPLE_GPIO_IRQHandler(void)
    {
        /* clear the interrupt status */
        GPIO_PortClearInterruptFlags(EXAMPLE_SW_GPIO, 1U << EXAMPLE_SW_GPIO_PIN);
        /* Change state of switch. */
        g_InputSignal = true;
        SDK_ISR_EXIT_BARRIER;
    }
    
    static void delay(void)
    {
        volatile uint32_t i = 0;
        for (i = 0; i < 1000000; ++i)
        {
            __NOP(); /* delay */
        }
    }
    
    void SW_LPSPI_Init(void)
    {
       uint32_t _srcClock_Hz;
       lpspi_master_config_t _masterConfig;
    
       /*Master config*/
       LPSPI_MasterGetDefaultConfig(&_masterConfig);
       _masterConfig.baudRate = TRANSFER_BAUDRATE;
       _masterConfig.whichPcs = EXAMPLE_LPSPI_MASTER_PCS_FOR_INIT;
       _masterConfig.pcsToSckDelayInNanoSec        = 1000000000U / (_masterConfig.baudRate * 2U);
       _masterConfig.lastSckToPcsDelayInNanoSec    = 1000000000U / (_masterConfig.baudRate * 2U);
       _masterConfig.betweenTransferDelayInNanoSec = 1000000000U / (_masterConfig.baudRate * 2U);
    
       _srcClock_Hz = LPSPI_MASTER_CLK_FREQ;
       LPSPI_MasterInit(EXAMPLE_LPSPI_MASTER_BASEADDR, &_masterConfig, _srcClock_Hz);
    
       PRINTF("\r\n--- LPSPI Initialization Completed ---\r\n");
    }
    
    void SW_LPSPI_SetClockSource(void)
    {
    	PRINTF("LPSPI Set Clock Source\n");
    
        /*Set clock source for LPSPI*/
        CLOCK_SetMux(kCLOCK_LpspiMux, EXAMPLE_LPSPI_CLOCK_SOURCE_SELECT);
        CLOCK_SetDiv(kCLOCK_LpspiDiv, EXAMPLE_LPSPI_CLOCK_SOURCE_DIVIDER);
    }
    
    void SW_LPSPI_Write(void)
    {
    	uint32_t _index;
    	lpspi_transfer_t _masterXfer;
    
    	 memset(_masterTxData, 0, sizeof(_masterTxData));
    
       /*Start master transfer, transfer data to slave.*/
    	_masterTxData[0]=0x00;
    	_masterTxData[1]=0x00;
    	_masterTxData[2]=0x00;
    //	_masterTxData[3]=0x00;
    //	_masterTxData[4]=0x00;
    //	_masterTxData[5]=0x00;
    
       /* Print out transmit buffer */
       PRINTF("\r\n Master transmit:\r\n");
       for (_index = 0U; _index < TRANSFER_SIZE; _index++)
       {
           /* Print 16 numbers in a line */
           if ((_index & 0x0FU) == 0U)
           {
               PRINTF("\r\n");
           }
           PRINTF(" %02X", _masterTxData[_index]);
       }
       PRINTF("\r\n");
    
       _masterXfer.txData   = _masterTxData;
       _masterXfer.rxData   = NULL;
       _masterXfer.dataSize = 3;
       _masterXfer.configFlags =
       EXAMPLE_LPSPI_MASTER_PCS_FOR_TRANSFER | kLPSPI_MasterPcsContinuous | kLPSPI_MasterByteSwap;
    
       LPSPI_MasterTransferBlocking(EXAMPLE_LPSPI_MASTER_BASEADDR, &_masterXfer);
    
       /* Delay to wait slave is ready */
       if (SysTick_Config(SystemCoreClock / 1000U))
    	{
    		while (1)
    		{
    		}
    	}
    }
    
    void SW_LPSPI_Read(void)
    {
        uint32_t errorCount;
        uint32_t i;
        lpspi_transfer_t masterXfer;
        int32_t adc_val_raw = 0;
        float Voltage = 0;
    
        /* Start master transfer, receive data from slave */
        masterXfer.txData   = NULL;
        masterXfer.rxData   = _masterRxData;
        masterXfer.dataSize = 10;
        masterXfer.configFlags = EXAMPLE_LPSPI_MASTER_PCS_FOR_TRANSFER | kLPSPI_MasterPcsContinuous | kLPSPI_MasterByteSwap;
    
        LPSPI_MasterTransferBlocking(EXAMPLE_LPSPI_MASTER_BASEADDR, &masterXfer);
    
        errorCount = 0U;
        for (i = 0U; i < TRANSFER_SIZE; i++)
        {
            if (_masterRxData[i] != _masterRxData[i])
            {
                errorCount++;
            }
        }
    
        if (errorCount == 0U || errorCount != 0U)
        {
            PRINTF(" \r\nLPSPI transfer all data matched! \r\n");
    
            /* Print out receive buffer */
            PRINTF("\r\n Master received:\r\n");
            for (i = 0U; i < TRANSFER_SIZE; i++)
            {
                /* Print 16 numbers in a line */
                if ((i & 0x0FU) == 0U)
                {
                    PRINTF("\r\n");
                }
                PRINTF(" %02X", _masterRxData[i]);
            }
            PRINTF("\r\n");
        }
        else
        {
            PRINTF("\r\nError occurred in LPSPI transfer ! \r\n");
        }
    
        adc_val_raw = (_masterRxData[0]<<16)|(_masterRxData[1]<<8)|_masterRxData[2];
    
        PRINTF("\r\n ADC Codec Data in Hex %02X\r\n",adc_val_raw);
        PRINTF("\r\n ADC Codec Data in decimal %d\r\n",adc_val_raw);
    
        // Take Refrence voltage 2.5
        Voltage = (float)(adc_val_raw)*(0.000000298);
    
        PRINTF("\r\n Data in Votlage ! %f\r\n",Voltage);
    
    }
    
    void SW_GetSlaveData(void)
    {
    	uint32_t _loopCount = 1U;
    
        /* Define the init structure for the input pin */
        gpio_pin_config_t sw_config =
        {
            kGPIO_DigitalInput,
            0,
    		kGPIO_IntFallingEdge,
        };
    
        PRINTF("LPSPI Polling.\r\n");
        PRINTF("Master uses polling way and slave uses interrupt way. \r\n");
        PRINTF("Please make sure you make the correct line connection. Basically, the connection is: \r\n");
        PRINTF("LPSPI_master --  LPSPI_slave   \r\n");
        PRINTF("   CLK       --    CLK  \r\n");
        PRINTF("   PCS       --    PCS \r\n");
        PRINTF("   SOUT      --    SIN  \r\n");
        PRINTF("   SIN       --    SOUT \r\n");
        PRINTF("   GND       --    GND \r\n");
    
        /* Init input switch GPIO. */
        EnableIRQ(EXAMPLE_SW_IRQ);
        GPIO_PinInit(EXAMPLE_SW_GPIO, EXAMPLE_SW_GPIO_PIN, &sw_config);
    
        /* Enable GPIO pin interrupt */
        GPIO_PortEnableInterrupts(EXAMPLE_SW_GPIO, 1U << EXAMPLE_SW_GPIO_PIN);
    
        GPIO_PinWrite(EXAMPLE_START_GPIO, EXAMPLE_START_GPIO_PIN, 1U);
    
        while (1)
        {
            /* Set up the transfer data */
            for (uint32_t i = 0U; i < TRANSFER_SIZE; i++)
            {
            	_masterRxData[i] = 0U;
            }
    
            PRINTF("\r\n DRDY %d\r\n",g_InputSignal);
    
            if (g_InputSignal)
            {
                if (0 == GPIO_PinRead(EXAMPLE_SW_GPIO, EXAMPLE_SW_GPIO_PIN))
                {
                    PRINTF("DRDY Read, Data is Ready %d.\r\n", g_InputSignal);
    
                    /*Start master transfer, transfer data to slave.*/
                    SW_LPSPI_Write();
    
                    delay();
    
            		/* Start master transfer, receive data from slave */
            		SW_LPSPI_Read();
                }
                /* Reset flag of Interrupt Pin. */
                g_InputSignal = false;
    
                PRINTF("\r\n DRDY Reset %d\r\n",g_InputSignal);
            }
    
            /* Wait for press any key */
            PRINTF("\r\n Press any key to run again\r\n");
            GETCHAR();
    
            /* Increase loop count to change transmit buffer */
            _loopCount++;
        }
    }
    

    Please guide me...

  • Hello Anil,

    The ADS127L11EVM single-ended input range is -2.5V to +2.5V.  The actual range may be slightly less due to offset and gain errors, but will be very close to -2.5V and +2.5V.  You mention that you cannot read less than 0.4mV.  Is this a limitation of your input voltage source?  Please measure the voltage using a DMM to verify that you input voltage is less than 0.4mV.   As I said, you should be able to measure voltages down to -2.5V.

    There is no special power sequence for the +3.3V and +5.5V supplies.  However, the +5.5V supply must be applied before any input voltage is applied for proper power-up reset.  Also, the +3.3V supply must be applied before driving in IO pins from your Teensy4.0 processor board.  In order to get reliable power-up, you should also toggle the RST pin after all supplies have powered up, wait 10ms, and then run the rest of your code.

    In order to debug these issues, you really need to hook up a logic analyzer or scope to the digital control lines to verify all timing requirements are met.  If you can provide a picture of these plots, I can verify.

    Regards,
    Keith

  • Hello Keith,

    I have tested many times ADS127L11 with Teensy 4.0 Board but still i didn't get less than 0.4mV also measure the voltage using a DMM.

    So, I have tested ADS127L11 EVM Kit with ADS127L11EVM GUI software (single-ended J4 Jumper connect to AINN/GND position 2-3.).

    Hereby,I attache result for the same.

    Test Cases : In all cases I only provide +0.2mV Input voltage.

    1)  ADS127L11 EVM Kit Power On using USB Port. But Input voltage not provided to AINP pin. I am getting a default voltage nearby +1.6V.

    I have also attache image for the same in which i provide the input voltage +0.2mV and also measure using a DMM (+0.201mV) to verify that, but in-which Pin not connected to AINP and common GND.

    2) ADS127L11 EVM Kit Power On using USB Port. Just connect Power supply Probe with AINP pin and common GND but power Supply OFF. In that i am also getting a voltage +0.443mV and also getting 443.847mV in software.

    3) ADS127L11 EVM Kit Power On using USB Port. Provide +0.2mV Input voltage using Power supply, Probe connected with AINP pin and common GND. But In that i am getting a reverse voltage in power supply and it's changed value from 0.2mV to +0.422mV and also getting +422.5762mV in software.

    Please guide me if I am doing any wrong!!

  • Hello Anil,

    1.  The typical voltage that the EVM reads in single-ended configuration and the AINP floating is 1.67V.  This is normal behavior of the EVM when the AINP is not driven to 0V by a low impedance source.

    2.  Your power supply output impedance appears to not be pully the input all the way to ground.  This is a limitation of your power-supply and not the ADS127L11EVM.

    3.  The input impedance of the ADS127L11EVM AINP input is about 1kOhm, and the external source needs to sink current from the EVM.  In this case, the power supply is only able to source current, so there is an input current backflow to the power supply, causing the voltage to raise up.  If you want to test the full input range of the ADS127L11EVM, you should use a precision DC source that can both source and sink current.

    Regards,
    Keith

  • Thank you Keith Nicholas,

    Sorry for a late reply I have been unavailable for last few days due to health.

    According to your suggestion i have testing with different DC source and it works for me for getting different output voltage range in EVM.

    The problem, I told you earlier in which i didn't get data (I got 0x00). It's also resolve but that data is not proper.

    This problem resolve due to changes wire connection like cross connection Teensy Board to ADS127L11EVM SDO (MOSI) -> SDI(MISO) and  SDI(MISO) -> SDO(MOSI)So, In SPI connection mostly SDI -> SDI and SDO -> SDO am i right? Correct If i am wrong.

    Now problem is there i am transmitting 0x00 0x00 0x00 (NOP) frame in SDO but when i cross check data frame with logic analyzer somehow i am getting 

    0x00 0x00 0x01. and another problem is there in SDI line in logic analyzer i got accurate raw data 0x52 0xF6 0x08 but when i try to read and print that data in serial port some how it was changed.

     I have attach logic analyzer picture and serial data plot So might be helpful to you for debug the issue.

  • Thank you Keith Nicholas,

    Sorry for a late reply I have been unavailable for last few days due to health.

    According to your suggestion i have testing with different DC source and it works for me for getting different output voltage range in EVM.

    The problem, I told you earlier in which i didn't get data (I got 0x00). It's also resolve but that data is not proper.

    This problem resolve due to changes wire connection like cross connection Teensy Board to ADS127L11EVM SDO (MOSI) -> SDI(MISO) and  SDI(MISO) -> SDO(MOSI)So, In SPI connection mostly SDI -> SDI and SDO -> SDO am i right? Correct If i am wrong.

  • Hello Anil,

    I am not clear on your description.  However, for connections between Teensy4.0 board and ADS127L11EVM, use the following:

    Teensy4.0 ADS127L11EVM
    CS (10) /CS
    MOSI (11) SDI
    MISO (12) SDO
    SCK (13) SCLK

    The SDI pin is only an input on the ADS127L11, so the 0x00 0x00 0x01 has something to do with the Teensy4.0/code.

    Also, the ADS127L11 output is 2's complement, 24b signed integers.  When reading this into the MCU, I assume you are using a 32b signed integer.  In order to maintain the sign bit, you should left shift the 24b data by 8 (or multiply by 256), and then right shift 8 (divide by 256); this should preserve the sign bit and give the correct readings.

    Raw data A9773E output from ADS127L11 is not decimal 11,106,110; it is decimal -5671106.

    Regards,
    Keith

  • Hello Keith,

    Thank you for your continues support now resolve my issue.

    Now I move onto daisy chain implementation so i need to follow same EVM hardware connection (Jumper connections) as we discuss earlier in Single EVM setup right ?

    Just need to change For Example ( 2 ADC use for Daisy chain) : EVM1 SDI to next EVM2 SDO and EVM2 SDI to Teensy board SDO (11). 

    Any other things i need to considerable for the daisy chain setup? 

  • Hi Anil,

    Yes, this is correct.  Both boards will share SCLK and /CS pins.  MOSI will go to SDI on EVM1, SDO on EVM1 will go to SDI on EVM2, and SDO on EVM2 will go to MISO.

    Regards,
    Keith

  • Hello Keith

    Thank you so much.

    I have implement 2 EVM connect in daisy-chain and i also got data of both EVM but for data parsing for particular ADC i have facing problem.

    So there is any example code available for implement daisy-chain or data parsing ? Apart from this : //www.ti.com/tool/download/SBAC296

  • Hello Anil,

    The only example code is the SBAC296 that you highlighted.  This code shows how to parse the data for a single channel when STATUS and CRC are included.  You should be able to modify this code for 2 or more channels.

    Regards,
    Keith

  • Thank you Keith for your continues support.