Ein in Bastlerkreisen sehr beliebter Temperatursensor ist der LM75. Ein Grund mehr, sich einmal mit ihm auseinander zu setzen :-)

Die Kommunikation findet hier über ein I²C (TWI) Interface statt. Die Messwertausgabe erfolgt demzufolge digital. Analog zu den meisten auf dem Markt erhältlichen digitalen Temperatursensoren bringt auch der LM75 einfache Thermostatfähigkeiten mit sich, auf die ich aber nicht näher eingehen werde.

Als "Warnung" möchte ich noch vorweg schicken, dass dieser Sensor nur als SOP verfügbar ist, also das einfach Löten auf Lochraster wie bei DIP entfällt. Man kann sich allerdings entweder selbst eine Platine machen oder entsprechende Adapterplatinen verwenden. Mit dem Löten wird es dann zwar bereits etwas heikler, doch mit ruhiger Hand und etwas Übung sollte diese Aufgabe zu meistern sein.

Zu den Anschlüssen:
Wer schon mit dem I²C Bus gearbeitet hat, weiß, dass SCL und SDA der Kommunikation dienen. Auf die beiden Pins zur Spannungsversorgung (3-5,5V) muss ich nicht näher eingehen. A0:2 sind Adresspins, mit denen die Adresse des Sensors variiert werden kann (Pins auf H- oder L-Pegel legen). Es können so maximal 2^3 = 8 Sensoren am Bus betrieben werden. Die restlichen 5 Adressbits sind vom Hersteller vorgegeben. Pin 3 dient zum signalisieren einer detektierten Übertemperatur. Diese kann programmiert werden.
Es sollte wie immer ein 100nF Kerko zwischen Betriebsspannung und Masse angebracht werden, das ganze möglichst nahe am IC.

Die Adresse:

 1    0    0    1    A2    A1    A0    R/W  

Die Temperatur des Sensors wird durch ein 9 Bit langes Zweierkomplementwort repräsentiert.

Der LM75 hat insgesamt 4 Register, von denen hier aber nur eins von Belang sein soll: das Temperaturregister. Um lediglich eine Temperatur auszulesen kann ein Zugriff auf das enthaltene Konfigurationsregister entfallen. Zusätzlich existiert noch ein Zeigerregister, welches festlegt, welches der 4 Register angesprochen wird.

Zur Kommunikation:

Sie startet wie immer beim I²C-Bus mit einem START. Danach folgt die Adresse des Slave. Nun muss ein Byte gesendet werden, welches dem Zeigerregister mitteilt, auf welches Register zugegriffen werden soll. Der Zeiger auf das entsprechende Register wird intern gespeichert, so dass man nicht jedes mal neu das Temperaturregister auswählen muss, auf welches man zweifelsohne am häufigsten zugreifen wird. Für das Temperaturregister muss als Pointerbyte (Zeigerbyte) 0x00 gesendet werden, für das Konfigurationsregister 0x01. Musste das Zeigerbyte gesetzt werden, so muss nach dem Beschreiben des Pointerregisters ein REPEATED START ausgeführt werden. Danach muss die Adresse des Sensors erneut gesendet werden. Dann kann auf die einzelnen Register zugegriffen werden. Steht der Zeiger bereits auf dem richtigen Register, so reicht ein normaler START gefolgt von der Adresse. Da der das Pointerregister nach dem Power-On automatisch auf das Temperaturregister zeigt, bleibt dem Anwender, der nur an der Temperatur interessiert ist, die obige Prozedur erspart.
Um die Temperatur zu erhalten, müssen Lesezyklen erzeugt werden. Dann müssen zwei Bytes ausgelesen werden, von denen der Master das erste mit ACK zu bestätigen hat. Die Temperatur wird mit dem MSB (most significant bit) voran übertragen.

Der Sensor braucht für eine Temperaturkonvertierung 100ms. Diese führt er selbständig aus, es sei denn man versetzt ihn in den hier nicht weiter erklärten Energiesparmodus. Man sollte das nur nach dem Einschalten beachten, da der Inhalt des Temperaturregisters in den ersten 100ms alles andere als die richtige Temperatur enthält.

Wer bereits mit dem TWI des ATMega gearbeitet hat, dem dürfte das Verstehen der von mir bereits gestellten rudimentären Routinen keine Probleme bereiten. Den Anfänger möchte ich hiermit vorerst auf die Rubrik TWI verweisen, um auch ihm Gelegenheit zur Erleuchtung zu geben :-)

Der Download kann entweder hier oder unter Programme erfolgen. Da der Sensor nur alle 100ms einen neuen Messwert zur Verfügung stellt, sollte man ihn mit einer Frequenz kleiner 10Hz abfragen. Ansonsten bricht er ständig die aktuelle Messung ab, gibt den alten Wert aus und startet eine erneute Messung. Wenn er diese wieder nicht beenden kann, bleibt man auf Dauer immer bei einer Temperatur. Deshalb habe ich im Projekt einen Timer verwendet, der den Sensor zweimal in der Sekunde abfragt und die Daten wie fast immer auf ein LCD ausgibt.

 

Zurück zur Startseite.