PIC16F616是一款14引腳、8位的CMOS單片機(jī)。采用精簡指令集,僅有35條指令,由于采用了數(shù)據(jù)總線和指令總線分離的哈佛總線結(jié)構(gòu),使得除少量指令不是單周期之外,大部分的指令都是單周期指令。這樣有利于提高單片機(jī)的運(yùn)行速度和執(zhí)行效率。
PIC16F616這款單片機(jī)供電電壓可以在2V到5.5V之間,內(nèi)部集成了一個(gè)RC振蕩器,頻率可以配置成8MHZ或者4MHZ,也可以用外部晶振提供時(shí)鐘。內(nèi)部集成有AD轉(zhuǎn)換、比較器等硬件模塊,還具有上電復(fù)位、欠壓復(fù)位、看門狗、代碼保護(hù)等功能。三個(gè)定時(shí)器、PWM發(fā)生器等可以由用戶編程。下面介紹一下PIC16F616的封裝。
PIC16F616的模數(shù)轉(zhuǎn)換器(ADC)模塊
PIC16F616有一個(gè)十位、八路的AD轉(zhuǎn)換器。其參考電壓可認(rèn)為電源電壓VDD,也可以是外部參考電壓(VREF引腳),當(dāng)AD轉(zhuǎn)換完成后可以產(chǎn)生一個(gè)間斷,此間斷可以把單片機(jī)從睡眠狀態(tài)中喚醒。
ADC框圖
ADC配置
1、端口配置
需要采樣模擬信號的端口必需設(shè)置為模擬輸入狀態(tài),假如設(shè)置為數(shù)字端口,將使轉(zhuǎn)換結(jié)果不準(zhǔn)確,端口的模擬輸入可以由寄存器ANSEL來配置。
2、通道選擇
有八路外部通道和三路內(nèi)部通道,可以通過ADCON0寄存器的CHS《3:0》位來設(shè)置通道的選擇。
3、ADC參考電壓
參考電壓可以是VDD,也可以是外部參考電壓,可以通過ADCON0寄存器的VCFG位來設(shè)置,當(dāng)VCFG=0時(shí),參考電壓為VDD,當(dāng)VCFG=1時(shí),參考電壓為外部參考電壓(來自VREF引腳)。
模數(shù)轉(zhuǎn)換TAD周期
4、轉(zhuǎn)換時(shí)鐘
寄存器ADCON1專門來設(shè)置AD的時(shí)鐘源,ADCS《2:0》不同組合,可以將AD的時(shí)鐘源設(shè)置為不同的頻率,可認(rèn)為FOSC/2、FOSC/4、FOSC/8、FOSC/16、FOSC/32、FOSC/64和FRC(內(nèi)部RC)。
5、中斷
要使用AD的間斷功能,可以先把AD間斷使能,ADIE位設(shè)置為1(在寄存器PIE1中),PEIE位置1(在INTCON寄存器中),總間斷GIE位置1(INTCON寄存器中)。
6、結(jié)果格式
AD轉(zhuǎn)換后的結(jié)果保留在一個(gè)寄存器對里面:ADRESH和ADRESL,但是AD轉(zhuǎn)換結(jié)果只有十位,設(shè)置AD轉(zhuǎn)換格局可以通過設(shè)置ADCON0的ADFM位來選擇,當(dāng)ADFM=1時(shí)10位的AD結(jié)果的低八位保留在ADRESL內(nèi),高兩位保留在ADRESH內(nèi);當(dāng)ADFM=0時(shí)10位的AD結(jié)果的高八位保留在ADRESH內(nèi),低兩位保留在ADRESL內(nèi)。
10位A/D轉(zhuǎn)換結(jié)果格式
ADC工作原理
1、啟動轉(zhuǎn)換
要將ADC模塊的ADCON0寄存器的ADON位和ADCON0寄存器的GO/DONE位設(shè)置為1將啟動模數(shù)轉(zhuǎn)換。
2、轉(zhuǎn)換完成
轉(zhuǎn)換完成時(shí),ADC模塊:
1)清零GO/DONE位
2)將ADIF標(biāo)志位置1
3)用新的轉(zhuǎn)換結(jié)果更新ADRESH:ADRESL寄存器
3、終止轉(zhuǎn)換
如果必須在轉(zhuǎn)換完成之前終止轉(zhuǎn)換,可用軟件將GO/DONE位清零。不會用部分完成的模數(shù)轉(zhuǎn)換結(jié)果更新ADRESH和ADRESL寄存器,ADRESH:ADRESL寄存器仍然保留的前一次轉(zhuǎn)換的值。此外,必須經(jīng)過2TAD的延時(shí)后才能開始下一次的采集。延時(shí)結(jié)束后將自動開始對選定通道的輸入進(jìn)行采集。
4、休眠期間的ADC操作
ADC模塊可以再休眠模式下工作。這需要把ADC轉(zhuǎn)換時(shí)鐘設(shè)置為FRC選項(xiàng)。選擇FRC時(shí)鐘源后,ADC需等待一個(gè)指令周期后才能啟動轉(zhuǎn)換操作。這使得可以執(zhí)行SLEEP指令,以降低轉(zhuǎn)換期間的系統(tǒng)噪聲。如果允許了ADC中斷,轉(zhuǎn)換完成時(shí)器件將從休眠狀態(tài)喚醒。如果允許了ADC中斷,盡管ADON位仍保持位置1,轉(zhuǎn)換完成后ADC模塊將關(guān)閉。
ADC時(shí)鐘源不是FRC時(shí),盡管ADON位仍保持位置1,SLEEP指令會導(dǎo)致當(dāng)前轉(zhuǎn)換中止,ADC模塊關(guān)閉。
5、特殊事件觸發(fā)器
ECCP特殊事件觸發(fā)器允許定期測試ADC而無需軟件干預(yù)。當(dāng)出現(xiàn)觸發(fā)信號后,GO/DONE位由硬件置1,Tmer1計(jì)數(shù)器復(fù)位為零。
使用特殊事件觸發(fā)器不能確保正確的ADC時(shí)序。用戶需負(fù)責(zé)確保ADC時(shí)序要求得到滿足。
A/D轉(zhuǎn)換
6、A/D轉(zhuǎn)換步驟
以下是用ADC執(zhí)行模數(shù)轉(zhuǎn)換的示例步驟:
1)配置端口:
禁止引腳輸出驅(qū)動器(見TRIS寄存器)
將引腳配置為模擬
2)配置ADC模塊:
選擇ADC轉(zhuǎn)換時(shí)鐘
配置參考電壓
選擇ADC輸入通道
選擇結(jié)果格式
開啟ADC模塊
3)配置ADC中斷(可選):
清零ADC中斷標(biāo)志
允許ADC中斷
允許外設(shè)中斷
允許全局中斷
4)等待所需采集時(shí)間
5)通過將GODONE位置1啟動轉(zhuǎn)換
6)通過以下方式之一等待ADC轉(zhuǎn)換完成:
查詢GO/DONE位
等待ADC中斷(已允許中斷)
7)讀取ADC結(jié)果
8)清零ADC中斷標(biāo)志(如果已允許中斷需要)
7、相關(guān)寄存器
A/D采集要求

模擬輸入模型
為了使ADC達(dá)到規(guī)定的精度,必須使充電保持電容(CHOLD)充滿至輸入通道的電平。模擬輸入模型見圖。模擬信號源阻抗(RS)和內(nèi)部采樣開關(guān)阻抗(RSS)直接影響電容CHOLD的充電時(shí)間。采樣開關(guān)阻抗(RSS)隨器件電壓(VDD)的變化而變化。建議模擬信號源的最大阻抗為10kΩ。采集時(shí)間隨著源阻抗的降低而縮短。在選擇(或改變)模擬輸入通道后,必須在開始轉(zhuǎn)換前完成A/D采集。可以使用公式來計(jì)算最小采集時(shí)間。該公式假設(shè)誤差為1/2Lsb(ADc轉(zhuǎn)換需要1024步)。1/2LSb誤差是ADC達(dá)到規(guī)定分辨率所允許的最大誤差。
采集時(shí)間計(jì)算
評論