Hallo, ich hoffe ihr könnt mir weiterhelfen. Im Rahmen eines Uni Projekts wurden 3 Hygrosens TEMOD I2C ASIC PT1000(480°) Module bestellt. (http://shop.hygrosens.com/Sensormodule-acma/Temperatur-Sensormodule/Digitaler-Ausgang-I-C/Innovatives-ASIC-Modul-zur-Temperaturmessung-acma-1.html) Kommunizieren sollten diese mit dem USB I2C Interface Bausatz von ELV. (http://www.elv.de/output/controller.aspx?cid=74&detail=10&detail2=24012&flv=1&bereich=&marke=) Abgesehen davon, dass wohl ein I2C Switch benötigt, wird um später drei von diesen an einem Bus zu betreiben, scheitere ich bislang schon beim ansprechen der Temperaturmodule. Der Interface Bausatz wurde zusammengebaut, Treiber und Firmware (1.6) auch auf aktuellem Stand. Das USB Interface antwortet auch soweit auf alle Befehle. Standard Einstellungen laut Dokumentation. 100khz, Baudrate 115200, 8Daten,1Stop etc. Verwendet wird die Software HTerm. Alle Kontakte sowohl von Sensoren als auch beim Bausatz wurden überprüft. Alles laut Dokumentation verkabelt. Die Temperaturmodule werden von einem nicht stabilierten 9V Netzteil bei ca 14V gespeist. Der Analoge Ausgang wird auch korrekt ausgegeben (laut Multimeter), das Modul arbeitet also. Die Adresse zum Lesen der 2 Byte für die Temperatur ist rechnerisch und auch laut diesem Forum 0xF1 (/0xF0). Laut I2C ASIC Doku (A0/A1). Der Befehl zum Auslesen sollte <S F1 02 P> lauten? Als Antwort erhalte ich lediglich TWI:Read Error, bei den jeweiligen obigen Adressen. Mit nem Logikfühler hab ich die SDA und SCL Leitungen überprüft, die Signale scheinen korrekt übermittelt zu werden. Bislang hab ich das ganze bei 100khz,200khz und 400khz getestet. In der Dokumentation zu den Thermomodulen steht, dass diese auf jedes gelesene Byte ein ACK vom Master erwartet und was von ACK related Clock Pulse?(ich hoffe das ist standard) Ansonsten bin ich langsam mit meinem Latein am Ende. Da ich I2C Neuling bin, könnte es sein das ich irgendeine Einstellung den Bus selbst betreffend noch nicht so wahrgenommen habe. Vielen Dank schonmal. Gruß DisM
Im Anhang erstmal die Dokumentationen die ich zuvor vergessen hab. Vllt. hilfts wenn ich die generelle Frage stelle, welche typischen Fehler beim I2C Bus zu einem Read Error führen? Einige im Forum verwenden ähnliche Module von Hygrosens. Muss ich diese erst für I2C initialisieren, bevor ich sie verwenden kann? Um in der Zwischenzeit irgendwas messen zu können, würd ich gern die Analogen Messsignale verwenden. Im Anhang meine Schaltung. Sie besteht aus einem I2C Switch (PCA9546AD), 4x 12Bit ADC MCP3221 und nem OPV MCP6234. Das ganze wird mit 5V vom USB I2C Interface gespeist. Es gibt nen digital und analog GND. OPV und ADCs unterstützen 0-5V Input. Vllt. hat ja jemand kurz Zeit draufzuschauen und mir ein Okay zu geben ob das so passt. Spezielle Frage hätte ich noch wegen der Bypass C. Die einzelnen Chips werden mit Adapterplatinen auf ner Lochrasterplatine verschaltet, anders als beim normalen PCB und SMD Teilen dürfte die Leitung zum IC länger ausfallen. Sollte man in diesem Fall ne höhere Kapazität als Bypass auswählen? Gruß DisM
> Der Befehl zum Auslesen sollte <S F1 02 P> lauten?
Das Zeichen < startet eine Makro-Ausführung an der nachfolgend zu
übergebenden Makro-Speicheradresse. Ich vermisse in deiner Sequenz die
Makro-Speicheradresse.
Wie hast du die Sensoren an den I2C-Bus angeschlossen und welche
Pull-Up-Widerstände benutzt du am I2C-Bus oder braucht man die laut Doku
des USB-I2C-Interfaces nicht (finde dazu nix in der PDF-Doku)?
>Die Adresse des Bausteins ist default 0x78, unter >dieser Adresse ist der Baustein immer anzusprechen. Die Adresse wird meist als 7 Bit angegebn , ohne RW Bit Bedeutet folgendes 0x78 ist 0111 1000, erstes Bit abschneiden und ne 0 hinten dranhängen 1111 0000 Ist für mich auch 0xF0 Habe aber den Eindruck dass das ELV Ding die Adressen anders angibt. Hast du es mal mit der 0x78 probiert?
Hallo, also das mit den Klammern war mein Fehler..hätte Anführungszeichen verwenden sollen. Also ich sende normal SF1 02 P. (ohne makro support vom I2C USB interface zu nutzen). Ich habs mit 0x78 probiert, genauso mit 0x79. Im Schaltplan zu dem USB Interface, sind die SDA und SCL Leitungen jeweils mit 10kOhm Pullups versehen, deswegen denke ich das man nicht noch extra welche braucht. Die Sensoren sind über einen Steckkontakt mit den Modulen verbunden. Wir haben zwar neue Stecker und Buchsen dran gemacht (Crimp Kontakte) aber auch da funktionieren eigentlich alle Kontakte. Der Analog Ausgang hat auch eine Spannung ausgegeben, finde leider grad die Notizen nicht und werd morgen schauen ob da was brauchbares rauskommt bzw. ob das Modul auch ohne Sensor den analogen Ausgang schaltet. Laut den Beispielen in der I2C Interface Doku, hält man sich an die normale Adressierung?! Gruß
Ich habe die Module bei C.. gekauft. Das sollte aber, soweit ich weiß, egal sein. Eine Aktivierung des I2C Busses o.ä. ist nicht notwendig. Hier ein Auszug aus meinem Arduino Code: #define ADDR_I2CPT1000 0x78 ... Wire.requestFrom(ADDR_I2CPT1000,2); // read 2 bytes if(Wire.available()==2) { Th = Wire.receive(); // receive 1st byte Tl = Wire.receive(); // receive 2nd byte val = double((Th<<8 | Tl))/256.0 - 32.0; } Gruß Olaf
Strange! 501994_Serial_Digital_Interface.pdf: "The general HYGROSENS ASIC slave address is 0x78 (7bit). As the address is completed with the R/W-Bit as LSB the address Byte (whole 8 bit) for reading data is 0xA1 for reading or 0xA0 for writing data to the ASIC."
@Krapao: das ist genau das was ich meinte. Allerdings funktionieren beide Adressvarianten nicht. Die Module stammen auch von Congrad. Seltsam ist v.a. folgendes: Ich habe nochmal alle Analog Ausgänge der Module mit nem Multimeter gemessen. Das erste Modul das ich heranzog lieferte korrekte 340mV für 22°C. Als ich den Sensor abzog, war zunächst die Spannung negativ -380mV. Danach war der Ausgang stets 1,2V! egal ob mit oder ohne Sensor. Die Stromverbindung jedesmal (auch kurzweilig für Reset) zu kappen änderte soweit auch nichts mehr daran. Die anderen Module lieferten im Blindtest 5V oder ~135mV am Analog Ausgang und mit Sensor temporär 141mV und 110mV. Mittlerweile geben die beiden Module mit und ohne Sensor eine Spannung von 5V und 0.5V aus. Vllt. haben die Module ihre EEPROMS geschrieben und verwenden nun diese dauerhaft für das Setzen der analog Ausgänge. Dann sollte aber durch ein/ und abstöpseln der Reset durchgeführt werden und das Problem bereinigen? Am Anfang hab ich fälschlicherweise versucht die Module mit 5V zu betreiben, Betriebsspannung ist von 6-24V. Wie wahrscheinlich ist es, dass die Module dadurch beschädigt wurden? Im gegenwärtigen Zustand kann ich die Dinger lediglich als Christbaumschmuck verwenden. Immerhin war im Adventskalender eine A/D PCI Karte versteckt, so dass die Schaltung schon mal wegfällt. Danke auch nochmals für die ganzen Antworten. Gruß DisM
Hallo, ich möchte auch ein Hygrosens TEMOD I2C ASIC PT1000(480°) Modul mit einem Arduino auslesen. Leider verstehe ich hier nicht besonders viel. Also, das auslesen des I2C Bus liefert mir den 1. Wert 14 Dezimal und beim 2. Wert 19 Dezimal, und das bei einer (mit anderem Messgerät) gemessenen Temperatur von 22 °C. Die oben beschriebene Berechnung von val "val = double(((Th<<8 | Tl))/256.0) - 32.0;" ergibt den Wert -17. Ich finde nicht heraus, wie ich das Umrechnen kann, um eine schlaue Temperatur zu erhalten. Oder kann mir jemand mal einen kompletten Sourcecode zum auslesen des Hygrosens TEMOD I2C ASIC PT1000(480°) Module senden? Vill. mach ich ja auch was anderes falsch. mein Sourcecode: #include <Wire.h> #define DEV_ID 0x78 int Th,Tl,val =0; void setup() { Serial.begin(9600); Wire.begin(); } void loop() { delay(1000); Wire.requestFrom(DEV_ID,2); // read 2 bytes Th = Wire.receive(); // receive 1st byte Tl = Wire.receive(); // 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); } Vielen dank für eure Bemühunen, mir unwissendem auf die Sprünge zu helfen.
Laut dem Datenblatt musst du bei dem 480°C Modul (Typ R3) eine andere Formel hernehmen! val = double(((Th<<8 | Tl))/64.0) - 32.0; wäre des Rätsels Lösung ;) Siehe Formel bei Typ-R3 Somit komm ich auf: (14*256+19)/64-32=24,3°C Beste Grüße, Hoffe es hilft dir noch was, oder jemand anderem :)
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.