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 Basic (von Sepp - 29.02.2012 19:38)
Als Antwort auf Re: mehrere DS18S20 von Joerg - 27.02.2012 10:49

> > 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
hier
sehr gut in deutsch erklärt.

Der erste Teil liest die Romadresse des Temperatursensors  DS18S20 bzw DS18B20
und schreibt Diese in das Ausgabefenster.





' 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



Die 8 ausgelesenen Adressbytes müssen  im Program eintgetragen werden.


'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



MfG  
Sepp


    Antwort schreiben


Antworten: