I2cdump -y 1 0x37 w im Python script verarbeiten

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
doener1944
User
Beiträge: 3
Registriert: Mittwoch 10. September 2014, 13:35

Mittwoch 10. September 2014, 13:47

Hallo,
Seit einem Jahr experimentiere ich mit meinem Raspberry und baue mir gerade eine Haussteuerung zusammen. Aber nun mein Problem:
seit Tagen versuche ich dem TMP175 (Temperatursensor) das low und high Byte für die 12 Bit Temperaturmessung zu entlocken. Ich schaffe es nur das Highbyte im 9 Bitmodus auszulesen an das Low Byte komme ich ankeinem anderen Modus (9,10,11,12 Bite) heran und sehe damit nur ganze Temperaturen ohne Nachkommastellen. Aber mit I2cdump -y 1 0x37 w sehe ich die beiden Byts und könnte damit die Temperatur berechnen. Andere Sensoren wie LM 75 usw gehen nicht, da der einzig freie Bereich im I2C Bus die Adressen 0x30 bis 0x37 sind. Alles andere ist weitgehend belegt. Wie kann ich in einem Python Programm diese Werte werde auslesen und auswerten?
Wer hat einen Idee?
Besten Dank
Gruß
Michel
jerch
User
Beiträge: 1630
Registriert: Mittwoch 4. März 2009, 14:19

Mittwoch 10. September 2014, 15:23

Im Datenblatt steht, dass nach Powerup die Pointerregisterbits P0/P1 auf 0/0 gesetzt sind, d.h. Du das Temperaturregister auslesen kannst. Unter Temperaturregister findest Du den Hinweis, dass Du 2 Bytes lesen musst (logisch bei 12Bit-Breite) und das erste Byte den Vorkomma- und das zweite den Nachkommastellen entspricht.

Wie liest Du denn die Vorkommawerte derzeit mit Python aus?
doener1944
User
Beiträge: 3
Registriert: Mittwoch 10. September 2014, 13:35

Mittwoch 10. September 2014, 15:36

Hallo Jerch

in meinem Datenblatt sind es die Bits R1/R0 die auf 0 stehen, wahrscheinlich identisch. Durch ändern der Bits wird die Auslösung geändert:

0 0 9 Bit
0 1 10 Bit
1 0 11 Bit
1 1 12 Bit.
Ist soweit Klar. Der Punkt ist, dass das Byte 1 Adresse 0x00 sowohl das High als auch das ow Byte ausgibt. Im Datenblatt seht aber nicht wie. Ich lese wie folgst aus:
a = bus.read_byte_date(0x37,0x00)
2 maliges auslesen bringt nichts
Die 12 Bit Auflösung ändere ich durch
bus.write_byte_data(0x37,0x01,96) - es werden im 6. und 7 Bit (R0/R1) des Configurationsregister beide Bits gesetzt
Gruß
Michael
jerch
User
Beiträge: 1630
Registriert: Mittwoch 4. März 2009, 14:19

Mittwoch 10. September 2014, 15:45

Vllt hilft Dir das hier weiter: https://www.kernel.org/doc/Documentatio ... s-protocol

Demnach gibts analog zu `read_byte_data` ein `read_word_data`, welches 2Bytes liest. Laut Datenblatt des Sensors muss man 2 Bytes lesen, wiederholtes Lesen eines Bytes gibt immer nur die Vorkommawerte.
doener1944
User
Beiträge: 3
Registriert: Mittwoch 10. September 2014, 13:35

Mittwoch 10. September 2014, 15:59

Danke für den Tipp und den Link, werde mich mal da durcharbeiten.
Gruß
Michael
Antworten