Problem: Arduino UNO & (Temperaturmodul) TEMOD-I2C + PT1000

Hallo,

als Anfänger in der Arduino / Mikrocontroller Welt habe ich folgendes Problem und hoffe Ihr könnt mir weiterhelfen.

Beim auslesen des Temperaturmoduls TEMOD-I2C-R1 (Sensor PT1000) über mein Arduino UNO Rev.3 über SDA und SCL sind alle "temperaturrelevanten" Bits immer 1 - auch bei Temperaturänderung . (Es werden 2 Bytes zurückgegeben) (Sketch weiter unten beigefügt)

Kann es sein, das man das Modul TEMOD-I2C zuerst "einmalig programmieren" muss damit dieses über I2C kommuniziert (wenn ja, wie würde so etwas gehen) , oder ist das Modul u.U. defekt, bzw. müssen prinzipiell alle I2C Module zuerst einmal "programmiert" werden ?

#include <Wire.h>
int temp = 0;
float temperatur = 0.0;
void setup()
{
 Serial.begin(9600);
 Wire.begin();
}
void loop()
{
  Wire.requestFrom(0x78,2); // read 2 bytes
  byte b0 = Wire.read(); // receive 1st byte
  byte b1 = Wire.read(); // receive 2nd byte
  Serial.println(b0); // output for test only
  Serial.println(b1); // output for test only
  
  byte error = (b0 >> 7);
  if (error == 1)
  {
    Serial.println("Error");
  }
  else
  {
    temp = b0 << 8 | b1;
    temp = temp &0x7FFF;
    temperatur = temp / 256.0 - 32.0;
    Serial.print("Temperatur : ");
    Serial.println(temperatur);
  } 
  delay(3000);
}

Ausgabe sieht dann so aus: (Die ersten beiden Zeilen sind natürlich zum prüfen ob sich der Wert eines Bytes ändert)

127
255
Temperatur : 96.00

Gruß
Thomas

Links zu Datenblatt TEMOD-I2C Modul.

http://www.produktinfo.conrad.com/datenblaetter/500000-524999/502001-da-01-de-TEMPERATURMODUL_I2C_32_96_C.pdf

http://www.produktinfo.conrad.com/datenblaetter/500000-524999/502001-da-01-en-ASIC_SERIAL_DIGITAL_INTERFACE_TEMPERATUR.pdf

Hallo,
hilft Dir das weiter ?

#include <Wire.h>
#define DEV_ID 0x78
int Th,Tl =0;
double val =0;
void setup()
{
Serial.begin(9600);
Wire.begin();
}
void loop()
{
delay(1000);
Wire.requestFrom(DEV_ID,2); // read 2 bytes
Th = Wire.read(); // receive 1st byte
Tl = Wire.read(); // receive 2nd byte
val = double(((Th<<8 | Tl))/256.0) - 32.0;
Serial.print("Th=");
Serial.print(Th);
Serial.print(" Tl=");
Serial.print(Tl);
Serial.print(" val=");
Serial.println(val);
}

Gruß und Spaß
Andreas

Hallo Andreas,

danke für den Code.

Das liefert genau das gleiche Resultat da es ja prinzipiell genau das Gleiche macht :slight_smile:

Hast Du bei Dir dieses Modul an einem Arduino auch im Einsatz ? (Falls ja, könnten wir vergleichen um einen Defekt oder sonst. Fehler auszuschließen )

Gruß
Thomas

Stimmt deine Spannungsversorgung? Das Modul läuft mit 6-24V. Mit 5V geht es wahrscheinlich nicht.

Das Ding hat auch einen Analogausgang. Da sollte man mit einem Multimeter was messen können. Oder mit analogRead(). Unabhängig von der I2C Kommunikation. Digital einlesen ist natürlich besser, aber so kannst du mal testen ober der Sensor überhaupt arbeitet.

Hallo,
nein, den Sensor besitze ich zum Glück nicht.
Der Sketch macht im Prinzip das gleiche- man kann also von falsch angeschlossener Hardware ausgehen.
Betriebsspannung ist 6 bis 24v. I2C, 0 bis 5V.
Hast Du 6v als Spannung und den I2C-Bus richtig aufgebaut?
Gruß und Spaß
Andreas

Hallo,

als Stromversorgung für das Modul nutze ich eine 9 Volt Batterie.

Laut Anschluss Belegung vom Modul http://www.produktinfo.conrad.com/datenblaetter/500000-524999/502001-da-01-de-TEMPERATURMODUL_I2C_32_96_C.pdf
Hier wird zwar erwähnt das PIN 1 mit einem weißen Punkt gekennzeichnet ist, aber bei dem erhaltenen Modul ist das nicht der Fall, aber wenn das Modul falsch angeschlossen wäre, könnte ich es dann überhaupt mit seiner Adresse ansprechen und 2 Bytes auslesen ?

