Aktyw Forum

Zarejestruj się na forum.ep.com.pl i zgłoś swój akces do Aktywu Forum. Jeśli jesteś już zarejestrowany wystarczy, że się zalogujesz.

Sprawdź punkty Zarejestruj się

Niezrozumiały problem z DS18B20

Awatar użytkownika
TomcioPaluszek
-
-
Posty:29
Rejestracja:25 sty 2005, o 23:31
Lokalizacja:Szczecin
Niezrozumiały problem z DS18B20

Postautor: TomcioPaluszek » 25 gru 2006, o 23:32

Witam

Wcześniej już wiele razy używałem DS1820, ale tym razem mam DS18B20 i wielki problem.

Czujnik się komunikuje z prockiem, ale na LCD pokazuje temperaturę, która ma się nijak do rzeczywistości. Np. W temperaturze pokojowej pokazuje -70 stopni. Sam czujnik reaguje poprawnie na zmianę temperatury, ale wyświetlana wartość jest z kosmosu.

Dodatkowo kiedy czujnik jest podpięty 3 przewodami (plus, minus i dane) ciągle wyświetla się 0 stopni niezależnie od temperatury. Dopiero jak dodatkowo dałem rezystor 2.2k między plusem a danymi to zaczął pokazywać temp, ale taką jak piszę wyżej.

Czujniki to DS18B20 z serii C3 zakupione na Allegro (mam ich kilka sztuk i każdy się tak zachowuje)

Program jest wzięty z książki. Wcześniej go używałem z powodzeniem. Nie rozumiem dlaczego mam takie problemy z tym czujnikiem.
$regfile = "m8def.dat"

Config Lcd = 16 * 2
$crystal = 8000000
Config Lcdpin = Pin , Db4 = Portc.1 , Db5 = Portc.0 , Db6 = Portc.2 , Db7 = Portb.2 , E = Portc.3 , Rs = Portc.4
Config 1wire = Portd.2


Declare Sub Odcz_temp



Dim Temperatura(2) As Byte



Deflcdchar 0 , 7 , 5 , 7 , 32 , 32 , 32 , 32 , 32
Cursor Off
Cls

Do

Call Odcz_temp
Cls
If Temperatura(2) = 0 Then
Lcd "Temp: " ; Temperatura(1) ; Chr(0) ; "C"
Else
Lcd "Temp: -" ; Temperatura(1) ; Chr(0) ; "C"
End If

Loop
End

'+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Sub Odcz_temp

1wreset
1wwrite &HCC
1wwrite &H44
Waitms 750
1wreset
1wwrite &HCC
1wwrite &HBE

Temperatura(1) = 1wread(2)

1wreset
If Err = 1 Then

Cls
Lcd "Brak czujnika"
Do
Loop

End If
If Temperatura(2) > 0 Then
Temperatura(1) = 256 - Temperatura(1)
End If
Temperatura(1) = Temperatura(1) / 2


End Sub

'++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Ostatnio zmieniony 27 mar 2007, o 20:21 przez TomcioPaluszek, łącznie zmieniany 1 raz.

MDz
-
-
Posty:365
Rejestracja:29 mar 2003, o 13:35
Lokalizacja:Warszawa
Kontaktowanie:

Postautor: MDz » 26 gru 2006, o 00:47

Obie kostki różnią się formatem danych:

DS1820:
"Temperature is read as a 9–bit digital value."

DS18B20:
"The resolution of the
temperature sensor is user-configurable to 9, 10, 11, or 12 bits, corresponding to increments of respectively increments of 0.5, 0.25, 0.125 and 0.0625 C deg, respectively.The default resolution at power-up is 12-bit."

DS1820 zwraca wartość temperatury kodowaną na 9 bitach. DS18B20 daje możliwość wyboru, ale domyślnie przyjmuje rozdzielczość 12 bitową. Na pierwszy rzut oka, Twój program dzieląc odczytaną wartość temperatury przez 2 traktuje ją jako kodowaną na 9 bitach z rozdzielczością 0.5st.

--
MDz

Wróć do „Projektowanie PCB, programy EDA, CAD, narzędziowe”

Kto jest online

Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 34 gości