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.

[参考译文] CCS/TM4C123GH6PM:模拟比较器

Guru**** 2609285 points


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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/755286/ccs-tm4c123gh6pm-analog-comparator

器件型号:TM4C123GH6PM

工具/软件:Code Composer Studio

大家好、我正在编写模拟比较器的代码、其中电位计用作外部基准、在比较器的处理程序中、我必须读取比较器的值。 请、有人可以帮我解决这个问题吗?  我的代码不在中断处理程序中。

#include
#include
#include "inc/hw_memmap.h"
#include "inc/hw_types.h"
#include "driverlib/debug.h"
#include "driverlib/sysctl.h"
#include "driverlib/adc.h"
#include "driverlib/gpio.h"
#include "driverlib/gpio.h"
#include "inc/hw_comp.h"
#include "driverlib/comp.h"
#include "driverlib/interrupt.h"
#include "inc/hw_ints.h"

uint32_t comp_value;

空 compinthandler (空)

COMP_VALE=比较器 ValueGet (COMP_BASE、0);
ComparatorIntClear (COMP_BASE、0);

GPIOPinWrite (GPIO_PORTF_BASE、GPIO_PIN_1、GPIO_PIN_1);
SysCtlDelay (5000000);
GPIOPinWrite (GPIO_PORTF_BASE、GPIO_PIN_1、0);
SysCtlDelay (5000000);

int main (空)

volatile uint32_t ui32Loop;
uint32_t ui32ADC0Value[4];

//设置时钟频率。
SysCtlClockSet (SYSCTL_SYSDIV_5|SYSCTL_USE_PLL|SYSCTL_OSC_MAIN|SYSCTL_XTAL_16MHz);
//启用 GPIO PORTF。
SysCtlPeripheralEnable (SYSCTL_Periph_GPIOF);
SysCtlPeripheralEnable (SYSCTL_Periph_GPIOE);
//启用 ADC0。
SysCtlPeripheralEnable (SYSCTL_Periph_ADC0);
//启用比较器 COMP0。
SysCtlPeripheralEnable (SYSCTL_Periph_COMP0);
SysCtlPeripheralEnable (SYSCTL_Periph_GPIOC);

GPIOPinTypeGPIOOutput (GPIO_PORTF_BASE、GPIO_PIN_1| GPIO_PIN_2| GPIO_PIN_3);
GPIOPinTypeComparator (GPIO_PORTC_BASE、GPIO_PIN_6);
GPIOPinTypeADC (GPIO_Porte _BASE、GPIO_PIN_3);


ADCSequenceConfigure (ADC0_BASE、1、ADC_TRIGGER_PROCESSOR、0);
ADCSequenceEnable (ADC0_BASE、1);
ADCProcessorTrigger (ADC0_BASE、1);
ADCSequenceDataGet (ADC0_BASE、1、ui32ADC0Value);


ComparatorRefSet (COMP_BASE、COMP_REF_1_65V);
比较器配置(COMP_BASE、0、(COMP_TRIG_NONE | COMP_INT_Both |COMP_ASRCP_REF| COMP_OUTPUT_NORMAL));
ComparatorIntEnable (COMP_BASE、0);
IntEnable (INT_COMP0);
IntMasterEnable();

while (1)

// comp_value=比较器 ValueGet (COMP_BASE、0);
//
// GPIOPinWrite (GPIO_PORTF_BASE、GPIO_PIN_1、GPIO_PIN_1);
// SysCtlDelay (5000000);
// GPIOPinWrite (GPIO_PORTF_BASE、GPIO_PIN_1、0);
// SysCtlDelay (5000000);

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您是否编辑了"startup_ccs.c"文件并将"IntDefaultHandler"替换为中断例程"compinthandler"?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    [引用 user="apeksha"]ComparatorRefSet (COMP_BASE、COMP_REF_1_65V);
    比较器配置(COMP_BASE、0、(COMP_TRIG_NONE | COMP_INT_Both |COMP_ASRCP_REF| COMP_OUTPUT_NORMAL));[/报价]

    另请注意、您的比较器配置为内部 VREF、而不是外部电位器。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我将比较电位器的电压与内部 VREF。 现在、它进入零伏处理程序、但当我增加电压时、其值不变。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    除非只检查(CN+ ASRCP)阈值交叉、否则这将是一个非常奇怪的配置。 可能会在移动过程中产生大量噪声的电位计需要具有迟滞? 请发布您的测试电路的简单图。 对于 ASRCP、我们似乎必须对您的测试信号使用 CN-输入。 这种情况下的真反相输出可能会产生更好的结果。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    当使用内部基准时、它被连接至比较器的+侧。 您的外部输入需要连接到-侧。 在对 GPIOPinTypeComparator()的调用中更改为 GPIO_PIN_7并将外部输入移至 PC7。