kann da keiner weiterhelfen? such mir schon nen Wolf das will einfach nicht klappen
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
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
kann da keiner weiterhelfen? such mir schon nen Wolf das will einfach nicht klappen
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.
Probier mal nur einen DS1820 SensorCode:'********************************************************** '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
Dieser Code für 0,5 Grad C ist klein,fein,gut
www.qsl.net/dg1xpz/elektronik/avr/ds1820.html
Gruß,MX3
ich bekomm da immer nur -- angezeigt.
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
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
Lesezeichen