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); }