
Wofür benötige ich einen DS18B20-Tester?
Der DS18B20 ist ein digitaler Temperatursensor mit einer Messgenauigkeit von ±0.5°C im Bereich von -10°C bis +85°C und einer Auflösung von 9 Bit in der S-Ausführung und einstellbar zwischen 9-12bit in der B-Variante. Die Übertragung der Daten wird über den sogenannten ‘One-Wire-Bus’ realisiert. Der Begriff One-Wire bezieht sich auf die Form der Datenübertragung mit nur einer Datenleitung und GND ohne zusätzliche Spannungsversorgung. Dieser Modus wird als parasitär bezeichnet, da die Spannungsversorgung des internen Chips im Moment der Datenabfrage aus der Datenleitung bezogen wird. Diese Betriebsart ist besonders dann hilfreich, wenn nur eine Zweidrahtleitung zur Verfügung steht.
Sind ausreichend – also min. drei Drähte – verfügbar, ist es empfehlenswert, den DS18B20 im Normalmodus (+, Signal, GND) zu betreiben.
Das Problem
Der DS18B20 kommt in verschiedenen Gehäuseausprägungen daher. (siehe Abbildungen unten) Bis auf einige Ausführungen in Aluminiumhülse mit Anschlussleitung, die zweiadrig ausgelegt und daher für den Betrieb per Design im parasitären Modus vorgesehen ist, verfügt der Chip über drei Anschlüsse.


Wie oben schon kurz erwähnt, lässt sich die Verdrahtung über längere Strecken – z.B. für Raumtemperaturerfassung – vereinfachen, wenn nur eine verdrillte Zweidrahtleitung genutzt werden kann. In einer KNX-Verdrahtung bietet sich z.B. das nicht benutzte gelb/weiße Paar des KNX-Kabels an.
An den Temperaturfühlern wird dann Pin 1 und Pin 3 verbunden und auf die Masseader gelegt. Pin 2 wird auf die Signalleitung geschaltet (siehe Abbildung rechts). Letztere muss am verarbeitenden Rechner (Arduino, Raspberry, ESP etc.) über einen 4,7kOhm-Widerstand mit der Betriebsspannung (3,3 oder 5V) verbunden werden.
Hat man etwas mehr Geld in die Beschaffung der DS18B20 investiert und original Dallas-Chips erworben, dürfte es mit dieser Beschaltung keine Probleme geben.
Leider gibt es im preiswerten Segment Chips, die nur einen eingeschränkten Funktionsumfang besitzen. Die meisten dieser Chips unterstützen den parasitären Modus nicht.
Leider gibt es bis auf wenige Ausnahmen (P im Kreis auf der Rückseite des TO-92 Gehäuses) keinen Möglichkeit, das Original von einer Fälschung zu unterscheiden.
Eine sehr gute Beschreibung dieser Problematik ist auf dieser GitHub-Seite zusammengestellt.
Die dort zur Verfügung gestellten Testprogramme sind Basis für die im Folgenden beschriebene Lösung.
Die Lösung
Neben den auf der oben verlinkten Seite beschriebenen äußeren Erkennungsmerkmalen ist eine eindeutige Identifikation als Original oder Fake nur über die Abfrage interner Registerwerte möglich. Da man für den Betrieb und die Identifikation eines DS am One-Wire-Bus in den meisten Anwendungen ohnehin die eindeutige Seriennummer benötigt, bietet es sich an, ein kleines Testgerät auf Basis der Arduino-Sketche zu entwickeln, dass sowohl die Seriennummer anzeigt, als auch die diversen Tests durchführt und am Ende im einfachsten Fall ein OK oder not OK ausgibt.
Für den Test allgemeiner elektronischer Bauelemente gibt es den Tester TC-1. Es bietet sich daher an, den Tester für die DS18B20 in einer ähnlichen Bauform zu entwerfen. Das verwendete Gehäuse wäre hoch genug, um eine 9V-Batterie unterzubringen. Dennoch soll hier eine externe Stromversorgung per USB-Port oder 5V-Netzteil zum Einsatz kommen.


