Zurück zum Menü 5

5.1.14 Temperatursensor DS18S20 erkunden (auch: DS18B20)

Erstellt ab: 08.08.2014



Temperatursensoren gibt es in vielen verschiedenen Ausführungen. Das Besondere am DS18S20 ist, dass er diese Eigenschaften besitzt:

  • Eindrahtkommunikation (1-Wire-Device)
  • Der Sensor gibt fertige Werte aus, die der tatsächlichen Temperatur entsprechen
  • Jeder Sensor hat eine eindeutige Adresse, die bei der Produktion "eingebrannt" wird

Wer sich dieses einmal genauer durchlesen möchte und vor Englisch nicht zurückschreckt, der kann sich dieses PDF herunterladen und ansehen:

http://www.strippenstrolch.de.org/home/down...p;id=1407537437

Zunächst habe als Exzerpt aus dem PDF dieses Bildschirmfoto gewählt:



Ich habe diese Betriebsvariante gewählt, weil sie wesentlich einfach aufzubauen ist, als die Variante mit der "parasitären Versorungsspannung". Ich mache mir jetzt auch die Mühe, das einmal umzuzeichen, so dass man die Zusammenhänge vielleicht genauer erkennen kann:



Wie Du hier siehst, benötigst Du an der Picaxe einen Pin, der sowohl als Eingang, als auch als Ausgang geschaltet werden kann.

ACHTUNG: Nicht jeder Pin an den verschiedenen Picaxen eignet sich dafür.

Hier habe ich das Pinout des Sensors herauskopiert, damit Du auch weißt, welcher Pin wohin gehört:



Ich schnappte mir also einen der gesponsorten DS18S20 und steckte diese Schaltung:



Nachdem ich ein Programm für den readtemp-Befehl eingetippt hatte, erwartete mich eine doch recht enttäuschende Überraschung. Dieser Befehl ist mit dem DS18S20 nicht zu benutzen, denn der kennt gar keine 8-Bit-Auflösung. Also versuchte ich es mit dem readtemp12-Befehl.

Hier tat sich schon etwas , wenn ich mit dem Lötkolben an den DS ging, oder die Temperatur aber mit Kältespray reduzierte. Aber die richtigen Temperaturwerte waren das noch lange nicht !

Recht verdrießlich schlug ich noch einmal in dem Original-Manual nach und siehe da, irgendwo mitten im Text der unscheinbare Hinweis:





Hier steht also, dass der Sensor DS18S20 nicht vernünftig mit der Picaxe zusammenarbeitet, weil dieser veraltet ist. Außerdem beherrscht er im Zusammenhang mit diesem Controller keine parasitäre Spannungsversorgung.

Ich hatte mich also zu früh gefreut, als ich meinen DS18S20 für billig Geld bei Pollin gekauft hatte. Es handelt sich offenbar um ein Auslaufmodell und wird deshalb überall recht günstig angeboten.

Der DS18S20 kann also im Zusammenhang mit der PICAXE nicht empfohlen werden.
Besser ist es, den DS18B20 zu benutzen.

Nachdem einige DS18B20 hier eingetroffen waren, brauchte ich den Sensor lediglich auszuwechseln, denn erfreulicherweise haben beide Sensoren die gleiche Pinbelegung.
Der Versuchsaufbau besteht aus der 9.2.13-Spannungsversorung und dem 9.2.2.S-Lernboard, sowie 5 Schaltdrähten, einem Widerstand und dem DS18B20:


Ich verwendete dieses puristische Miniprogramm für den ersten Versuch:

;============================================================
; PICAXE 20M2
;============================================================
; Versuch 1:
;
; Einen 1-wire Temperaturfühler DS18B20 auslesen
;============================================================

dirsb=%11111111                  ; Port B auf Ausgang setzen

do                                              ; Anfang der Endlosschleife
readtemp c.7,b0            ; S18B20 an Pin C7 in die Variable B0 einlesen
debug                             ; Werte am Terminal kontrollieren
pinsb = b0                      ; Variable B0 komplett am Port B ausgeben
loop                                           ; Ende der Endlosschleife


Der Sensor übermittelte sofort und ohne jegliche Einstellarbeiten die richtige Temperatur an die Picaxe, wie dieser Bildausschnitt zeigt:



Wie wir sehen, leuchtet LED 2 und LED 4.
Wenn wir diese Tabelle einmal betrachten, wird uns einiges klar werden:



Addieren wir hier die dezimale Wertigkeit der Bits, die durch die LEDs visualisiert werden, dann kommen wir auf 4+16=20 Grad Celsius. Ich habe das mit einem anderen Digitalthermometer überprüft und es stimmt.

