ATMEGA128内部ADC为何转换不正确?
AVR的输入信号是通过放大器输出的信号,用福禄克的万用表测量放大器的输出是正常的,但是无论怎了测量就是不对,AREF脚接外部3V参考电压,初始化程序严格按Datasheet里面来写的,结果读取数据发送出来发现根本不对,实际是198mv,结果转换出来乱七八糟的,只能看出电压变大还是变小的效果,但是测量的电压值相差甚远!请教下各位会是哪个地方出了问题呢?》硬件的问题还是软件的问题? 这是初始化函数void MyAdcConfig(void)
{
ADMUX = 0x00; //外部参考,通道0
ADCSRA = 0xA0; //使能ADC,暂时不启动转换,禁止中断.连续转换模式
ADCSRA |= (1<<ADSC); //启动转换
} 这是读取数据的函数
float GetAdcData(void)
{
unsigned char TempH,TempL; /*接收变量*/
unsigned int Temp=0; /*ADC内码值*/
float Vx=0; /*电压值*/
while((ADCSRA & 0x10) != 0x10); /*等待转换完成*/
TempH = ADCH & 0x03; /*保留低2位*/
TempL = ADCL ; /*低八位*/
Temp = (TempH<<8)|TempL; /*组合数据*/
Vx = (Temp*REF)/1024; /*换算成电压值*/
return(Vx); /*电压值*/
} ADMUX=0x00;
ADCSRA=(1<<ADEN)|(1<<ADSC)|(1<<ADPS2)|(1<<ADPS1)|(1<<ADIF);
delay=0;
while(((ADCSRA&0x10)==0x00)&&delay++<0xf0);
Temp=ADC&0x3ff;(结果可以直接读出来)
我用这个可以的 用的晶振是多少的?
注意ADC的时钟必须限制在200K以下。
改下分频系数试试 jimmy_xt 发表于 2012-10-31 20:33 static/image/common/back.gif
用的晶振是多少的?
注意ADC的时钟必须限制在200K以下。
我用的是外部晶振11.0592MHZ的晶振 ,分频系数最大和最小我都试过了还是不行,AVR会不会因为配置不当烧毁内部电路或者输入通道什么的!? gumogumo 发表于 2012-10-31 20:14 static/image/common/back.gif
ADMUX=0x00;
ADCSRA=(1
我明儿试试你这个程序!
页:
[1]