DS18b20多路溫度檢測
DS18B20 是溫度檢測器件,具有單總線、數(shù)字化的特點。
每個 DS18B20 都有一個 48 位的系列號,這樣就可以把多個 DS18B20 連接在同一條線上,用系列號來對它們分別進(jìn)行控制。
但是,據(jù)有關(guān)資料說明,一條總線上,連接 DS18B20 的個數(shù),不要超過 8 個,否則驅(qū)動困難??偩€的長度,也不宜太長。
另外,多個 DS18B20 連接在一起,還有些缺點:
1.必須采用 ROM 匹配的方法,這樣,速度、效率就較低。
2.編程比較麻煩,必須先逐個讀出并記錄每個 DS18B20 的 ROM 代碼,然后再編寫到程序中。
3.故障涉及面大,當(dāng)有一個出現(xiàn)短路,這一條總線上的全部器件就都不會工作。
4.故障查找困難,當(dāng)總線上有一個 DS18B20 不正常工作時,很難一眼就看出是那一個。
5.無法即插即用,當(dāng)更換一個 DS18B20 時,必須重新寫入程序,這樣的維修方法為產(chǎn)品的售后服務(wù)帶來很大的困難。
那么,較好的方法還是每一個 DS18B20 單獨使用一條總線。
現(xiàn)在,單片機芯片的價位已經(jīng)很低,有 40 個 I/O 引腳的 STC89C52 才幾塊錢。利用單總線來節(jié)約引腳,已經(jīng)沒有什么意義了。
鑒于目前這種情況,讓每一個 DS18B20 單獨使用一個 I/O 引腳,才能揚長避短。
如果一片單片機所能構(gòu)成的溫度測試點還不夠用(如孵蛋柜就需要上百個測試點),也可以使用多片單片機,再利用 MAX232 或 MAX485 組成網(wǎng)絡(luò),即可把各個點的溫度信息匯集到中央控制機。
485 總線的長度可達(dá) 1200m,半雙工多機串口通信的編程也是簡單的很。
單個的 DS18B20 單獨占用一個引腳,用 51 單片機進(jìn)行讀寫,這種方案已經(jīng)相當(dāng)成熟。
做而論道多年前也寫了一個程序,利用數(shù)碼管顯示,精度可以達(dá)到兩位小數(shù),還可以測量零下的溫度。
詳細(xì)的內(nèi)容可見博文:
http://hi.baidu.com/%D7%F6%B6%F8%C2%DB%B5%C0/blog/item/dacd401ac7533f398718bf61.html
當(dāng)多個 DS18B20 分別使用不同的引腳,電路并不復(fù)雜,編程就困難一些了。
因為針對單個的 DS18B20,一般都是用:CLR DQ 和 SETB DQ,這些都是 51 單片機的位操作指令,都是直接尋址。
換了另一個引腳,就要重新編寫一套程序。有些人就是這么做的,這就太麻煩了。
其實并不用針對每個 DS18B20 都編寫一套程序,只要使用字節(jié)操作的指令就可以了。
例如 R3 = 1111 1011B,執(zhí)行 MOV P1, R3 后,就相當(dāng)于針對 P1.2 執(zhí)行了 CLR DQ。
想要 SETB P1.2,只需執(zhí)行 MOV P1, #255 即可。
只是在讀出 DQ 時,需要多編寫幾條指令。
下面是一個利用 51 系列單片機驅(qū)動多路 DS18B20 的電路圖。
圖片鏈接:http://hi.baidu.com/%D7%F6%B6%F8%C2%DB%B5%C0/album/item/c4a06d2e070828385b4ce9bab899a9014d08f138.html
限于篇幅,圖中只畫出了 8 個 DS18B20。其實,P2 和 P0 也是可用的。
如果不使用 P2 和 P0,那么就可以選用 AT89C2051,這樣一來,整機的體積將會更小。
圖中有兩種輸出溫度數(shù)據(jù)的方法,可供選擇:
現(xiàn)場顯示:使用 LCD1602 和 595/164;
串口通信:使用 MAX232 或 485。
LCD1602、595/164 也可以和 2051 制作成分離的 PCB 板,用接插件的形式進(jìn)行連接。
需要顯示的時候,插上顯示部分,就可當(dāng)場顯示溫度。
如果不需要當(dāng)場顯示,那就在 P3.0 和 P3.1 連接電平轉(zhuǎn)換芯片,用串口傳輸溫度信息。
由于 LCD1602 的顯示面積較小,多路溫度只能分屏顯示。顯示的仿真截圖如下。
做而論道編寫程序,基本上是以匯編為主,一般也不想拿出來,因為很少有人能看匯編的程序。
上次,還有人評論匯編語言程序的結(jié)構(gòu)性不好。呵呵,的確是這樣,沒有一定的水平,確實是看不下去。
本程序,也是用匯編語言編寫的,就不拿出來獻(xiàn)丑了。