您好!
我正在使用下面显示的提供的 msp430fr59xx_ADC12_11.c 代码。 我获得的读数低于预期值。 该代码显示其在注释部分使用的是 AVCC、但在代码中它看起来像 VREF+= Vref、但我不知道他们打开基准的位置、因此我不确定这里的基准是什么。 有人能帮忙吗?
以下是我的读数:
1.65V 输入=> 0xD69
1.0V 输入=> 0x807
0.5V 输入=> 0x403
这似乎是在跟踪2V 基准电压、但我似乎看不到此设置的位置。 我确实运行了 TI 提供的其他代码、看起来输出读取总是低于提供的模拟输入。
#包含
int main (空)
{
WDTCTL = WDTPW | WDTHOLD; //停止 WDT
//将 GPIO 配置为最低功耗状态
P1OUT = 0; //所有 P1.x 复位
P1DIR = 0xFF; //所有 P1.x 输出
P2OUT = 0; //所有 P2.x 复位
P2DIR = 0xFF; //所有 P2.x 输出
P3OUT = 0; //所有 P3.x 复位
P3DIR = 0xFF; //所有 P3.x 输出
P4OUT = 0; //所有 P4.x 复位
P4DIR = 0xFF; //所有 P4.x 输出
PJOUT = 0; //所有 PJ.x 复位
PJDIR = 0xFFFF; //所有 PJ.x 输出
//设置 XT1
PJSEL0 = BIT4 | BIT5; //对于 XT1
P1SEL0 |= BIT2; //为 ADC 功能配置 P1.2/A2
P1SEL1 |= BIT2; //
//禁用 GPIO 上电默认高阻抗模式以激活
//先前配置的端口设置
PM5CTL0 &=~μ A LOCKLPM5;
//时钟系统设置
CSCTL0_H = CSKEY >> 8; //解锁 CS 寄存器
CSCTL1 = DCOFSEL_0; //将 DCO 设置为1MHz
CSCTL2 = SELM__LFXTCLK | SELS__DCOCLK | SELM__DCOCLK;
CSCTL3 = DIVA__1 | DIVS__1 | DIVM__1; //设置所有分频器
CSCTL4 &=~LFXTOFF;
正确
{
CSCTL5 &=~LFXTOFFG; //清除 XT1故障标志
SFRIFG1 &=~OFIFG;
}while (SFRIFG1和 OFIFG); //测试振荡器故障标志
ADC12CTL0 = ADC12SHT0_0 | ADC12ON; //采样时间、S&H = 4、ADC12开启
//使用 TA0.1触发,重复单通道
ADC12CTL1 = ADC12SHP | ADC12SHS_1 | ADC12CONSEQ_2;
// A2输入选择;VREF+= Vref
ADC12MCTL0 = ADC12INCH_2 | ADC12VRSEL_1 | ADC12EOS;
ADC12IER0 |= ADC12IE0; //启用 ADC 中断
ADC12CTL0 |= ADC12ENC | ADC12SC; //开始采样/转换
//配置 Timer0_A3以定期触发 ADC12
TA0CCR0 = 2048-1; // PWM 周期
TA0CCTL1 = OUTMOD_3; // TACCR1设置/复位
TA0CCR1 = 2047; // TACCR1 PWM 占空比
TA0CTL = TASSEL__ACLK | MC__UP; // ACLK、向上计数模式
__ bis_SR_register (LPM3_bits | GIE); //输入 LPM3、启用中断
返回0;
}
// ADC12中断服务例程
#if defined (__TI_Compiler_version__)|| defined (__IAR_SYSTEMS_ICC__)
#pragma vector=ADC12_vector
__interrupt void ADC12ISR (void)
#Elif 已定义(_ GNU _)
void __attribute_((interrupt (ADC12_vector))) ADC12ISR (void)
#else
#错误编译器不受支持!
#endif
{
switch (__even_in_range (ADC12IV、ADC12IV_ADC12RDYIFG))
{
情况 ADC12IV_NONE: break; //矢量 0: 无中断
案例 ADC12IV_ADC12OVIFG: break; // Vector 2: ADC12MEMx 溢出
情况 ADC12IV_ADC12TOVIFG:break; // Vector 4: 转换时间溢出
情况 ADC12IV_ADC12HIIFG: break; // Vector 6: ADC12BHI
案例 ADC12IV_ADC12LOIFG: break; //矢量 8: ADC12BLO
情况 ADC12IV_ADC12INIFG: break; // Vector 10: ADC12BIN
情况 ADC12IV_ADC12IFG0: //矢量12: ADC12MEM0中断
如果(ADC12MEM0 >= 0x7ff) // ADC12MEM0 = A1 > 0.5AVcc?
P1OUT |= BIT0; // P1.0=1
否则
P1OUT &=~BIT0; // P1.0 = 0
中断;
情况 ADC12IV_ADC12IFG1: break; //向量14: ADC12MEM1
情况 ADC12IV_ADC12IFG2: 中止; //矢量16: ADC12MEM2
情况 ADC12IV_ADC12IFG3: 中止; //矢量18: ADC12MEM3
案例 ADC12IV_ADC12IFG4: 中断; //矢量20: ADC12MEM4
案例 ADC12IV_ADC12IFG5: 中断; //矢量22: ADC12MEM5
情况 ADC12IV_ADC12IFG6: break; //矢量24: ADC12MEM6
情况 ADC12IV_ADC12IFG7: 中断; //矢量26: ADC12MEM7
情况 ADC12IV_ADC12IFG8: break; //矢量28: ADC12MEM8
情况 ADC12IV_ADC12IFG9: break; // Vector 30: ADC12MEM9
案例 ADC12IV_ADC12IFG10: 中断; //矢量32:ADC12MEM10
情况 ADC12IV_ADC12IFG11: break; //矢量34: ADC12MEM11
用例 ADC12IV_ADC12IFG12: break; // Vector 36:ADC12MEM12
情况 ADC12IV_ADC12IFG13: break; //矢量38: ADC12MEM13
情况 ADC12IV_ADC12IFG14: break; // Vector 40: ADC12MEM14
情况 ADC12IV_ADC12IFG15: break; // Vector 42: ADC12MEM15
案例 ADC12IV_ADC12IFG16: 中断; //矢量44:ADC12MEM16
情况 ADC12IV_ADC12IFG17: break; //矢量46: ADC12MEM17
情况 ADC12IV_ADC12IFG18: break; //矢量48: ADC12MEM18
情况 ADC12IV_ADC12IFG19: break; // Vector 50: ADC12MEM19
案例 ADC12IV_ADC12IFG20: break; //矢量52: ADC12MEM20
情况 ADC12IV_ADC12IFG21: break; // Vector 54: ADC12MEM21
情况 ADC12IV_ADC12IFG22: break; //矢量56: ADC12MEM22
案例 ADC12IV_ADC12IFG23: 中断; //矢量58:ADC12MEM23
情况 ADC12IV_ADC12IFG24: break; // Vector 60: ADC12MEM24
情况 ADC12IV_ADC12IFG25: 中止; //矢量62: ADC12MEM25
情况 ADC12IV_ADC12IFG26: break; // Vector 64: ADC12MEM26
情况 ADC12IV_ADC12IFG27: break; // Vector 66: ADC12MEM27
情况 ADC12IV_ADC12IFG28: break; // Vector 68: ADC12MEM28
情况 ADC12IV_ADC12IFG29: break; // Vector 70: ADC12MEM29
情况 ADC12IV_ADC12IFG30: break; //矢量72: ADC12MEM30
情况 ADC12IV_ADC12IFG31: break; // Vector 74: ADC12MEM31
案例 ADC12IV_ADC12RDYIFG:break; // Vector 76: ADC12RDY
默认值:中断;
}
}