|
發布時間: 2018-10-29 16:49
正文摘要:DS18B20默認是12位精度的,就是*0.0625,時間太長的,我想改與0.5精度的,就是9位數。開發板原程序是沒有問題的,我摸了幾天我怎改也不行。 下面是百度找的。bbs.elecfans點com/jishu_1532799_1_1.html 第二:高速 ... |
jiangkeqin_sy 發表于 2018-10-31 09:07 我讀取到的這個參數是01111100,不是01111111,手冊上說是01111111 |
ssman 發表于 2020-11-9 16:43 這樣也可以。我是開機初始化的時候就寫。 |
| 設置成9位精度的,把0x1f寫人暫存器,再發個copy0x48命令,1820把3字節放到非易失存儲器。9位精度是*0.5+0.5的。把它們放到main()中while循環之前初始化。9位精度也是3字節,數據類型是一樣的。這樣即可顯示正常。 |
| 我是這樣的。把精度配置9位的,即0x1f寫入暫存器,再發考命令0x48,1820就把那3字節保存到非易失存儲器上。9位精度的是*0.5+0.5 即可顯示正常。把它們放到main中while循環之前初始化 |
| 24#說的很清楚了。你可以先試試。 |
| 樓主能否把9位分辨率的程序分享一下啊~謝謝 |
| 我的就是設置 9bit分辨率設置不成功,現在讀溫度就是太慢了,750ms 才能轉化一次,想改成95ms 轉化一次 但按上面的設置了 也是不 成功?? 不知道什么原因???求大神指導 |
| 我的就是設置 9bit分辨率設置不成功,現在讀溫度就是太慢了,750ms 才能轉化一次,想改成95ms 轉化一次 但按上面的設置了 也是不 成功?? 不知道什么原因???求大神指導 |
univers 發表于 2019-4-6 16:34 配置精度不成功,我把暫存寄存器的值讀出來,高溫限和低溫限和我配置的一樣,就分辨率那里寫不進去,一直是0x7f,只是哪里出問題了 |
univers 發表于 2018-10-31 10:49 你應該還是乘以 0.0625 因為即使你設置的精度是0.5,你讀出來的值 二進制 仍然有4位 表示的是小數,乘以0.0625 是因為數據整體往左移了4位 |
如果碰到DS18B20問題的兄弟,都可以發表出來啊,大家一起學習。![]() |
changyuan1724 發表于 2018-12-29 01:12 是這樣嘛,今天才看到,非常感謝兄弟,我有時間試試!可能是我理解錯誤吧! |
我還特意注冊了論壇賬號![]() |
非常感謝樓主,用了樓主的方法解決了精度的問題,感謝感謝!!![]() ![]() |
| 謝謝。我解決了。 |
|
看到了普中的板子 我是用pwm控制背光的,定時器會打斷溫度傳感器,論壇上也有這個問題 關閉中斷的話,讀溫度傳感器時間過長,造成屏幕閃爍 其實你讀取溫度傳感器要那么快么?2秒讀一次就ok了,還有就是你可以判斷溫度改變了,在更新 |
| 解決了嗎?我解決了 |
| 兄dei,你這個問題解決了沒有?我也遇到了 ,但是我解決了,你的問題出在轉換系數上。無論你使用哪個位數的精度,你需要乘的系數永遠都是0.0625。9位的分度是0.5攝氏度,不是說轉換系數就是0.5攝氏度。 |
|
初始化經過測試,這樣才行的,DS18B20有嚴格的時序時間。 下面的延時是精確的才行。 /******************************************************************************* * 函 數 名 : ds18b20Init * 函數功能 : 初始化 * 輸 入 : 無 * 輸 出 : 初始化成功返回1,失敗返回0 *******************************************************************************/ uchar ds18b20Init() { uchar i=0; DSPORT = 0; //將總線拉低480us~960us delay520us(); DSPORT = 1; //然后拉高總線,如果DS18B20做出反應會將在15us~60us后總線拉低 delay22us(); //這里非常重要,測試只有10-35us才有效,超過就返回不了啦,(現在取中間值22us)while延時的話要i最低=4開始才有效while(i--) while(DSPORT) //等待DS18B20拉低總線 也就是檢測DQ引腳狀態 { delayms(1); i++; if(i>5)//等待>5MS { return 0;//初始化失敗 } } delay520us(); //等待520us讓ds18b20釋放總線 return 1; //初始化成功 } |
|
昨天測試了一下,初始化時序有點問題,返回不了1.之后我單單測試了初始時序,按時序圖的時間,修改了時序。可以返回1了。也就是認到了DS18B20 之后把初始化放上去,還是200多度,看來還有別的地方也要改才行,應該是在寫bate指令那里。 |
|
原程序。 |
1003.83 KB, 下載次數: 83
小貓貓愛吃魚 發表于 2018-10-31 18:26 有時間再研究研究,那不是要重頭寫過才行。非常感謝謝你!明天把原程上傳大家看看。 |
univers 發表于 2018-10-29 16:57 小白,是你多多指教 |
|
發送了一個字節0001 1111,ds18b20就算接收了一個字,它也只對R1 R0進行操作 |
| 配置4寄存器只有R1R0可供用戶寫,但我們發送了一個字節0001 1111,有沒有什么不妥?是不是ds18b20就算接收了一個字,它也只對R1 R0進行操作 |
真是蛋痛,沒有一個人理我。![]() |