PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : 2 DS1820 Problem



Luppi
12.04.2006, 15:28
Hallo

ich versuche gerade 2 DS1820 Temp sensoren auszulesen.

Hab mir die suche hier schon angeschaut. Und zahlreiches probiert. Die Sensoren sind auch Richtig rum angeschlossen. Doch ich bekomme als Temp wert immer -127 und als id immer 00000000.

Den Code hab ich aus der suche aus einem Beitrag

Hier malder Code


$regfile = "m8def.dat" 'ATMega8 Declaration
$crystal = 3686400 'hier Taktfrequenz eintragen

Config 1wire = Portd.2 '1wire Bus an Port PD2


Config Lcd = 16 * 2
Config Lcdpin = Pin , Db4 = Portb.4 , Db5 = Portb.5 , Db6 = Portb.6 , Db7 = Portb.7 , E = Portb.2 , Rs = Portb.0
Config Lcdmode = Port
Config Lcdbus = 4 '4 bit mode
Config Lcd = 20 * 4
Initlcd


Dim ___lcdno As Bit
Dim T1 As Byte
Dim T2 As Byte
Dim I As Byte
Dim Id1(8) As Byte
Dim Id2(8) As Byte
Dim Ar1(2) As Byte
Dim Ar2(2) As Byte

Initlcd
Cursor Off
Cls

Id1(1) = 1wsearchfirst()
Id2(1) = 1wsearchnext()


Do
1wreset 'reset
1wwrite &H55 'Match Rom command
1wwrite Id1(1) , 8 'Id von Sensor 1
1wwrite &H44 'Convert T

Waitms 300 'warten bis convert T fertig ist
1wreset 'reset
1wwrite &H55 'match rom command
1wwrite Id1(1) , 8 'id von sensor 1
1wwrite &HBE 'scratchpad lesen
Ar1(1) = 1wread(1) 'erstes byte auslesen, da steht Temp drin
Ar1(2) = 1wread(1) 'zweites Byte auslesen, wenn 00000000 dann pos vorzeichen, wenn 11111111 dann neg vorzeichen


Waitms 500
1wreset 'reset
1wwrite &H55 'Match Rom command
1wwrite Id2(1) , 8 'Id von Sensor 2
1wwrite &H44 'Convert T

Waitms 300 'warten bis convert T fertig ist
1wreset 'reset
1wwrite &H55 'match rom command
1wwrite Id2(1) , 8 'id von sensor 2
1wwrite &HBE 'scratchpad lesen
Ar2(1) = 1wread(1) 'erstes byte auslesen, da steht Temp drin
Ar2(2) = 1wread(1) 'zweites Byte auslesen, wenn 00000000 dann pos vorzeichen, wenn 11111111 dann neg vorzeichen

T1 = Ar1(1) / 2
T2 = Ar2(1) / 2


Locate 1 , 1

If Ar1(2) = 0 Then 'wenn byte 2 aus dem sensor = 0 dann temp pos, sonst neg
Lcd "Temperatur 1:" ; " " ; T1

Else
Lcd "Temperatur 1:" ; "-" ; T1

End If

Locate 2 , 1

If Ar2(2) = 0 Then 'wenn byte 2 aus dem sensor = 0 dann temp pos, sonst neg
Lcd "Temperatur 2:" ; " " ; T2

Else
Lcd "Temperatur 2:" ; "-" ; T2

End If

Locate 3 , 1
Lcd "ID 1:" ; Id1(1) ; Id1(2) ; Id1(3) ; Id1(4) ; Id1(5) ; Id1(6) ; Id1(7) ; Id1(8)

Locate 4 , 1
Lcd "ID 2:" ; Id2(1) ; Id2(2) ; Id2(3) ; Id2(4) ; Id2(5) ; Id2(6) ; Id2(7) ; Id2(8)

Waitms 500

Loop

Luppi
13.04.2006, 12:25
kann da keiner weiterhelfen? such mir schon nen Wolf das will einfach nicht klappen

mx3
13.04.2006, 21:27
Hi Luppi!

Ich benutze den Code ihr(Hab ihn vor einiger Zeit ihr im Forum gefunden)
Hab ihn gerade auf mein Board nochmal getestet und funkzt einwandfrei.

'************************************************* *********
'Compiler : BASCOM-AVR
'Hardware : DS1820 an PD.6
' LCD-Display
'Chip type : AT90S2313
'************************************************* *********

$regfile = "2313def.dat" 'AT90S2313
$crystal = 4000000 'Quarz 3.579MHz

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 Lcdpin = Pin , Db4 = Portd.0 , Db5 = Portd.1 , Db6 = Portd.2 , Db7 = Portd.3 , E = Portd.5 , Rs = Portd.4

Config Lcd = 16 * 2
Config 1wire = Portb.0 'DS1820 DQ an PB0

Cursor Off Noblink
Cls
Waitms 1000
Locate 1 , 1 : Lcd "Brutkasten"
Locate 2 , 1 : Lcd "T="
Do
Temperature
Waitms 250
Loop
End

'//////////////////////////////////////////////////////////////////////////////
Sub Temperature ' actual measuring
1wwrite &HCC : 1wwrite &H44 ' start measure
Waitms 300 ' 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


Probier mal nur einen DS1820 Sensor

Dieser Code für 0,5 Grad C ist klein,fein,gut
www.qsl.net/dg1xpz/elektronik/avr/ds1820.html

Gruß,MX3

Luppi
14.04.2006, 00:14
ich bekomm da immer nur -- angezeigt.

mx3
15.04.2006, 11:15
Hi!
Bei Anzeige -- wird der Sensor nicht erkannt(Sensor oder Atmel defekt?,fehlerhaft verdrahtet ,schlechte Kontakte meißtens bei Steckboards)

Bei Anzeige ** CRC Fehler(für 0.1 C Auflösung)
Bei Anzeige 85 Vcc + 5V fehlt(an Pin 3)

Bist du dir ganz sicher das alles richtig angeschlossen ist?
Die Pinbelegung des DS1820 im TO92 Gehäuse ist
BOTTOM VIEW also von UNTEN gesehen. Tausch mal Pin 1 mir Pin 3
4,7K Ohm PullUp Wiederstand dran?

Gruß,MX3

HP
21.04.2006, 16:43
Hallo Luppi
hatte das gleiche Problem, es wurde immer 127 Grad angezeigt, obwohl alles richtig angeschlossen war.
Nimm mal das Hilfsprogramm MY AVR Quick von deren Webseite, Starte mal die Verbindung ob dein Kontroller gefunden wird, dann setzt wenn du hast den externen Quarz aktiv.
Brenne dein Prog neu in den AVR danach hat´s bei mir funktioniert.

HP