|
|||||||||||
| 技術(shù)交流 | 電路欣賞 | 工控天地 | 數(shù)字廣電 | 通信技術(shù) | 電源技術(shù) | 測控之家 | EMC技術(shù) | ARM技術(shù) | EDA技術(shù) | PCB技術(shù) | 嵌入式系統(tǒng) 驅(qū)動(dòng)編程 | 集成電路 | 器件替換 | 模擬技術(shù) | 新手園地 | 單 片 機(jī) | DSP技術(shù) | MCU技術(shù) | IC 設(shè)計(jì) | IC 產(chǎn)業(yè) | CAN-bus/DeviceNe |
溫度傳感器DS18B20奇怪問題 |
| 作者:song_qing 欄目:技術(shù)交流 |
最近做了個(gè)儀器,里面包括溫度測量功能,儀器剛上電時(shí),顯示溫度85度,肯定是不正確的,這時(shí)將單片機(jī)復(fù)位,顯示的溫度就正常了。但是若一開機(jī)就按復(fù)位鍵也是顯示錯(cuò)誤,需等液晶顯示器把錯(cuò)誤的溫度顯示完再復(fù)位,溫度就沒錯(cuò)了,有誰知道這是怎么回事? 我試過好幾種方法: 1:多讀幾遍溫度,再顯示; 2:開機(jī)后延時(shí)幾秒再開始工作; 可這些都不管用!。 |
| 2樓: | >>參與討論 |
| 作者: lucidmask 于 2006/11/2 11:30:00 發(fā)布:
re 供電沒問題吧? |
|
| 3樓: | >>參與討論 |
| 作者: spwp 于 2006/11/2 11:32:00 發(fā)布:
好像是單片機(jī)的事,開機(jī)時(shí)保持對(duì)18B20復(fù)位看看 |
|
| 4樓: | >>參與討論 |
| 作者: qzl 于 2006/11/2 12:37:00 發(fā)布:
估計(jì)是顯示問題 正常工作后溫度正常。說明讀取溫度的程序部分是正常的。 要等液晶顯示之后才能正確讀取溫度。也許是只是開機(jī)的時(shí)候顯示緩沖區(qū)的數(shù)據(jù)不對(duì)。即溫度是正確的,只是你顯示出來的是錯(cuò)的而已。從每次開機(jī)顯示固定的錯(cuò)誤數(shù)據(jù)可以看出來。 第二個(gè)可能是:18B20的轉(zhuǎn)換溫度時(shí)間是很長的。需要750ms。 在正常開機(jī)的時(shí)候你讀取這個(gè)溫度是否有正確讀取。如果不正常。就看看這部分代碼。 |
|
| 5樓: | >>參與討論 |
| 作者: nickings 于 2006/11/2 13:12:00 發(fā)布:
初始化 |
|
| 6樓: | >>參與討論 |
| 作者: song_qing 于 2006/11/2 16:36:00 發(fā)布:
顯示緩沖區(qū)的數(shù)據(jù)應(yīng)該沒問題 回復(fù)qzl:在開機(jī)時(shí),儀器首先顯示的是儀器的版本等介紹信息,然后才顯示溫度的,每次開機(jī)都顯示的是85度。 而第二個(gè)也不大可能啊,為什么復(fù)位后每次都讀取正確呢? 回復(fù)lucidmask:供電肯定沒問題。 回復(fù)nickings:初始化什么?LCD? DS18B20?還是單片機(jī)? |
|
| 7樓: | >>參與討論 |
| 作者: mikejovi 于 2006/11/2 16:43:00 發(fā)布:
一點(diǎn)看法 同意qzl的看法 |
|
| 8樓: | >>參與討論 |
| 作者: czlbj 于 2006/11/2 20:44:00 發(fā)布:
我想應(yīng)該是這么回事: 18B20內(nèi)溫度寄存器初始值為85,你應(yīng)該不先讀值,先進(jìn)行一次溫度轉(zhuǎn)換。 |
|
| 9樓: | >>參與討論 |
| 作者: song_qing 于 2006/11/4 11:25:00 發(fā)布:
czlbj的方法也試過了,沒效果啊 |
|
| 10樓: | >>參與討論 |
| 作者: spwp 于 2006/11/4 13:06:00 發(fā)布:
先進(jìn)行一次溫度轉(zhuǎn)換。 czlbj 的說法有道理,是問題所在?纯闯绦蛄。 |
|
| 11樓: | >>參與討論 |
| 作者: song_qing 于 2006/11/5 1:06:00 發(fā)布:
先進(jìn)行溫度轉(zhuǎn)換,怎么還不行呢? 原先程序: Write_Position(1,8); DISPLAY("......");delay(2000); clear_screen; Write_Position(1,8); DISPLAY("....");delay(2000); clear_screen; tempr=read_T();//讀溫度; Write_Position(1,8); DISPLAY_DoubleData((tempr&0x07FF)*0.0625); 經(jīng)修改后: Write_Position(1,8); DISPLAY("......");delay(2000); clear_screen; Write_Position(1,8); DISPLAY("....");delay(2000); clear_screen; resetDS18B20(); writeByteDS18B20(0xcc); //跳過ROM writeByteDS18B20(0x44); //啟動(dòng)溫度轉(zhuǎn)換 delay(100); tempr=read_T();//讀溫度; Write_Position(1,8); DISPLAY_DoubleData((tempr&0x07FF)*0.0625); 即在讀溫度之前就先進(jìn)行溫度轉(zhuǎn)換;可是讀的溫度還是有錯(cuò);有誰知道這到底是怎么回事嗎? |
|
| 12樓: | >>參與討論 |
| 作者: google 于 2006/11/6 11:35:00 發(fā)布:
try it 我也遇到同樣的問題。一般是在上電第一次讀溫度值的時(shí)候。 +85是18B20內(nèi)溫度寄存器初始值,文檔中說DS18B20在收到溫度轉(zhuǎn)換指令后需要有最少750ms的轉(zhuǎn)換時(shí)間。試著在第一次發(fā)送溫度轉(zhuǎn)換指令后,延時(shí)一段時(shí)間后再讀溫度值。 |
|
| 13樓: | >>參與討論 |
| 作者: 1234 于 2010/7/27 15:09:40 發(fā)布:
我也遇到同樣的問題。 我的解決辦法是在測溫之后,延時(shí)大約1s了,這個(gè)問題就沒了。 |
|
|
|
| 免費(fèi)注冊為維庫電子開發(fā)網(wǎng)會(huì)員,參與電子工程師社區(qū)討論,點(diǎn)此進(jìn)入 |
Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號(hào) |