Zur Übersicht - INFO - Neueste 50 Beiträge - Neuer Beitrag - Suchen - Zum C-Control-I-Forum - Zum C-Control-II-Forum

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
Ich nutze:
C-Control Pro Mega128
> > > 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: