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