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.

[参考译文] TM4C123GE6PM:ADC_Conversion

Guru**** 655270 points
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1028314/tm4c123ge6pm-adc_conversion

器件型号:TM4C123GE6PM
主题中讨论的其他器件:TM4C123

大家好、

我对客户有疑问。

我的 ADC 器件 TM4C123有问题、我设计了驱动器来工作 BU 轮询、通过 FIFO 寄存器的值来控制 LED 开关打开/关闭、 尽管我在数据表中流动了指令部分、但代码无法正常工作、并且在 IF 条件变为真时 LED 未关闭。 我尝试调试代码、发现一切正常、因此 我将此代码传递给 e2e 团队以发现此问题。

e2e.ti.com/.../ADC_5F00_POLLING_5F00_T1.rar

非常感谢你的帮助。

此致、

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Zhonghui、

     当您读取 ADC 时、您得到了什么值? 在代码中、如果值小于2048、您将关闭 LED。  

     您能做些实验吗?

     -如果您将 ADC 输入接地、您将得到什么值?

     -我假设您有自己的定制板。 是这样吗? 您可以在 LaunchPad 上运行代码吗? 工作正常吗? 我想知道您是否有电路板问题。  

     -由于您为整个设备开发了自己的驱动程序,因此我很难支持。 您是否有任何理由不想使用 TivaWare? 为了进行实验、您能否使用 TivaWare ADC 示例在端口 E3上采样?您在定制板上测量什么?

     -最后、如果您可以使用 TivaWare 示例成功采样和测量 PE3引脚上的输入、然后保存寄存器设置并与您自己的驱动程序代码进行比较。 当您比较它们之间的寄存器设置时、您应该了解可能导致驱动程序无法正常工作的不同之处。  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、蔡

    感谢您的帮助。我向客户提问:

    我 通过在 ADCSSCTL 中启用中断位来解决这个问题、即使没有使用中断、但知道我尝试使用3个通道、并且通过轮询变量电阻器的值来读取每个通道、因此我如何在读取唯一通道的同时读取我的8个通道 4个 FIFO 寄存器。

    如果我只使用一个通道、但不使用2个或更多通道、则此代码适用于 Tiva c。

    谢谢。

    此致、

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    [引用 userid="480785" URL"~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1028314/tm4c123ge6pm-adc_conversion/3806045 #3806045"]如何使用我唯一的4个 FIFO 寄存器同时读取我的8个通道。

    根据您的代码、您使用的是 SS0、它具有可容纳8个条目的 FIFO、而不是4个条目。  

        ADCSequenceStepConfigure(ADC0_BASE, 0, 0, ADC_CTL_CH0 ); // Channel 0 is the step 0 of SS0. 
        ADCSequenceStepConfigure(ADC0_BASE, 0, 1, ADC_CTL_CH1 ); // Channel 1 is the step 1 of SS0. 
        ADCSequenceStepConfigure(ADC0_BASE, 0, 2, ADC_CTL_CH2 ); // Channel 2 is the step 2 of SS0. 
        ADCSequenceStepConfigure(ADC0_BASE, 0, 3, ADC_CTL_CH3 ); // Channel 3 is the step 3 of SS0. 
        ADCSequenceStepConfigure(ADC0_BASE, 0, 4, ADC_CTL_CH4 ); // Channel 4 is the step 4 of SS0. 
        ADCSequenceStepConfigure(ADC0_BASE, 0, 5, ADC_CTL_CH5 ); // Channel 5 is the step 5 of SS0. 
        ADCSequenceStepConfigure(ADC0_BASE, 0, 6, ADC_CTL_CH6 ); // Channel 6 is the step 6 of SS0. 
        ADCSequenceStepConfigure(ADC0_BASE, 0, 7, ADC_CTL_CH7 | ADC_CTL_IE |
                                 ADC_CTL_END) // Channel 7 is the step 7 in SS0. Step 7 is the last channel in SS0. Generate interrupt
                                              // when channel 7 is sampled. 
        
       
        ADCSequenceStepConfigure(ADC0_BASE, 1, 0, ADC_CTL_CH8 | ADC_CTL_IE |
                                  ADC_CTL_END); // Assign channel 8 to SS1 as step 0. Step 0 is the last channel in SS1
                                                // Generate interrupt when channel 8 in SS1 is sampled. 

    请参阅上述示例代码、在 SS0中设置8个通道、在 SS1中设置1个通道。 您需要确保组中的最后一个通道启用中断、并使用 ADC_CTL_END 将其声明为最后一个通道。 我强烈建议客户查看 TivaWare 示例。  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、蔡

    感谢你的帮助。
    客户问我的代码能不能帮上忙、因为 TIvaware 有很多层默认用于跟踪和调试。

    谢谢。


    此致、

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

     我认为 TivaWare 非常简单、即使客户不想使用它也是如此。 您的客户为自己创建自定义驱动程序。 我很难跟随、因为我不是开发人员。 请再次要求客户执行以下操作。

     1. 将 ADC 输入 PE3接地、 使用 TivaWare 驱动程序可获得什么值? 我们需要确保没有硬件问题。

     2.将 ADC 寄存器设置保存到 CCS 寄存器窗口中以运行 TivaWare 驱动程序。

     3. 将 ADC 输入 PE3接地, 使用“定制”驱动程序将获得什么价值?

     4. 将 ADC 寄存器设置保存 到 CCS 寄存器窗口中、以运行您的定制驱动程序。

     请同时显示步骤2和4中的寄存器设置、以便我们可以比较问题所在。  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、蔡

    感谢你能抽出时间。
    我向客户发送反馈。

    “我在 ADC 驱动器中编辑了多通道的一些代码,但无法正常工作。 我将第二个通道控制寄存器配置为结束并启用中断,但它不起作用。 我需要通过 Facebook 或任何社交媒体直接与他们沟通的直接方式。 注意检查我的上次版本。  

    我 只想让 E2E 检查我的代码、它设计的简单代码。 但是、我将最后一个通道2控制寄存器配置为具有中断和启用结束位、并且多路复用器0中的两个都有任何 whatapp 组或其他任何东西与它们通信。
    我的问题会很难回答、而且很短"

    e2e.ti.com/.../ADC_5F00_POLLING_5F00_MULTI_5F00_CHANNEL.rare2e.ti.com/.../ADC_5F00_POLLING_5F00_MULTI_5F00_CHANNEL-_2800_1_2900_.rar

    谢谢。


    此致、

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

     客户似乎从未接受我关于如何调试其代码的建议。 下面是将对两个通道进行采样的完整 TivaWare 代码。 我还捕获整个寄存器设置。 在本示例中、运行示例时、我将 AIN0连接到3.3V、将 AIN1接地。 为什么不要求客户将其运行代码的寄存器设置与我的示例进行比较。 我将 AIN0和 AIN1配置为在 SS0中用于采样。 我认为这是调试他的代码的最佳方法。  

    #include <stdbool.h>
    #include <stdint.h>
    #include "inc/hw_memmap.h"
    #include "driverlib/adc.h"
    #include "driverlib/gpio.h"
    #include "driverlib/pin_map.h"
    #include "driverlib/sysctl.h"
    #include "inc/hw_types.h"
    #include "driverlib/rom_map.h"
    #include "driverlib/rom.h"
    #include "inc/tm4c123gh6pm.h"
    #include "driverlib/debug.h"
    
    uint32_t ui32ADC0Value[2];
    
    int main(void)
    {
        // Configure for SYSCLK=40Mhz
        SysCtlClockSet ( SYSCTL_SYSDIV_5|SYSCTL_USE_PLL|SYSCTL_OSC_MAIN|SYSCTL_XTAL_16MHZ ) ;
    
        // Enable ADC0
        SysCtlPeripheralEnable(SYSCTL_PERIPH_ADC0);
    
        // Enable GPIO PortE
        SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOE);
    
        // PE3 for AIN0
        GPIOPinTypeADC(GPIO_PORTE_BASE, GPIO_PIN_3);
    
        // PW2 for AIN1
        GPIOPinTypeADC(GPIO_PORTE_BASE, GPIO_PIN_2);
    
        // Use CPU to trigger the ADC operation on Sequence Number SS0.
        ADCSequenceConfigure(ADC0_BASE, 0, ADC_TRIGGER_PROCESSOR, 0);
    
        // SS0 can support up to 8 steps. For this example, only use two steps.
        // ConfigureStep 0 for AIN0 (ADC_CTL_CH0)
        ADCSequenceStepConfigure(ADC0_BASE, 0, 0, ADC_CTL_CH0 );
    
        // Configure SS0, Step 1 for AIN1 (ADC_CTL_CH1). Enable interrupt for AIN1 and make AIN1 as
        // as the last step.
        ADCSequenceStepConfigure(ADC0_BASE, 0, 1, ADC_CTL_CH1 | ADC_CTL_IE |
                                 ADC_CTL_END);
    
        // Enable SS0
        ADCSequenceEnable(ADC0_BASE, 0);
    
        // Clear any pending interrupt
        ADCIntClear(ADC0_BASE, 0);
    
        while(1)
        {
            // Trigger the ADC conversion
            ADCProcessorTrigger(ADC0_BASE, 0);
    
            // Wait until the sample sequencer SS0 has completed.
            while(!ADCIntStatus(ADC0_BASE, 0, false))
            {
            }
            ADCIntClear(ADC0_BASE, 0);
    
            // Read AIN0 and AIN1 value into buffer.
            ADCSequenceDataGet(ADC0_BASE, 0, ui32ADC0Value);
    
            SysCtlDelay(SysCtlClockGet() / 12);
        }
    }

    [引用 userid="480785" URL"~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1028314/tm4c123ge6pm-adc_conversion/3813896 #3813896"]我需要通过 Facebook 或任何社交媒体直接与他们进行通信的直接方式。 注意检查我的上次版本。  
    是否有任何 whatapp 组或其他任何内容需要与它们进行通信。

    我不理解客户对 Facebook 或 Whatapp 应用程序的要求。 我们只能在该论坛中支持 MCU 问题。 没有其他方法可以通过 Facebook 或 Whatapp 回答问题。 也许我不理解这里的问题。