hast du ICQ? da könnte ich mal nen paar sachen besprechen und dann hinterher den code hier reinstellen...
meine numma iss: 196004120
Hallo Ich habe mal wieder eine Frage...
Vielleicht hat von Euch ja schon jemand Erfahrungen mit mehreren Dallas Temperatursensoren an einem Bus. Bisher habe ich mich mal anhand des Datenblatts und einem Beispiel von der MCS Site reingearbeitet.
Das Beispiel habe ich für 0.1 Grad genauigkeit und Ausgabe auf einem LCD modifiziert. Funktioniert wunderbar.
Dies ist für einen Sensor. Nur würde ich gerne mehrere Sensoren auswerten und jedem in sein eeprom eine Nummer für die Messstelle zuordnen um den jeweiligen angesprochen zu identifizieren. Momentan stehe ich da noch etwas ratlos da, wie das gehen soll.Code:' ---------------------------------------------------------------- ' Example measuring temperature using Dallas DS1820, ' with calculated for 0.1 C resolution and with 8-bit CRC! ' Bascom 8051 AN ' ---------------------------------------------------------------- '------------------------------------------------------------------------------- 'Anschluß der iButtons an Portd.3 am AT90S8515 Board 'GND Schirm 'DQ Weiß 'Vdd braun '------------------------------------------------------------------------------- $regfile = "8515DEF.DAT" $crystal = 4000000 Config Lcdpin = Pin , Db4 = Porta.3 , Db5 = Porta.4 , Db6 = Porta.5 , Db7 = Porta.6 , E = Porta.2 , Rs = Porta.0 '******************************************************************************* Config Lcd = 16 * 2 'configure lcd screen Config 1wire = Portd.3 ' DS1820 on pin 12 (pull up) 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 , Temp As Single Dim V As Byte Cls 'clear the LCD display Lcd " ITG 2005" 'display this at the top line Waitms 5 Lowerline 'select the lower line Waitms 5 Lcd " Temp. Messung " 'display this at the lower line Wait 5 Deflcdchar 0 , 6 , 9 , 9 , 6 , 32 , 32 , 32 , 32 ' replace ? with number (0-7) Cursor Off Noblink Cls Locate 1 , 1 : Lcd "DEMO f" ; Chr(245) ; "r DS1820" Locate 2 , 1 : Lcd "Temp.=" 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 , 8 : Lcd " -- " ' we put "-- " on LCD Else If Crc = 0 Then ' sensor present, check CRC Locate 2 , 8 : Lcd Fusing(temp , "#.##") ; Chr(0) ; "C" ' CRC OK, print T*10 on LCD Else Locate 2 , 8 : 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 / 2 Temp = Bd(8) - Bd(7) Temp = Temp / Bd(8) Temp = T + Temp Temp = Temp - 0.25 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 , 53
Bin auf Eure Ideen und Tipps gespannt.
Gruß
Sven
edit: Schreibfehler in Titel korrigiert
edit: Bitte verwende die Code-Tokens (übersichtlicher)
hast du ICQ? da könnte ich mal nen paar sachen besprechen und dann hinterher den code hier reinstellen...
meine numma iss: 196004120
Linus Torvalds, Entwickler von LinuxIch will Microsoft wirklich nicht zerstören. Das wird nur ein gänzlich unbeabsichtigter Nebeneffekt sein.
Hoi!
Japp habe dich autorisiert. Werde vermutlich morgen abend mal on sein.
Gruß
Sven
Hi,
ich hol den Thread mal wieder aus der versenkung.
Hat jemand von euch inzwischen das Auslesen von mehreren Ds1820 hinbekommen?
Ein Sensor ist kein Problem, aber bei zwei bekomm ich das irgendwie nichtmehr hin! Achja, der Sensor ist über drei Leitungen angeschlossen, also nicht im parasite modus!
Hier mal mein Code:
Code:$regfile = "m8def.dat" $crystal = 8000000 $baud = 9600 Config 1wire = Portb.0 Config Lcd = 40 * 4 Config Lcdpin = Pin , Rs = Portb.6 , Db4 = Portb.7 , Db5 = Portd.5 , Db6 = Portd.6 , Db7 = Portd.7 , E = Portb.1 , E2 = Portb.2 Dim ___lcdno As Bit Dim T1 As Byte Dim T2 As Byte Dim I As Byte Dim Id1 As Word Dim Id2 As Word Dim Ar1(2) As Byte Dim Ar2(2) As Byte ___lcdno = 0 Initlcd Cursor Off Cls ___lcdno = 1 Initlcd Cursor Off Cls Id1 = 1wsearchfirst() Id2 = 1wsearchnext() Do 1wreset 'reset 1wwrite &H55 'Match Rom command 1wwrite Id1 '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 '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 1wreset 'reset 1wwrite &H55 'Match Rom command 1wwrite Id2 '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 '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 ___lcdno = 0 Upperline Lcd "Temperatur 1:" ; Ar1(2) ; " " ; Ar1(1) Lowerline Lcd "Temperatur 2:" ; Ar2(2) ; " " ; Ar2(1) ___lcdno = 1 Upperline Lcd "ID 1:" ; Id1 Lowerline Lcd "ID 2:" ; Id2 Loop
Ich bekomme immer als wert für das erste Byte 255 und für das zweite auch 255, das kann ja nicht stimmen.
MfG
Florian
Hallo avrflo,
Dein Fehler liegt in der Deklaration von ID1 und ID2. Der DS18S20 besitzt eine Adresse die aus 8 Bytes besteht. Da Du nur ein WORD definiert hast, werden die DS18S20 nie richtig adressiert.
Ich würde ID folgendermassen definieren:
Wenn alles klappt, kannst Du den Code ja mal hier reinstellen.Code:DIM ID1(8) as Byte DIM ID2(8) as Byte ... ID1(1) = 1wsearchfirst() usw.
mfg
AVRWALLI
Hallo AVRWALLI,
danke für den Tipp, man sollte das Datasheet halt genau lesen, jetzt klappts!
Hab nurnoch ein kleines Problem:
Ich bekomm ne Temperatur von 52°C raus, es ist zwar grad richtig heiß, aber 52 hats wohl doch nicht ganz, die Hälfte würde stimmen. Ist das irgandwie in nem anderen Datenformat codiert oder so?, ich versteh da das Datasheet auf S.3 net so ganz.
Datasheet:
http://pdfserv.maxim-ic.com/en/ds/DS1820-DS1820S.pdf
Achja, hier mein Code, ich werd, wenn er komplett fertig ist nen neuen Beitrag aufmachen, wo dann der Code von der kompletten Wetterstation mit RTC, zwei Temp Sensoren und nem Drucksensor als Barometer drin ist.
Hier also meine Code:
GrußCode:$regfile = "m8def.dat" $crystal = 8000000 $baud = 9600 Config 1wire = Portb.0 Config Lcd = 40 * 4 Config Lcdpin = Pin , Rs = Portb.6 , Db4 = Portb.7 , Db5 = Portd.5 , Db6 = Portd.6 , Db7 = Portd.7 , E = Portb.1 , E2 = Portb.2 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 ___lcdno = 0 Initlcd Cursor Off Cls ___lcdno = 1 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) T2 = Ar2(1) ___lcdno = 0 Upperline 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 Lowerline 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 ___lcdno = 1 Upperline Lcd "ID 1:" ; Id1(1) ; Id1(2) ; Id1(3) ; Id1(4) ; Id1(5) ; Id1(6) ; Id1(7) ; Id1(8) Lowerline Lcd "ID 2:" ; Id2(1) ; Id2(2) ; Id2(3) ; Id2(4) ; Id2(5) ; Id2(6) ; Id2(7) ; Id2(8) Waitms 500 Loop
Florian
Hallo Florian,
so lese ich den DS18S20 aus und rechne um:
In Grad steht die umgerechnete Temperatur. Störe Dich nicht an de Parametern hinter den 1Wire-Befehlen, die geben nur an welcher Port und welcher Pin benutzt werden soll. Denke daran, es müssen 9 Byte ausgelesen werden.Code:Sub 18s20_auslesen 1wreset Pinc , F ' Reset 1wwrite Skip_rom , 1 , Pinc , F ' Chip ansprechen 1wwrite Read_ram , 1 , Pinc , F ' Befehl zum Auslesen des Rams Bd(1) = 1wread(9 , Pinc , F) ' 9 Bytes lesen 1wreset Pinc , F ' Reset Temp = Bd(2) Shift Temp , Left , 8 Temp = Temp + Bd(1) If Temp > $f000 Then Temp = $ffff - Temp Temp1 = Temp + 1 Grad = Temp1 * -0.0625 Else Grad = Temp * 0.0625 ' Auflösung 12 Bit End If End Sub
Ich hoffe, es hilft Dir weiter.
mfg
AVRWALLI
Hallo,
ich habe es inzwischen auch hinbekommen, im Datasheet steht ja, dass die ausgeleseneTemperatur durch zwei geteilt werden muss. Ich lese nur die ersten zwei Bytes aus, das reicht ja, ich mache auch keine CRC Prüfung oder so, mir reichen 0,5° Genauigkeit. Im ersten Byte steht ja die Temp und im zweiten das Vorzeichen, mehr brauch ich nicht und es funktioniert auch so.
Hier also mein endgültiger Code:
Gruß und DankeCode:$regfile = "m8def.dat" $crystal = 8000000 $baud = 9600 Config 1wire = Portb.0 Config Lcd = 40 * 4 Config Lcdpin = Pin , Rs = Portb.6 , Db4 = Portb.7 , Db5 = Portd.5 , Db6 = Portd.6 , Db7 = Portd.7 , E = Portb.1 , E2 = Portb.2 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 ___lcdno = 0 Initlcd Cursor Off Cls ___lcdno = 1 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 ___lcdno = 0 Upperline 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 Lowerline 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 ___lcdno = 1 Upperline Lcd "ID 1:" ; Id1(1) ; Id1(2) ; Id1(3) ; Id1(4) ; Id1(5) ; Id1(6) ; Id1(7) ; Id1(8) Lowerline Lcd "ID 2:" ; Id2(1) ; Id2(2) ; Id2(3) ; Id2(4) ; Id2(5) ; Id2(6) ; Id2(7) ; Id2(8) Waitms 500 Loop
Florian
Ich weiß, der Thread ist schon sehr alt.
Die 2 Code's hier sind ja echt wunderbar =D>
Habe diese nur noch mal zusammengefasst und auf eine Kommastelle gebracht.
Also 2 DS1820 mit 0,1 Grad Auflösung.
Wen es interessiert:
Code:$regfile = "m32def.dat" $framesize = 32 $swstack = 256 $hwstack = 128 $crystal = 16000000 $baud = 9600 Config 1wire = Portd.6 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 in der Botwanne:" ; " " ; T4 ; " " ; "Grad Celsius" Print "Temperatur am Gehäuse:" ; " " ; " " ; T5 ; " " ; "Grad Celsius" 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
Hallo Reeper,
du scheinst dich gut auszukennen, darum zwei Fragen (gilt natürlich auch für andere, die mir dabei helfen können) :
Die Temperstursensoren (TS) werden ja mit 1wsearchfirst und 1wsearchnext angesprochen. Wird dann der erste in der Leitung als 1 erkannt, oder ist der mit der niedrigsten Seriennummer der erste ?
Gibt es eine Möglichkeit, daß Bascom selber erkennt wieviele TS angeschlossen sind und diese dann ausgibt (also TS1 ... TSn) und wenn ja, wie würde diese aussehen ?
Ich bräuchte das Prog für 10 Sensoren und das ganze zig mal zu kopieren und ewig viele Variablen du dimensionieren erscheint mir etwas irrwitzig.
Rein pragmatisch würde ich mal nach allen in der Leitung suchen lassen und diese durch eine Schleife dann nacheinander 'abklappern'.
Ok, vielleicht geht's auch nicht anders aber dazu habe ich nun doch zu wenig Ahnung. So weit bin ich mit meinen Mega32 Kenntnissen noch nicht.
Gruß, Berni.
www.befi-tec.de
Lesezeichen