Anscheinend dreht die Methode wiringPiI2CWriteReg16() die 2 Bytes, laut Datenblatt müsste es genau anders herum sein. Aber das stört nicht weiter. Den Quellcode des Programms finden Sie auf der Heft-DVD; Sie kompilieren ihn wie in Listing 3 beschrieben.
Listing 3
$ cc lm75.c -lwiringPi $ ./a.out Temp:21,0
Alarmausgang
Für das nächste Beispiel sehen Sie sich die Register des LM75 etwas genauer an: Register 0x03h steht für die Temperatur, ab deren Wert der Sensor den Alarm auslöst. Register 0x02h liefert die Temperatur, die es zu unterschreiten gilt, um den Alarm zu beenden.
Die beiden 16-Bit-Register sind so aufgebaut wie 0x00h. Das bedeutet, das niederwertige Byte liefert die Ganzzahltemperatur, das höherwertige die Nachkommastelle (0,5), wenn es einen Wert enthält. Bei einem 8-Bit-Zugriff auf die Register 0x00h, 0x02h und 0x03h erhalten Sie immer lediglich den ganzzahligen Anteil des Wertes.
Eine Anmerkung noch zum Wert in Register 0x02h: Er muss auf jeden Fall niedriger sein als der in 0x03h. So verhindern Sie ein zu schnelles Ein- und Ausschalten, ein Verhalten, das in der Fachliteratur Hysterese heißt. Es ergibt Sinn, mehrere Grad Celsius zwischen den Werten zu wählen.
Um das Prinzip des Programms zu verdeutlichen zeigt das folgende Beispiel den Zugriff nur mit 8 Bit. Das Register 0x01hlegt das Schaltverhalten des LM75 fest. Tabelle “Register 0x01h” zeigt, wie das Register 0x01h aufgebaut ist und welche Funktionen die einzelnen Bits mitbringen.
Register <C>0x01h<C>
|
D7 bis D5 |
immer null |
|
D4 und D3 |
Fehlerzähler |
|
D2 |
OS-Polarität |
|
D1 |
Verhalten von OS |
|
D0 |
Shutdown |
Im Beispiel (Listing 4) verhält sich der Sensor wie ein einfacher Regler für die Belüftung. Daher setzen Sie alle Bits im Register 0x01h auf null. Mit den Zeilen aus Listing 5 kompilieren und starten Sie das Programm. Das Datenblatt [2] beschreibt detailliert die Funktionsweise der einzelnen Bits.
Listing 4
#include <wiringPiI2C.h>
#include <stdio.h>
int main (void) {
int tein=26;
int taus=23;
int handle = wiringPiI2CSetup (0x48) ;
wiringPiI2CWriteReg8(handle,0x01,0x00);
wiringPiI2CWriteReg8(handle,0x02,taus);
wiringPiI2CWriteReg8(handle,0x03,tein);
while(1) {
int temp=wiringPiI2CReadReg8(handle,0x00);
printf("Temp:%d\n",temp);
delay(500);
}
return 0 ;
}
Listing 5
$ cc lm75regler.c -lwiringPi $ ./a.out Temp:21 [...] Temp:23
Fazit
Der Sensor LM75 arbeitet durch seine integrierte Logik komplett unabhängig. Einmal programmiert regelt er ohne weiteres Zutun auf Basis der Temperatur einen Lüfter oder überwacht schlicht die Werte – allerdings nur, solange Sie ihn mit der Betriebsspannung versorgen. Ist diese einmal unterbrochen, müssen Sie ihn neu programmieren. Seinen Energiebedarf setzen Sie aber bei Bedarf durch die Shutdown-Funktion auf 4 Mikro-Ampere herab. Alles in allem ein flexibler Sensor mit viel Potenzial.
Infos





