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