RT:
我通过定时器对通道A7定时采样10次,供电用稳压电源3V供电,无论电压怎么变,采样出来的值都在600-650左右。看手册最大是1023。有时采样的值也会有错误,如下图。附上采样部分代码。
最后2个值不对。
uint16 SampleChannel(uint16 ChannelNum) //进行采样通道电源等的设置
{
uint8 i = 0;
uint16 SampleValue = 0; //保存的采样值
uint16 Value[10];
_DINT();
ADC10CTL0 &= ~ENC; //在改变设置前停止A/D转换
while (ADC10CTL1 & BUSY); //Wait if ADC10 core is active
ADC10CTL0 = ADC10SHT_2 + SREF_0 + MSC + ADC10ON + ADC10IE + ADC10SR; //t_sample=16 x ADC10CLKs,参考电压AVCC AVSS,开启ADC模块
//ADC10CTL0|=ADC10ON+ADC10IE+REFON+REF2_5V+SREF_1+MSC+ADC10SHT_2;//取内部参考电压2.5V,使采样时间为16xADC10CLK,以增大采样时间以保证采样的准确性;
ADC10CTL1 = CONSEQ_2 + ADC10SSEL_0 + ChannelNum; //单通道多次转换,采样源自定时器
//转换存储器0存储,ADC12内部时钟源ADC12OSC
ADC10DTC1 = TRANSFEER_NUMBER; // 10 次转换,选择转换的通道
ADC10AE0 |= BIT7;
ADC10SA = (uint16)Value;
ADC10CTL0 |= ENC + ADC10SC; // Sampling and conversion start
ADC10CTL0 &= ~ENC;
ADC10CTL0 &= ~ADC10ON; //关闭ADC模块电源电源
for(i = 0; i < 10 ; i++)
{
SampleValue += Value[i];
}
SampleValue = SampleValue/10;
_EINT();
return (SampleValue);
}
