Jak rozwiązać problem z błędnym odczytem temperatury z czujnika DS18B20/S20?
DS18x20
From: "Filip..::Dragon.Master::.." <filip_gd_at_nospam_wp.pl>
Subject: DS18x20
Date: Sat, 21 Sep 2002 23:07:35 +0200
Mam problem z czujnikiem temperatury.
Mam go z sampli i jest to niby DS18B20 lub S20 ale na obudowie napisane jest
że to ds1820
Program wyświetla mi temperaturę 850 i nie wiem czy to wina nie tego
czujnika czy czegoś innego
Proszę o pomoc
Z góry thx.
pozdr
Filip
From: "Wojtek Zaranek" <yossarian1_at_nospam_wp.pl>
Subject: Re: DS18x20
Date: Sun, 22 Sep 2002 00:18:49 +0200
Ja mam równiez takie układy w obudowie TO-92 i zachowują się poprawnie.
Podłaczałem je do AVR-a z napisanym w C kodem i spokojnie wszystko działa
nawet z kilkoma układami na magistrali. Układy te po resecie mają ustawioną
w rejestrze wartość, która odpowiada temperaturze +85 C stąd może
odczytywana przez ciebie wartość. Upewnij się czy twój soft wyzwala pomiar
bo wygląda jakbyś tego nie robił. A tak w ogóle to co to za program, którego
używasz, pisałes go sam czy to jest jakiś gotowiec??
Pozdrawiam
Wojtek Zaranek
Użytkownik "Filip..::Dragon.Master::.." <filip_gd_at_nospam_wp.pl> napisał w
wiadomości news:amin5r$76l$2_at_nospam_korweta.task.gda.pl...
Mam problem z czujnikiem temperatury.
Mam go z sampli i jest to niby DS18B20 lub S20 ale na obudowie napisane
jest
że to ds1820
Program wyświetla mi temperaturę 850 i nie wiem czy to wina nie tego
czujnika czy czegoś innego
Proszę o pomoc
Z góry thx.
pozdr
Filip
From: rora_at_nospam_klub.chip.pl (Rora)
Subject: Re: DS18x20
Date: 22 Sep 2002 14:03:21 +0200
Niestety,
jest tylko podobny do DS1820.
Roznica polega na sposobie obliczania ulamkow.
Zerknij do dokumentacji jednego i drugiego.
Jezeli masz juz napisany program do DS1820, to kilka linijek w asm i bedzie
dzialac z DS18B20.
Robert
--
Archiwum grupy: http://niusy.onet.pl/pl.misc.elektronika
From: "damdam" <damdam_at_nospam_kki.net.pl>
Subject: Re: DS18x20
Date: Sun, 22 Sep 2002 19:32:47 +0200
a moze wystarczy podpiac +5v na 3 nozke???
pzdr, damdam
From: "Wojtek Zaranek" <yossarian1_at_nospam_wp.pl>
Subject: Re: DS18x20
Date: Mon, 23 Sep 2002 11:20:43 +0200
Ja w swojej aplikacji używałem zasilania z magistrali i wtedy w obudowie
TO-92 należy zewrzeć nóżkę 1 z 3 i je do masy a środkowa to linia sygnałowa
magistrali i działalo. Nie sprawdzałem jednak pracy z oddzielnym zasilaniem
a wtedy trzeba zrobic tak jak poleca kolega.
Wojtek.
Użytkownik "damdam" <damdam_at_nospam_kki.net.pl> napisał w wiadomości
news:amkura$l80$1_at_nospam_news.tpi.pl...
a moze wystarczy podpiac +5v na 3 nozke???
pzdr, damdam
From: "Janusz U" <nopsoft_at_nospam_skrzynka.pl>
Subject: Re: DS18x20
Date: Mon, 23 Sep 2002 20:47:55 +0200
A przypadkied nie wystawiają informacji o tym, co im ubyło z magazynu (razem
z samplami:). - prościej coś doradzić...
pzdr
Jamisz U.
Użytkownik Wojtek Zaranek <yossarian1_at_nospam_wp.pl> w wiadomości do grup
dyskusyjnych napisał:ammmdf$g3u$1_at_nospam_korweta.task.gda.pl...
Ja w swojej aplikacji używałem zasilania z magistrali i wtedy w obudowie
TO-92 należy zewrzeć nóżkę 1 z 3 i je do masy a środkowa to linia
sygnałowa
magistrali i działalo. Nie sprawdzałem jednak pracy z oddzielnym
zasilaniem
a wtedy trzeba zrobic tak jak poleca kolega.
Wojtek.
Użytkownik "damdam" <damdam_at_nospam_kki.net.pl> napisał w wiadomości
news:amkura$l80$1_at_nospam_news.tpi.pl...
a moze wystarczy podpiac +5v na 3 nozke???
pzdr, damdam
--
Serwis Usenet w portalu Gazeta.pl -> http://www.gazeta.pl/usenet/
From: "Filip..::Dragon.Master::.." <filip_gd_at_nospam_wp.pl>
Subject: Re: DS18x20
Date: Mon, 23 Sep 2002 21:23:52 +0200
Program to:
I tak nie działa:(
podłączony zew. vcc i oprócz tego linia danych podciągnięta przez rezystor
do vcc
Pozdr
' ----------------------------------------------------------------
'Author : Bojan Ivancic
' Example measuring temperature using Dallas DS1820,
' with calculated for 0.1 C resolution and with 8-bit CRC!
' ----------------------------------------------------------------
$crystal = 8000000 ' we are using
this frequency
Declare Sub Read1820
Declare Sub Crcit
Declare Sub Temperature
Dim Bd(9) As Byte
Dim I As Byte , Tmp As Byte
Dim Crc As Byte
Dim T As Integer , T1 As Integer
Dim V As Byte
Config 1wire = P3.0 ' DS1820 on
pin 12 (pull up)
Cursor Off Noblink
Cls
Locate 1 , 1 : Lcd "DEMO for DS1820"
Locate 2 , 1 : Lcd "T="
Do
Temperature
Wait 1
Loop
End
' /////////////////////////////////////////////////////////////////////////
/
Sub Temperature ' actual
measuring
1wwrite &HCC : 1wwrite &H44 ' start
measure
Wait 1 ' wait for end
of conversion
Read1820 ' read 9 bytes
If Err = 1 Then ' if there is
no sensor
Locate 2 , 4 : Lcd "-- " ' we put "-- "
on LCD
Else
If Crc = 0 Then ' sensor
present, check CRC
Locate 2 , 4 : Lcd T ' CRC OK,
print T*10 on LCD
Else
Locate 2 , 4 : Lcd "** " ' CRC NOT OK,
"** " on LCD
End If
End If
End Sub
' /////////////////////////////////////////////////////////////////////////
/
Sub Read1820 ' reads sensor
ans calculate
' T for 0.1 C
1wreset ' reset the
bus
1wwrite &HCC ' read
internal RAM
1wwrite &HBE ' read 9 data
bytest
Bd(1) = 1wread(9) ' read bytes
in array
1wreset ' reset the
bus
Crcit ' ckeck CRC
If Crc = 0 Then ' if is OK,
calculate for
Tmp = Bd(1) And 1 ' 0.1C
precision
If Tmp = 1 Then Decr Bd(1)
T = Makeint(bd(1) , Bd(2))
T = T * 50 : T = T - 25 : T1 = Bd(8) - Bd(7) : T1 = T1 * 100
T1 = T1 / Bd(8) : T = T + T1 : T = T / 10
End If
End Sub
' /////////////////////////////////////////////////////////////////////////
/
Sub Crcit ' calculate 8
bit CRC
' bigger but faster
Crc = 0 ' needs a 256
elements table
For I = 1 To 9
Tmp = Crc Xor Bd(i)
Crc = Lookup(tmp , Crc8)
Next
End Sub
' /////////////////////////////////////////////////////////////////////////
/
Crc8:
Data 0 , 94 , 188 , 226 , 97 , 63 , 221 , 131 , 194 , 156
Data 126 , 32 , 163 , 253 , 31 , 65 , 157 , 195 , 33 , 127
Data 252 , 162 , 64 , 30 , 95 , 1 , 227 , 189 , 62 , 96
Data 130 , 220 , 35 , 125 , 159 , 193 , 66 , 28 , 254 , 160
Data 225 , 191 , 93 , 3 , 128 , 222 , 60 , 98 , 190 , 224
Data 2 , 92 , 223 , 129 , 99 , 61 , 124 , 34 , 192 , 158
Data 29 , 67 , 161 , 255 , 70 , 24 , 250 , 164 , 39 , 121
Data 155 , 197 , 132 , 218 , 56 , 102 , 229 , 187 , 89 , 7
Data 219 , 133 , 103 , 57 , 186 , 228 , 6 , 88 , 25 , 71
Data 165 , 251 , 120 , 38 , 196 , 154 , 101 , 59 , 217 , 135
Data 4 , 90 , 184 , 230 , 167 , 249 , 27 , 69 , 198 , 152
Data 122 , 36 , 248 , 166 , 68 , 26 , 153 , 199 , 37 , 123
Data 58 , 100 , 134 , 216 , 91 , 5 , 231 , 185 , 140 , 210
Data 48 , 110 , 237 , 179 , 81 , 15 , 78 , 16 , 242 , 172
Data 47 , 113 , 147 , 205 , 17 , 79 , 173 , 243 , 112 , 46
Data 204 , 146 , 211 , 141 , 111 , 49 , 178 , 236 , 14 , 80
Data 175 , 241 , 19 , 77 , 206 , 144 , 114 , 44 , 109 , 51
Data 209 , 143 , 12 , 82 , 176 , 238 , 50 , 108 , 142 , 208
Data 83 , 13 , 239 , 177 , 240 , 174 , 76 , 18 , 145 , 207
Data 45 , 115 , 202 , 148 , 118 , 40 , 171 , 245 , 23 , 73
Data 8 , 86 , 180 , 234 , 105 , 55 , 213 , 139 , 87 , 9
Data 235 , 181 , 54 , 104 , 138 , 212 , 149 , 203 , 41 , 119
Data 244 , 170 , 72 , 22 , 233 , 183 , 85 , 11 , 136 , 214
Data 52 , 106 , 43 , 117 , 151 , 201 , 74 , 20 , 246 , 168
Data 116 , 42 , 200 , 150 , 21 , 75 , 169 , 247 , 182 , 232
Data 10 , 84 , 215 , 137 , 107
From: "Wojtek Zaranek" <yossarian1_at_nospam_wp.pl>
Subject: Re: DS18x20
Date: Mon, 23 Sep 2002 23:41:18 +0200
Domyslam sie, że jest to Bascom ale niestety nie znam go nawet w stopniu
miernym. Ja pisałem kod na AVR w C (avrgcc) i korzystałem z tego co napisali
u dallasa w pliku app162.pdf, którego możesz ściagnąć spod adresu
http://www.maxim-ic.com/appnotes.cfm/appnote_number/854. Są tam opisane
procedury w C co prawda na 51 ale stosunkowo łatwo mi się je udało
przerobić, chociaż właściwie to zdaje sie, że nie napisałeś jaki kontroler
Ciebie interesuje. Odczyt temp. jest tam realizowany na terminalu szeregowym
na komputerze ale da się to stosunkowo łatwo przerobić.
A jednak przyjrzałem się temu co wysłałeś i mam kilka uwag:
' /////////////////////////////////////////////////////////////////////////
/
Sub Temperature ' actual
measuring
1wwrite &HCC : 1wwrite &H44 ' start
measure
**************************************************************************
********************************
//Co robi instrukcja Wait 1 poniżej? Jeśli uzywasz zasilania z magistrali to
powinna oczekiwać ok 750ms to jest max.
// czas po którym każdy układ dokona konwersji
//temperatury. Jesli zasilanie jest z zewnątrz to instrukcja powinna czekać
aż master nie odczyta wartości 1 na magistrali
//Jeszcze jedna uwaga zdaje się że możesz mieć podłączony tylko jeden układ
do magistrali bo wszędzie jest uzywana instrukcja SkipROM (kod CCh) i chyba
//własnie w pierwszych wersjach mojego programu z instrukcja SkipRom
podłączenie dwóch układów dawało w wyniku +85 C wyciągnięcie jednego z nich
//przywracało porządek. Ale tak na prawdę do końca nie wiem co dzieje się w
tym programie bo nie znam bascom jak juz pisalem:)
**************************************************************************
********************************
Wait 1 ' wait for end
of conversion
Read1820 ' read 9 bytes
If Err = 1 Then ' if there is
no sensor
Locate 2 , 4 : Lcd "-- " ' we put "-- "
on LCD
Else
If Crc = 0 Then ' sensor
present, check CRC
Locate 2 , 4 : Lcd T ' CRC OK,
print T*10 on LCD
Else
Locate 2 , 4 : Lcd "** " ' CRC NOT OK,
"** " on LCD
End If
End If
End Sub