uint ReadADC(uchar chanl)
{
uint i,p;
float n;
ADMUX = 0xc0|chanl; //内部电压 右对齐 选择ADC通道
ADCSRA = 0xC0; //
ADCSRA |= 0x40;
while (!(ADCSRA & 0x10));
ADCSRA |= 0x10;
i = ADCL;
i += (int)ADCH << 8;
n=((float)(1.1/0x3ff))*i; //(标准电压/0x3ff)/*测量电压=当前电压值 测量值为峰值
p=(uint)(n*1000); //乘以1000转化成正数
return p;
}
程序已经在protues上仿真没错误, 但是在实物上的时候 我输入了0.5V的电压, 显示屏一直都显示1.1V,直到我在 i += (int)ADCH << 8; 下面写了一段 if(i=0x3ff) return 0; 的时候就一直显示0; 这说明转化的结果一直大于1.1v(我用的是片内1.1v基准电压)。
即使我把引脚翘起,不输入任何电压时 还是显示1.1V 。 好像得到的电压永远大于基准电压,很不解。
很纠结到底是那里出了问题。
求高手指点!!!
还有mega88pa的avcc管脚外置的电感手册上要求10uH我焊了个30uH的是否有影响? |