Re: mehrere DS18S20 Kategorie: Programmierung C (von Roland Kaiser - 28.12.2012 3:27) | ||
Als Antwort auf Re: mehrere DS18S20 von Sepp - 28.02.2012 20:46 | ||
| ||
> > > 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: } | ||
Antwort schreiben Antworten: |
Zur Übersicht - INFO - Neueste 50 Beiträge - Neuer Beitrag - Suchen - Zum C-Control-I-Forum - Zum C-Control-II-Forum