Aus RN-Wissen.de
Wechseln zu: Navigation, Suche
Rasenmaehroboter Test

(Neu)
 
 
(6 dazwischenliegende Versionen von 5 Benutzern werden nicht angezeigt)
Zeile 1: Zeile 1:
In diesem Artikel folgen einige Programmbeispiele, in denen gezeigt wird wie Bascom über den 1-Wire-Bus kommuniziert.
+
In diesem Artikel folgen einige Programmbeispiele, in denen gezeigt wird, wie Bascom über den 1-Wire-Bus kommuniziert.
  
 
1-Wire (Eindraht) ist eine serielle Schnittstelle, die mit nur einer Datenleitung auskommt, die gleichzeitig auch noch als Stromversorgung genutzt werden kann.
 
1-Wire (Eindraht) ist eine serielle Schnittstelle, die mit nur einer Datenleitung auskommt, die gleichzeitig auch noch als Stromversorgung genutzt werden kann.
Zeile 6: Zeile 6:
 
In Bascom sind [[Bascom#1WIRE_Bus|Befehle]] für die 1-Wire-Kommunikation enthalten, sodass der Programmierer sich nicht um das Protokoll und das Timing der Übertragung kümmern muss.
 
In Bascom sind [[Bascom#1WIRE_Bus|Befehle]] für die 1-Wire-Kommunikation enthalten, sodass der Programmierer sich nicht um das Protokoll und das Timing der Übertragung kümmern muss.
  
Es gibt 1-Wire-Geräte mit verschiedenen Funktionen, in der Roboterwelt dürfte einer der bekanntesten der Temperatursensor DS18S20 (bzw. DS18B20) sein, deswegen wird dieser in den Beipielen verwendet.
+
Es gibt 1-Wire-Geräte mit verschiedenen Funktionen, in der Roboterwelt dürfte einer der bekanntesten der Temperatursensor DS18S20 (bzw. DS18B20) sein, deswegen wird dieser in den Beispielen verwendet.
  
  
Zeile 36: Zeile 36:
 
  Config 1wire = Portc.7  
 
  Config 1wire = Portc.7  
 
   
 
   
  Dim Sp(9) As Byte
+
  Dim Sep(9) As Byte
 
   
 
   
 
  1wreset                                        {{vbcomment|Initialisierung}}
 
  1wreset                                        {{vbcomment|Initialisierung}}
Zeile 47: Zeile 47:
 
  1wwrite &HCC                                    {{vbcomment|überspringe ROM-Befehl}}
 
  1wwrite &HCC                                    {{vbcomment|überspringe ROM-Befehl}}
 
  1wwrite &HBE                                    {{vbcomment|Temperatur auslesen}}
 
  1wwrite &HBE                                    {{vbcomment|Temperatur auslesen}}
  Sp(1) = 1wread(9)                              {{vbcomment|Daten in ein Array lesen}}
+
  Sep(1) = 1wread(9)                              {{vbcomment|Daten in ein Array lesen, beschreibt Sep(1) bis Sep(9)}}
 
   
 
   
 
  Wait 1
 
  Wait 1
  
Im Array Sp() stehen die Daten des Gerätes die dann Anhand des Datenblattes ausgewertet werden.
+
Im Array Sep() stehen die Daten des Gerätes die dann Anhand des Datenblattes ausgewertet werden.
  
  
Zeile 58: Zeile 58:
 
Wenn sich mehrere Geräte am 1-Wire-Bus befinden, müssen diese jeweils Adressiert werden um mit dem gewünschten Gerät in Kontakt zu treten. Zum Adressieren wird die Seriennummer verwendet, die in jedem 1-Wire-Gerät eindeutig vorhanden ist. Um an diese Seriennummer zu kommen gibt es zwei Strategien.
 
Wenn sich mehrere Geräte am 1-Wire-Bus befinden, müssen diese jeweils Adressiert werden um mit dem gewünschten Gerät in Kontakt zu treten. Zum Adressieren wird die Seriennummer verwendet, die in jedem 1-Wire-Gerät eindeutig vorhanden ist. Um an diese Seriennummer zu kommen gibt es zwei Strategien.
  
Entweder man liest bei allen Geräten vorher einzeln diese Nr. aus, um diese in das eigentliche Programm einzutragen (kürzer), oder man sucht beim Programmstart jedesmal nach vorhandenen Geräten (flexibler).
+
Entweder man liest bei allen Geräten vorher einzeln diese Nr. aus, um diese in das eigentliche Programm einzutragen (kürzer), oder man sucht beim Programmstart jedesmal nach vorhandenen Geräten (flexibler).
  
  
Zeile 68: Zeile 68:
 
   
 
   
 
  1wreset
 
  1wreset
  1wwrite &H33                                           {{vbcomment|ROM-Befehl zum lesen der SerienNr}}
+
  1wwrite &H33                                       {{vbcomment|ROM-Befehl zum lesen der SerienNr}}
  Ar(1) = 1wread(8)                                       {{vbcomment|8 Bytes lesen}}
+
  Ar(1) = 1wread(8)                                   {{vbcomment|8 Bytes lesen, beschreibt Ar(1) bis Ar(8)}}
 
   
 
   
 
  For I = 1 To 8
 
  For I = 1 To 8
     Print Hex(ar(i));                                   {{vbcomment|Ausgeben}}
+
     Print Hex(ar(i));                               {{vbcomment|Ausgeben}}
 
     Print " ";
 
     Print " ";
 
  Next
 
  Next
Zeile 91: Zeile 91:
 
  Config 1wire = Portc.7
 
  Config 1wire = Portc.7
 
   
 
   
  Dim Ar(8) As Byte                                           {{vbcomment|Array für SerienNr.}}
+
  Dim Ar(8) As Byte                                   {{vbcomment|Array für SerienNr.}}
 
  Dim I As Byte
 
  Dim I As Byte
 
  Dim W As Word
 
  Dim W As Word
 
   
 
   
  Sound Portd.7 , 400 , 450                                   {{vbcomment|BEEP bei RN-Control}}
+
  Sound Portd.7 , 400 , 450                           {{vbcomment|BEEP bei RN-Control}}
 
   
 
   
 
  Print
 
  Print
Zeile 102: Zeile 102:
 
  Wait 1
 
  Wait 1
 
   
 
   
  Ar(1) = 1wsearchfirst()
+
  Ar(1) = 1wsearchfirst()                           {{vbcomment|8 Bytes lesen, beschreibt Ar(1) bis Ar(8)}}
 
   
 
   
  {{vbcomment|gibts überhaupt ein Gerät}}
+
  {{vbcomment|gibts überhaupt ein Gerät}}
 
  If Err = 0 Then
 
  If Err = 0 Then
    For I = 1 To 8
 
        Print Hex(ar(i));                                  {{vbcomment|Ausgabe der ersten SerienNr.}}
 
        Print " ";
 
    Next
 
    Print
 
 
   
 
   
 
     Do
 
     Do
         {{vbcomment|Nach weiteren Geräte suchen}}
+
         {{vbcomment|Ausgabe der SerienNr.}}
         Ar(1) = 1wsearchnext()
+
         For I = 1 To 8
        {{vbcomment|war noch ein weiteres Gerät da}}
+
            Print Hex(ar(i));
        If Err = 0 Then
+
            Print " ";
            For I = 1 To 8
+
        Next
                Print Hex(ar(i));                           {{vbcomment|Ausgabe der letzten SerienNr.}}
+
        Print
                Print " ";
+
            Next
+
            Print
+
 
   
 
   
         End If
+
         {{vbcomment|Nach weiterem Gerät suchen}}
 +
        Ar(1) = 1wsearchnext()                  {{vbcomment| Seriennummer vom ächste Sensor, beschreibt Ar(1) bis Ar(8)}}
 
   
 
   
     Loop Until Err = 1                         {{vbcomment|solange bis sich kein weiteres Gerät mehr meldet.}}
+
     Loop Until Err = 1                       {{vbcomment|solange bis sich kein weiteres Gerät mehr meldet.}}
 
   
 
   
 
  End If
 
  End If
Zeile 131: Zeile 124:
 
  Print "Fertig"
 
  Print "Fertig"
 
   
 
   
  W = 1wirecount()                                {{vbcomment|Anzahl der gefundenen Geräte zählen}}
+
  W = 1wirecount()                                {{vbcomment|Anzahl der gefundenen Geräte zählen}}
 
   
 
   
 
  Print "Anzahl ";
 
  Print "Anzahl ";
Zeile 141: Zeile 134:
 
  End
 
  End
  
Am ersten Byte der SerienNr ist zu erkennen um welches Gerät es sich handelt, beim DS18B20 ist es die &H28.
+
Am ersten Byte der SerienNr (Family-Code) ist zu erkennen um welches Gerät es sich handelt, beim DS18B20 ist es die &H28, beim DS18S20 die &H10. Da beide unterschiedliche Formate beim Temperaturwert haben, kann die Berechnung anhand des Family-Code angepasst werden.
  
  
 
=== Bestimmtes Gerät ansprechen ===
 
=== Bestimmtes Gerät ansprechen ===
  
Um bei mehreren vorhandenen Geräten ein bestimmtes anzusprechen muss es mit der SerienNr adressiert werden.
+
Um bei mehreren vorhandenen Geräten ein bestimmtes anzusprechen muss es mit der SerienNr adressiert werden.
  
 
  Do
 
  Do
     1wverify Ar(1)                                     {{vbcomment|Gerät mit der SerienNr. aus Ar() auswählen}}
+
     1wverify Ar(1)                                 {{vbcomment|Gerät mit der SerienNr. aus Ar() auswählen}}
 
     {{vbcomment|Gerät vorhanden}}
 
     {{vbcomment|Gerät vorhanden}}
 
     If Err = 0 Then
 
     If Err = 0 Then
 
   
 
   
         1wwrite &H44                                   {{vbcomment|Temperaturmessung anstoßen}}
+
         1wwrite &H44                               {{vbcomment|Temperaturmessung anstoßen}}
 
   
 
   
         Waitms 500                                     {{vbcomment|warten bis Messung fertig}}
+
         Waitms 500                                 {{vbcomment|warten bis Messung fertig}}
 
   
 
   
         1wverify Ar(1)                                 {{vbcomment|Gerät mit der SerienNr. aus Ar() auswählen}}
+
         1wverify Ar(1)                             {{vbcomment|Gerät mit der SerienNr. aus Ar(1)...Ar(8) auswählen}}
         1wwrite &HBE                                   {{vbcomment|Temperatur auslesen}}
+
         1wwrite &HBE                               {{vbcomment|Temperatur auslesen}}
         Sp(1) = 1wread(9)                             {{vbcomment|Daten in ein Array lesen}}
+
         Sep(1) = 1wread(9)                         {{vbcomment|Daten in ein Array lesen, beschreibt Sep(1) bis Sep(9)}}
 
   
 
   
 
         For I = 1 To 9
 
         For I = 1 To 9
             Print Hex(sp(i));
+
             Print Hex(sep(i));
 
         Next
 
         Next
 
         Print
 
         Print
 
   
 
   
 
         {{vbcomment|Nur für die Temperatur wichtige Daten ausgeben}}
 
         {{vbcomment|Nur für die Temperatur wichtige Daten ausgeben}}
         Print Hex(sp(2));
+
         Print Hex(sep(2));
         Print Hex(sp(1))
+
         Print Hex(sep(1))
+
        {{vbcomment| High und Low-Byte, nach Datenblatt zusammen setzen und berechnen...}}
 
     Else
 
     Else
 
         Print "Fehler"
 
         Print "Fehler"
Zeile 178: Zeile 171:
 
  Loop
 
  Loop
  
Die SerienNr. des gewünschten Gerätes muss im Array Ar() stehen, bevor es mit <tt>1wverify</tt> gesucht wird, dies ist auch gleichzeitig der ROM-Befehl, diesem kann der Memory-Befehl folgen, und anschließend die Daten übertragen werden.
+
Die SerienNr. des gew&uuml;nschten Ger&auml;tes muss im Array Ar() stehen, bevor es mit <tt>1wverify</tt> gesucht wird, dies ist auch gleichzeitig der ROM-Befehl, diesem kann der Memory-Befehl folgen, und anschlie&szlig;end die Daten übertragen werden.
  
  
 
== Prüfsumme ==
 
== Prüfsumme ==
  
Da wegen der einen Datenleitung durchaus mit Störungen zu rechnen ist, wird jeder Übertragung ein Prüfbyte angehängt, mit dem sich die Korrektheit der Daten überprüfen lässt.
+
Da wegen der einen Datenleitung durchaus mit St&ouml;rungen zu rechnen ist, wird jeder &Uuml;bertragung ein Pr&uuml;fbyte angehängt, mit dem sich die Korrektheit der Daten überpr&uuml;fen lässt.
 
+
  
 
  Config 1wire = Portc.7
 
  Config 1wire = Portc.7
 
   
 
   
  Dim Ar(8) As Byte                                           {{vbcomment|Array für SerienNr}}
+
  Dim Ar(8) As Byte                                   {{vbcomment|Array für SerienNr}}
 
  Dim I As Byte
 
  Dim I As Byte
 
   
 
   
 
  1wreset
 
  1wreset
 
  If Err = 0 Then
 
  If Err = 0 Then
     1wwrite &H33                                           {{vbcomment|ROM-Befehl zum lesen der SerienNr.}}
+
     1wwrite &H33                                   {{vbcomment|ROM-Befehl zum lesen der SerienNr.}}
 +
    Ar(1) = 1wread(8)                              {{vbcomment|8 Bytes lesen}}
 +
 
     For I = 1 To 8
 
     For I = 1 To 8
         Print Hex(ar(i));                                   {{vbcomment|Ausgabe der SerienNr.}}
+
         Print Hex(ar(i));                           {{vbcomment|Ausgabe der SerienNr.}}
 
         Print " ";
 
         Print " ";
 
     Next
 
     Next
 
     Print
 
     Print
 
   
 
   
     Print Hex(crc8(ar(1) , 7) )                             {{vbcomment|Prüfsumme ausgeben}}
+
     Print Hex(crc8(ar(1) , 7) )                     {{vbcomment|Pr&uuml;fsumme ausgeben}}
 
   
 
   
     If Ar(8) = Crc8(ar(1) , 7) Then                         {{vbcomment|Prüfsumme vergleichen}}
+
     If Ar(8) = Crc8(ar(1) , 7) Then                 {{vbcomment|Pr&uuml;fsumme vergleichen}}
 
         Print "Daten OK"
 
         Print "Daten OK"
 
     Else
 
     Else
Zeile 210: Zeile 204:
 
  End If
 
  End If
  
Wenn das letzte Byte der Übertragung und die berechnete Prüfsumme aus den Bytes 1-7 übereinstimmt, war die Übertragung erfolgreich, und die Daten können weiterverarbeitet werden.
+
Wenn das letzte Byte der Übertragung und die berechnete Pr&uuml;fsumme aus den Bytes 1-7 übereinstimmt, war die &Uuml;bertragung erfolgreich, und die Daten k&ouml;nnen weiterverarbeitet werden.
Beim auslesen der Temperatur werden 9 Bytes übertragen, deshalb müssen zum berechnen der Prüfsumme Byte 1-8 einbezogen werden.
+
Beim auslesen der Temperatur werden 9 Bytes &uuml;bertragen, deshalb m&uuml;ssen zum berechnen der Pr&uuml;fsumme Byte 1-8 einbezogen werden.
  
  
 
== Parasitäre Stromversorgung ==
 
== Parasitäre Stromversorgung ==
  
Da bei der Schaltung von oben eigentlich drei Leitungen benötigt werden, statt der einen wie man vermuten könnte, ist es mit der folgenden Schaltung immerhin möglich die Anzahl auf zwei Leitungen zu reduzieren.
+
Da bei der Schaltung von oben eigentlich drei Leitungen ben&ouml;tigt werden, statt der einen wie man vermuten k&ouml;nnte, ist es mit der folgenden Schaltung immerhin m&ouml;glich die Anzahl auf zwei Leitungen zu reduzieren.
  
 
[[Bild:1Wire-DS1820_parasit.png]]
 
[[Bild:1Wire-DS1820_parasit.png]]
  
Es ist aber Abhängig vom Gerät und den Umgebungsbedingungen ob es sich immer so lösen lässt. Ein Blick ins Datenblatt hilft da weiter.
+
Es ist aber Abh&auml;ngig vom Ger&auml;t und den Umgebungsbedingungen ob es sich immer so l&ouml;sen l&auml;sst. Ein Blick ins Datenblatt hilft da weiter.
  
  
Zeile 233: Zeile 227:
  
 
* [http://www.maxim-ic.com/quick_view2.cfm?qv_pk=2812] - Datenblatt zu DS18B20
 
* [http://www.maxim-ic.com/quick_view2.cfm?qv_pk=2812] - Datenblatt zu DS18B20
 +
* [http://www.maxim-ic.com/quick_view2.cfm/qv_pk/2815] - Datenblatt zu DS18S20
  
  
Zeile 241: Zeile 236:
 
[[Kategorie:Kommunikation]]
 
[[Kategorie:Kommunikation]]
 
[[Kategorie:Microcontroller]]
 
[[Kategorie:Microcontroller]]
[[Kategorie:Elektronik]]
 
 
[[Kategorie:Praxis]]
 
[[Kategorie:Praxis]]
 
[[Kategorie:Software]]
 
[[Kategorie:Software]]
 
[[Kategorie:Quellcode Bascom]]
 
[[Kategorie:Quellcode Bascom]]

Aktuelle Version vom 19. Juli 2014, 19:22 Uhr

In diesem Artikel folgen einige Programmbeispiele, in denen gezeigt wird, wie Bascom über den 1-Wire-Bus kommuniziert.

1-Wire (Eindraht) ist eine serielle Schnittstelle, die mit nur einer Datenleitung auskommt, die gleichzeitig auch noch als Stromversorgung genutzt werden kann. Aufgrund der Einfachheit kann diese Schnittstelle leicht in Software auf einem Mikrocontroller nachgebildet werden.

In Bascom sind Befehle für die 1-Wire-Kommunikation enthalten, sodass der Programmierer sich nicht um das Protokoll und das Timing der Übertragung kümmern muss.

Es gibt 1-Wire-Geräte mit verschiedenen Funktionen, in der Roboterwelt dürfte einer der bekanntesten der Temperatursensor DS18S20 (bzw. DS18B20) sein, deswegen wird dieser in den Beispielen verwendet.


Beschaltung

Die Beschaltung rund um den DS18B20 sieht so aus:

1Wire-DS1820.png


Ablauf der Kommunikation

Die Kommunikation mit dem 1-Wire-Gerät muss immer diesen Ablauf haben:

  • Initialisierung
  • "ROM Function" Befehl
  • "Memory Function" Befehl
  • Übertragung/Daten

Aus diesem Ablauf ergeben sich die beiden folgenden Programmabläufe.


Kommunikation mit nur einem Gerät

Wenn sich nur ein einziges Gerät am Bus befindet kann man diese kurze Version der Kommunikation verwenden. Ein ROM-Befehl ist dabei nicht notwendig und kann übersprungen werden, dies muss aber dem Gerät mitgeteilt werden.

Beispiel:

' Minimalprogramm für Temperaturmessung 
Config 1wire = Portc.7 

Dim Sep(9) As Byte

1wreset                                         ' Initialisierung 
1wwrite &HCC                                    ' überspringe ROM-Befehl 
1wwrite &H44                                    ' Temperaturmessung anstoßen 

Waitms 500                                      ' warten bis Messung fertig 

1wreset                                         ' Initialisierung 
1wwrite &HCC                                    ' überspringe ROM-Befehl 
1wwrite &HBE                                    ' Temperatur auslesen 
Sep(1) = 1wread(9)                               ' Daten in ein Array lesen, beschreibt Sep(1) bis Sep(9) 

Wait 1

Im Array Sep() stehen die Daten des Gerätes die dann Anhand des Datenblattes ausgewertet werden.


Kommunikation mit mehreren Geräten

Wenn sich mehrere Geräte am 1-Wire-Bus befinden, müssen diese jeweils Adressiert werden um mit dem gewünschten Gerät in Kontakt zu treten. Zum Adressieren wird die Seriennummer verwendet, die in jedem 1-Wire-Gerät eindeutig vorhanden ist. Um an diese Seriennummer zu kommen gibt es zwei Strategien.

Entweder man liest bei allen Geräten vorher einzeln diese Nr. aus, um diese in das eigentliche Programm einzutragen (kürzer), oder man sucht beim Programmstart jedesmal nach vorhandenen Geräten (flexibler).


SerienNr einzeln auslesen

Config 1wire = Portc.7

Dim Ar(8) As Byte

1wreset
1wwrite &H33                                        ' ROM-Befehl zum lesen der SerienNr 
Ar(1) = 1wread(8)                                   ' 8 Bytes lesen, beschreibt Ar(1) bis Ar(8) 

For I = 1 To 8
    Print Hex(ar(i));                               ' Ausgeben 
    Print " ";
Next

Print

Wait 1

Im Array Ar() befindet sich somit die SerienNr des Gerätes.


SerienNr aller Geräte

$regfile = "M32def.dat"
$crystal = 16000000
$baud = 38400

Config 1wire = Portc.7

Dim Ar(8) As Byte                                   ' Array für SerienNr. 
Dim I As Byte
Dim W As Word

Sound Portd.7 , 400 , 450                           ' BEEP bei RN-Control 

Print
Print "1-Wire"

Wait 1

Ar(1) = 1wsearchfirst()                            ' 8 Bytes lesen, beschreibt Ar(1) bis Ar(8) 

' gibts überhaupt ein Gerät 
If Err = 0 Then

    Do
        ' Ausgabe der SerienNr. 
        For I = 1 To 8
            Print Hex(ar(i));
            Print " ";
        Next
        Print

        ' Nach weiterem Gerät suchen 
        Ar(1) = 1wsearchnext()                   '  Seriennummer vom ächste Sensor, beschreibt Ar(1) bis Ar(8) 

    Loop Until Err = 1                       ' solange bis sich kein weiteres Gerät mehr meldet. 

End If

Print "Fertig"

W = 1wirecount()                                ' Anzahl der gefundenen Geräte zählen 

Print "Anzahl ";
Print W

Do
Loop

End

Am ersten Byte der SerienNr (Family-Code) ist zu erkennen um welches Gerät es sich handelt, beim DS18B20 ist es die &H28, beim DS18S20 die &H10. Da beide unterschiedliche Formate beim Temperaturwert haben, kann die Berechnung anhand des Family-Code angepasst werden.


Bestimmtes Gerät ansprechen

Um bei mehreren vorhandenen Geräten ein bestimmtes anzusprechen muss es mit der SerienNr adressiert werden.

Do
    1wverify Ar(1)                                 ' Gerät mit der SerienNr. aus Ar() auswählen 
    ' Gerät vorhanden 
    If Err = 0 Then

        1wwrite &H44                               ' Temperaturmessung anstoßen 

        Waitms 500                                 ' warten bis Messung fertig 

        1wverify Ar(1)                             ' Gerät mit der SerienNr. aus Ar(1)...Ar(8) auswählen 
        1wwrite &HBE                               ' Temperatur auslesen 
        Sep(1) = 1wread(9)                          ' Daten in ein Array lesen, beschreibt Sep(1) bis Sep(9) 

        For I = 1 To 9
            Print Hex(sep(i));
        Next
        Print

        ' Nur für die Temperatur wichtige Daten ausgeben 
        Print Hex(sep(2));
        Print Hex(sep(1))
        '  High und Low-Byte, nach Datenblatt zusammen setzen und berechnen... 
    Else
        Print "Fehler"
    End If

    Wait 1

Loop

Die SerienNr. des gewünschten Gerätes muss im Array Ar() stehen, bevor es mit 1wverify gesucht wird, dies ist auch gleichzeitig der ROM-Befehl, diesem kann der Memory-Befehl folgen, und anschließend die Daten übertragen werden.


Prüfsumme

Da wegen der einen Datenleitung durchaus mit Störungen zu rechnen ist, wird jeder Übertragung ein Prüfbyte angehängt, mit dem sich die Korrektheit der Daten überprüfen lässt.

Config 1wire = Portc.7

Dim Ar(8) As Byte                                   ' Array für SerienNr 
Dim I As Byte

1wreset
If Err = 0 Then
    1wwrite &H33                                    ' ROM-Befehl zum lesen der SerienNr. 
    Ar(1) = 1wread(8)                               ' 8 Bytes lesen 

    For I = 1 To 8
        Print Hex(ar(i));                           ' Ausgabe der SerienNr. 
        Print " ";
    Next
    Print

    Print Hex(crc8(ar(1) , 7) )                     ' Prüfsumme ausgeben 

    If Ar(8) = Crc8(ar(1) , 7) Then                 ' Prüfsumme vergleichen 
        Print "Daten OK"
    Else
        Print "Fehler"
    End If

End If

Wenn das letzte Byte der Übertragung und die berechnete Prüfsumme aus den Bytes 1-7 übereinstimmt, war die Übertragung erfolgreich, und die Daten können weiterverarbeitet werden. Beim auslesen der Temperatur werden 9 Bytes übertragen, deshalb müssen zum berechnen der Prüfsumme Byte 1-8 einbezogen werden.


Parasitäre Stromversorgung

Da bei der Schaltung von oben eigentlich drei Leitungen benötigt werden, statt der einen wie man vermuten könnte, ist es mit der folgenden Schaltung immerhin möglich die Anzahl auf zwei Leitungen zu reduzieren.

1Wire-DS1820 parasit.png

Es ist aber Abhängig vom Gerät und den Umgebungsbedingungen ob es sich immer so lösen lässt. Ein Blick ins Datenblatt hilft da weiter.


Siehe auch


Weblinks

  • [1] - Datenblatt zu DS18B20
  • [2] - Datenblatt zu DS18S20


--Linux 80 03:16, 23. Aug 2008 (CEST)


LiFePO4 Speicher Test