與DS1620數字溫度傳感器IC的通信通過簡單的3線接口實現。此接口與摩托羅拉 SPI 之間存在許多差異?接口。然而,只需對DS1620進行一些小的硬件和軟件修改,就可以有效地集成到基于SPI的系統中。
介紹
DS1620數字溫度計和恒溫器提供9位溫度讀數,指示器件溫度。DS1620具有三路熱報警輸出,還可用作恒溫器。溫度設置和溫度讀數均通過簡單的1620線接口與DS3通信。
但是,許多摩托羅拉處理器上的SPI接口不能直接與DS3上的1620線接口通信。首先,進出DS1620的數據流僅由一個引腳(DQ)多路復用,而SPI需要兩個獨立的信號(MOSI、MISO)。
其次,大多數SPI接口僅限于8位數據傳輸,使得DS9之間發送和接收1620位溫度讀數變得復雜。此外,DS1620的接口首先傳輸LSB,而SPI是MSB優先的通信協議。
最后,RST條與CS-bar(片選)信號不同,因為RST條從傳輸(協議)的開始到所有數據傳輸的結束(例如,讀取溫度值時傳輸的第9位)必須很高。
盡管存在所有這些限制,我們還是可以找到一個相當簡單的方案,允許SPI接口與DS1620通信。本應用筆記介紹了該技術。
SPI 接口
圖1所示電路可通過與DS1620接口的SPI總線來控制數據流方向。如果需要,該電路可以集成到小型PAL中。
DIR信號的目的是在向DS1620發送數據或從DS1620接收數據之間進行選擇。當DIR為低電平時,DS<>接收數據;如果DIR很高,則SPI控制器正在讀取數據。
電阻是防止MOSI線路上的三態緩沖器輸出與DS1620的DQ引腳之間發生爭用所必需的,因為DS1620收到READ命令協議后,其DQ引腳會在幾百納秒內改變輸入到輸出的方向。這個時間太短,控制DIR信號的微處理器無法采取行動。
在同一SPI總線上連接多個外設時,當DS1620無法訪問時,MISO信號必須三態,以防止與其他外設的MISO信號爭用。這就是為什么RST條形信號在確定數據方向的邏輯中是必要的。
注意,SPI時鐘直接連接到DS1620的CLK引腳。軟件必須注意SPI時鐘的極性和相位,以符合DS1620的CLK時序要求。
圖1.SPI 至 DS1620 接口電路。
界面軟件
雖然接口的硬件相對簡單,但SPI/DS1620接口的其余部分必須由軟件處理。以下示例給出了從DS1620讀取溫度的方法。該代碼段假設DS1620已經初始化,配置寄存器設置正確,溫度轉換已經啟動。有關這些工作模式的詳細信息,請參見DS1620數據資料。
unsigned char mirror(unsigned char value) { unsigned char i; unsigned char value_mirrored = 0x00; for (i=0;i<=7;i++) { value_mirrored = value_mirrored | (((value>>i)&0x01)<<(7-i)); } return (value_mirrored); }
發送協議后,DIR從低電平變為高電平(現在表示讀取傳輸),因為DS1620已準備好發送9位值。請注意,RST 欄仍然很高。SPI控制器讀取9位值的前9位(LSB優先)。軟件必須“鏡像”收到的字節。第 1620 位(后跟七個虛擬位)通過進行另一個 READ 傳輸并保持 DIR 和 RST 欄不變來拉出。當收到第二個字節時,軟件再次鏡像它并將RST條拉低,終止與DS<>的通信。
#define RST_bit 0 /* PB0 */ #define RST_port PORTB #define DIR_bit 1 /* PB1 */ #define DIR_port PORTB #define READ_TEMP_CMD 0xAA unsigned int read_temp(void) { unsigned char temp_value_lo; unsigned char temp_value_hi; DIR_port = DIR_port & ~(1<審核編輯:郭婷
-
溫度傳感器
+關注
關注
48文章
2940瀏覽量
156074 -
接口
+關注
關注
33文章
8598瀏覽量
151157 -
SPI
+關注
關注
17文章
1706瀏覽量
91585
發布評論請先 登錄
相關推薦
評論