Einen Haken hat die Sache jedoch noch:

Wenn Du nun ein weiteres Programm in die Picaxe schreiben möchtest, oder eine Änderung am Programm vornehmen willst, so wird es voraussichtlich passieren, dass beim Download ein Fehler mit "Error" angezeigt wird.
Dazu muss man dann wie folgt vorgehen:

  • Versorgungsspanung der Picaxe ausschalten
  • Den Download im Editor auslösen
  • Dann sofort die Versorgungsspannung der Picaxe einschalten

Extra zu diesem Zweck gibt es auf dem strippenstrolch.de-Lernboard einen kleinen blauen Schalter, der die Versorgungsspannung der Picaxe unterbricht. Es kommt bei verschiedenen Programmkonstellationen nämlich öfter vor, dass der Download nicht klappen will.

Beflügelt durch diesen Erfolg wurde ich mutiger und ich orderte ein AX033Y-Display (seriell / i2c OLED-Display). Dieses schloss ich an Pin C5 an.



Dann schrieb ich das kleine Testprogramm wie folgt um:

;=========================================
; PICAXE 20M2
;=========================================
; Versuch 2:
; Einen 1-wire Temperaturfühler DS18B20 auslesen
; Den Wert am OLED anzeigen
;=========================================

dirsb=%11111111                                       ; Port B auf Ausgang setzen

Pause 500                                                    ; Display initialisieren

serout c.5,n2400,(254,1) : Pause 30        ; Display initialisieren
serout c.5,n2400,(254,128)                        ; Gehe zu Zeile 1
serout c.5,N2400,("Temp.: "," "," C")        ; Schreibe das "Gundgerüst" in die Zeile

do                                                                   ; Anfang der Endlosschleife
readtemp c.7,b0                                 ; S18B20 an Pin C7 in die Variable B0 einlesen
; debug                                                ; Werte am Terminal kontrollieren
pinsb = b0                                           ; Variable B0 komplett am Port B ausgeben
serout c.5,N2400,(254,136)             ; Gehe an Position 8 (128 + 8) in Zeile 1
serout c.5,N2400,(#b0)                     ; Schreibe dort den Variableninhalt von B0 hin
loop                                                                ; Ende der Endlosschleife


Der fertige Versuchsaufbau lässt sich schon sehen:



Wer jetzt ein wenig mit den Displayeinstellungen experimentieren möchte, der kann das anhand dieser Tabelle tun:



Im nächsten Schritt habe ich die Temperatur bei Minusgraden ausgewertet und gebe einen Frosthinweis auf dem Display aus:

;=========================================
; PICAXE 20M2
;=========================================
; Versuch 3:
; Einen 1-wire Temperaturfühler DS18B20 auslesen
; Den Wert am OLED anzeigen
; Positive und negative Temperaturen berücksichtigen
;=========================================

dirsb=%11111111 ; Port B auf Ausgang setzen

Pause 500 ; Display initialisieren

serout c.5,n2400,(254,1) : Pause 30 ; Display initialisieren
serout c.5,n2400,(254,128) ; Gehe zu Zeile 1
serout c.5,N2400,("Temp.:") ; Schreibe das "Gundgerüst" in die Zeile

do ; Anfang der Endlosschleife
readtemp c.7,b0 ; S18B20 an Pin C7 in die Variable B0 einlesen
pinsb = b0 ; Variable B0 komplett am Port B ausgeben
serout c.5,N2400,(254,135) ; Gehe an Position 7 (128 + 7) in Zeile 1
if b0 > %10000000 then ; Wenn Bit 7 gesetzt ist, ist der Wert negativ
b1 = b0 -128 ; Ziehe Bit 7 vom Wert ab
serout c.5,N2400,("- ",#b1," ","C ") ; Schreibe dort den Variableninhalt von B1 hin
serout c.5,N2400,(254,192,"Achtung Frost !") ; Schreibe eine Frostwarnung
else
serout c.5,N2400,(#b0," ","C ") ; Schreibe dort den Variableninhalt von B0 hin
serout c.5,N2400,(254,192," ") ; Lösche die Frostwarnung
endif
loop ; Ende der Endlosschleife

Jetzt ist es soweit für das erste Experimental-Video:



Von diesem Erfolg weiter beflügelt habe ich noch einmal einen DS18S20 hervorgeholt und mich ein wenig in die Materie "hineingefressen". Dabei ist dieses Programm entstanden:




Ich bedanke mich für die Aufmerksamkeit,






Nach oben            Zurück zum Menü 5