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