Homepage Wiki Forum Buy

Temperatursensor LM75

Aus GNUBLIN

(Weitergeleitet von LM75)
Schwierigkeitsgrad Voraussetzung Gnublin Familie
Gnublin logo easy.png Grundkenntnisse Konsole Alle

Inhaltsverzeichnis


Um Temperatur messen zu können bietet sich der LM75 an. Dieser ist ein klassischer Chip, der an einem I2C Bus betrieben werden kann. Das hat den Vorteil, dass man bis zu 8 Bausteine an einem I2C Bus verwenden kann.

Quickstart

In diesem Artikel wird kurz erläutert wie man die Temperatur, mithilfe von LM75 Temperatursensoren, misst. Die Sensoren werden über I2C angesprochen. Je nachdem wie die Jumper gesteckt sind (Pins 5, 6 und 7 der LM75 Sensoren) ändert sich die I2C Adresse des Sensors.


MODULE-TEMPSENSOR SCHRAEGBILD 001.jpg


Für einen Schnelltest steckt man am besten alle Jumper nach außen ("High" Markierung auf dem Board).

Hinweis: Das Flachbandkabel hat auf einer Seite eine rote Markierung. Diese muss beim Gnublin Board dort sein, wo GPA0 steht.

Dann kann man direkt auf der Kommandozeile die Temperatur abholen:


Temperatur abholen:

root@gnublin:~# gnublin-lm75

Als Ausgabe erhält man direkt die Temperatur:

21.000 °C

Das sind dann 21 Grad Celsius.

Bei RaspberryPi entsprechend:

pi@raspberrypi ~ $ sudo gnublin-lm75


Bzw. im JSON Format:

root@gnublin:~# gnublin-lm75 -j

Als Ausgabe erhält man

{"temperature" : "21.000","result" : "0"}


Verwendet man nur ein I2C-Modul aus dem Shop muss darauf geachtet werden, dass beide Jumper für die Pullups (Jumper neben dem Wannenstecker) gesteckt sind. Falls man mehrere Module anschließen will reicht es aus auf einem Modul die Pullup-Jumper zu stecken.

Für Anfänger

(Für die Verwendung des LM75 Temperatursensor Modul aus dem embedded-projects Shop: )

Verwendet man nur ein I2C-Modul aus dem Shop muss darauf geachtet werden, dass beide Jumper für die Pullups (Jumper neben dem Wannenstecker) gesteckt sind. Falls man mehrere Module anschließen will reicht es aus auf einem Modul die Pullup-Jumper zu stecken.

In der aktuellen Gnublin Distribution sind alle Treiber bereits in den Kernel einkompiliert und die benötigten i2c-tools ebenfalls schon vorinstalliert. Bevor man jedoch anfangen kann muss man zuerst die I2C-Adresse auf dem Modul einstellen. Hierfür sind drei Jumper auf dem Modul vorhanden. Nachfolgend sieht man die I2C-Adresse im Bezug zur Jumperstellung.

JP1 JP2 JP3 I2C-Adresse
LOW LOW LOW 0x48
HIGH LOW LOW 0x49
LOW HIGH LOW 0x4A
HIGH HIGH LOW 0x4B
LOW LOW HIGH 0x4C
HIGH LOW HIGH 0x4D
LOW HIGH HIGH 0x4E
HIGH HIGH HIGH 0x4F

Für einfaches und sofortiges Auslesen der Temperatur des Sensors wurde ein kleines C-Programm implementiert:

gnublin-lm75 -a <address>

Will man nun den Wert eines Sensors auslesen, so macht man folgendes:

gnublin-lm75 -a 0x48

Nun sollte der Ausgabewert in °C (Grad Celsius) ausgegeben werden.

Für Fortgeschrittene

Vorbereitungen

Zuerst werden die Leitungen SCL, SDA, GND und VCC des Gnublins mit den Sensoren verbunden. Zu beachten ist, dass I2C Pullupwiederstände benötigt, das heißt man verbindet die Leitung SDA und SCL über 4,7kOhm Widerstände mit VCC.

Hier sieht man den Aufbau des I2C-Bus.

Diagram1.jpg

Und hier sind die einzelnen Pins des LM75 Sensors.

LM75 pins.jpg

Möchte man mehrere LM75 Sensoren an einen Bus hängen, so muss man die Pins A0, A1 und A2 unterschiedlich mit VCC und GND verbinden. Eine beispielhafte Beschaltung für vier LM75 Sensoren könnte folgendermaßen aussehen:

Sensornr. A0 A1 A2 I2C-Adresse
1 VCC GND GND 0x49
2 GND VCC GND 0x4A
3 GND GND VCC 0x4C
4 VCC VCC GND 0x4B

Kernelmodule

Kerneloptionen die aktiviert werden müssen(falls man den Kernel von Hand bauen will oder einen alten Kernel besitzt):

Device Drivers -> I2C Support -> I2C Hardware Bus Support -> I2C Bus support for Philips PNX targets
Device Drivers -> Hardware Monitoring Support -> National Semic. LM75 and compatibles

Kernel und Module kompilieren und kopieren.(siehe Kernel kompilieren + Module installieren)

Gnublin booten.

