sorry Rofo88,
habe deine Antwort irgendwie übersehen! ABER es war / ist die Lösung!
@Eisbaeeer
also wenn ich die Zeit auf 800ms erhöhe, dann ließt er immer beide Sensoren gleich aus also beide haben die gleiche Temperatur
Tobias
da fällt mir auf, das da keine Zeiten drinn sind...
sorry Rofo88,
habe deine Antwort irgendwie übersehen! ABER es war / ist die Lösung!
@Eisbaeeer
also wenn ich die Zeit auf 800ms erhöhe, dann ließt er immer beide Sensoren gleich aus also beide haben die gleiche Temperatur
Tobias
So, nun noch mal zu den Kommastellen 0,5°C bzw 0,1°C - kann mir noch mal einer zeigen wie man das umrechnet bzw wo das hier im Forum steht?
hier noch mal mein Code, der nun mit 2 Sensoren funktioniert
Code:$regfile = "m8def.dat" $crystal = 4000000 $baud = 9600 Config 1wire = Portb.0 Dim T1 As single Dim T2 As Single Dim I As Byte Dim Id1(8) As Byte Dim Id2(8) As Byte Dim Ar1(2) As Byte Dim Ar2(2) As Byte Id1(1) = 1wsearchfirst() Id2(1) = 1wsearchnext() Do Print " " 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 If Ar1(2) = 0 Then 'wenn byte 2 aus dem sensor = 0 dann temp pos, sonst neg Print "Temperatur 1: " ; T1 ; "°C" Else Print "Temperatur 1: " "-" ; T1 ; "°C" End If If Ar2(2) = 0 Then 'wenn byte 2 aus dem sensor = 0 dann temp pos, sonst neg Print "Temperatur 2: " ; T2 ; "°C" Else Print "Temperatur 2: " "-" ; T2 ; "°C" End If Waitms 500 Loop
Dann stimmt noch was im Zeitlichen Ablauf nicht. Ich kann dir, wenn ich wieder zuhause bin, mein Script hier Posten. Wichtig ist das Timing. Das muss genau wie im Datenblatt ablaufen.Zitat von TobiasBlome
Wie hast du die Sensoren angeschlossen?
Als Parasite oder mit 3 Adern?
4,7K Pullupwiederstände?
Hier noch der Link für die 0,1 Grad Auflösung:
https://www.roboternetz.de/phpBB2/viewtopic.php?t=8555
Viele Grüße Eisbaeeer
Also ich habe 2 Sensoren paralell - 3 Adern mit 4,7k Widerstand
die 0,1Gradlösung ist für nur einen Sensor...aber da muss er ja auch irgendwo umrechnenich guck mir das mal an.
Tobias
Also der erste Unterschied ist schon mal, dass ich nur die ersten beiden Bytes auslese und nicht 9!
ich glaube das ist diese Rechnung
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 / 2
Temp = Bd(- Bd(7)
Temp = Temp / Bd(![]()
Temp = T + Temp
Temp = Temp - 0.25
End If
toll diese Smilys
Code: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 / 2 Temp = Bd(8) - Bd(7) Temp = Temp / Bd(8) Temp = T + Temp Temp = Temp - 0.25 End If
Du kommst der Sache näher. Ich empfehle dir dringend, das Datenblatt zu studieren. Es ist z.B. möglich, an alle Sensoren den Befehl zu schicken, eine Temperaturmessung durchzuführen. Anschließend kannst du dann einen nach dem anderen auslesen. Damit sparst du dir schon mal 750ms pro Sensor.Zitat von TobiasBlome
Weiterhin ist ein "parasite" Modus möglich. 2 Drähte reichen aus. Und einiges mehr.
Grüße Eisbaeeer
klingt gut - aber erst mal langsam an die Messung, und dann die Optimierung
Also ich habe 2 Sensoren und die kann ich mit 0,5°C Genauigkeit auslesen - aber das mit der Umrechnung auf 0,1°C macht mir echt zu schaffen![]()
kann mir da vielleicht jemand unter die Arme greifen?
Tobias
so, also ich hbe jetzt mal das zusammen kopierte programm von der 1. Seite benutzt. Leider bekomme ich keine Werte...
Ich bekomme erst einen Wert sobald ich eine Temperaturänderung habe. Also einmal gegenpusten und schon wird die Temperatur angezeigt. Warum ist das so?
ich habe nur einen anderen µC statt mega 32 einen mega 8 und statt 16MHz 4 MHz oder bringe ich ihn damit durcheinander?
Tobias
Code:$regfile = "m8def.dat" $crystal = 4000000 $baud = 9600 Config 1wire = Portb.0 Dim T As Integer Dim T1 As Integer Dim T2 As Integer Dim T3 As Integer Dim T4 As String * 10 Dim T5 As String * 10 Dim T6 As Single Dim T7 As Single Dim Id1(8) As Byte Dim Id2(8) As Byte Dim Ar1(9) As Byte Dim Ar2(9) As Byte Dim I As Byte , Tmp As Byte , Tmp2 As Byte Dim Crc As Byte Declare Sub Crcit Declare Sub Crcit2 Id1(1) = 1wsearchfirst() Id2(1) = 1wsearchnext() Do Print " " 1wreset 1wwrite &H55 1wwrite Id1(1) , 8 1wwrite &H44 Waitms 300 1wreset 1wwrite &H55 1wwrite Id1(1) , 8 1wwrite &HBE Ar1(1) = 1wread(9) 1wreset Crcit If Crc = 0 Then Tmp = Ar1(1) And 1 If Tmp = 1 Then Decr Ar1(1) T = Makeint(ar1(1) , Ar1(2)) T = T * 50 T = T - 25 T1 = Ar1(8) - Ar1(7) T1 = T1 * 100 T1 = T1 / Ar1(8) T = T + T1 T = T / 10 T6 = T / 10 T4 = Fusing(t6 , "#.#") End If Waitms 500 1wreset 1wwrite &H55 1wwrite Id2(1) , 8 1wwrite &H44 Waitms 300 1wreset 1wwrite &H55 1wwrite Id2(1) , 8 1wwrite &HBE Ar2(1) = 1wread(9) 1wreset Crcit2 If Crc = 0 Then Tmp2 = Ar2(1) And 1 If Tmp2 = 1 Then Decr Ar2(1) T2 = Makeint(ar2(1) , Ar2(2)) T2 = T2 * 50 T2 = T2 - 25 T3 = Ar2(8) - Ar2(7) T3 = T3 * 100 T3 = T3 / Ar2(8) T2 = T2 + T3 T2 = T2 / 10 T7 = T2 / 10 T5 = Fusing(t7 , "#.#") End If Print "Temperatur T4: " ; T4 ; "°C" Print "Temperatur T5: " ; T5 ; "°C" Waitms 500 Loop Sub Crcit Crc = 0 For I = 1 To 9 Tmp = Crc Xor Ar1(i) Crc = Lookup(tmp , Crc8) Next End Sub Sub Crcit2 Crc = 0 For I = 1 To 9 Tmp2 = Crc Xor Ar2(i) Crc = Lookup(tmp2 , 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 , 21 , 75 , 169
Lesezeichen