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 Jörg, > > dank Deiner Hilfe und den ausführlichen Erklärungen zum 1-wire Bus auf dieser Seite > > pic-projekte.de/Download/1-Wire-Projekt-V1_3.pdf > > läuft das Ganze jetzt. > > > > Viele Grüsse > > > > Sepp > > Hallo Jörg, > > endlich, nach einiger Tage suchen hab ich mit Hilfe Deiner Tips > meine 3 DS18S20 auch zum laifen gebracht > > Gruß > > Roland > > hier mein Code: > > > /******************************************************************************* > > Projekt Name: DS18S20.cprj > Benötigte Libs's: IntFunc_lib.cc > Dateien: DS18S20.cc > Autor: OE2ROL > Datum: 28.12.2012 > Funktion: Demonstriert OneWire Funktionen > > ------------------------------------------------------------------------------ > > Notiz: > Es werden mehrere DS18S20 Temperatursensor am PortBit F7 ausgelesen > > *******************************************************************************/ > > > /*------------------------------------------------------------------------------ > Name: main > Eingang: - > Ausgang: - > Beschreibung: Auslesen der Sensoren > ------------------------------------------------------------------------------*/ > void main(void) > { > char text[40]; > byte ret, i, temp; > byte scratch_pad[9]; > > ret= OneWire_Reset(47); > if(ret == 0) > { > text= "Kein Sensor gefunden"; > Msg_WriteText(text); > goto end; > } > > OneWire_Reset(47); //zurücksetzen aller Fühler an PortF.7 > OneWire_Write(0xcc); //SkipROM Messung für alle gleichzeitig starten > OneWire_Write(0x44); //starte Temperatur Messung aller Fühler im Byte 0/1 speichern > AbsDelay(1000); //1000ms warten > OneWire_Reset(47); //zurücksetzen aller Fühler an PortF.7 > OneWire_Write(0x55); //Slave auswählen zum Empfang der Adressbytes > > OneWire_Write(0x10); //Adressbyte 0 von Fühler 1 hier die Bytes > OneWire_Write(0x83); //Adressbyte 1 von Fühler 1 eintragen > OneWire_Write(0xf8); // usw > OneWire_Write(0x87); > OneWire_Write(0x02); > OneWire_Write(0x08); > OneWire_Write(0x00); > OneWire_Write(0xb6); > > OneWire_Write(0xbe); //Befehl zum Scratchpad lesen (nur der angesprochene Fühler) > > for(i=0;i<9;i++) //komplettes scratchpad des angssprochenen Fühlers lesen > { > scratch_pad[i]= OneWire_Read(); > Msg_WriteHex(scratch_pad[i]); //gelesene Werte bitweise ausgeben > Msg_WriteChar(','); //zwischen die ausgegebenen werte ein , einfügen > } > Msg_WriteChar('\r'); //Zeilenumbruch einfügen > > text= "Temperatur: "; //Variable text befüllen > Msg_WriteText(text); //Variable text ausgeben > > temp= scratch_pad[1]*256 + scratch_pad[0];//Temp berechnen > Msg_WriteFloat(temp *0.5); //Temp berechnen > Msg_WriteChar('°'); //Zeichen ° einfügen > Msg_WriteChar('C'); //Zeichen C einfügen > Msg_WriteChar('\r'); //Zeilenumbruch einfügen > > > > OneWire_Reset(47); // zurücksetzen aller Fühler an PortF.7 > > OneWire_Write(0x55); // Match ROM Kommando > > OneWire_Write(0x10); //Adressbyte 0 von Fühler 2 hier die Bytes > OneWire_Write(0x9a); //Adressbyte 1 von Fühler 2 eintragen > OneWire_Write(0x01); // usw > OneWire_Write(0x88); > OneWire_Write(0x02); > OneWire_Write(0x08); > OneWire_Write(0x00); > OneWire_Write(0xb4); > > OneWire_Write(0xbe); // lese scratch_pad Kommando > for(i=0;i<9;i++) // komplettes scratchpad lesen > { > scratch_pad[i]= OneWire_Read(); > Msg_WriteHex(scratch_pad[i]); > Msg_WriteChar(','); > } > Msg_WriteChar('\r'); > > text= "Temperatur: "; > Msg_WriteText(text); > > temp= scratch_pad[1]*256 + scratch_pad[0]; > Msg_WriteFloat(temp *0.5); > Msg_WriteChar('°'); > Msg_WriteChar('C'); > Msg_WriteChar('\r'); > > > OneWire_Reset(47); // zurücksetzen aller Fühler an PortF.7 > > OneWire_Write(0x55); // Match ROM Kommando > > OneWire_Write(0x10); //Adressbyte 0 von Fühler 3 hier die Bytes > OneWire_Write(0x18); //Adressbyte 1 von Fühler 3 eintragen > OneWire_Write(0x08); // usw > OneWire_Write(0x88); > OneWire_Write(0x02); > OneWire_Write(0x08); > OneWire_Write(0x00); > OneWire_Write(0xc3); > > OneWire_Write(0xbe); // lese scratch_pad Kommando > for(i=0;i<9;i++) // komplettes scratchpad lesen > { > scratch_pad[i]= OneWire_Read(); > Msg_WriteHex(scratch_pad[i]); > Msg_WriteChar(','); > } > Msg_WriteChar('\r'); > > text= "Temperatur: "; > Msg_WriteText(text); > > temp= scratch_pad[1]*256 + scratch_pad[0]; > Msg_WriteFloat(temp *0.5); > Msg_WriteChar('°'); > Msg_WriteChar('C'); > Msg_WriteChar('\r'); > end: > }