主题中讨论的其他部件: 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))。
我们也不使用低频晶体。 引脚保持打开状态
我们已经邮寄了必要的文件。