新聞中心

        EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 基于DS18B20與TMS320LF2407A的溫度測(cè)量系統(tǒng)

        基于DS18B20與TMS320LF2407A的溫度測(cè)量系統(tǒng)

        作者: 時(shí)間:2012-07-07 來(lái)源:網(wǎng)絡(luò) 收藏

          前 言

          DS18B2普遍都是和單片機(jī)配合使用,很少有關(guān)于DSP的連接的接口報(bào)道,所以此文詳細(xì)介紹了TMS320LF2407與 的連接方法,并且很詳細(xì)的介紹了如何用C語(yǔ)言完成精確的軟件延時(shí),從而完成與TMS320LF2407之間的基于單線總線協(xié)議的數(shù)據(jù)通訊。

          1 DS18B20的時(shí)序

          1. 1 復(fù)位時(shí)序

          復(fù)位使用DS18B20時(shí),首先需將其復(fù)位,然后才能執(zhí)行其它命令。復(fù)位時(shí),主機(jī)將數(shù)據(jù)線拉為低電平并保持480us~960us,然后釋放數(shù)據(jù)線,再由上拉電阻將數(shù)據(jù)線拉高15~60us,等待DS18B20發(fā)出存在脈沖,存在脈沖有效時(shí)間為60~240us,這樣,就完成了復(fù)位操作。

          1.2 寫時(shí)序

          在主機(jī)對(duì)DS18B20寫數(shù)據(jù)時(shí),先將數(shù)據(jù)線置為高電平,再變?yōu)榈碗娖剑摰碗娖綉?yīng)大于1us。在數(shù)據(jù)線變?yōu)榈碗娖胶?5us內(nèi),根據(jù)寫“1”或?qū)憽?” 使數(shù)據(jù)線變高或繼續(xù)為低。DS18B20將在數(shù)據(jù)線變成低電平后15us~60us內(nèi)對(duì)數(shù)據(jù)線進(jìn)行采樣。要求寫入DS18B20的數(shù)據(jù)持續(xù)時(shí)間應(yīng)大于 60us而小于120us,兩次寫數(shù)據(jù)之間的時(shí)間間隔應(yīng)大于1us。

          1.3 讀時(shí)序

          讀時(shí)隙當(dāng)主機(jī)從DS18B20讀數(shù)據(jù)時(shí),主機(jī)先將數(shù)據(jù)線置為高電平,再變?yōu)榈碗娖剑摰碗娖綉?yīng)大于1us,然后釋放數(shù)據(jù)線,使其變?yōu)楦唠娖健S18B20在數(shù)據(jù)線從高電平變?yōu)榈碗娖降?5us內(nèi)將數(shù)據(jù)送到數(shù)據(jù)線上。主機(jī)可在15us后讀取數(shù)據(jù)線.。

          2 TMS320LF2407與DS18B20的連接

          DS18B20有三個(gè)引腳。其與的接線圖如下。VDD管腳接5V電壓給傳感器供電。DQ管腳為數(shù)據(jù)線,與 的IOPA6連接的同時(shí),還要接一個(gè)4.7K的上拉電阻,并接到5V的電源上,使數(shù)據(jù)線在空閑狀態(tài)下能自動(dòng)上拉為高電平。 GND管腳接地。

        TMS320LF2407與DS18B20的連接

          3 軟件設(shè)計(jì)

          3.1 精確的軟件定時(shí)的實(shí)現(xiàn)

          眾所周知,TMS320LF2407的內(nèi)核屬于C2000系列的處理器,處理速度達(dá)到30MIPs,也就是每條指令所花的時(shí)間理論上只有33ns。但是實(shí)際情況是,由于DSP外部電路的數(shù)據(jù)處理速度和數(shù)據(jù)調(diào)用等因素,往往處理速度達(dá)不到這個(gè)數(shù)量級(jí)。那怎樣測(cè)出每條指令的處理時(shí)間從而計(jì)算出軟件延時(shí)程序的精確時(shí)間呢?計(jì)算方法如下:

          1、延時(shí)程序的C語(yǔ)言代碼為:

          for(loopindex=0;loopindex
        其中l(wèi)oopindex 為unsigned int,無(wú)符號(hào)整形數(shù)值, N為常量,根據(jù)所要求的延時(shí)時(shí)間,計(jì)算得出。具體算法在下面給出。

          2、這個(gè)for語(yǔ)句在CCS中的編譯器編譯后所產(chǎn)生的匯編語(yǔ)言為:

        LACL #0h
        SACL *, 0
        LACL *
        SUB N(計(jì)算得到的循環(huán)次數(shù))
        BCND 轉(zhuǎn)移的地址,GEQ
        LACC *, 0
        ADD #1h
        SACL *, 0
        LACL *
        SUB N(計(jì)算得到的循環(huán)次數(shù))
        BCND 轉(zhuǎn)移的地址,LT

          這些匯編語(yǔ)句所占用的時(shí)間可以計(jì)算成公式:DELAY=(9N+4)*單個(gè)指令周期。

          3、測(cè)試出一個(gè)指令周期

          系統(tǒng)所用晶振為20M,倍頻以后的時(shí)鐘頻率為40M,定時(shí)器1的分頻為1,也就是說(shuō)定時(shí)器的計(jì)時(shí)周期為25ns。開啟定時(shí)器,單步運(yùn)行上面的匯編語(yǔ)句,看定時(shí)器每次運(yùn)行后所增加的數(shù)值。測(cè)試得到,在每次單步運(yùn)行占一個(gè)指令周期的匯編語(yǔ)句后,定時(shí)器的數(shù)值增加10。也就是說(shuō),每個(gè)單指令周期的指令占用的時(shí)間為:25ns*10=250ns,也就是0.25us。

          4、延時(shí)程序的最終計(jì)算公式為:

          DELAY =(9n+4)*0.25us。

          由公式可以看出,當(dāng)n=0時(shí),DELAY=1us,當(dāng)n=65535時(shí),DELAY= 150ms。

          3.2 主要程序

          由于文章篇幅的關(guān)系,這里只給出復(fù)位程序、讀字節(jié)程序和整個(gè)讀溫度的主程序,寫命令字的程序可以根據(jù)上面所述的時(shí)序自行編寫。

        #define nop() {asm( nop );}
        #define DATA_PORT PADATDIR
        #define DATA_MODE 0x0040
        #define DATA_OUT 0x4000
        #define DATA_BIT 0x0040
        #define PIN_HIGH() {PADATDIR=PADATDIR|DATA_OUT|DATA_BIT;}
        #define PIN_LOW() {DATA_PORT=(PADATDIR|DATA_OUT)(~DATA_BIT);}



        上一頁(yè) 1 2 下一頁(yè)

        評(píng)論


        相關(guān)推薦

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

        關(guān)閉
        主站蜘蛛池模板: 香河县| 高密市| 万安县| 津南区| 白城市| 广州市| 鄱阳县| 沁源县| 清远市| 陵川县| 庆安县| 始兴县| 奎屯市| 梨树县| 舞钢市| 全州县| 大渡口区| 平定县| 故城县| 清流县| 莲花县| 波密县| 大新县| 界首市| 故城县| 聂拉木县| 武隆县| 崇仁县| 高淳县| 同心县| 保康县| 德惠市| 万源市| 扎赉特旗| 德令哈市| 横峰县| 永平县| 饶河县| 宜春市| 平武县| 大理市|