Thermometer

Die Temperatur wird folgendermaßen gemessen: Ein Kondensator wird aufgeladen und entlädt sich danach über einen NTC (wärmeabhängiger Widerstand). Der Mikrocontroller mißt die Zeit, bis der Kondensator halb entladen ist und errechnet anhand einer Übersetzungstabelle den aktuellen Temperaturwert. Da ich die Temperatur ohne Nachkommastelle anzeige und die Programmierung so einfach ist, habe ich mich hierfür entschieden. Die benötigte Übersetzungstabelle muss allerdings erst durch eigene Messungen erstellt werden.


Elektronik

Da der Mikrocontroller nur einen Analog-Vergleicher besitzt, habe ich einen zusätzlichen Spannungsvergleicher, und zwar den LM2903, genommen. Dieser vergleicht die Spannungen an den beiden Kondensatoren und ist an zwei Eingänge des Mikrocontrollers angeschlossen.


LM2903
LM 2903

Temperatur-Meßvorsatz
Temperatur-Meßvorsatz

Durch ein High an D3 wird der Kondensator geladen. Nach Low auf D3 entlädt er sich über den NTC. Der Eingangswiderstand des LM2903 ist hoch genug, so dass er keine Rolle spielt. Ist die Spannung am Kondensator auf unter die Hälfte gefallen, kann an D0 ein Low erkannt werden. Der Kondensator soll möglichst genau seinen Wert besitzen und auch auf lange Zeit behalten. Ich habe einen 5%igen Folienkondensator eingesetzt.


Vorüberlegungen zur Genauigkeit

Die Genauigkeit hängt von den verwendeten Bauteilen ab. Nun einige Überlegungen zur Ungenauigkeit des Thermometers:

Da ich das Thermometer durch Vergleich mit einem anderen Thermometer zwar eiche, aber mit zwei symmetrischen Schaltungen Innen- und Außentemperatur messen will, müssen die Teile möglichst die selben Werte besitzen. Der Kondensator entlädt sich über den NTC.


Eichen des Thermometers

Durch Auskommentieren einer Zeile im Assemblerprogramm erzeugt man eine Version des Programms, die die gemessenen Zeiten zum halben Entladen des Kondensators auf dem Display ausgibt. Am besten lötet man bereits jetzt den Außenfühler an das Kabel. Der NTC sollte mit einem Stück einer Plastiktüte und Klebeband wasserdicht gemacht werden (kann auch später im Betrieb nicht schaden, um vor Korrosion zu schützen).

Nun braucht man noch ein zweites Thermometer mit Außenfühler und nacheinander einige Gläser mit Wasser unterschieldicher Temperatur. Um kalte Temperaturen abzudecken, nimmt man Eiswasser. Nach dem Eintauchen der Fühler in das Wasser misst man einige Werte.

Aus den gemessenen Werten kam eine schöne exponentielle Kurve heraus:

Da für die Temperatur-Meßwerte nur jeweils ein Byte benutzt wird, fangen diese somit momentan erst bei -12°C an. Wenn es denn in diesem Winter mal kälter sein sollte, überlege ich mir, entweder zwei Byte pro Meßwert zu nehmen oder durch Anpassung der Wartezeit in der Zählschleife den Bereich anzupassen. Die Werte werden im EEPROM abgelegt. Die entsprechende Datei sieht dann so aus:

dcf77_ee.hex

:10000000FFFFFFFFFFFFFFFEF0E4D8CCC0B6ACA3BC
:100010009A91887F78726C67615C57534E4A46426A
:100020003F3C383533312E2C2A2826242221201E0D
:100030001D1B1A191817161514131211100F0E0084
:1000400000000000000000000000000000000000B0
:1000500000000000000000000000000000000000A0
:100060000000000000000000000000000000000090
:100070000000000000000000000000000000000080
:00000001FF