Witam,
Dokumentacja do DS18B20 mówi tak że jeśli odczytana temperatura z czujnika wynosi 85 to czujnik nie wykonał jeszcze poprawnego pomiaru temperatury i pokazuje defaultową (standardowo ustawiną pierwotną temperaturę w rejestrze). Jeśli po podłączeniu czujnika widzisz 85C to oznacza że transmisja jest w miare poprawna (stwierdzenie w miarę poprawna rozwinę w dalszej części). Twój problem może mieć kilka przyczyn:
1. Błędna procedura resetu czujnika.
2. Błędny spsób zasilania czujnika.
3. Błędy spowodowane zakłóceniami.
Wyjaśnienie odnośnie stwierdzenia 'w miarę poprawna':
Jeśli procedura resetu czujnika tzn wstrzymania go powyżej 480us + 100us(lub więcej) spowoduje zresetowanie czujnika i ponowne umieszczenie w rejestrze DS18B20 wartości 85C.
Jeśli jest to atmega to przełączanie portów w trybie zasilania parasite power również ma znaczenie ( przestawianie DDRx PORTx - ma znaczenie która pierwsza instrukcja została wykonana).
Silne fale elektormagnetyczne będące w pobliżu mogą mieć również znaczenie (jakeiś przetwornice itd).
Zalecenia.
Sprawdź jaki masz rezystor na linii podciągającej DO (Maxim podaje chyba przy 5V 2k7 lub coś koło tego nie pamiętam dokładnie).
Tryb zasilania czujnika:
1. 3-przewodowy
2. 2-przewodowy
Sprawdź w jakim trybie pownieneś zasilać czujnik.
Jeśli w trybie 3-przewodowym to Vcc_pin_czujnika-5V, DO_pin - IO_Port, GND_pin - GND.
Jeśli w trybie 2-przewodowym to Vcc_pin-GND, DO_pin - IO_Port, GND_pin - GND.
Ważen również jest czy program który wgrałeś obsługuje różne rozdzielczości czujnika czy tylko 12bit. Chociaż przy tego typu usterce byłby błędny odczyt czykli jakieś głupoty na wyświetlaczu.
W moich procedurach odczytu czujnika ja uzyskałem uniwersalność przy stosowania kwarcu w zakresie od 4MHz - 12 MHz dla Atmeg.
Przy błędnych czasówkach zazwyczaj odbiera się same znaki 0xFF.
Pozdrawiam,
PS. Powiadom o efektach
Ja stawiam na błędne zasilanie czujnika !.