Modul Arduino UNO Rev.3

Pin 1 = Batterie (+ 9V)
Pin 2 = Batterie (-) (Ground) - GND (neben AREF)
Pin 3 = SDA - SDA (neben AREF)
Pin4 = SCL - SCL (neben AREF)

Die Spannungsversorgung des Arduino UNO wird ja über PC - USB bereitgestellt.

Der Widerstand der Sensors (PT1000) ändert sich durch Handerwärmung, allerdings wenn ich den Analogausgang des Moduls (Pin5) gegen Minus oder gegen Plus (der Batterie) messe kann ich im keine Spannungsänderung im Bereich 2 Nachkommastellen, mit Handerwärmung feststellen.

Gruß
Thomas

Hallo,
das:
I2C-Interface
Die Kommunikation entspricht dem I2C Protokoll. Die Adresse des Bausteins ist default 0x78, unter dieser Adresse ist der Baustein immer anzusprechen. Zusa?tzlich kann bei der Konfiguration im Werk eine zweite Adresse programmiert werden, unter welcher der Sensor angesprochen werden kann.
Ab der Adresse 0x78 ko?nnen 4 Bytes gelesen werden. Es gilt folgen- de Zuordnung
Daten 0x78
Byte_0 MSB Thermospannung Byte_1 LSB Thermospannung Byte_2 MSB Ausgleichstellen-Temperatur Byte_3 LSB Ausgleichstellen- Temperatur
hast Du berücksichtigt.
Gruß und Spaß
Andreas
P.S. Seite 2 und 3?

THMOD-I2C_DB-de_en.pdf (918 KB)

SkobyMobil:
Hallo,
das:
I2C-Interface
Die Kommunikation entspricht dem I2C Protokoll. Die Adresse des Bausteins ist default 0x78, unter dieser Adresse ist der Baustein immer anzusprechen. Zusa?tzlich kann bei der Konfiguration im Werk eine zweite Adresse programmiert werden, unter welcher der Sensor angesprochen werden kann.
Ab der Adresse 0x78 ko?nnen 4 Bytes gelesen werden. Es gilt folgen- de Zuordnung
Daten 0x78
Byte_0 MSB Thermospannung Byte_1 LSB Thermospannung Byte_2 MSB Ausgleichstellen-Temperatur Byte_3 LSB Ausgleichstellen- Temperatur
hast Du berücksichtigt.
Gruß und Spaß
Andreas
P.S. Seite 2 und 3?

Das von Dir verlinkte PDF gehört zu einem ähnlichen Modul aber nicht zum Gleichen. Hat also prinzipiell mit meiner Frage warum mein Modul weder einen Änderung am analogen Ausgang noch eine Änderung über die ausgelesene Bytes anzeigt , nichts zu tun. Trotzdem Danke.

Laut der Protokolbeschreibung gibt es auch Kommandos wie 0x01: START_CYC_EEP Start measurement cycle including initialization from EEPROM

Steht zwar nirgends dass man das wirklich machen müsste, aber schaden tut es vielleicht nichts. Und danach mindestens 350µs warten.

Hallo,
"DIE" haben es auch zum laufen bekommen- warum Du nicht?
http://forum.arduino.cc/index.php/topic,90805.0.html
Gruß und Spaß
Andreas

Update:

Nachdem ich ein neues Modul TEMOD-I2C-R1 bestellt und erhalten habe, funktioniert alles auf Anhieb.

(Das erste Modul was ich erhalten habe war wohl ein Rückläufer o.Ä , da im neu erhaltenen das korrekte Datenblatt dabei war, und noch der Aufkleber auf dem Chip mit der genauen Bezeichnung des Moduls)

PS: Die Versorgungsspannung des Moduls ist zwar von 6 - 24 Volt angegeben, funktioniert nach meinen ersten Tests aber auch mit 5 Volt vom Arduino Board Ausgang (I2C und Analog) ohne BISHER erkennbaren Nachteile ... Ob die Genauigkeit in bestimmten Temperaturbereichen darunter "leidet" habe ich noch nicht getestet.

Gruß
Thomas

Hallo Alle,

etwas spät aber doch noch.
Habe soeben auch mit dem Problem wie Thomas gekämpft.
Nun des Rätsels Lösung ist:
Das Modul TEMOD-I2C-R3 ist doppelseitig bestückt aber die Lötanschlüsse für den PT1000 sind nicht durchgeführt. Das heisst wenn ich den PT1000 auf der Seite mit dem IC anlöte dann habe ich das selbe Resultat wie Thomas am Anfang. Löte ich den PT1000 auf der anderen Platinenseite an so funktioniert alles bestens.
Das sollte aber auf jedenfall vom Hersteller kommuniziert werden.

Herzliche Grüsse,
Urs