我用的MCU是F5438A,主时钟是32M。ADC12的配置是 主时钟,8位分辨率,64个采样时钟,A0A1A2A3轮序;
出现的现象是:
1.当我采用以上配置,将A0直接接到DGND时,ADC的读数不为零,而是128(255/2?);
2.将分辨率改为12位,则恢复正常,扫描DGND读数时为零;
3.降低主时钟,将其改为16M时,也恢复正常,扫描DGND读数时为零;
4.提高采样时钟,无效,情况仍是将A0直接接到DGND时,ADC的读数不为零,而是128(255/2?);
现在可能的话,我不想降低主时钟或者做其他会降低ADC速率的配置,但也想他恢复正常。
请问能有其他方法不?是否我还需要配置其他比方呢?
是他转换时间不够??
谢谢
void Init_ADC_seq(void)
{
P6SEL = 0x0F; // Enable A/D channel A0A1A2A3
ADC12CTL0 = ADC12ON+ADC12MSC+ADC12SHT0_8;
ADC12CTL1 = ADC12SHP+ADC12CONSEQ_1+ADC12SSEL1 ; // Use sampling timer, single sequence // ADCCLK=MCLK,NO DIV ADC12CTL2 = ADC12RES_0; //8位的分辨率
ADC12MCTL0 = ADC12INCH_0; // ref+=AVcc, channel = A0
ADC12MCTL1 = ADC12INCH_1; // ref+=AVcc, channel = A1
ADC12MCTL2 = ADC12INCH_2; // ref+=AVcc, channel = A2
ADC12MCTL3 = ADC12INCH_3+ADC12EOS; // ref+=AVcc, channel = A3, end seq.
ADC12IE = 0x08; // Enable ADC12IFG.3
ADC12CTL0 |= ADC12ENC; // Enable conversions
}
可以跑32M,参考电压是AVCC 3.3V,AGND; 这配置,在我将ADC12转换分辨率设为12位时,是没有这现象的。
[ 本帖最后由 shushu 于 2012-2-21 10:34 编辑 ]