ds18b20溫度感測器和dht11類似 也是單匯流排進行資料的傳輸和控制
最高位為1 表示負數
最高位為0 表示正數
正數的原碼的補碼就是原碼本身
負數的原碼的補碼是原碼的反碼加1
負數:負數的補碼反碼的首位都是 表示為1
例如得到的是-
5表示的是1000
0000
0101
0000
補碼進行表示的就是
1111
1111
1010
1111
1111
1111
1011
0000
得到的補碼如下
但是我們要得到原碼 需要進行轉換 即通過補碼的反碼加一
1000
0000
0100
1111
1000
0000
0101
0000
得到負數現在的函式值
負數的原碼 = 負數補碼的反碼 +
1負數的補碼 = 負數原碼的反碼 +
在每次呼叫,都需要進行初始化
建立初始化
因為需要讀取資料和作為主機拉高
因此需要設定兩種不同的gpio輸入輸出模式
分別設定為推挽輸出 和 上拉電阻輸入
主機向ds18b20傳送低電平的時間為480us到960us
ds18b20等待訊號的時間是15us到60us
ds18b20傳送響應脈衝的訊號是60us-240us
ds18b20進行讀取的最短時間大於480us
因此得到的區間是60us到75us所有的等待時間都會經過此處
寫時序ds18b20寫入和讀取都是lsb先行
每次寫入的時間大於60us
寫入0主機傳送乙個60us-120us的低電平,然後延時乙個大於1us的恢復時間
寫入1主機傳送大於1us小於15us的低電平,然後延時讓寫入時間大於60us
讀時序在第乙個15us進行bit的讀取
主機傳送低電平訊號的時間大於1us小於15us
讀取一次的時間大於60us
當讀取到的是0 則為低電平
當讀取到的是1 則為高電平
* 儲存的溫度是16 位的帶符號擴充套件的二進位制補碼形式
* 當工作在12位解析度時,其中5個符號位,7個整數字,4個小數字
* * |---------整數----------|-----小數 解析度 1/(2^4)=0.0625----|
* 低位元組 | 2^3 | 2^2 | 2^1 | 2^0 | 2^(-1) | 2^(-2) | 2^(-3) | 2^(-4) |
* ** |-----符號位:0->正 1->負-------|-----------整數-----------|
* 高位元組 | s | s | s | s | s | 2^6 | 2^5 | 2^4 |
* *
* 溫度 = 符號位 + 整數 + 小數*0.0625
*//**
* @brief 在跳過匹配 rom 情況下獲取 ds18b20 溫度值
* @param 無
* @retval 溫度值
*/float ds18b20_gettemp_skiprom (
void
)在這裡 負數是通過補碼顯示出來的
因此看到的是ff.
.進行計算溫度需要轉換成原碼進行計算
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 為標誌位,對...
ds18b20驅動配置
初始化時序 void ds18b20 rst void 返回1 沒有檢測到ds18b20的存在返回0 存在 u8 ds18b20 check void if retry 200 return1 else retry 0 while ds18b20 dq in retry 240 if retry 2...