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