1. mega128内部ADC,使用内部2.56V基准源,但REF引脚上测得电压为2.65V 2. 时钟128分频(128分频应该是最慢速度吧?),最后一位几个字跳动,改2分频不跳,但是2分频和128分频测量到的值差10个字左右
我没有使用ADC降噪模式
unsigned int ad_convert(unsigned char mux) { unsigned char i; unsigned int temp; ADMUX =0xc0+mux; //内部2.56V基准源,转换结果右对齐,选择通道 ADCSRA=0x80; //ADC使能,时钟2分频 _delay_us(125); //等待基准源稳定 ADCSRA|=0x40; //第1次ADC结果无效 while(ADCSRA&0x40); temp=ADCH; temp=0; for(i=5;i>0;i--) //采集5次取平均 { ADCSRA|=0x40; //启动单次转换 while(ADCSRA&0x40); //等待转换完成 temp+=ADCL; //先读低字节再读高字节 temp+=ADCH*256; } ADMUX =0x00; //ADC关闭 ADCSRA=0x00; return temp/2; //temp*2560/5/1024 }
|