Der Tester basiert auf einem Atmel ATmega328P PU, wie er auch im Arduino zum Einsatz kommt. Eine kleinere Ausführung, z.B. ein ATTINY 2313, ist aufgrund der Sketchgröße leider nicht nutzbar.
Am Eingang der Schaltung sorgt ein LD1117V33 für die Bereitstellung der 3,3 V Betriebsspannung der Schaltung. Eine RGB-LED signalisiert verschiedene Stati der Chip-Prüfung. Als Anzeige für die einzelnen Testergebnisse wird ein OLED 1,77″ 160×128 Farbdisplay verwendet.
Hinweis zum Display: Den ST7735-Chip, der das 1,77″-Display steuert, gibt es offensichtlich in drei verschiedenen Ausprägungen, die, wenn nicht korrekt initialisiert, einen Null-Punkt-Verschiebung oder Pixelfehler zur Folge haben. Damit die unterschiedlichen Chip-Ausführungen unterschieden werden können, hat die Lasche der Schutzfolie des Displays eine rot, grüne oder blaue Farbe. Im Setup des Sketches ist die Farbe an die Initialisierungs-Methode zu übergeben. Siehe Sketch (V1.0.135) Zeile 124.
Die Markierung ist aber nicht sehr zuverlässig. Das verwendete Display hatte ein rote Lasche. Dennoch musste BLACKTAB als Init-Parameter verwendet werden.
/***
* ST7735-Chip initialisieren (INITR_BLACKTAB / INITR_REDTAB / INITR_GREENTAB)
* Muss bei AZ-Delivery 1.77'' 160x128px RGB TFT INITR_GREENTAB sein ansonsten Pixelfehler rechts und unten.
* Hinweis: https://github.com/PaulStoffregen/Adafruit_ST7735/blob/master/examples/soft_spitftbitmap/soft_spitftbitmap.ino
* Zeile 51-56
***/
tft.initR(INITR_BLACKTAB);
Das Originalskript von Chris Petrich schreibt über die serielle (USB) Schnittstelle sehr viel mehr Informationen zu den einzelnen Testergebnissen aus, als auf dem kleinen 1,77″-Display angezeigt werden könnten. Es ist daher optional sinnvoll, den TxD-Ausgang des ATmega328P über einen Seriell-USB-Wandler nach außen zu führen. Dafür bietet sich ein entsprechendes FTD232 USB-to-UART Modul an, was lediglich mit TxD und GND verbunden wird. Die Spannungsversorgung wird über den USB-Anschluss des mithörenden PC’s realisiert. Wird der Tester ohnehin immer in dem Monitoring-Modus betrieben, kann die Spannungsversorgung der gesamten Schaltung auch über das FTD232-Modul erfolgen. Dann ist die Aufbereitung der 3,3V nicht notwendig. Lediglich der Jumper für die Ausgangspannung muss korrekt auf 3,3V gesetzt werden.
Damit die zu prüfenden Chips leicht mit dem Tester verbunden werden können, bietet es sich in Anlehnung an das Vorbild TC-1 an, einen ZIF-Sockel zu nutzen. Für einen Test-Probanden sind vier Pins vorgesehen. Als ZIF kommt daher eine 16-polige Ausführung in Frage. Damit können – mit Einschränkung (siehe unten) – vier Probanden gleichzeitig getestet werden.
Die gesamte Schaltung kann auf einer Lochrasterleiterplatte aufgebaut werden.
Es ist sinnvoll, den ATmega auf einem 28-poligen Sockel unterzubringen, damit das spätere Programmieren von Updates möglich bleibt.


Ist die Schaltung komplett und natürlich korrekt verdrahtet, fehlt nur noch die Programmierung des Sketches auf den ATmega328P.
Nun könnte man auf die Idee kommen, den Chip einfach in eine Arduino-Board einzusetzen und dann über die Arduino-IDE zu programmieren. Das geht aber aus zweierlei Gründen schief. Zum einen wird eine frisch ausgepackter ATmega328P keinen Bootloader einprogrammiert haben und zum anderen würde er nach dieser Prozedur im Tester nicht laufen, das das Arduino-Board mit einem Quarz stabilisiertem externen Takt arbeitet, die Tester-Schaltung – wie im Schaltbild zu erkennen ist – aber keinen externen Takt erzeugt. Der ATmega nutzt seinen internen Taktgenerator, was man ihm über das Setzen der sogenannten Fuse-Bits „beibringen“ muss.
Für das Setzen der Fuse-Bits gibt es mehrere Methoden. Für nähre Informationen zu den einzelnen Funktionsaktivierungen oder-deaktivierungen bietet sich z.B. diese Seite an, auf der man über verschiedene Wege die einzelnen Bits beeinflussen und am Ende ablesen kann, wie die Fuse-Bits des ATmega zu setzen sind. In der Listbox gibt es eine mit „default value“ bezeichnete Einstellungskombination, die für unseren Fall die korrekte Wahl darstellt. Hat man alle Parameter der benötigten Betriebsrat entsprechend ausgewählt, sollte sich als Ergebnis low_fuses=0xE2, high_fuses=0xDA und extended_fuses=0xFD ergeben.
Wie der ATmega mit Hilfe des Tools avrdude mit den Fuse-Bits programmiert wird, ist z.B. hier und hier ganz gut erklärt. Das Tool und die dazugehörige *.conf liegen üblicherweise in dem Ordner c:\Programme\arduino-1.x.yy\hardware\tools\avr\bin\.
Auch für die Kommunikation zum ATmega gibt es verschiedene Schnittstellen- und Programmer-Ansätze. Die Erfahrung zeigt, dass es mit der Multifunktionale Erweiterungskarte Bootloader AVR ISP für UNO R3 eine sehr komfortable Lösung gibt. Ein Arduino UNO dient dabei als Basis.
Damit dieser seine Funktion als Programmer ausführen kann, muss er in einen ISP „verwandelt“ werden. Der entsprechende Sketch wird in der Grundinstallation der Arduino IDE innerhalb der Beispiele (Unterpunkt 11 – siehe Screenshot) mitgeliefert. Dieser Sketch wird in die IDE geladen und über die normale Funktion „Sketch->Hochladen (Strg+U)“ auf den Arduino übertragen.


