新聞中心

        EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > SN 8 位單片機(jī) SN8P2743 應(yīng)用實(shí)踐(2)

        SN 8 位單片機(jī) SN8P2743 應(yīng)用實(shí)踐(2)

        作者: 時間:2016-12-02 來源:網(wǎng)絡(luò) 收藏
        SN8P2743 是一較新的型號,內(nèi)部含有放大器,比較器,AD 轉(zhuǎn)換器并且有外部基準(zhǔn)電壓參考輸入.....4K*16位 空間,感覺上比較"價(jià)廉物美!"
        通常,我們使用SN單片機(jī)的 AD 功能時,如果選擇外部基準(zhǔn)電壓,可以利用廉價(jià)的 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)實(shí)際已經(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)有比較古怪的問題,再行貼出!

        上一頁 1 2 下一頁

        評論


        技術(shù)專區(qū)

        關(guān)閉
        主站蜘蛛池模板: 基隆市| 府谷县| 辽中县| 通山县| 晋中市| 莫力| 玉环县| 加查县| 沙雅县| 古丈县| 拉萨市| 衡南县| 乳山市| 平乐县| 红安县| 四川省| 夹江县| 什邡市| 新和县| 昌平区| 灯塔市| 土默特右旗| 社旗县| 奉贤区| 三江| 新宁县| 陵川县| 乃东县| 资溪县| 杭锦后旗| 陇南市| 信宜市| 玛多县| 射洪县| 新干县| 江永县| 汉寿县| 石泉县| 离岛区| 哈巴河县| 根河市|