主题中讨论的其他部件: MSP-EXP430FR6989
尊敬的团队:
我们在MSP430FR5889微控制器中读取ADC通道A3 (WFP 1.3)时遇到了问题。 原始ADC值不断变化。 但当我们将P9输出端口值更改为0x00 (即P9OUT = 0x00)时,读数看起来稳定。 我们后来注意到,端口9与ESI模块针脚多路复用。 我们还在调试器中检查了要禁用的ESI模块寄存器。
请帮助我们解决问题。 将0x00加载到端口9将如何稳定ADC值。 ?
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.
尊敬的团队:
我们在MSP430FR5889微控制器中读取ADC通道A3 (WFP 1.3)时遇到了问题。 原始ADC值不断变化。 但当我们将P9输出端口值更改为0x00 (即P9OUT = 0x00)时,读数看起来稳定。 我们后来注意到,端口9与ESI模块针脚多路复用。 我们还在调试器中检查了要禁用的ESI模块寄存器。
请帮助我们解决问题。 将0x00加载到端口9将如何稳定ADC值。 ?
您能否通过对TI提供的ADC C示例进行细微修改来演示此行为? 这将有助于开始内部调查,因为它显示我无法使用以下代码重现错误(未针对您的应用程序进行优化):
#include <MSP430.h>
volatile unsigned int result = 0;
int main (void)
{
WDTCTL = WDTPW | WDTHOLD; //停止WDT
//配置GPIO
P1OUT &=~BIT0; //清除LED以启动
P1DIR |= BIT0; //将WFP的1.0 设置为输出
P1SEL1 || BIT2| BIT3; //配置ADC输入A2和A3
P1SEL0 || BIIT2 | BIT3;
P9DIR = 0xFF;
P1REN = 0x00;
P9SEL0 = 0x00;
P9SEL1 = 0x00;
P9OUT = 0x00;
//禁用GPIO通电默认高阻抗模式以激活
//先前配置的端口设置
PM5CTL0 &=~LOCKLPM5;
//默认情况下,REFSTR=1 => REFCTL用于配置内部参考
,同时(REFCTL0和REFGENBUSY); //如果ref发生器忙,请等待
REFCTL0 || REFVSEL_0| REFON; //选择内部参考= 1.2V
//内部参考打开
//配置ADC12
ADC12CTL0 = ADC12SHT0_6 | ADC12ON | ADC12MSC; //采样时间,
ADC12CTL1上的ADC12 = ADC12SHP | ADC12DIV_3 | ADC12CONSEQ_1; //使用采样计时器
ADC12CTL2 || ADC12RES_2; // 12位转换结果
ADC12MCTL0 |= ADC12INCH_2 | ADC12VRSEL_1; //通道2 ADC输入选择;Vref=AVCC
ADC12MCTL1 |= ADC12INCH_3 | ADC12VRSEL_1 | ADC12EOS; //通道2 ADC输入选择;Vref=AVCC
ADC12IER0 |= ADC12IE0; //启用ADC转换完全中断
,同时(!(REFCTL0 & REFGENRDY)); //等待参考发生器
//在
(1){
__DELAY周期(5000);
ADC12CTL0 || ADC12ENC | ADC12SC; //开始采样/转换
__bis_sr_register (LPM0_bits + GIE); // LPM0,ADC12_ISR将强制退出
__no_operation(); //用于调试器
}
}
#if defined(__TI_Compiler_version__)|| defined(__IAR_SYSTEMS _ICC__)
#pragma vector = ADC12_vector
__interrupt void ADC12_ISR(void)
#Elif defined(__GNUC__)
void __attribute__((interrupt (ADC12_vector))#interrupt lior))
#endif
{
switch (__偶 数_in_range (ADC12IV,ADC12IV_ADC12RDYIFG))
{
案例ADC12IV_NONE: 中断; //矢量0:无中断
CASE ADC12IV_ADC12OVIFG:中断; //矢量2:ADC12MEMx溢出
CASE ADC12IV_ADC12TOVIFG:中断; //矢量4:转换时间溢出
CASE ADC12IV_ADC12HIIFG:中断; //向量6:ADC12BHI
CASE ADC12IV_ADC12LOIFG:中断; //矢量8:ADC12BLO
CASE ADC12IV_ADC12INIFG:中断; //矢量10:ADC12BIN
Case ADC12IV_ADC12IFG0: //向量12:ADC12MEM0中断
结果= ADC12MEM0; //读出结果寄存器
__BIC_SR_REGISTER_ON_EXIT (LPM0_bits);//退出活动CPU
中断; //从0 (SR)清除CPUOFF位
CASE ADC12IV_ADC12IFG1:中断; //矢量14:ADC12MEM1
CASE ADC12IV_ADC12IFG2:中断; //矢量16:ADC12MEM2
CASE ADC12IV_ADC12IFG3:中断; //向量18:ADC12MEM3
CASE ADC12IV_ADC12IFG4:中断; //向量20:ADC12MEM4
CASE ADC12IV_ADC12IFG5:中断; //矢量22:ADC12MEM5
CASE ADC12IV_ADC12IFG6:Break; //矢量24:ADC12MEM6
CASE ADC12IV_ADC12IFG7:Break; //矢量26:ADC12MEM7
CASE ADC12IV_ADC12IFG8:Break; //矢量28:ADC12MEM8
CASE ADC12IV_ADC12IFG9:Break; //向量30:ADC12MEM9
CASE ADC12IV_ADC12IFG10:中断; //矢量32:ADC12MEM10
CASE ADC12IV_ADC12IFG11:Break; //矢量34:ADC12MEM11
CASE ADC12IV_ADC12IFG12:中断; //矢量36:ADC12MEM12
CASE ADC12IV_ADC12IFG13:中断; //矢量38:ADC12MEM13
CASE ADC12IV_ADC12IFG14:Break; //向量40:ADC12MEM14
CASE ADC12IV_ADC12IFG15:中断; //矢量42:ADC12MEM15
CASE ADC12IV_ADC12IFG16:Break; //矢量44:ADC12MEM16
CASE ADC12IV_ADC12IFG17:Break; //矢量46:ADC12MEM17
CASE ADC12IV_ADC12IFG18:中断; //矢量48:ADC12MEM18
CASE ADC12IV_ADC12IFG19:中断; //矢量50:ADC12MEM19
CASE ADC12IV_ADC12IFG20:Break; //矢量52:ADC12MEM20
CASE ADC12IV_ADC12IFG21:Break; //矢量54:ADC12MEM21
CASE ADC12IV_ADC12IFG22:中断; //矢量56:ADC12MEM22
CASE ADC12IV_ADC12IFG23:Break; //矢量58:ADC12MEM23
CASE ADC12IV_ADC12IFG24:中断; //向量60:ADC12MEM24
CASE ADC12IV_ADC12IFG25:中断; //矢量62:ADC12MEM25
CASE ADC12IV_ADC12IFG26:Break; //矢量64:ADC12MEM26
CASE ADC12IV_ADC12IFG27:Break; //矢量66:ADC12MEM27
CASE ADC12IV_ADC12IFG28:Break; //矢量68:ADC12MEM28
CASE ADC12IV_ADC12IFG29:Break; //向量70:ADC12MEM29
CASE ADC12IV_ADC12IFG30:中断; //矢量72:ADC12MEM30
CASE ADC12IV_ADC12IFG31:中断; //矢量74:ADC12MEM31
CASE ADC12IV_ADC12RDYIFG:中断; //矢量76:ADC12RDY
默认值:break;
}
}
此致,Ryan
正在解决我们的问题,请查找所附的示波器输出,该示波器在微控制器针脚A2处检查,连接ADC输入,但不连接ADC输入。
在此PIN上生成2.855Khz频率的脉冲。 另请查找附加的应用程序源代码。
尊敬的Ryan:
注意:当我们在A2输入引脚上加载频率约为2.8KHz的10K电阻时,我们会获得稳定的脉冲。
在此代码捕获输入TTB 0.3 中,我们还使用捕获电源频率(约50 Hz =20毫秒)。
我们将此时间除以64,以获得ADC采样间隔,并以该速率生成比较中断TB0CCTL1 (即20ms/64=312)
美国(3.2KHz))。
我们也不使用低频晶体。 引脚保持打开状态
我们已经邮寄了必要的文件。