Im nächsten Schritt muss der Arduino IDE noch die neue Hardware, ein ATmega328P außerhalb seines üblichen „Lebensraum“ – dem Arduino-Board – beigebracht werden. Dazu muss in dem Arduino-Projekt-Ordner im schon vorhandenen oder anzulegenden Unterverzeichnis „hardware“ der Inhalt der breadboard.zip entpackt werden. Die Datei boards.txt beinhaltet u.a. die Fuse-Bits (siehe oben).Zudem wird in einem weiteren Unterverzeichnis auch die passende Bootloader-Datei entpackt.
Wenn alles an die richtigen Stelle kopiert wurde (Die Schritt-für-Schritt-Anleitung kann hier nachgelesen werden), sollte alle Parameter des Werkzeuge-Menüs, wie oben im rechten Screenshot sichtbar, eingestellt sein.
Nun können an den im Erweiterungsboard des Arduino eingesteckten ATmega per „Werkzeuge->Bootloader brennen“ sowohl die Fuse-Bits als auch der Bootloader übertragen werden.
Hinweis: Evtl. muss die avrdude.conf vorher noch in den Ordner <ArduinoSkripte>\hardware\breadboard\avr\ kopiert werden.
Nun kann im letzten Schritt das Sketch auf den ATmega geladen werden. Auch hier gibt es eine leicht abweichende Vorgehensweise zur üblichen Arduino-Programmierung..
Über „Sketch->Hochladen mit Programmer (Strg + Umschalt + U)“ wird das Programm über den Arduino ISP auf den ATmega geladen.
Test der DS18B20
Die Probanden werden im ersten Schritt in den ZIF-Sockel an einer der vier möglichen Positionen an G=GND, S=Daten und +=Plus so angeschlossen, dass die flache Seite des Gehäuses zum Bediener zeigt, wenn der Sockel so wie auf den unten gezeigten Fotos beschaltet ist.
Grundsätzlich können alle vier Quadranten des ZIF-16-Sockels parallel verdrahtet und mit Probanden bestückt werden. Findet die Software mehrere DS18B20, werden die Ergebnisse im Display nacheinander angezeigt. Aufgrund der One-Wire-Bus-Struktur ist aber nicht erkennbar, in welchem Sockel-Quadranten der Proband der gerade angezeigten Testergebnisse eingesteckt ist.
Während der Initialisierung der Hardware leuchtet die RGB-LED blau und verlischt während des Testlaufs.
Am Ende des 1 Durchlaufes wird das Testergebnis durch ein rot unterlegtes „not OK“ und eine rot leuchtende LED oder durch ein grün hinterlegtes „OK“ und eine grün leuchtende LED angezeigt. Die LED blinkt weiß, wenn kein Chip angeschlossen ist, der Chip defekt ist oder in der Testposition G,S,P (siehe unten) keinen parasitären Modus unterstützt.
Das Sketch wiederholt die Tests nach einer kurzen Pause. Die Probanden können während des Durchlaufes jederzeit gewechselt werden.
Wird nach dem ersten Testdurchlauf ein „not OK“ angezeigt, kann der Proband für einen weiteren Test noch in die Position G=Pin 3, S=Pin2 und P=Pin 1 gesteckt werden. In dieser Position wird er anschlussseitig im parasitären Modus betrieben. Stellt das Testprogramm fest, dass ein Chip vorhanden ist und zeigt dennoch ein „not OK“, ist der Chip zwar keine original Dallas-Chip, kann aber dennoch im parasitären Modus betrieben werden. Andernfalls wird angezeigt, dass kein DS18B20 erkannt wurde.
In den oberen Abbildungen sind zwei DS18B20 getestet worden. Einer ist ein Original Dallas-Chip, der andere ein Fake, der auch keine Parasitäre Stromversorgung unterstützt.