能溫度傳感器Dsl8b20在多路測溫中的應用
發(fā)布時間:2008/5/29 0:00:00 訪問次數(shù):1026
單總線芯片可以使得硬件結(jié)構(gòu)非常簡單,特別適合應用在對于距離遠、節(jié)點分布多的場合,如糧倉溫度檢測,大棚溫室溫度監(jiān)控等。本文給出的設計通用性好,可以方便地移植到其他應用場合。
1 dsl8b20編程簡介
每一片單總線芯片內(nèi)部都有一個全球惟一的64b編碼,在多路測溫時就是通過匹配每個芯片的rom編碼(1d),來搜尋該路的溫度。dsl8b20有9個可擦寫的內(nèi)部寄存器,稱為便箋式ram。所有的串行通訊,讀寫每一個bit位數(shù)據(jù)都必須嚴格遵守器件的時序邏輯來編程,同時還必須遵守總線命令序列,對單總線的dsl8b20芯片來說,訪問每個器件都要遵守下列命令序列: 首先是初始化;其次執(zhí)行rom命令;最后就是執(zhí)行功能命令(rom命令和功能命令后面以表格形式給出)。
如果出現(xiàn)序列混亂,則單總線器件不會響應主機。當然,搜索rom命令和報警搜索命令,在執(zhí)行兩者中任何一條命令之后,要返回初始化。
基于單總線上的所有傳輸過程都是以初始化開始的,初始化過程由主機發(fā)出的復位脈沖和從機響應的應答脈沖組成。應答脈沖使主機知道,總線上有從機設備,且準備就緒。
在主機檢測到應答脈沖后,就可以發(fā)出rom命令。這些命令與各個從機設備的惟一64 brom代碼相關。在主機發(fā)出rom命令,以訪問某個指定的dsl8620,接著就可以發(fā)出dsl8620支持的某個功能命令。這些命令允許主機寫入或讀出dsl8b20便箋式ram、啟動溫度轉(zhuǎn)換。軟件實現(xiàn)dsl8b20的工作嚴格遵守單總線協(xié)議:
(1)主機首先發(fā)一復位脈沖,信號線上所有dsl8620器件都被復位。
(2)接著主機發(fā)送rom命令,程序開始讀取單個在線的芯片rom編碼并保存在單片機數(shù)據(jù)存儲器中,然后卸下已讀出的,將未讀出編碼的dsl8620逐個掛在總線上并讀取其rom編碼,直到把所有的需要用到的dsl8620的rom編碼都離線讀出,最后用一個二維數(shù)組保存所有這些rom編碼,數(shù)據(jù)保存在x25043中。
(3)系統(tǒng)工作時,把所有讀取了編碼的且需要用的dsl8b20掛在總線上。發(fā)溫度轉(zhuǎn)換命令,再總線復位。
(4)然后就可以從剛才的二維數(shù)組逐個匹配在線的溫度傳感器,隨后發(fā)溫度讀取命令就可以依次獲得各路對應的溫度值了。讀取溫度軟件流程框圖如圖1所示。
在主機初始化過程,主機通過拉低單總線至少480/us,以產(chǎn)生復位脈沖。接著,主機釋放總線,并進入接收模式。當總線被釋放后,上拉電阻將單總線拉高。在單總線器件檢測到上升沿后,延時15~60/us,接著通過拉低總線60-240//s,以產(chǎn)生應答脈沖。
//總線復位程序
bit dsl8b20_reset(void)
寫時隙均起始于主機拉低總線,產(chǎn)生寫1時隙的方式:主機在拉低總線后,接著必須在15ups之內(nèi)釋放總線;而產(chǎn)生寫。時隙的方式:在主機拉低總線后,只需在整個時隙期間保持低電平即可(至少60us)。
在寫字節(jié)程序中的寫一個bit位的時候,沒有按照通常的分別寫。時序和寫1時序,而是把兩者結(jié)合起來,當主機拉低總線后在15us之內(nèi)將要寫的位c給do:如果c是高電平滿足15/is內(nèi)釋放總線的要求,如果c是低電平,則do
=c這條語句仍然是把總線拉在低電平,最后都通過延時58us完成一個寫時序(寫時序0或?qū)憰r序1)過程。
每個讀時隙都由主機發(fā)起,至少拉低總線1us,在主機發(fā)起讀時隙之后,單總線器件才開始在總線上發(fā)送。或1。所有讀時隙至少需要60us。
以上3個子程序雖然是針對dsl8b20開發(fā)的,其實單總線芯片的時序都相似,只要根據(jù)其他類似芯片的時序特點對上述子程序稍做修改就可以同樣使用。下面是多點測溫主程序。輸入?yún)?shù)x為測溫點的號碼。
限于篇幅,這里沒有列出讀單個dsl8620芯片rom編號的程序。多路測溫沒有采用發(fā)rom命令0fh搜索所有在線溫度傳感器
單總線芯片可以使得硬件結(jié)構(gòu)非常簡單,特別適合應用在對于距離遠、節(jié)點分布多的場合,如糧倉溫度檢測,大棚溫室溫度監(jiān)控等。本文給出的設計通用性好,可以方便地移植到其他應用場合。
1 dsl8b20編程簡介
每一片單總線芯片內(nèi)部都有一個全球惟一的64b編碼,在多路測溫時就是通過匹配每個芯片的rom編碼(1d),來搜尋該路的溫度。dsl8b20有9個可擦寫的內(nèi)部寄存器,稱為便箋式ram。所有的串行通訊,讀寫每一個bit位數(shù)據(jù)都必須嚴格遵守器件的時序邏輯來編程,同時還必須遵守總線命令序列,對單總線的dsl8b20芯片來說,訪問每個器件都要遵守下列命令序列: 首先是初始化;其次執(zhí)行rom命令;最后就是執(zhí)行功能命令(rom命令和功能命令后面以表格形式給出)。
如果出現(xiàn)序列混亂,則單總線器件不會響應主機。當然,搜索rom命令和報警搜索命令,在執(zhí)行兩者中任何一條命令之后,要返回初始化。
基于單總線上的所有傳輸過程都是以初始化開始的,初始化過程由主機發(fā)出的復位脈沖和從機響應的應答脈沖組成。應答脈沖使主機知道,總線上有從機設備,且準備就緒。
在主機檢測到應答脈沖后,就可以發(fā)出rom命令。這些命令與各個從機設備的惟一64 brom代碼相關。在主機發(fā)出rom命令,以訪問某個指定的dsl8620,接著就可以發(fā)出dsl8620支持的某個功能命令。這些命令允許主機寫入或讀出dsl8b20便箋式ram、啟動溫度轉(zhuǎn)換。軟件實現(xiàn)dsl8b20的工作嚴格遵守單總線協(xié)議:
(1)主機首先發(fā)一復位脈沖,信號線上所有dsl8620器件都被復位。
(2)接著主機發(fā)送rom命令,程序開始讀取單個在線的芯片rom編碼并保存在單片機數(shù)據(jù)存儲器中,然后卸下已讀出的,將未讀出編碼的dsl8620逐個掛在總線上并讀取其rom編碼,直到把所有的需要用到的dsl8620的rom編碼都離線讀出,最后用一個二維數(shù)組保存所有這些rom編碼,數(shù)據(jù)保存在x25043中。
(3)系統(tǒng)工作時,把所有讀取了編碼的且需要用的dsl8b20掛在總線上。發(fā)溫度轉(zhuǎn)換命令,再總線復位。
(4)然后就可以從剛才的二維數(shù)組逐個匹配在線的溫度傳感器,隨后發(fā)溫度讀取命令就可以依次獲得各路對應的溫度值了。讀取溫度軟件流程框圖如圖1所示。
在主機初始化過程,主機通過拉低單總線至少480/us,以產(chǎn)生復位脈沖。接著,主機釋放總線,并進入接收模式。當總線被釋放后,上拉電阻將單總線拉高。在單總線器件檢測到上升沿后,延時15~60/us,接著通過拉低總線60-240//s,以產(chǎn)生應答脈沖。
//總線復位程序
bit dsl8b20_reset(void)
寫時隙均起始于主機拉低總線,產(chǎn)生寫1時隙的方式:主機在拉低總線后,接著必須在15ups之內(nèi)釋放總線;而產(chǎn)生寫。時隙的方式:在主機拉低總線后,只需在整個時隙期間保持低電平即可(至少60us)。
在寫字節(jié)程序中的寫一個bit位的時候,沒有按照通常的分別寫。時序和寫1時序,而是把兩者結(jié)合起來,當主機拉低總線后在15us之內(nèi)將要寫的位c給do:如果c是高電平滿足15/is內(nèi)釋放總線的要求,如果c是低電平,則do
=c這條語句仍然是把總線拉在低電平,最后都通過延時58us完成一個寫時序(寫時序0或?qū)憰r序1)過程。
每個讀時隙都由主機發(fā)起,至少拉低總線1us,在主機發(fā)起讀時隙之后,單總線器件才開始在總線上發(fā)送;1。所有讀時隙至少需要60us。
以上3個子程序雖然是針對dsl8b20開發(fā)的,其實單總線芯片的時序都相似,只要根據(jù)其他類似芯片的時序特點對上述子程序稍做修改就可以同樣使用。下面是多點測溫主程序。輸入?yún)?shù)x為測溫點的號碼。
限于篇幅,這里沒有列出讀單個dsl8620芯片rom編號的程序。多路測溫沒有采用發(fā)rom命令0fh搜索所有在線溫度傳感器
上一篇:如何選擇溫度傳感器