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.

[参考译文] TM4C123GH6PGE:ADC 数据读取

Guru**** 2473000 points


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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/679493/tm4c123gh6pge-adc-data-reading

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

大家好、

         感谢大家在我之前的帖子中提供的帮助。

今天我正在开发一个新项目、在这个项目中、我遇到了 ADC 输入数据读取问题。 我 使用 ADC0 base 和采样序列1 (SS1)进行数据读取。我遇到的问题是、如果我对其中的任何一个通道应用输入、实际上我想获取输出特定通道、但我得到的是全部四个通道的采样输出。 在这里、我使用处理器触发器来触发 ADC。

请找到以下代码、如果代码中有任何错误、请向我提出建议。

#include
#include
#include "inc/hw_memmap.h"
#include "inc/hw_types.h"
#include "driverlib/debug.h"
#include "driverlib/fpu.h"
#include "driverlib/gpio.h"
#include "driverlib/pin_map.h"
#include "driverlib/rom.h"
#include "driverlib/sysctl.h"
#include "driverlib/uart.h"
#include "utils/uartstdio.h"
#include "inc/hw_gpio.h"
#include "inc/hw_ints.h"
#include "inc/hw_adc.h"
#include "inc/hw_types.h"
#include "DriverLib/ADC.h"
#include "DriverLib/interrupt.h"
#include "DriverLib/PWM.h"
#include "DriverLib/timer.h"

unsigned int pui32ADC0Value[4];

extern int keypad_rot;

uint32_t ch0、ch1;

void ADC0IntHandler (void);

#ifdef 调试
无效
_error__(char * pcFilename、uint32_t ui32Line)


#endif




无效
Timer1IntHandler (空)

TimerIntClear (Timer1_base、timer_TINA_TIMEOUT);


data_disp();


无效
ADC0IntHandler (空)

ADCIntClear (ADC0_BASE、1);

ADCSequenceDataGet (ADC0_BASE、1、pui32ADC0Value);


ch0= pui32ADC0Value[0];
CH1=pui32ADC0Value[1];

内部
main (空)

SysCtlClockSet (SYSCTL_SYSDIV_4 | SYSCTL_USE_PLL | SYSCTL_OSC_MAIN |
SYSCTL_XTAL_16MHz);


SysCtlPeripheralEnable (SYSCTL_Periph_ADC0);
SysCtlPeripheralEnable (SYSCTL_Periph_GPIOA);
SysCtlPeripheralEnable (SYSCTL_Periph_GPIOB);

SysCtlPeripheralEnable (SYSCTL_Periph_Timer1);

SysCtlDelay (5000);

SysCtlPeripheralClockGating (真);


IntMasterEnable();

IntPrioritySet (INT_ADC0SS1_TM4C123、0x00);

IntPrioritySet (INT_TIMER1A、0x20);


lcd_priphy_config();

lcdinit();

TimerConfigure (Timer1_base、timer_CFG_A_PERIODICRACRACASE);
TimerLoadSet (Timer1_base、timer_A、(4*SysCtlClockGet ()));
IntEnable (INT_TIMER1A);
TimerIntEnable (Timer1_base、timer_TINA_TIMEOUT);

TimerEnable (Timer1_base、timer_A);

ADCSequenceDisable (ADC0_BASE、1);

ADCSequenceConfigure (ADC0_BASE、1、ADC_TRIGGER_PROCESSOR、0);


ADCSequenceStepConfigure (ADC0_BASE、1、0、ADC_CTL_CH0);
ADCSequenceStepConfigure (ADC0_BASE、1、1、ADC_CTL_CH1);
ADCSequenceStepConfigure (ADC0_BASE、1、2、ADC_CTL_CH2);
ADCSequenceStepConfigure (ADC0_BASE、1、3、ADC_CTL_CH13 | ADC_CTL_IE |
ADC_CTL_END);



ADCSequenceEnable (ADC0_BASE、1);

 ADCProcessorTrigger (ADC0_BASE、1);


ADCIntEnable (ADC0_BASE、1);

IntEnable (INT_ADC0SS1);

我将通过 Tiva 示例的参考来开发此代码。

如果我将输入应用于任何一个通道,请告诉我为什么我会在两个通道输出 ch0和 ch1中获得输出。

谢谢、

此致、

Srinu.V

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您的每个 ADC 输入是否与您的外部电压源"阻抗匹配"?

    如果您的 ADC 输入为"浮动"(断开连接)、则可能会注意到 ADC 的"采样保持"输入电容器-可能会"保持其电荷"-以及您观察到的效果。 放置在非常靠近每个 ADC 输入引脚的位置的小值陶瓷旁路电容器应该会极大地帮助您进行校正。

    它还有助于您了解您是否会为2个(或更多)不同 ADC 输入提供(适当)电压输入。 我相信、您(然后)很可能会看到每个信道都能正确读取...
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    感谢主席先生提出这一宝贵的建议,

    在我的电路板中、我在每个 ADC 输入引脚上都有电容器。 我发现我的错误是在 ADCProcessorTrigger (ADC0_BASE、1)之后出现"需要一些延迟";
    并且需要持续触发 while 环路中的 ADC。

    最后、我完成了任务。

    谢谢、
    Srinu.V
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    谢谢您-必须注意、您(与这里的许多人不同)非常好、非常善良-用您的纠正方法来奖励论坛!
    这就是论坛的全部精神-"最好的保证"、(我/其他人在这里)对您未来的大多数"任何/全部"帖子做出快速回应。

    干得不错,我的朋友...