? ? ADC支持多達14位模數(shù)轉換,有效位數(shù)(ENOB)多達12位。ADC包括一個具有多達8個獨立配置通道的模擬多路轉換器和參考電壓發(fā)生器,并且通過DMA將轉換結果寫入存儲器。具有多種運行模式。ADC主要特征如下:
可選的采樣率,可設置分辨率(7~12位)。
8個獨立的輸入通道,單端或者差分。
參考電壓可選為內部、外部單端、外部差分或AVDD5。
中斷請求產生。
轉換結束時DMA觸發(fā)。
溫度傳感器輸入。
電池測量能力。
ADC輸入
???? 當使用ADC時,端口0引腳必須配置為ADC輸入。ADC輸入最多可以使用8個,這些端口引腳將被稱為AIN0~AIN7引腳。輸入引腳AIN0~AIN7連接至ADC。為了配置端口0的引腳為ADC輸入,寄存器APCCFG的對應位必須設置為1.該寄存器的默認值為選擇端口0的引腳為非ADC輸入,即數(shù)字輸入/輸出。
可以把輸入配置為單端或者差分輸入。在選擇差分輸入的情況下,差分輸入包括輸入對AIN0~1、AIN2~3、AIN4~5和AIN6~7。注意:這些引腳不能使用負電源,或者大于VDD(未校準電源)的電源。
??? 除了輸入引腳AIN0~AIN7,片上溫度傳感器的輸出也可以選擇作為用于溫度測量的ADC輸入。為了實現(xiàn)作為溫度測量的ADC輸入,寄存器TR0.ADCTM和ATEST.ATESTCTRL必須分別進行設置。
??? 還可以選擇一個對應AVDD5/3的電壓作為ADC輸入。這個輸入允許實現(xiàn)例如要求電池檢測功能的應用。注意,這種情況下的參考電壓不能由電池電壓決定,例如,AVDD5電壓不能作為參考電壓。
?? 單端輸入AIN0~AIN7以通道號碼0~7表示。通道8~11表示由AIN0~1、AIN2~3、AIN4~5和AIN6~7組成的差分輸入。通道號碼12~15分別表示GND(12)、溫度傳感器(14)和AVDD5/3(15)。這些值在ADCCON2.SCH和ADCCON3.SCH域中使用。
??? ADC可以配置為使用通用I/O引腳P2.0作為一個外部觸發(fā)來開始轉換。當P2.0用于ADC外部觸發(fā)時,它必須配置為輸入模式下的通用I/O。
ADC運行模式
?? ADC具有三個控制寄存器,即ADCCON1、ADCCON2和ADCCON3。這些寄存器用于配置ADC和報告狀態(tài)。
(1)ADCCON1控制寄存器
????
位
名稱
復位
讀/寫
描述
7
EOC
0
R/H0
轉換結束,當ADCH被讀取時清除。如果在前一個數(shù)據(jù)被讀取之前,已經完成了一個新的轉換,該位保持為高
0:轉換未完成
1:轉換完成
6
ST
0
?
開始轉換。在轉換完成之前都讀為1
0:沒有進行中的轉換
1:如果ADCCON1.STSEL = 11且沒有序列正在進行轉換,就啟動一個轉換序列
5:4
STSEL[1:0]
11
R/W1
啟動選擇。選擇哪個事件將啟動一個新的轉換序列
00:P2.0引腳上的外部觸發(fā);
01:全速。不等待觸發(fā)
10:定時器1通道0比較事件
11:ADCCON1.ST = 1
3:2
RCTRL[1:0]
00
R/W
控制16位隨機數(shù)發(fā)生器。如果寫為01,當操作完成后該設置將自動返回0x00
00:正常運行
01:同步LFSR一次
10:保留
11:停止,隨機數(shù)發(fā)生器關閉
1:0
?
11
R/W
未使用??偸侵脼?1
??? ADCCON1.EOC位是一個狀態(tài)位,當一個轉換結束時該位置1,當讀取ADCH時,清除該位。
??? ADCCON1.ST位用于啟動一個轉換蓄力。當該位置1,ADCCON1.STSEL位為11,且當前沒有正在進行的轉換時,將啟動一個序列。當這個序列轉換完成,該位自動清除。
?? ADCCON1.STSEL位選擇哪個事件將啟動一個新的轉換序列??梢员贿x擇的事件選項有:外部引腳P2.0上的上升沿,前一個序列的結束,定時器1通道0比較事件或ADCCON1.ST置1.
(2)ADCCON2控制寄存器
位
名稱
復位
讀寫
描述
7:6
SREF[1:0]
00
R/W
選擇用于轉換序列的基準電壓
00:內部基準
01:AIN7引腳上的外部基準
10:AVDD5引腳
11:AIN6~AIN7差分輸入上的外部基準
5:4
SDIV[1:0]
01
R/W
為包含在轉換序列里的通道選擇抽取率,抽取率也決定了分辨率和完成一個轉換所需的時間
00:64抽取率(7位分辨率)
01:128抽取率(9位分辨率)
10:: 256抽取率(10位分辨率)
11:512抽取率(12位分別率)
3:0
SCH[3:0]
0000
R/W
序列通道選擇
0000:AIN0;0001:AIN1;0010:AIN2;0011:AIN3;
0100:AIN4;0101:AIN5;0110:AIN6;0111:AIN7
1000:AIN0-AIN1;1001:AIN2-AIN3;1010:AIN4-AIN5
1011:AIN6-AIN7;1100:GND;1101:保留;
1110:溫度傳感器;1111:VDD/3
?
?? ADCCON2.SREF用于選擇基準電壓,只有在沒有選擇進行的時候才能改變基準電壓
?? ADCCON2.SDIV位選擇抽取率,因此也設置了分辨率、完成一個轉換所需的時間和采樣率。只有在沒有轉換的時候才能設置抽取率
(3)ADCCON3控制寄存器
位
名稱
復位
讀寫
描述
7:6
EREF[1:0]
00
R/W
選擇用于單個轉換的基準電壓
00:內部基準
01:AIN7引腳上的外部基準
10:AVDD5引腳
11:AIN6~AIN7差分輸入上的外部基準
5:4
EDIV[1:0]
01
R/W
為單個轉換選擇抽取率,抽取率也決定了分辨率和完成一個轉換所需的時間
00:64抽取率(7位分辨率)
01:128抽取率(9位分辨率)
10:: 256抽取率(10位分辨率)
11:512抽取率(12位分別率)
3:0
ECH[3:0]
0000
R/W
單個通道選擇
0000:AIN0;0001:AIN1;0010:AIN2;0011:AIN3;
0100:AIN4;0101:AIN5;0110:AIN6;0111:AIN7
1000:AIN0-AIN1;1001:AIN2-AIN3;1010:AIN4-AIN5
1011:AIN6-AIN7;1100:GND;1101:保留;
1110:溫度傳感器;1111:VDD/3
?? ADCCON3寄存器控制單個轉換的通道號碼、基準電壓和抽取率。在ADCCON3寄存器更新后,立即進行單個轉換;或者如果有一個轉換序列正在進行,那個在這個轉換序列完成后立即進行單個轉換。
SET_MAIN_CLOCK_SOURCE(CRYSTAL);???//設置系統(tǒng)時鐘源為32MHz晶體振蕩器 /*??AIN0通道采樣???*/ ADC_ENABLE_CHANNEL(ADC_AIN0); /*配置ADCCON3寄存器以便在ADCCON1.STSEL?=?11(復位默認值)且ADCCON1.ST?=?1時進行單一轉換*/ /*參考電壓:AVDD_SOC引腳上的電壓*/ /*抽取率:512*/ /*ADC輸入通道:AIN0*/ ADC_SINGLE_CONVERSION(ADC_REF_AVDD?|?ADC_14_BIT?|?ADC_AIN0); ADC_SAMPLE_SINGLE();???????????//啟動一個單一轉換 while(!ADC_SAMPLE_READY());????//等待轉換完成 ADC_ENABLE_CHANNEL(ADC_AIN0);??//禁止AIN0 adc0_value[0]?=?ADCL; adc0_value[1]?=?ADCH; adc0_value[0]?=?adc0_value[0]?>>?2;