描述:
同時測試了好幾個板子,都接了DS18B20傳感器。但,有的板子讀取的DS18B20溫度值正確,有的讀取錯誤。
原因查找:
以為是有的傳感器壞了,但測試后發現並不是。
又以為是DS18B20需要的啟動時間長,因此在給DS18B20芯片供電好長一段時間后,才啟動采集程序,但結果還是錯誤。
但在找問題的過程中,發現調試時的暫停會導致讀出正確的DS18B20結果。
因此,懷疑是延時的問題。
解決:
所以在程序中連續讀取10次DS18B20數據,並把數據打印出來查看,結果發現:前幾次讀取的結果是錯誤的,之后讀取的結果就都是對的。
雖然解決了,但並沒有找到根源,不求甚解吧。
在此,也記錄下之前的一個針對錯誤的處理語句(已經看不明白當時為何要這么處理了,但感覺該處理目前似乎用不上了,因此刪除掉了)
if ((fabs(g_fSoilTemp - 85) > 1) && (fabs(g_fSoilTemp - 127.9) > 1))
{
break;
}