18b20實現溫度測量,對初始化和讀寫的時序問題很是困惑,有經驗的傳授點!

2025-03-21 21:30:21 字數 2215 閱讀 3986

1樓:匿名使用者

主機將匯流排拉低最短480us,之後釋放匯流排。由於5kω上拉電阻的作用,匯流排恢復到高電平。ds18b20檢測到上公升沿後等待15到60us,發出存在脈衝:

拉低匯流排60-240us。至此,初始化和存在時序完畢。所有的寫時隙必須至少有60us的持續時間。

相鄰兩個寫時隙必須要有最少1us的恢復時間。所有的寫時隙(寫0和寫1)都由拉低匯流排產生。為產生寫1時隙,在拉低匯流排後主機必須在15us內釋放匯流排(拉低的電平慧中要持續至少1us)。

由於上拉電阻的作用,匯流排電平恢復為高電平,直到完成寫時隙。

為產生寫0時隙,在拉低匯流排後主機持續拉低匯流排即可,直到寫時隙完成後釋放匯流排(持續時間60-120us)。

寫時隙產生後,ds18b20會在產生後的15到60us的時間內取樣匯流排,以此來確定寫0還是寫只有在主機發出讀時隙時才能傳送資料到主機。因此,主機必須在be 命令,b4命令後立即產生讀時隙以使ds18b20提供相應的資料。另外,在44命令,b8命令後也要產生讀時隙。

所有的讀時隙必須至少有60us的持續時間。相鄰兩個讀時隙必須要有最少1us的恢復時間。所有的讀時隙都由拉低匯流排,持續至少1us後再釋放匯流排(由於上拉電阻的作用,匯流排恢復為高電平)產生。

ds18b20輸出的資料在下降沿產生前衝山後15us後有效。因此,釋放匯流排和主機取樣匯流排等動作要在15us內判態完成。

2樓:冒卉巨集良工

18b20的復位狀態為85,但你一直顯示85,後來又顯示埋宴79,說明你的時序完全不對,該輪液帶協議定義了幾種訊號的時序:初始化時序臘蘆、讀時序、寫時序。所有時序都是將,ctwztv

3樓:網友

我空間裡有一篇18b20的使用心得,希望對你有用,望~~

為什麼18b20溫度測量時,總是跳變!

4樓:攝影師天意

你看看這個溫度的計算 正常18b20是12位溫度 這個程式溫度計算的很粗略 估計是你說的這種情況 你溫度用查表顯示就能好很多。

code uchar table_tempfh=這個是溫度小數位的查表,精確到。

a=readonechar();讀取溫度值低位。

b=readonechar();讀取溫度值高位。

temp_value=b<<4;

temp_value+=(a&0xf0)>>4;

小數部分(查表對照,獲取小數位)

5樓:做而論道

1. 程式中,沒有考慮到18b20的轉換時間;

2. 讀出的溫度資料,是兩個位元組,合併成溫度數值,應有16位數的變數,但是:

unsigned char i=0; /這是8位的變數,丟失資訊了。

while(1)

i=readtemperature();讀溫度 顯然不會正確。

我用18b20測溫,當溫度達65度就讀出錯誤溫度值,換乙個18b20也還是如此.誰知道什麼原因嗎?

6樓:網友

上公升到65度的時候就出錯?

前面的資料都正常?

你把你的程式給我瞄瞄。

18b20讀取(很急)

7樓:網友

讀一位元組的修改部分,你試下能纖核如不能用。

unsigned char readonechar()unsigned char i=0;

unsigned char dat = 0;

for (i=8;i>0;i--)

dq = 0; /給脈衝訊號。

nop_()毀啟///延時5us (可以不延氏團時)dat>>=1;

dq=1;//將電平拉高。

if(dq)

dat|=0x80;

delay50us();在45us到60us進行取樣 ,總時間大於60us

nop_()

return(dat);

微控制器18b20感測器測溫問題

8樓:種花小當家

ds18b20的操作延時量是除錯的重點,所以你這樣提問沒人能回答,因為不知道你用什麼頻率的晶振,如果你的程式是at系列微控制器的程式,你可以把延時量加大4-5倍試試。

9樓:網友

ff是因為微控制器沒有讀到感測器的資料,檢測一下硬體,然後看看有沒有初始化什麼的,我當時在lcd1602上顯示時也出現過這種問題。

ds18b20溫度轉換問題

1 接收資料為雙位元組 先低位,後高位 先低位元組,後高位元組 2 高位元組的前5位若為 0 則將資料乘以0.0625 即 t d 0.0625 3 高位元組的前5位若為 1 則將資料先取反,再加一,再乘以0.0625 即 t d 1 0.0625 溫度是 55 125 對應的值是 55 ff92 ...

溫度計的設計,(使用DS18B20)

at89c51微控制器 那可以的要求的撒 微控制器數字式溫度計設計,用ds18b20和12864液晶屏 1 我做過的是ds18b20 pic微控制器 數碼管顯示。2 也做過微控制器 熱電偶 12864顯示溫度3 最近要做的是,微控制器 ds18b20 數碼管顯示 時間顯示。有按鍵,設定溫度上限和下限...

我編寫ds18b20程式想顯示溫度在led燈上但

include reg52.h include include 要用到取絕對值函式abs define uchar unsigned char define uint unsigned int sbit ds p2 1 sbit ds p3 2 ds18b20 sbit duan p2 6 sbit...