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.

[参考译文] MSP430F133:多通道ADC参考问题?

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/574451/msp430f133-multi-channel-adc-reference-problem

部件号:MSP430F133

您好,

我有一个应用程序在一次读取多通道ADC中读取2个通道。  代码如下。  它似乎"工作",但我从第一个采样的时间通道获得的实际读数很高。  我正在对2个输入通道进行采样 ,这些通道大约为2.5V。 它们都应该参考3.3V的Vcc。  第一个信道为我提供了3700个ADC计数,而第二个信道为我提供了我所期望的,大约3100个计数。  当我在 Init_ADC函数中切换输入通道(swap inch_0和inch_1)时,第一个采样通道(ADC12MEM0)在3700左右仍然很高,而第二个通道是正确的。  

我们希望对此有任何想法。

谢谢 ,Dave

void Init_adc()

P6SEL |=0x03;// WFP 6.0 & WFP 6.1 ADC选项选择
ADC12CTL0 = SHT0_2 + MSC + ADC12ON;//设置采样时间,多样品转换,打开ADC12
ADC12CTL1 = SHP + CONSEQ_1;//使用采样计时器,转换序列一次
ADC12MCTL0 = inch_0;// ref+=AVcc,通道= A0温度
ADC12MCTL1 = inch_1 + EOS;// ref+=AVcc,通道= A1感应
ADC12IE = 0x02;//在第二个通道上启用中断-序列结束
ADC12CTL0 || ENC;//已启用转换
}

void Start_ADC()

ADCDoneFlag=0;

ADC12IE = 0x02;//启用中断
ADC12CTL0 |= ADC12SC;//开始采样
ADCStartFlag=0;
}

// ADC12中断服务例程
#if defined(__TI_Compiler_version__)|| defined(__IAR_SYSTEMS _ICC__)
#pragma vector=ADC12_vector
__interrupt void ADC12_ISR (void)
#Elif已定义(__GMNU__)
void __attribute__((interrupt (ADC12_vector))) ADC12_ISR (void)
#否则
错误编译器不受支持!
#endif

ADC12CTL0 &=~ADC12SC;//采样停止
ADC12IE = 0;//禁用中断

ADC_VALUE = ADC12MEM1;
ADC_Temp_value = ADC12MEM0;
ADCDoneFlag=1;

__BIC_SR_REGISTER_ON_EXIT (CPUOFF);//从0 (SR)清除CPUOFF位
}

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    源阻抗可能会影响ADC读数(请参阅《用户指南》中的ADC采样时间注意事项一章)。 参考需要一些时间才能确定(请参阅数据表,参考图)。 在启用参考后添加延迟,增加采样时间,查看其是否更改结果。