Auslesen der Temperatur mit hwmon

Modul laden:

modprobe i2c-pnx
modprobe lm75

Die Ausgabe sieht folgendermaßen aus, für vier LM75 Sensoren die alle an einem Bus hängen.

pca9532 0-0060: setting platform data i2c i2c-0: Master timed out. stat = 2200, ctrl = 0007, state = 1. Resetting master... i2c i2c-0: Master timed out. stat = 2200, ctrl = 0007, state = 1. Resetting master... i2c i2c-0: Master timed out. stat = 2200, ctrl = 0007, state = 1. Resetting master... i2c i2c-0: Master timed out. stat = 2200, ctrl = 0007, state = 1. Resetting master... i2c i2c-0: Master timed out. stat = 2200, ctrl = 0007, state = 1. Resetting master... i2c i2c-0: Master timed out. stat = 2200, ctrl = 0007, state = 1. Resetting master... i2c i2c-0: Master timed out. stat = 2a00, ctrl = 0007, state = 1. Resetting master... i2c i2c-0: Master timed out. stat = 2a00, ctrl = 0007, state = 1. Resetting master... i2c i2c-0: Master timed out. stat = 2a00, ctrl = 0007, state = 1. Resetting master... i2c i2c-0: Master timed out. stat = 2a00, ctrl = 0007, state = 1. Resetting master... i2c i2c-0: Master timed out. stat = 2a00, ctrl = 0007, state = 1. Resetting master... i2c i2c-0: Master timed out. stat = 2a00, ctrl = 0007, state = 1. Resetting master... i2c i2c-0: Master timed out. stat = 2a00, ctrl = 0007, state = 1. Resetting master... i2c i2c-0: Master timed out. stat = 2a00, ctrl = 0007, state = 1. Resetting master... lm75 1-0049: hwmon0: sensor 'lm75' lm75 1-004a: hwmon1: sensor 'lm75' lm75 1-004b: hwmon2: sensor 'lm75' lm75 1-004c: hwmon3: sensor 'lm75'

Der Treiber erstellt folgende Ordnerstruktur unter /sys/class/hwmon:

|-- hwmon
|   |-- hwmon0 -> ../../devices/platform/pnx-i2c.1/i2c-1/1-0049/hwmon/hwmon0
|   |-- hwmon1 -> ../../devices/platform/pnx-i2c.1/i2c-1/1-004a/hwmon/hwmon1
|   |-- hwmon2 -> ../../devices/platform/pnx-i2c.1/i2c-1/1-004b/hwmon/hwmon2
|   `-- hwmon3 -> ../../devices/platform/pnx-i2c.1/i2c-1/1-004c/hwmon/hwmon3

Hier kann man sehen, dass vier neue "devices" erstellt wurden die den vier Sensoren entsprechen. Nun wechselt man zum Beispiel in das Verzeichnis /sys/class/hwmon/hwmon0/device und sieht dort eine Datei die temp1_input heißt. Um die gemessene Temperatur anzuzeigen muss man nun nur noch diese Datei mithilfe von cat auslesen:

cat /sys/class/hwmon/hwmon0/device/temp1_input

Als Ausgabe erscheint lediglich die Temperatur in ° Celsius.

Hier eine Beispielausgabe:

root@gnublin:~# cat /sys/class/hwmon/hwmon3/device/temp1_input 23000

Auslesen der Temperatur mit den I2C-Tools

Mit folgendem Befehl überprüfen wir, welche Adresse der Sensor hat:

i2cdetect 1

liefert folgende Ausgabe( nach einer kurzen Abfrage, welche man mit Y oder N beantwortet).

 WARNING! This program can confuse your I2C bus, cause data loss and worse!
 I will probe file /dev/i2c-1.
 I will probe address range 0x03-0x77.
 Continue? [Y/n] y
      0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
 00:          -- -- -- -- -- -- -- -- -- -- -- -- -- 
 10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
 20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
 30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
 40: -- -- -- -- -- -- -- -- -- 49 4a 4b 4c -- -- -- 
 50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
 60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- 6e -- 
 70: -- -- -- -- -- -- -- --     

Da in unserem Versuchsaufbau 4 Sensoren angeschlossen wurden, sehen wir nun dass 4 Sensoren gefunden wurden (Adresse 49, 4a, 4b und 4c). Hinweis: Die Adresse 6e ist die Adresse vom Gnublin

Sollte beim Aufruf von i2cdetect 1 die Fehlermeldung Error: Could not open file `/dev/i2c-1': No such device auftauchen muss der i2c-pnx-Treiber geladen werden:

modprobe i2c-pnx

Nun können wir die aktuelle Temperatur erfragen:

i2cget -y 1 0x49

liefert dann zum Beispiel die folgende Ausgabe:

0x18

Der Ausgabewert ist in Hexadezimaler Darstellung

Das -y im Kommando bedeutet nur, dass die Abfrage nicht mehr kommen soll ob das Gnublin wirklich senden soll.

Der Syntax des Befehls lautet:

i2cget -y I2CDEVICE SLAVE-ADRESSE

wobei I2CDEVICE die 1 ist und die SLAVE-ADRESSE, die vorhin ermittelte Adresse des Sensors.

In anderen Sprachen