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.

TMS320F2800137: F2800137

Part Number: TMS320F2800137
Other Parts Discussed in Thread: LAUNCHXL-F2800137, SYSCONFIG

Tool/software:

Hi experts,

I configured 4-ADC pins (2-channels A & C)in one of the ADC channel, I am giving analog input using a pot according to the one   A-Channel pin " myADC0Result0 " which I am giving analog signal should vary but this analog pin is impacting on another ADC pin A-Channel "myADC0Result1", Could you please help me to know why this adc pin is impacting on another , for your reference please find the attached video. I've done all configurations using SysConfig in LaunchXL-F2800137 (Launch pad).

Thanks & Regards,

Nirdhesh . 

  • Nirdhesh,

    Can you provide more details as to what ADC/channels, SOCs, ACQPS and type of signals being sampled.  On the video, it only shows ADC1 results being constant and ADC0 gradually increasing.

    Regards,

    Joseph

  • Hi joseph casuga 

    here i took SOCs 0  is A0 an SOCs 1 is  A1  see just i open ti provided sample code for  adc_ex1_soc_software and not done any changes in sysconfig then reading adc using potentiometer signal/output pin connected in A0 and i am rotating the count is increasing 0 to 4095 (myADC0Result0) here i am getting correct but why the another channel is incressing can you provide the reason 

    Regards,

    NIRDHESH

    //#############################################################################
    //
    // FILE:   adc_ex1_soc_software.c
    //
    // TITLE:  ADC Software Triggering
    //
    //! \addtogroup driver_example_list
    //! <h1>ADC Software Triggering</h1>
    //!
    //! This example converts some voltages on ADCA and ADCC based on a software
    //! trigger.
    //!
    //! The ADCC will not convert until ADCA is complete, so the ADCs will not run
    //! asynchronously. However, this is much less efficient than allowing the ADCs
    //! to convert synchronously in parallel (for example, by using an ePWM 
    //! trigger).
    //!
    //! \b External \b Connections \n
    //!  - A0, A1, C2, and C3 should be connected to signals to convert
    //!
    //! \b Watch \b Variables \n
    //! - \b myADC0Result0 - Digital representation of the voltage on pin A0
    //! - \b myADC0Result1 - Digital representation of the voltage on pin A1
    //! - \b myADC1Result0 - Digital representation of the voltage on pin C2
    //! - \b myADC1Result1 - Digital representation of the voltage on pin C3
    //!
    //
    //#############################################################################
    //
    //
    // $Copyright:
    // Copyright (C) 2023 Texas Instruments Incorporated - http://www.ti.com/
    //
    // Redistribution and use in source and binary forms, with or without 
    // modification, are permitted provided that the following conditions 
    // are met:
    // 
    //   Redistributions of source code must retain the above copyright 
    //   notice, this list of conditions and the following disclaimer.
    // 
    //   Redistributions in binary form must reproduce the above copyright
    //   notice, this list of conditions and the following disclaimer in the 
    //   documentation and/or other materials provided with the   
    //   distribution.
    // 
    //   Neither the name of Texas Instruments Incorporated nor the names of
    //   its contributors may be used to endorse or promote products derived
    //   from this software without specific prior written permission.
    // 
    // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 
    // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 
    // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
    // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 
    // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 
    // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 
    // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
    // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
    // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
    // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
    // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    // $
    //#############################################################################
    //
    
    //
    // Included Files
    //
    #include "driverlib.h"
    #include "device.h"
    #include "board.h"
    
    //
    // Globals
    //
    
    uint16_t myADC0Result0;
    uint16_t myADC0Result1;
    uint16_t myADC1Result0;
    uint16_t myADC1Result1;
    
    
    //
    // Main
    //
    void main(void)
    {
        //
        // Initialize device clock and peripherals
        //
    
        Device_init();
    
        //
        // Disable pin locks and enable internal pullups.
        //
        Device_initGPIO();
    
        //
        // Initialize PIE and clear PIE registers. Disables CPU interrupts.
        //
        Interrupt_initModule();
    
        //
        // Initialize the PIE vector table with pointers to the shell Interrupt
        // Service Routines (ISR).
        //
        Interrupt_initVectorTable();
    
        //
        // Set up ADCs, initializing the SOCs to be triggered by software
        //
        Board_init();
    
        //
        // Enable Global Interrupt (INTM) and realtime interrupt (DBGM)
        //
        EINT;
        ERTM;
    
        //
        // Loop indefinitely
        //
        while(1)
        {
            //
            // Convert, wait for completion, and store results
            //
            ADC_forceMultipleSOC(myADC0_BASE, (ADC_FORCE_SOC0 | ADC_FORCE_SOC1));
    
            //
            // Wait for ADCA to complete, then acknowledge flag
            //
            while(ADC_getInterruptStatus(myADC0_BASE, ADC_INT_NUMBER1) == false)
            {
            }
            ADC_clearInterruptStatus(myADC0_BASE, ADC_INT_NUMBER1);
    
            ADC_forceMultipleSOC(myADC1_BASE, (ADC_FORCE_SOC0 | ADC_FORCE_SOC1));
            //
            // Wait for ADCC to complete, then acknowledge flag
            //
            while(ADC_getInterruptStatus(myADC1_BASE, ADC_INT_NUMBER1) == false)
            {
            }
            ADC_clearInterruptStatus(myADC1_BASE, ADC_INT_NUMBER1);
    
            //
            // Store results
            //
    
            myADC0Result0 = ADC_readResult(ADCARESULT_BASE, ADC_SOC_NUMBER0);
            myADC0Result1 = ADC_readResult(ADCARESULT_BASE, ADC_SOC_NUMBER1);
            myADC1Result0 = ADC_readResult(ADCCRESULT_BASE, ADC_SOC_NUMBER0);
            myADC1Result1 = ADC_readResult(ADCCRESULT_BASE, ADC_SOC_NUMBER1);
    
            //
            // Software breakpoint. At this point, conversion results are stored in
            // myADC0Result0, myADC0Result1, myADC1Result0, and myADC1Result1.
            //
            // Hit run again to get updated conversions.
            //
            //ESTOP0;
        }
    }
    

  • Hi Nirdesh,

    Thanks for the explanation.  A1 (SOC1) is left floating so the ADCA sampling capacitor will have residual charge from SOC0 when SOC1 is converting.  This is the reason why you are also seeing the conversion value change in A1.  Connect A1 to a fixed value (to the 1.2v supply or to GND) and you should not see SOC1 value change when you vary the potentiometer on A0.

    Regards,

    Joseph

  • Hi Joseph,

    The solution you have provided is correct but , my purpose of using ADC is to convert 2-channel each 2-pin data into angular data so that I cannot do grounding or to be connected to any Vreference . I giving signal on both the pins but due to this crosstalk I am not getting the proper output waveform. Tell me can we do any configuration change in sysconfig file for this crosstalk.

    Regards,

    Nirdhesh 

  • Hi Nidesh,

    As long as SOC1 is not floating as in the case of your experiment and have SOC1 connected to a source with finite impedance, and you have set ACQPs (sampling time) accordingly based on section 11.13.2 (Choosing an Acquisition Window Duration) in the Technical Reference Manual (SPRUIX1B), then you should not see memory crosstalk.  The issue with your experiment is that A1 has been left floating so the sampling cap cannot settle to a specific level.

    Regards,

    Joseph

  • Hi Joseph ,

    Thank you for your support and information ,issue got resolved.

    Best regards,

    Nirdhesh