Kommentar: Einfügen von HTML im Kommentar: Link einfügen: <a href="LINKURL" target="_blank">LINKTITEL</a> Bild einfügen: <img src="BILDURL"> Text formatieren: <b>fetter Text</b> <i>kursiver Text</i> <u>unterstrichener Text</u> Kombinationen sind auch möglich z.B.: <b><i>fetter & kursiver Text</i></b> C Quellcode formatieren: <code>Quellcode</code> BASIC Quellcode formatieren: <basic>Quellcode</basic> (Innerhalb eines Quellcodeabschnitts ist kein html möglich.) Wichtig: Bitte mache Zeilenumbrüche, bevor Du am rechten Rand des Eingabefeldes ankommst ! -> I > > > Hallo, > > > weis bzw. hat jemand Democode (vorzugsweise in Basic) um mehrere one-Wire Temperaturfühler DS18S20 an einem Port auszulesen? > > > Das Demoprogram für einen Fühler funktioniert. > > > Die suche hier im Forum hat leider auch nicht wirklich geholfen. > > > > > > Viele Grüße und Danke im voraus > > > Sepp > > > > Hallo Sepp, > > > > hier ein paar Infos die ich mir hier aus dem forum kopiert habe: > > > > > > Meine Lösung (nach deinen Tip)hier. > > Funktioniert mit getesteten 5 Fühlern. > > > > Start Initialisierung > > OneWire_Reset(31) > > OneWire_Write(0xcc) 'SkipROM Messung für alle gleichzeitig starten > > OneWire_Write(0x44) 'Temperatur Messung im Byte 0/1 speichern > > > > Fühler 1 > > OneWire_Reset(31) > > OneWire_Write(0x55) 'MatchRom - Slave auswählen > > OneWire_Write(16) 'Code Bytes 0 'mein fühler > > OneWire_Write(21) 'Code Bytes 1 > > OneWire_Write(27) 'Code Bytes 2 > > OneWire_Write(221) 'Code Bytes 3 > > OneWire_Write(1) 'Code Bytes 4 > > OneWire_Write(8) 'Code Bytes 5 > > OneWire_Write(0) 'Code Bytes 6 > > OneWire_Write(6) 'Code Bytes 7 > > OneWire_Write(0xbe) 'Scrachpad lesen > > Fühler 2 > > usw. > > > > > > oder > > > > > > > > > > 1. Ausgabe eines OneWire_Reset > > > 2. Ausgabe OneWire_Write(0x55) (Match ROM) > > > 3. sequenzielle Ausgabe der 64 Bit als 8 Bytes mit: > > > OneWire_Write(Code Bytes 0) > > > OneWire_Write(Code Bytes 1) > > > ... > > > OneWire_Write(Code Bytes 7) > > > > > > 3. Gewünschten Befehl ausgeben mit > > > OneWire_Write(0xYY) > > > > > > Das funktioniert bei mir mit 6 Sensoren am Bus. > > > > > > > > > Grüße Jörg > > > > Hallo, > nachdem ich hier auch schon öfters für mich brauchbare Programteile gefunden habe stelle > ich nun auch etwas zur Verfügung. > Vielleicht hilft es ja dem Ein oder Anderem weiter. > > Das ganze 1-Wire Thema ist > <a href="http://pic-projekte.de/Download/1-Wire-Projekt-V1_3.pdf" target="_blank">hier</a> > sehr gut in deutsch erklärt. > > Der erste Teil liest die Romadresse des Temperatursensors DS18S20 bzw DS18B20 > und schreibt Diese in das Ausgabefenster. > > > > > <basic> > ' Auslesen der 64 Bit Romadresse von DS18S20 bzw DS18B20 > > 'Es darf nur 1 Fühler angeschlossen sein > > Dim Text(40) As Char > Dim ret,i As Integer > Dim Adressbyte As Byte 'einzelnes Byte der Romaddresse > Dim Sensorport As Byte 'Port an dem der Fühler sitzt > > > Sub main() > > Sensorport = 23 'Port C7 Portnummer 23(jeder freie Port ist möglich) > > ret = OneWire_Reset(Sensorport) 'Starten des Fühlers, > 'gibt 1 zurück falls ein > 'Fühler geantwortet hat > > > If ret = 0 Then > Text= "Kein Sensor gefunden" > Msg_WriteText(Text) > Goto Ende > End If > > > OneWire_Write(0x33) 'starten des auslesens der Romadresse > > For i = 0 To 7 > Adressbyte= OneWire_Read() 'die einzelnen 8 Bytes werden ausgelesen > Msg_WriteWord(Adressbyte) 'und in das Ausgabefenster geschrieben > Msg_WriteChar(13) 'neue Zeile > Next > > Msg_WriteChar(13) > > Lab Ende > > End Sub > > </basic> > > Die 8 ausgelesenen Adressbytes müssen im Program eintgetragen werden. > > <basic> > 'für Fühler DS18B20 Umrechnungsfaktor 0,06255 für DS18B20 0,5 > > Dim Text(40) As Char > Dim ret,i As Integer > Dim tempFuehler1 As Single > Dim tempFuehler2 As Single > Dim scratch_pad(9) As Byte > Dim Sensorport As Byte 'Port an dem der Fühler sitzt > 'jeder freie Port möglich > > Sub main() > Sensorport = 23 'Port A7 > ret = OneWire_Reset(Sensorport) 'starten aller Fühler, > > If ret = 0 Then > Text= "Kein Sensor gefunden" > Msg_WriteText(Text) > Goto Ende > End If > > OneWire_Write(0xcc) ' ROM überspringen Kommando > OneWire_Write(0x44) ' starte Temperaturmessung aller Fühler > > AbsDelay(3000) ' warten bis Temperatur im Sensor gemessen > ' und abgespeichert wird > > > > 'Auslesen Fühler 1 > > OneWire_Reset(Sensorport) ' starten aller Fühler > OneWire_Write(0x55) 'Fühler bereitmachen zum Empfang der Adressbytes > OneWire_Write(40) 'Adressbyte 0 von Fühler 1 hier die Bytes > OneWire_Write(191) 'Adressbyte 1 von Fühler 1 eintragen > OneWire_Write(234) ' usw > OneWire_Write(147) > OneWire_Write(3) > OneWire_Write(0) > OneWire_Write(0) > OneWire_Write(215) > OneWire_Write(0xbe) 'Befehl zum Scratchpad lesen > '(nur der angesprochene Fühler) > > > For i = 0 To 9 ' komplettes Scratchpad des angesprochenen > scratch_pad(i)= OneWire_Read() ' Fühlers lesen > Next > > Text = "Temperatur Fühler 1: " > Msg_WriteText(Text) > tempFuehler1 = (scratch_pad(1) * 256 + scratch_pad(0)) * 0.06255 > 'Umrechnugsfaktor DS18B20 > Msg_WriteFloat(tempFuehler1) > > Msg_WriteChar(13) > > > > 'Auslesen Fühler 2 > > OneWire_Reset(Sensorport) ' starten aller Fühler > OneWire_Write(0x55) 'Fühler bereitmachen zum Empfang der Adressbytes > OneWire_Write(40) 'Adressbyte 0 von Fühler 2 > OneWire_Write(67) 'Adressbyte 1 von Fühler 2 > OneWire_Write(233) ' usw > OneWire_Write(147) > OneWire_Write(3) > OneWire_Write(0) > OneWire_Write(0) > OneWire_Write(150) > OneWire_Write(0xbe) 'Befehl zum Scratchpad lesen > '(nur der angesprochene Fühler) > > > For i = 0 To 9 > scratch_pad(i)= OneWire_Read() > Next > > Text = "Temperatur Fühler 2 :" > Msg_WriteText(Text) > tempFuehler2 = (scratch_pad(1) * 256 + scratch_pad(0)) * 0.06255 > Msg_WriteFloat(tempFuehler2) > Msg_WriteChar(13) > > 'Auslesen Fühler 3 > 'usw > > Lab Ende > > End Sub > > </basic> > > MfG > Sepp