您好!
我的代码应在正弦值超过0时生成单个脉冲。 为了测试它、我使用的正弦电压具有直流偏移1.65V、将3.3V 减半。 我将其与比较器的1/2 VCC 内部基准进行比较、正弦振幅为35mV。 当我监控 P1.0输出时、我看到生成了几个脉冲、而不是一个脉冲。 如果我增加正弦振幅、则脉冲数 会减少、但仍然有多个脉冲、而不是一个脉冲。 我假设这可能是由1/2 VCC 基准上的噪声和正弦噪声引起的。 我添加了滤波、但它没有帮助。 是否还有其他东西可以清除它?
谢谢 Vadim
*****
#include
int main (空)
{
WDTCTL = WDTPW | WDTHOLD;//停止 WDT
//配置 GPIO
P1OUT &=~BIT0;//清除 P1.0输出锁存器以实现定义的加电状态
P1DIR |= BIT0;//将 P1.0设置为输出方向
//配置比较器输入和输出
P1SEL0 |= BIT1;//在 P1.1/C1上选择 eCOMP 输入功能
P1SEL1 |= BIT1;
P2DIR |= BIT0;
P2SEL1 |= BIT0;//在 P2.0/COUT 上选择 CPOUT 功能
PM5CTL0 &=~LOCKLPM5;//禁用 GPIO 上电默认高阻抗模式
//激活先前配置的端口设置
//配置引用
PMMCTL0_H = PMMPW_H;//解锁 PMM 寄存器
PMMCTL2 |= INTREFEN;//启用内部基准
while (!(PMMCTL2 & REFGENRDY));//轮询直到内部基准稳定
//设置 eCOMP
CPCTL0 = CPPSEL0;//选择 C1作为 V+端子的输入
CPCTL0 |= CPNSEL1 | CPNSEL2;//选择 DAC 作为 V-端子的输入
CPCTL0 |= CPPEN | CPNEN;//启用 eCOMP 输入
CPCTL1 |= CPIIE | CPIE;//启用 eCOMP 双边沿中断
CPDACCTL |= CPDACEN;//选择 VCC 作为基准并启用 DAC
CPDACDATA |= 0x0020;// CPDACBUF1=VCC *32/64
CPCTL1 |= CPEN;//在高速模式下打开 eCOMP
CPCTL1 |= CPFLT_1;
CPCTL1 |= CPFLTDLY_3;
_bis_SR_register (LPM3_bits | GIE);//输入 LPM3
__no_operation();//进行调试
}
// eCOMP 中断服务例程
#pragma vector=ECOMP0_vector
_interrupt void ECOMP0_ISR (void)
{
switch (__evo_in_range (CPUV、CPUV__CPIIFG))
{
案例 CPIV__NONE:
中断;
案例 CPIV__CPIFG:
P1OUT = BIT0;
_DELAY_CYCLES (100);
P1OUT =~BIT0;
中断;
案例 CPIV__CPIIFG:
P1OUT = BIT0;
_DELAY_CYCLES (100);
P1OUT =~BIT0;
中断;
默认值:
中断;
}
}
*****