寫在前言
? 此為博主自學江科大51單片機(B站)的筆記,方便后續重溫知識
? 在后面的章節中,為了防止篇幅過長和易于查找,我把一個小節分成兩部分來發,上章節主要是關于本節課的硬件介紹、電路圖、原理圖等理論知識,主要是為下章節的代碼部分打基礎。
? 我的單片機是24年12月在tb普中買的,型號是STC89C52,在原視頻中引腳或接口不對應的我都會改正,保證在我的機子上能運行才發上來的,還有一些文字部分是我的理解,并非照搬,所以可能有理解不到位的現象。
??如有誤或交流,敬請指點提問
思維導圖:
先介紹溫度傳感器,然后是引腳及應用電路,內部結構,存儲格式,單總線介紹、電路規劃和時序結構,最后是數據幀
一、DS18B20
1.介紹
- DS18B20是一種常見的數字溫度傳感器,其控制命令和數據都是以數字信號的方式輸入輸出,相比較于模擬溫度傳感器,具有功能強大、硬件簡單、易擴展、抗干擾性強等特點,如熱敏電阻,?電壓隨溫度變化,我們就可以需要額外一個AD轉換芯片測量它的電壓,這樣單片機才能讀取他的溫度,應用方面不如數字溫度傳感器。比如下面左圖1就是我們的DS18B20,他在內部集成了模擬溫度傳感器還有控制器,可以把溫度轉換好直接存在RAM里面,我們只需要讀取就行了
- 測溫范圍:-55℃到+125攝氏度
- 通信接口:1-Wire(單總線)
- 其他特征:可形成總線結構、內置溫度報警功能、可寄生供電(就是不用單獨配置VCC,節省IO口)
- 左圖2是一個關于DS18B20的模塊,右圖1是一個芯片?
2.引腳及應用電路
VDD:電源(3.0V-5.5V);GND:電源地;DQ:單總線接口
3.內部結構框圖
- 從左往右解釋以此是:外部一個上拉電阻,內部左邊是一個寄生供電結構,從DQ的數據端口,經過寄生結構后,是一個64-BIT ROM接口,然后是一個內部控制邏輯,下面是一個RAM,SCRATCHPAD(暫存器),最右邊是一些溫度傳感器,報警高觸發寄存器(報警閾值),報警低觸發寄存器,配置寄存器(設置分辨率,最高0.0625最低0.5),8位的CRC生成器(校驗碼判斷數據是否正確)等模塊 (從上到下)
- 寄生供電結構:可以節省VDD,如果下邊的VDD沒有接的話,就是由DQ的VDD供電的,但是在這里我們不使用,因為寄生供電需要強上拉,但是我們的開發板沒有強上拉
- 64-BIT ROM:作為器件地址,用于總線通信的尋址
- SCRATCHPAD(暫存器):用于總線的數據交互
- EEPROM:用于保存溫度觸發閾值和配置參數
4.寄存器結構
這一塊對應上一幅圖
左邊就是SCRATCHPAD的詳細內部結構,右邊就是對應報警高觸發寄存器(報警閾值),報警低觸發寄存器,配置寄存器(設置分辨率,最高0.0625最低0.5)
左邊一共有九個字節,前兩位存的是溫度,第0位是最低有效字節,第1位是最高有效字節,這兩位共同構成了溫度;然后是兩個 TH和TL寄存器,還有一個配置寄存器,右邊也是對應這三個,作用就是寫入左邊的三個寄存器,然后再存入右邊的寄存器里存儲起來;后面三個位是保留位,最后一位是CRC校驗位
二、單總線
1.介紹
- 單總線(1-Wire Bus)是由Dallas公司開發的一種通用數據總線
- 一種通信新:DQ
- 異步、半雙工
- 單總線只需要一根通信線即可實現數據的雙向傳輸,當采用寄生供電時,還可以省去設備的VDD線路,此時,供電加通信只需要DQ和GND兩根線。
DS18B20
DHT11,溫濕度傳感器
2.電路規范(硬件規范)
- 設備的DQ均要配置成開漏輸出模式
- DQ添加一個上拉電阻,阻值一般為4.7K歐左右,前兩條跟I2C的配置一樣
- 若此總線的從機采用寄生供電,則主機還應配一個強上拉輸出電路
- 總線可以掛載多個設備,可以單獨通信跟I2C很像
- 下面比上面多了一個強上拉電路,如果左邊的圈接低電平就會閉合,就會接到VCC,如果斷開,就是弱上拉供電
?3.時序結構(軟件規范)
(1)初始化
主機將總線拉低至少480us,然后釋放總線,等待15~60us后,存在的從機會拉低總線60~240us以響應主機,之后從機將釋放總線
詳解:總線的空閑狀態是高電平,如果要開始工作就拉低至少480us,然后再釋放,但是圖中拉上去的是彎的,其實是弱上拉電阻,不會馬上拉高,然后從機拉低,然后從機釋放
(2)發送一位
主機將總線拉低60~120us,然后釋放總線,表示發送0;主機將總線拉低1~15us,然后釋放總線,表示發送1.從機將在總線拉低30us后(典型值)讀取電平,整個時間片應大于60us
圖中左邊是發送0,右邊是發送1?
發送間隔還規定不能連續,需要間隔1u s
(3)接收一位
?主機將總線拉低1~15us,然后釋放總線,并在拉低后15us內讀取總線電平(盡量貼近15us的末尾),讀取為低電平則為接收0,讀取為高電平則為接收1,整個時間片應大于60us?
在這里可能會有疑問,這里的接和發都是是拉低總線然后釋放這樣會不會混淆。其實不會的,主機在發之前就已經定義后了是發送還是接收,不會出現混淆的現象
(4)發送一個字節:連續調用8次發送一位的時序,依次發送一個字節的8位(低位在前)
?接收一個字節:連續調用8次接收一位的時序,依次接收一個字節的8為(低位在前)
三、DB18B30操作流程和數據幀
初始化:從機復位,主機判斷從機是否響應
ROM操作:ROM指令+本指令需要的讀寫操作
功能操作:功能指令+本指令需要的讀寫操作
本節課只有一個設備,所以不會用到搜索ROM,只用跳過ROM就可以直接訪問設備了
我們要進行的功能有,第一條是轉換溫度,第二條是寫暫存器,第三條是讀暫存器,第四條是復制暫存器,將暫存器里的字節存入到E2里,實現掉電不丟失;第五條是將E2的字節覆蓋回雜草,第六條是讀取一位時序,響應供電模式?
- 溫度變換:初始化→跳過ROM→開始溫度變換
- 溫度讀取:初始化→跳過ROM→讀暫存器→連續的讀操作
- 溫度存儲格式
前五位都是符號位(BIT15-11),后面四位(BIT3-0)是存小數的,其余位(BIT10-4)是整數部分
下面是一些舉例
負數就是整數的補碼+1
下面是流程圖可以看一下