Benutzer-Werkzeuge

Webseiten-Werkzeuge


hardware:lm75

Temperatur Datenspeicherung LM75:
Es gibt einen sogenannten Temperatur Register, wo alle Temperaturdaten gespeichert werden. In diesem Register wird das digitale Messergebnis festgehalten. Zur Speicherung werden zwei Bytes also 16 Bit verwenden wobei für die reine Speicherung der Temperatur nur 11 Bits verwendet werden. Die Bytes werden Most significant (MSB) Byte und Least significant Byte(LSB) genannt. Das erste Bit eines Bytes ist als Vorzeichen reserviert, da das duale Zahlensystem keine Vorzeichen kennt steht die 0 für + und die 1 für -. Bei der Auswertung der Daten beziehungsweise bei der Übermittlung der Daten an den Bus nur jeweils die ersten 11 Bits (MSB) wichtig. Die anderen 5 Bits(LSB) sollten ignoriert werden.

Es gibt noch den Pointer Register. In diesem Register wird ein Byte zur Verfügung gestellt und in den letzten beiden Bits werden jeweils die Pointer zahlen der verbleibenden 4 Register gespeichert und die vorderen 6 Bits sind alle gleich 0.

Adressierung LM75:
Um die Temperaturdaten des Sensors auslesen zu können, muss man den Sensor über seine Adresse ansteuern. Für die Adressierung bzw. die Adresse stehen 7 Bit zur Verfügung. Die ersten 4 Bit(MSB) sind statisch(können nicht geändert werden) und hängen vom Hersteller ab. Die letzten 3 Bit(LSB) können jeweils mit einer Verbindung zu einem GPIO Pin oder den Pins VCC und GND des Sensors gesteuert werden. Das untere Bild zeigt die Anschlüsse des Sensors.

Mit Hilfe der Pins A0, A1 und A2 kann man den verbleibenden 3 Bit(LSB) jeweils durch die Verbindung zu den Anschlüssen 4(GND) oder 8(VCC) die Werte 0 oder 1 zuweisen. Alternativ kann man auch die GPIO Pins am Raspberry Pi verwenden und diese auf HIGH oder LOW stellen. Wenn der Sensor nun eine feste Adresse hat, kann man sich diese mit Hilfe des Raspberry Pis und dem Kommando i2cdetect -y 1 anzeigen lassen. Man kann die Adresse des Sensors nun in einer Tabelle sehen. Wichtig ist, dass die Adresse als Hexwert angezeigt wird. Kopiert man sich nun diesen Hexwert, kann man sich die aktuelle Temperatur des Sensors mit dem Befehl i2cget -y 1 „“ 0x00 w anzeigen lassen. Wichtig die beiden Anführungszeichen dienen hier nur als Platzhalter wo die ebend ausgelesene Adresse in Form des Hexwertes mit einem 0x vorangehend eingetragen wird. Das 0x vor der Adresse sagt der I²C Schnittstelle, dass es sich um einen Hexwert handelt. Der Vollständige Befehl könnte also so aussehen i2cget -y 1 0x4f 0x00 w. Als Ausgabe erhält man nun wieder einen weiteren Hexwert. Diesen Hexwert muss man in das Binäre Zahlensystem umwandeln und die beiden Bytes vertauschen um einen Wert zu erhalten. Diesen Wert multipliziert man mit dem Faktor 0,125 um dann letztendlich die aktuelle Temperatur zu erhalten.

import smbus
import time
import subprocess
import os
 
address = 0x48
sleepTime = 1
 
def main():
    lm75a = smbus.SMBus(1)
 
    while True:
        flag = 0
        print("Test")
        curr_temp = lm75a.read_word_data(address, 0x00)
        print(swap_bytes(curr_temp) / 2**8)
        time.sleep(sleepTime)
 
"""
1. HEX -> UMDREHEN (NICHT VERTAUSCHEN) -> BIN
2. BIN -> BYTES RUECKWAERTS LESEN DABEI 5 BITS von HINTEN ENTFERNEN
3. 1 BIT = POS / NEG
4. 11 BIT -> DEC * 0.125
"""
 
def swap_bytes(word):
        return ((word << 8) & 0xFF00) + (word >> 8)
 
def getTemperature(rawData):
    raw = (((rawData << 4) & 0xF0) | ((rawData >> 4) & 0x0F)) / 8.0
    return raw * 0.125
 
if __name__ == "__main__":
    main()
hardware/lm75.txt · Zuletzt geändert: 08.07.2018 01:13 von Gurkengewuerz