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.

[参考译文] TM4C123GH6PM:ADC 问题

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/564827/tm4c123gh6pm-adc-issue

主题中讨论的其他器件:TM4C123GH6PM

我使用的是 TM4C123GH6PM launchpad。

IAR 开发软件。

我想在 A0和 A1引脚上使用两个传感器。

连续读取这些值、进行处理。

这是我的代码。

请更正:

..................................................................................................

#include
#include
#include
//#include
#include
#include
/*
数据 PA4 13.
SCK PA2 11.
SS PA3 12.
三、会议的报告 *
unsigned long ADC_Result = 0;
float ADC_Result1=0;
void adc_init();
unsigned long adc ();
void send_dc();
void serial_clk();

unsigned long adc ()

无符号长整型结果;
ADC0->PSSI = 0X0004;//开始采样序列发生器2
while (((ADC0->RIS &0x04)=0);
结果= ADC0->SSFIFO2 &0XFFF;
ADC0->ISC = 0X0004;
返回结果;



int main (空)

                                             //...13.4.1模块初始化第817页
SYSCTl->RCGCADC =0x00000001;           //1. 已选择 ADC 0模块
                                             //通用 I/O 运行模式时钟 RRCGCGPIO 第340页
sysctl->RCGCGPIO=0X00000011;           //2. 选择端口 A 和端口 E

//DAC 引脚设置
                                            // GPIO 方向 GPIODIR 第663页
GPIOA->DIR =0X1C;                          // PA2、PA3、PA4作为输出引脚
                                            // GPIO 数字使能(GPIODEN)第682页
GPIOA->DEN =0X1C;                        // PA2、PA3、PA4为数字启用
                                           // GPIO 数据(GPIODATA)第662页
GPIOA->DATA =0x08;                        //初始引脚数据

//ADC 端口引脚初始化

GPIOE->AFSEL =(1<<2)|(1<<3);             //3. 设置 ADC 输入引脚的 GPIOAFSEL 位
GPIOE->DEN &=~0x0C;                    //4. 通过清除 GPIO 数字使能(GPIODEN)寄存器中相应的 DENbit、将 AINx 信号配置为模拟输入
GPIOE->AMSEL =(1<<2)|(1<<3);             //5. 通过向 GPIOAMSEL 寄存器的相应位写1来禁用所有要使用的 ADC 输入引脚的模拟隔离电路
GPIOE->DIR &=~0x0C;

//13.4.2采样序列发生器配置
ADC0->ACTSS &=~0X0004;                //1. 通过清除 ADCACTSS寄存 器中相应的 ASENn 位、确保禁用采样序列发生器
                                          // ADC SS2启用- 4个采样
ADC0->EMUX = 0XF000;                   //2. 在 ADCEMUX 寄存器中配置采样序列发生器的触发事件
//设置为连续采样
ADC0->SSMUX3=1;                       //4. 对于采样序列中的每个采样、在 ADCSSMUXn 寄存器中配置相应的输入源
ADC0->SMUX2 = 0;                       // SSMUX3 -> AIN1 & SSMUX2 -> AIN0
ADC0->SSCTL2 = 0x60;                    //5. 对于采样序列中的每个采样、在 ADCSSCTLn 寄存器的相应半字节中配置采样控制位
                                          //第2个采样是最后一个采样并且之后的中断被启用(这适用于 SS2)
ADC0->IM =(1<<2);                        //6. 要使用中断、请在 ADCIM 中设置相应的 MASK 位
                                         // ADCSSCTL2 IEn 位被置位
ADC0->ACTSS |= 0X0004;                 //7. 将 ADCACTSS 寄存器中相应的 ASENn 位置位、启用采样序列发生器逻辑
ADC0->SSPRI = 0X1023;


while (1)

ADC_Result = ADC();
ADC_Result1 =(ADC_Result/4095)*3.3;
ADC_Result = ADC_Result | 0x3000;


}..................................................................................................

我无法理解 ADC_Result 将具有哪个值、来自 AIN0或 AIN1。

以及如何同时从 AIN0或 AIN1获取值。

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

    您能不能离开 DRM 风格的寄存器访问、而改用 TivaWare 吗? 您以外的其他人无法读取代码。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我应该使用哪种开发软件?

    我已经在 IAR 开发软件中完成了这个编码。

    在 main 函数中、我已经按照数据表中给出的步骤初始化和配置 ADC。

    在 while 环路中、我正在等待 ADC 转换完成中断。


    扫描单个模拟引脚代码的操作正常。
    如何同时扫描两个模拟引脚或一对一扫描?

    我的另一个查询是-我希望从 NI-cRIO 获取两个整数值、我将在 Tiva 中处理这些数值。
    如何在 Tiva 和 NI-cRIO 之间进行通信。

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

    请使用可从 TI 网站下载的 TivaWare。 在为单引脚构建软件后、我们可以帮助进行多引脚采样。 此外、请在论坛上进行搜索。 在过去2个月中、论坛上有一些有关多引脚采样的示例。

    我没有使用 NI-cRIO、因此我不会是这方面的正确专家。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Amit、您好!

    我设法为扫描1个模拟引脚(使用 SS3)和 扫描4个模拟引脚(使用 SS2)编写代码。

    现在、我要使用中断来执行此操作。

    即任何 GPIO 引脚(例如、 PF1)电压电平发生变化、ADC 环路应开始扫描模拟引脚(例如、对于 SS3、PE2;对于 SS2、PE3和 PE4)

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Krishnat、
    您没有说明您是通过 TIVAARE 读取1个引脚还是使用了您的初始直接寄存器方法。
    如果您使用 Tivaware、我们将能够为您提供更多帮助。 如果您尚未完成、请立即执行-请将其视为"花两个小时来计算、安装和编译"、然后使用"更简单的命令"节省许多小时。 这可能比您迄今为止阅读有关寄存器的数据表所花的时间更短。
    至于中断、没有"当电压电平发生变化时"之类的中断。 如果您希望持续监控 ADC 引脚、则需要连续设置它们。 在 ADC 上、中断用于以下概念:您将 ADC 配置为使用特定参数进行采样、当在硬件级别完成采样/转换时、将生成中断、以便您可以对其进行服务并读取值。
    此致
    布鲁诺
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Bruno、

    我使用直接寄存器方法执行了该代码。
    我了解 ADC 概念。
    模拟引脚和中断引脚是不同的。 开关按钮用于获取中断。
    在我的问题声明中、在 ADC 环路中、我正在计算峰值电压、此类参数的误差。
    在中断处理程序中、我希望重置这些参数并再次开始扫描模拟引脚并计算这些参数。

    此致、

    Krishnat

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

     [引用用户="Krishnat Pawar"]

    [/引述][quote user="Krishnat Pawar"]

    [/报价]

    您好、Bruno、

    在这里、我将端口 F swich 配置为输入、将 LED 配置为输出。

    按下开关时、LED 将闪烁。

    中断配置出错。 b因为 如果我通过轮询执行相同的操作、那么代码就可以正常工作。

    请参阅以下链接: www.youtube.com/watch

    此致、

    Krishnat

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Krishnat、
    是的、我们可以看到您使用直接寄存器方法执行了代码。
    Amit 和我都建议您使用 TIvAware。
    任何人都没有时间或耐心来尝试弄清楚你的代码-我很抱歉这么说、但事实是这样。
    获取一个简单的 GPIO Tivaware 示例以在您的环境中工作、您的问题(至少是当前的问题)将得到解决。
    此致
    布鲁诺
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    我是新手。 从过去1个月起、我才开始使用 Tiva C

    我之前仅使用 Arduino 板。

    在我的工作空间、没有人与 Tiva 合作、因此我开始通过观看介绍 直接寄存方法的 You Tube 视频进行学习。

    我想按照建议切换到 TIvaware。

    是否提供了有关软件、驱动程序、库配置信息和一些基本示例代码的任何文档。

    有关 API 的任何文档、例如什么是 API、内置 API、如何修改、如何创建您自己的 API

    如果有任何可用链接、请与我分享。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Krishnat、
    由于运气不好,您似乎选择了“错误的 YouTube 视频”:)
    如果您还没有这样做、请访问 www.ti.com/tivaware、下载用于 C 系列的 TivaWare 的完整选项。
    安装后、在/docs 文件夹中、您将看到一个大 PDF (几乎为5Mb)。 就像第一次带孩子去迪士尼…… "哦-我不知道他们有所有这些让我玩!"。
    您在项目中使用的几乎所有内容都有"更简单、更高效的解决方案":SPI、GPIO、UART、计时器等
    至于"有关如何创建 API 的文档"、请放慢速度:这不仅仅是与 C 语言编程相关的任何内容、而是与 TM4C Planet 相关的内容。 一旦您习惯了 Tivaware 使用的巧妙实施策略、您就会被诱惑创建自己的库并在不同的项目中使用它们-但这需要一些学习时间。 同时、简化操作-只需将任何自定义创建的函数添加到项目内的文件、甚至是主文件内的文件中、以进行启动。
    布鲁诺
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    谢谢...
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    感谢您的回复。

    仍然很糟糕

    参考:用于 IAR 嵌入式工作平台的 TivaTmC 系列开发和评估套件

    仍出现错误:

    Blinky.c
    致命错误[Pe1696]:无法打开源文件"inc/hw_memmap.h" D:\blinky\blinky.c 27
    搜索:"d:\blinky\"
    已搜索:"d:\blinky\..\..\..."
    搜索:"C:\Program Files (x86)\IAR Systems\Embedded Workbench 7.5\arm\inc\"
    搜索:"C:\Program Files (x86)\IAR Systems\Embedded Workbench 7.5\arm\inc\c\"
    运行 C/C++编译器时出错

    完成。 1个错误、0个警告

    ..................................................................................................

    与本视频中所示的错误相同: www.youtube.com/watch

    如果创建新工程并仅从 "board/examples"复制 blink.c、则问题仍然存在。

    我在工作区中复制了头文件、在预处理器窗口中添加了路径、但问题仍然存在。

    正在等待回复。

    此致、

    Krishnat

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

    Amit、Bruno Saraiva、您好、

    我解决了以前的问题。

    我刚刚在 C:\ti\TivaWare_C_Series-2.1.3.156\examples\boards 中创建了项目

    而不是 D:\ 驱动器。

    现在、我设法使用 API 执行程序。

    我已经使用 API 完成了开关中断代码和计时器中断代码。

    我还需要一个帮助:

    问题:

    我有一个脉冲、如图所示。 脉冲宽度为10至25us。 但下一个脉冲将在100ms 后出现。

    我需要找到每个脉冲的峰值。 我有参考峰值。 我需要生成发送到 DAC 模块的错误。

    在我的当前代码中、

    如果我获取一个样本并检查是否为峰值、然后计算发送到 DAC 的误差、

    此代码需要35 us 的时间、这意味着脉冲消失了。

    我应该如何处理这种情况。

    我有一个解决方案,我想得到您的建议,它是否可行??

    ADC0和 ADC1 -与输入相同的脉冲

    ADC0比较器

    ADC1-UDMA 模块

    我将在"始终"模式下为高频带配置 ADC0模块的数字比较器。

    我将启动 UDMA 模块以存储 ADC1样本、直到比较器输出为高电平。

    一旦比较器输出为低电平、我将开始从存储的样本中找到峰值并生成误差发送到 DAC 模块。

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

    Amit、Bruno Saraiva、您好、

    我很高兴告诉你,我成功地完成了我的任务。

    但是、我以 DRM 风格编写了代码。  

    正如大家所建议的、我想学习  API 风格的编码。

    但我该如何开始...?

    Bruno Saraiva 提供了" TivaWareTm外设驱动程序库用户指南 "的链接

    其中仅给出 API 的数量及其参数列表。

    但是,在使用哪个 API 时不会给出任何数据。

    相比之下、 数据表中给出了 DRM 样式的数据、例如、ADC 配置哪些寄存器需要初始化、数据表中给出了顺序

     

    我仍然尝试使用 API 样式进行编码、我安装了 TIvaware、我正在使用 IAR Workbench。

    我准备好了代码并在 D 驱动器中创建了项目。 它给了我错误。

    但是、当我在该路径"C:\ti\TivaWare_C_Series-2.1.3.156\examples\boards"中执行相同的项目时、它可以正常工作。

    我在上一篇文章中已经与您分享了此问题。

    由于我有时间进行分配、我更喜欢 DRM 样式、因为它很容易。 和视频与我分配的 ADC、计时器中断、开关中断相关。

    我希望你能回答并提供宝贵的信息。

    此致、  

    Krishnat