Trochę starawy ten kotlet, ale odgrzeję go jednak...
@Denar, a po co Ci oddzielanie części całkowitej od ułamkowej dla wyświetlenia wskazania?
Da się to zrobić inaczej. Może więcej kodu, ale prostsze (przynajmniej dla mnie):
Kod: Zaznacz cały
' ------------------------------------------------------------------------------
Sub Czytaj_temperature:
1wreset 'podprogram 1wr
1wwrite &HCC
1wwrite &H44
' Waitms 250
' Waitms 250
1wreset 'podprogram 1wr
1wwrite &HCC
1wwrite &HBE
B1 = 1wread()
B2 = 1wread()
1wreset 'podprogram 1wr
If B2 >= 248 Then 'w przypadku temperatur ujemnych
B1 = R - B1 'Od 255 Odejmujemy B1
B2 = R - B2 'od 255 odejmujemy B2
Znak = "-"
Else
Znak = "+"
End If
T1 = B1 / 16 'Przesuniecie w pawo o 4 bajty
T2 = B2 * 16 'przesuniecie w lewo o 4 bajty
T1 = T1 + T2
Tmp = Fusing(t1 , " ###.&")
Tmp = Znak + Tmp
If Err = 1 Then Tmp = "blad"
End Sub Czytaj_temperature
' ------------------------------------------------------------------------------
I temperaturę wyświetlam:
gdzie Chr(0) jest zdefiniowanym wcześniej znakiem stopni (°)
Z tego kodu zawsze korzystam w swoich programach i zawsze się sprawdza. Drobne zmiany dochodzą, jeśli jest więcej niż jeden DS, ale to nie na ten wątek.
Sprawdź sobie...
Jeśli otrzymasz wskazanie +85.0 lub -0.0, i nie będzie reakcji na zmianę temperatury (np. kiedy weźmiesz DS i zaciśniesz go w dłoni), oznacza to że masz źle podłączony lub uszkodzony czujnik.
DS18B20 pokazuje +85°C kiedy ma podłączony GND i Out (brak napięcia na V
CC).
Kiedy podłączysz tylko V
CC i Out (brak masy) - wtedy uzyskasz odczyt +0°C
Niestety, są to układy dość czułe na odwrócenie polaryzacji zasilania. Czasem to przeżywają, ale większość przypadków kończy się śmiercią dallasa...

Sprawdź sobie jakie masz napięcie pomiędzy V
CC i GND, ale nie na wyjściu z płytki, tylko bezpośrednio na nogach Dallasa (powinno być ok. 5V, jeśli podajesz napięcie z płytki). Jeśli napięcie jest właściwe - to musisz podmienić czujnik.
Kolejna rzecz: po co czekasz aż 2 sekundy na odczyt

skoro maksymalny czas konwersji wynosi 750ms (w trybie 12bit), a w rozdzielczości 9bit mniej, niż 100ms.
Kod wklejony wyżej działa poprawnie nawet z wyłączonym opóźnieniem, zarówno na prockach AT8, jak i AT32.