ADC: 模數(shù)轉(zhuǎn)換,將模擬電壓轉(zhuǎn)換為數(shù)字。
ATmega16 有一個(gè)10位精度的ADC轉(zhuǎn)換器,具有8路外部模擬輸入端,與PORTA口復(fù)用。使能AD轉(zhuǎn)換功能后就不能作為I/O口使用。
輸入模擬電壓的范圍介于AGND和AVcc之間,如AVcc為5v時(shí),10位精度時(shí)轉(zhuǎn)換后對(duì)應(yīng)的數(shù)值為0-1023(0-0X3F),若為8位精度時(shí),
轉(zhuǎn)換后對(duì)應(yīng)的數(shù)值為0-255。若采用內(nèi)部標(biāo)準(zhǔn)的參考電壓2.56V,則輸入模擬電壓的范圍為0-2.56V,10位精度時(shí),2.56V對(duì)應(yīng)的數(shù)值為1023.
相關(guān)的寄存器有:ADCSRA:ADC控制和狀態(tài)寄存器,ADMUX:多工選擇寄存器,輸入通道選擇和參考電壓源選取。
ADCH,ADCL:數(shù)據(jù)寄存器,存儲(chǔ)轉(zhuǎn)換后的結(jié)果,SFIOR:特殊功能寄存器,自動(dòng)觸發(fā)源的選擇。
操作步驟:
一、 選擇ADC的參考電壓: ADMUX|=(0< 二、設(shè)置轉(zhuǎn)換結(jié)果的對(duì)齊方式:ADMUX|=(1< 三、選擇ADC輸入通道:ADMUX|=(0< 四、設(shè)置ADC的時(shí)鐘分頻系數(shù):ADCSRA|=(1< 五、使能A/D 轉(zhuǎn)換: ADCSRA|=(1< 六、中斷總使能: SREG=0X80; 七、 啟動(dòng)AD轉(zhuǎn)換: ADCSRA|=(1< 八、等待轉(zhuǎn)換完成: while(!ADCSRA&(1< 九、轉(zhuǎn)換完成后手動(dòng)清ADC中斷標(biāo)志位: ADCSRA|=(1< 十、讀取AD轉(zhuǎn)換結(jié)果:從AD轉(zhuǎn)換結(jié)果寄存器ADCH,ADCL讀取結(jié)果。 讀取ADCL 之后,ADC 數(shù)據(jù)寄存器一直要等到ADCH 也被讀出才可以進(jìn)行數(shù)據(jù)更新。因此,如果轉(zhuǎn)換結(jié)果為左對(duì)齊,且要求的精度不高于8 比特,那么僅需讀取ADCH 就足夠了。否則必須先讀出ADCL 再讀ADCH。