SN 8 位單片機(jī) SN8P2743 應(yīng)用實踐(2)
通常,我們使用SN單片機(jī)的 AD 功能時,如果選擇外部基準(zhǔn)電壓,可以利用廉價的 TL431 提供 2.5V 左右的高穩(wěn)定度電壓,即使通著電的240℃高溫電烙鐵靠上去,TL431 的輸出波動也僅僅 1~3mV ,此時,系統(tǒng)可以把 5V 基準(zhǔn)時得到的 12BIT AD 變成 2.5V 基準(zhǔn)得到了 12BIT AD,這是非常劃算的舉措! ---- 一方面,等同于使用了一只 2 倍放大的無偏移,無失調(diào),無溫飄的放大電路,另外一方面,讓AD 的參考值具有高達(dá) 50ppm 的溫度系數(shù)!
我就在最近使用 2743 的外部基準(zhǔn)和 AD 功能時,遇見一個問題:
AD 讀數(shù)遠(yuǎn)遠(yuǎn)相差期望值很遠(yuǎn)很遠(yuǎn)!仿真器的轉(zhuǎn)接板上,AVREFH 測量到的基準(zhǔn)電壓不是 2.5V,而是 5.0V ,怎么回事呢?
檢查仿真器上外部/內(nèi)部基準(zhǔn) AVREFH 插頭,已經(jīng)拔開!(必須拔開!)
以為是需要外接基準(zhǔn)電壓,于是,把轉(zhuǎn)接板上 AVREFH 的插針與外部基準(zhǔn) TL431 直接連接,看看是否正確? 結(jié)果,電壓變成比 2.5V 稍大了 0.1~0.3V ,不穩(wěn)定.由于事先有準(zhǔn)備,不停摸一下 TL431,發(fā)現(xiàn)其溫度上升,感覺此舉錯誤,趕緊脫開 AVREFH 與 TL431 的連接.
轉(zhuǎn)接板與目標(biāo)板是具有引腳一對一關(guān)系的,外部基準(zhǔn)實際已經(jīng)到達(dá)芯片對應(yīng)引腳,為什么轉(zhuǎn)接板上 AVREFH 測量不到呢?
查看轉(zhuǎn)接板上,原來這些接口是利用一種 NLAS4501DFT2G 通用單刀單擲模擬開關(guān)來切換的!為此,臨時上網(wǎng)查閱該芯片的手冊.費(fèi)了不少勁!
小心測量 NLAS4501DFT2G 芯片的控制引腳,發(fā)現(xiàn)與"選擇外部基準(zhǔn)"的指令不同,怎么回事?
再重新閱讀 2743 的數(shù)據(jù)手冊,在 ADM 寄存器里,比通常的 SN 帶 AD 單片機(jī)多了一個 FAVREFH 位,它 =1 則是選擇外部基準(zhǔn)! ---- 這里,通常不會出錯!指令是正確的!
再看看它給出的示例:
ADC操作舉例
ADC:
; 復(fù)位ADC。
CLR ADM ; 清ADM 寄存器。
; 設(shè)置ADC 時鐘Rate 和ADC 分辨率。
MOV A, #0nmn0000b ; nn:ADCKS[1:0]代表ADC 時鐘Rate。
B0MOV ADR, A ; m 代表ADC 分辨率。
; 設(shè)置ADC 參考高電壓。
B0BCLR FAVREFH ; 內(nèi)部VDD。
or
B0BSET FAVREFH ; 外部參考源。
; 設(shè)置ADC 輸入通道。
MOV A, #value1 ; 設(shè)置P4CON 選擇ADC 輸入通道。
B0MOV P4CON, A
MOV A, #value2 ; 設(shè)置ADC 輸入通道為輸入模式。
B0MOV P4M, A
MOV A, #value3 ; 禁止ADC 輸入通道的內(nèi)部上拉電阻。
B0MOV P4UR, A
; 使能ADC。
B0BSET FADCENB
; 執(zhí)行ADC 100us 啟動時間延遲循環(huán)。
CALL 100usDLY ; 100us 延遲循環(huán)。
; 選擇ADC 輸入通道。
MOV A, #value ; 設(shè)置ADCHS[2:0]選擇ADC 輸入通道。
OR ADM, A
; 使能ADC 輸入通道。
B0BSET FGCHS
; 使能ADC 中斷功能。
B0BCLR FADCIRQ ; 清ADC 中斷請求。
B0BSET FADCIEN ; 使能ADC 中斷功能。
; 開始AD 轉(zhuǎn)換。
B0BSET FADS
好了!問題找到了! ----- 看看這一句:CLR ADM ; 清ADM 寄存器。---- 這里就把 BIT3 重新變成 0 了!
一個單片機(jī)系統(tǒng),除了 AD 轉(zhuǎn)換之外,大部分時間都在運(yùn)行其它程序,FAVREFH (ADM.3)在程序指令下,會從 1 變成 0,又從 0 變成 1 ! 不停切換外部基準(zhǔn)/內(nèi)部基準(zhǔn),當(dāng)然就會讓外部基準(zhǔn)不停變化了!
于是,刪除這一句: " CLR ADM ; 清ADM 寄存器 " !
并且,在上電后最先的系統(tǒng)初始化時,就讓 FAVREFH (ADM.3)=1 ! 以后,就必須牢記不能動這一位!選擇AD通道時,可以使用 OR 指令或 AND 指令去改變 ADM ,當(dāng)然,如果充分注意,仍然可以使用 MOV ADM,#value 去賦值!
例如:;B3:FAVREFH=1 外部參考源。
;選擇ADC 輸入通道:
MOV A,#098H ;=P40----FAVREFH (ADM.3)=1
;或
MOV A,#099H ;=P41----FAVREFH (ADM.3)=1
;或
MOV A,#09AH ;=P42----FAVREFH (ADM.3)=1
;或
MOV ADM,A
ZB1 FADS; 開始AD 轉(zhuǎn)換。
;................
經(jīng)過這樣處理,測量轉(zhuǎn)接板上 AVREFH 的插針上就是 2.5V ,穩(wěn)定不動! AD 轉(zhuǎn)換讀數(shù)也變成正常了!
------ 當(dāng)然了,P4M,P4UR,P4CON 這些相關(guān)寄存器仍然需要小心正確設(shè)置的!
此經(jīng)歷特別貼出,供朋友們使用 2743 時留意參考! ---- 隨著應(yīng)用深入,如果再發(fā)現(xiàn)有比較古怪的問題,再行貼出!
評論