網上18b20的資料很多,但似乎都找不到要點。官方文件很詳盡,但也是通篇不分段
這裡結合自己除錯過程,總結要點如下,使用stm32 72mhz主頻。
本幅圖包括復位時序與寫時序要點。
復位時序
1、拉低至少480us
2、拉高15-60us,讀取狀態,為0則通過
3、再次延遲時間,實驗時過短會影響後續結果的讀出,這裡實驗最短120us左右。
寫時序1、一次寫1bit操作最少持續60us
2、低到高的操作需在15us內完成
讀時序1、一次讀1bit操作需至少持續60us
2、拉低操作持續1us~15us後釋放,且在60us內完成讀操作
總結:這種序列操作的器件屬於慢外設,一次溫度讀取包括兩次復位,寫4位元組,讀2位元組,這裡把所有時序壓縮到幾乎最短,一次讀取也需要4.5ms左右,時間很長,因此如果實時性要求高的話,估計得用中斷方式操作。
另外,期間感覺寫1時序和讀時序好像一樣的,器件是怎麼知道是寫1還是讀呢?判斷應該是通過寫「cc」「be」成功才啟動的讀過程,而在此之前都是寫過程,寫完成啟動讀時序。因此,先除錯寫、再除錯讀,是合理的除錯過程。
附**:
#include "18b20.h"
#define dq_1_h()gpio_setbits(gpiob, gpio_pin_4)
#define dq_1_l()gpio_resetbits(gpiob, gpio_pin_4)
#define rd_dq_1()gpio_readinputdatabit(gpiob, gpio_pin_4)
#define dq_2_h()gpio_setbits(gpiob, gpio_pin_3)
#define dq_2_l()gpio_resetbits(gpiob, gpio_pin_3)
#define rd_dq_2()gpio_readinputdatabit(gpiob, gpio_pin_3)
void delay_nus(u16 time)
}u8 waitready_1(void)
void init_18b20(void)
u8 readonechar_1(void)
return (dat) ;
}void writeonechar_1(unsigned char dat)
else
dat>>=1 ;}}
s8 read_temperature_1(void)
return (rtn);
}
關於藍橋杯STC15微控制器的18B20程式
ds18b20是一種單匯流排數字溫度感測器,測試溫度範圍 55 125 具有體積小,硬體開銷低,抗干擾能力強,精度高的特點。單匯流排,意味著沒有時鐘線,只有一根通訊線。單匯流排讀寫資料是靠控制起始時間和取樣時間來完成,所以時序要求很嚴格,這也是ds18b20驅動程式設計的難點。1.引腳圖 2.ds1...
DS18B20溫度測量
1.ds18b20 復位。2.寫入跳過 rom 的位元組命令,0xcc。3.寫入開始轉換的功能命令,0x44。4.延遲大約 750 900 毫秒 1.ds18b20 復位。2.寫入跳過 rom 的位元組命令,0xcc。3.寫入讀暫存的功能命令,0xbe。4.讀入第 0 個位元組 ls byte,轉換...
DS18B20溫度換算
dsi8b20接收到溫度轉換命令後,開始啟動轉換。轉換完成後的溫度值就以16位帶符號擴充套件的二進位制補碼形式儲存在高速暫存儲存器的0,1位元組。微控制器可通過單線介面讀到該資料,讀取時低位在前,高位在後,資料格式以0 062 5 lsb形式表示。溫度值格式如表2.2.1所示,其中 s 為標誌位,對...