本應(yīng)用筆記向用戶介紹DS5000(兼容8051)微控制器與DS1631溫度傳感器的接口軟件。DS1631集成了一個(gè)標(biāo)準(zhǔn)的2線串行數(shù)字接口。提供的軟件代碼可用于提供對DS1631的所有類型的功能訪問,包括讀取溫度寄存器、寫入恒溫器門限和設(shè)置器件配置。
介紹
DS1631為數(shù)字溫度計(jì),在-9°C范圍內(nèi)提供10、11、12或55位溫度讀數(shù) 至 +125°C 范圍,0°C 至 +5°C 范圍內(nèi)具有 ±0.70°C 精度,3.0V ≤ VDD≤ 5.5V。DS1631還具有用戶定義的跳變點(diǎn)(TH和 TL).三個(gè)地址引腳 允許多達(dá)1631個(gè)DS<>在同一總線上工作。
與DS1631的通信通過2線串行接口實(shí)現(xiàn)。本應(yīng)用筆記介紹 “C”源代碼,允許PC通過兼容1631的DS8051微控制器與DS5000通信。DS1631的詳細(xì)規(guī)格和工作說明可在數(shù)據(jù)資料中找到。
硬件配置
DS1631 SDA (串行數(shù)據(jù))和SCL (串行時(shí)鐘)引腳可直接連接至 DS5000微控制器。DS1631 SDA引腳為漏極開路I/O,因此SDA線必須拉高 通過上拉電阻。由于DS5000微控制器時(shí)鐘輸出也是漏極開路,因此上拉電阻 在 SCL 生產(chǎn)線上也需要。圖1所示為兩個(gè)DS1631(地址1001000 和1001001)連接到總線。
DS5000 配置在附錄 B 的頭文件中提供。請注意,DS5000 在 頻率為11.05949MHz。DS232A用于處理PC到微控制器的接口。如圖所示 在附錄B中,2線連接通過DS0的I/O端口P5000進(jìn)行。I/O 端口 P1 或 P2 可以 用于報(bào)告狀態(tài)或?yàn)橥鈬鷪?bào)告設(shè)備(如 LCD)供電。
圖1.兩個(gè)DS1631器件在同一雙線總線上的電路圖
與DS1631的軟件通信
以下部分包含DS1631“C”源代碼示例。附錄 A 提供了完整的 C 用于測試硬件和與DS1631通信的程序列表
啟動(dòng)和停止條件
微控制器使用啟動(dòng)和停止條件來發(fā)出開始和結(jié)束信號(hào), 分別是 2 線通信序列。要產(chǎn)生 START 條件,SDA 線為 當(dāng) SCL 為高電平時(shí)從高拉到低,對于停止條件,SDA 從低到高過渡,而 標(biāo)準(zhǔn)高標(biāo)準(zhǔn) (SCL) 很高。圖 2a 顯示了用于生成 START 條件的示例“C”代碼,圖 2b 顯示了 用于生成 STOP 條件的示例代碼。
圖 2a. 啟動(dòng)示例。
圖 2b. 停止示例。
寫入DS1631
主站對 1 字節(jié)配置寄存器和 2 字節(jié) T 具有寫訪問權(quán)限H和 TL寄存 器。 因此,當(dāng)寫入配置寄存器時(shí),主站必須發(fā)送一個(gè)字節(jié)的數(shù)據(jù),并且當(dāng) 寫給 TH或 TL寄存器 主站必須發(fā)送兩個(gè)字節(jié)的數(shù)據(jù)。圖 3 顯示了示例“C” 用于寫入配置寄存器的代碼。SendAddr 例程導(dǎo)致 START 條件為 后跟一個(gè)控制字節(jié),該字節(jié)包含DS1631地址,并設(shè)置了讀/寫位 “寫”。接下來,SendByte 例程用于發(fā)出訪問配置命令 (ACh)。這是遵循的 通過寫入配置寄存器的數(shù)據(jù)字節(jié)。序列以停止完成 條件。
圖3.寫入DS1631的代碼示例
從DS1631讀取
主站可以從 1 字節(jié)配置寄存器和 2 字節(jié)溫度 T 讀取數(shù)據(jù)H和 TL寄存 器。圖 4 顯示了用于讀取配置寄存器的示例“C”代碼。發(fā)送添加程序例程 生成一個(gè) START,后跟一個(gè)控制字節(jié),其中讀/寫位設(shè)置為“寫入”。下一頁 訪問 配置命令 (ACh) 被發(fā)送。接下來是另一個(gè) START 和一個(gè)控制字節(jié),但這次 讀/寫位設(shè)置為“讀”。I2CGetByte(1) 例程讀取并保存 1 字節(jié)配置 注冊。傳遞給例程的“1”表示此字節(jié)是最后一個(gè)(在這種情況下是唯一字節(jié)) 正在讀取的字節(jié)。這是必要的,以便在接收到字節(jié)后向DS1631發(fā)送NACK而不是ACK。 對于 2 字節(jié)讀取,在第一個(gè)字節(jié)之后將“0”傳遞給 I2CGetByte 子例程,“1”為 在第二個(gè)字節(jié)之后發(fā)送。序列以 STOP 條件完成。
圖4.讀取DS1631的代碼示例
計(jì)算溫度
每次溫度轉(zhuǎn)換后,DS1631將數(shù)字溫度存儲(chǔ)為16位雙 2字節(jié)溫度寄存器中的補(bǔ)碼數(shù)。圖 5 顯示了用于啟動(dòng) 溫度轉(zhuǎn)換,然后讀取溫度寄存器并計(jì)算十進(jìn)制攝氏度和 華氏值來自數(shù)字值。要啟動(dòng)溫度轉(zhuǎn)換,請發(fā)送 START,然后發(fā)送 START。 由一個(gè)控制字節(jié),讀/寫位設(shè)置為“寫入”。接下來發(fā)送開始轉(zhuǎn)換 T 命令(51h) 后跟停止條件。為了讀取溫度寄存器,發(fā)送一個(gè)START,然后發(fā)送一個(gè)控制 將讀/寫位設(shè)置為“寫入”的字節(jié)。接下來發(fā)送讀取溫度命令 (AAh) 后跟另一個(gè) START,加上一個(gè)控制字節(jié),讀/寫位設(shè)置為“讀取”。I2CGetByte(0) 讀取溫度MSB,并向DS1631發(fā)送確認(rèn)。I2CGetByte(1) 然后讀取溫度 LSB 并向 DS1631 發(fā)送 NACK。通信序列以停止完成 條件。最終代碼段將 2 字節(jié)數(shù)字讀數(shù)轉(zhuǎn)換為十進(jìn)制值。
圖5.讀取DS1631的代碼示例
審核編輯:郭婷
-
微控制器
+關(guān)注
關(guān)注
48文章
7559瀏覽量
151486 -
傳感器
+關(guān)注
關(guān)注
2551文章
51134瀏覽量
753904 -
溫度傳感器
+關(guān)注
關(guān)注
48文章
2941瀏覽量
156115
發(fā)布評論請先 登錄
相關(guān)推薦
評論