音影先锋亚洲天堂网|电影世界尽头的爱完整版播放|国产 熟女 91|高清无码免费观看欧美日韩|韩国一区二区三区黄色录像|美女亚洲加勒比在线|亚洲综合网 开心五月|7x成人在线入口|成人网站免费日韩毛片区|国产黄片?一级?二级?三级

登錄 免費(fèi)注冊 首頁 | 行業(yè)黑名單 | 幫助
維庫電子市場網(wǎng)
技術(shù)交流 | 電路欣賞 | 工控天地 | 數(shù)字廣電 | 通信技術(shù) | 電源技術(shù) | 測控之家 | EMC技術(shù) | ARM技術(shù) | EDA技術(shù) | PCB技術(shù) | 嵌入式系統(tǒng)
驅(qū)動編程 | 集成電路 | 器件替換 | 模擬技術(shù) | 新手園地 | 單 片 機(jī) | DSP技術(shù) | MCU技術(shù) | IC 設(shè)計(jì) | IC 產(chǎn)業(yè) | CAN-bus/DeviceNe

奇怪問題--Atmega8L的AD轉(zhuǎn)換誤差

作者:sanxingyu 欄目:單片機(jī)
奇怪問題--ATMEGA8L的AD轉(zhuǎn)換誤差
    參考電壓源是采用外部VREF管腳的電壓,轉(zhuǎn)換周期26uS。當(dāng)所檢測的電壓為0時(shí),AD轉(zhuǎn)換結(jié)果居然在31和30即0x1f和0x1e之間跳動, 當(dāng)檢測的電壓為1V時(shí)這個(gè)偏差大概為25,2V左右時(shí),偏差大概為20。百思不得其解,AVR的AD轉(zhuǎn)換不應(yīng)該會存在如此之大的偏差呀,我用ATMEGA16L也試過了,也是存在同樣的問題。郁悶呀,這個(gè)問題花了我?guī)滋斓臅r(shí)間都還沒解決,請各位大俠不吝賜教呀~~~~~~~~~~~
以下是我的程序
void adc_init(void)
{
ADCSR = 0x00; //disable adc
ADMUX = 0x00; //SELECT adc input 0
ACSR  = 0x80;
ADCSR = 0xA3;
}
unsigned int ReadADC( unsigned CHAR channel)
{
    unsigned int i = 0 ;
    channel &= 0x0f ;
    CLI();
    ADMUX &= 0XF8 ;    
    ADMUX |= channel;               
    ADCSR |= 0x40;                     
    while (!(ADCSR & 0x10));        
    ADCSR |= 0x10;  
    i = ADCL;       
    i += (unsigned int)ADCH << 8;         
    SEI();  
    return i;
}

              

2樓: >>參與討論
zhiwei
26uS,速度太快了吧。
你的ADC時(shí)鐘是500K?超出最大時(shí)鐘限制了。推薦應(yīng)該是50-200K。

3樓: >>參與討論
coldra
AVR單片機(jī)AD有誤差
但不會太大,只要參考源穩(wěn)定,模擬和數(shù)字電路布線處理好,相互不干擾問題不大,我通常用中斷模式,看一下樓主程序
void adc_init(void)
{
ADCSR = 0x00; //disable adc-這個(gè)寄存名應(yīng)該是ADCSRA,你能編譯通過?可能你我編譯器不一樣
ADMUX = 0x00; //SELECT adc input 0
ACSR  = 0x80;
ADCSR = 0xA3;//使能,連續(xù)轉(zhuǎn)換,8分頻,其實(shí)看下面你應(yīng)該用單次轉(zhuǎn)換模式
}
unsigned int ReadADC( unsigned CHAR channel)
{
    unsigned int i = 0 ;
    channel &= 0x0f ;
    CLI();
    ADMUX &= 0XF8 ;  //清通道位設(shè)置  
    ADMUX |= channel;     //改為所需通道 其實(shí)可以先讀通道,如果不一致再改通道,通常改后的通道第一次轉(zhuǎn)換可能誤差較大。         
    ADCSR |= 0x40;        //ADCSRA |= 0x40    ,開始轉(zhuǎn)換         
    while (!(ADCSR & 0x10));        //等待轉(zhuǎn)換結(jié)束
    ADCSR |= 0x10;  //硬件清零,可以刪掉該句
    i = ADCL;       //
    i += (unsigned int)ADCH << 8;   //這兩句可以合寫成i=ADC;      
    SEI();  
    return i;
}

4樓: >>參與討論
sanxingyu
太感謝各位大蝦的熱心指導(dǎo)了!
太感謝各位大蝦的熱心指導(dǎo)了!我用的編譯器是ICCAVR。
語句ADCSR = 0xA3;是我自己寫的時(shí)候搞錯(cuò)了,實(shí)際上我是用ADCSR = 0x83;
但也存在同樣的問題。 有可能是coldra所說的
“  ADMUX |= channel;     //改為所需通道 其實(shí)可以先讀通道,如果不一致再改通道,通常改后的通道第一次轉(zhuǎn)換可能誤差較大。 ”


5樓: >>參與討論
dadodo
改變通道后的第一次采樣值應(yīng)拋棄不用
只要給ADMUX賦值,哪怕ADMUX的值沒變,第一次采樣的結(jié)果也會有很大誤差

6樓: >>參與討論
qjy_dali
不得不說:AVR的AD是不怎么樣
 
7樓: >>參與討論
gtw
只能說是你的問題
如果像你所說,ATMEL連一個(gè)下三爛的IC廠都不如了
市場也不會接受啊。

還是自身找原因吧。

8樓: >>參與討論
lz13
蠻好用
我現(xiàn)在用48,挺好用的,用內(nèi)部基準(zhǔn),10位過采,做到12位,采用值,一動不動,并且準(zhǔn),應(yīng)該AD的輸入口,最好顯式設(shè)置為輸入口.然后,在48里,還應(yīng)該將它將數(shù)字口完全脫開.

參與討論
昵稱:
討論內(nèi)容:
 
 
相關(guān)帖子
Atmega128和8279的控制問題
請教大哥
請教!兩路PWM組成的半橋信號,如何延時(shí)
一個(gè)程序下載的校驗(yàn)出錯(cuò)問題
MCUCR寄存器究竟有什么作用啊
免費(fèi)注冊為維庫電子開發(fā)網(wǎng)會員,參與電子工程師社區(qū)討論,點(diǎn)此進(jìn)入


Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號