I2C Zugriff auf DS1621 mit Java Library

Dies ist das deutsche Forum für alle Themen um den IO-Warrior. Beiträge bitte nur in Deutsch.

Moderator: Guido Körber

Post Reply
Didi
Posts: 19
Joined: Mon Apr 19, 2004 8:08 pm
Location: Warendorf

I2C Zugriff auf DS1621 mit Java Library

Post by Didi »

Hallo Leute,

ich versuche mit der iowj0.9.5rc1-1.jar vom Thomas Wagner auf ein DS1621 Digital Thermometer zuzugreifen. Dazu benutzt ich die Java Klasse LM75, da dieser dem DS1621 ja sehr ähnlich sein soll... Wenn ich das richtig verstehe braucht der DS1621 "nur" ein zusätzliches Startsignal (Wenn ich mir das mal vorher richtig durchgelesen hätte, hätte ich mir gleich den LM75 besorgt. Hätte-Hätte-Fahrradkette :-/

Hab die Example Klasse ein wenig nach meinen Bedürfnissen umgeschrieben (deviceAddress = 0x0) und bekomme dann folgende Consolenausgabe:

Code: Select all

java.lang.Exception: Error in writeI2C[null]: Error bit set!
	at de.wagner_ibw.iow.i2c.AbstractI2CDevice.writeI2C(AbstractI2CDevice.java:125)
	at de.wagner_ibw.iow.i2c.LM75.setRegisterPointer(LM75.java:264)
	at de.wagner_ibw.iow.i2c.LM75.getT(LM75.java:164)
	at de.wagner_ibw.iow.i2c.LM75.init(LM75.java:151)
	at de.wagner_ibw.iow.i2c.LM75.setIowDevice(LM75.java:307)
	at de.wagner_ibw.iow.i2c.I2C.addI2CDevice(I2C.java:78)
	at com.didi.example.LM75Example.doit(LM75Example.java:85)
	at com.didi.example.LM75Example.main(LM75Example.java:65)
LM75:SlaveAddress[9/0],tCurr[0.0],tOs[80.0],tHyst[75.0]
IOW40:Handle[140181977952672],Id[5376],Rev[1021],Serial[0000062C],Listener[0],SpecialMode: I2C
	P0[IoMask[SSIIIIII],Data[XX111111],Listener[0]]
	P1[IoMask[IIIIIIII],Data[11111111],Listener[0]]
	P2[IoMask[IIIIIIII],Data[11111111],Listener[0]]
	P3[IoMask[IIIIIIII],Data[11111111],Listener[0]]
	I2C:LM75[9/0]

java.lang.Exception: Error in writeI2C[null]: Error bit set!
	at de.wagner_ibw.iow.i2c.AbstractI2CDevice.writeI2C(AbstractI2CDevice.java:125)
	at de.wagner_ibw.iow.i2c.LM75.setRegister(LM75.java:294)
	at de.wagner_ibw.iow.i2c.LM75.setConfiguration(LM75.java:207)
	at com.didi.example.LM75Example.doit(LM75Example.java:109)
	at com.didi.example.LM75Example.main(LM75Example.java:65)
Exception in thread "main" java.lang.NullPointerException
	at com.didi.example.LM75Example.main(LM75Example.java:66)
Hat jemand da draußen mehr Erfahrung mit dieser Library als ich? Bin fast sicher das die Lösung ganz schlicht ist... Aber ich komm gerad nicht drauf.


Vielen Dank schon mal im Voraus
User avatar
Christoph Jung
Posts: 670
Joined: Sun Oct 08, 2006 3:43 pm
Location: Germany / Berlin
Contact:

Re: I2C Zugriff auf DS1621 mit Java Library

Post by Christoph Jung »

Zur Java-Klasse von Herrn Wagner kann ich leider nicht viel helfen.
Ist denn die I2C-Adresse richtig? Er schreibt ja was von "Error in writeI2C[null]"....
Abteilung: Softwareentwicklung
Folge uns auf Twitter
Follow us on twitter
Didi
Posts: 19
Joined: Mon Apr 19, 2004 8:08 pm
Location: Warendorf

Re: I2C Zugriff auf DS1621 mit Java Library

Post by Didi »

Nabend,

ich hab inzwischen mal "Simple-I2C" auf meine Schaltung losgelassen: (Ist das eigentlich das oft erwähnte "All in One" Tool? :-).
screenshot Simple I2C
screenshot Simple I2C
simpleI2C.jpg (89.55 KiB) Viewed 6517 times
IOW40 & mein DS1621 werden richtig erkannt. Adresse scheint auch ok:

hex 48 ->
[1001] [0 0 0]
[ fix ] [A2 A1 A0]

[ 9 ] [ 0 ]

Außerdem hab ich zusätzliche Debug Ausgaben in Herrn Wagners Java Klassen aktiviert. Diese sagen dann eigentlich das selbe wie "Simple-I2C":

Code: Select all

...
Monitor[LM75:SlaveAddress[9/0],tCurr[0.0],tOs[80.0],tHyst[75.0]] 	setCurrentDevice(LM75:SlaveAddress[9/0],tCurr[0.0],tOs[80.0],tHyst[75.0])		returned true
Monitor[LM75:SlaveAddress[9/0],tCurr[0.0],tOs[80.0],tHyst[75.0]] beginTransmission(LM75:SlaveAddress[9/0],tCurr[0.0],tOs[80.0],tHyst[75.0]) O.K.

writeI2C[LM75:SlaveAddress[9/0],tCurr[0.0],tOs[80.0],tHyst[75.0]]: write 8 byte(s)
abtractI2CDevice.reportReceived() received report: 2
	writeI2C[LM75:SlaveAddress[9/0],tCurr[0.0],tOs[80.0],tHyst[75.0]]: read 8 byte(s)
	writeI2C[LM75:SlaveAddress[9/0],tCurr[0.0],tOs[80.0],tHyst[75.0]]: acknowledge read failed
Monitor[LM75:SlaveAddress[9/0],tCurr[0.0],tOs[80.0],tHyst[75.0]] abortTransmission(LM75:SlaveAddress[9/0],tCurr[0.0],tOs[80.0],tHyst[75.0])...
...
nämlich dass "acknowledge read failed" (zweitletzte Zeile)

Hängt das mit diesem zusätzliches Startsignal, das ja für den DS1621 wohl nötig ist, zusammen? Ich schnall’ nicht wie ich dieses Start- bzw. Stopsignal übertragen soll!?


Grüsse,
Didi
User avatar
Christoph Jung
Posts: 670
Joined: Sun Oct 08, 2006 3:43 pm
Location: Germany / Berlin
Contact:

Re: I2C Zugriff auf DS1621 mit Java Library

Post by Christoph Jung »

Nein das ist nicht das All-In-One Tool, das kommt von Ralf Greinert ( http://greinert-dud.de/ ) und unterstützt alle Funktionen des IO-Warriors. Das "Simple I2C" ist von uns direkt und nur für I2C gedacht. Aber beide funktionieren bei I2C Gleich.

Das Start und Stop-Bit werden von der Software automatisch erzeugt. Es ist also nicht notwendig diese per Hand zu setzen. Auch die Leseadresse wir automatisch generiert.

Laut Datenblatt muss man wohl 0xAA schreiben um dann 2 Byte lesen um die Temperaturdaten zu bekommen.
Abteilung: Softwareentwicklung
Folge uns auf Twitter
Follow us on twitter
Didi
Posts: 19
Joined: Mon Apr 19, 2004 8:08 pm
Location: Warendorf

Re: I2C Zugriff auf DS1621 mit Java Library

Post by Didi »

jou, nach ein wenig hin und her klappt jetzt die Kommunikation mit dem Test Tool schon mal.
Was wird da nach jedem Schreibbefehl eigentlich zurück gelesen? (siehe Screenshot -> 02 00 00)
log
log
Untitled.png (18.85 KiB) Viewed 6499 times
Sind damit die 2 Byte gemeint, die beim nächsten Lesevorgang zurück kommen?

Mit Java klapp's aber leider nach wie vor nicht. Wobei ich im log auch den Rückgabewert "2" sehe (zweite Zeile)

Code: Select all

...
writeI2C[LM75:SlaveAddress[9/0],tCurr[0.0],tOs[80.0],tHyst[75.0]]: write 8 byte(s)
abtractI2CDevice.reportReceived() received report: 2
	writeI2C[LM75:SlaveAddress[9/0],tCurr[0.0],tOs[80.0],tHyst[75.0]]: read 8 byte(s)
	writeI2C[LM75:SlaveAddress[9/0],tCurr[0.0],tOs[80.0],tHyst[75.0]]: acknowledge read failed
...
Scheint sich ja schon mal was zu rühren...

Da geht noch mehr :-) Ich bleibe dran!


Gruss,
Didi
User avatar
Christoph Jung
Posts: 670
Joined: Sun Oct 08, 2006 3:43 pm
Location: Germany / Berlin
Contact:

Re: I2C Zugriff auf DS1621 mit Java Library

Post by Christoph Jung »

Das ist der ACK-Report, der nach dem schreiben gelesen wird (werden sollte).
"02 00 00" bedeutet in diesm Fall, dass 2 Byte erfolgreich übertragen wurden. Wenn 3 Byte übertragen werden steht dann hal "03 00 00 00" drin.

Was der Fehler im Java-Script anbelangt ist der nicht wirklich aussagekräftig.
Könnte aber sein, da das Schreiben anschreinend funktioniert, das die Leseadresse noch falsch ist. Welche Lese-Adresse wird denn verwendet? Oder kann man nur Schreib-Adresse angeben?
Abteilung: Softwareentwicklung
Folge uns auf Twitter
Follow us on twitter
Didi
Posts: 19
Joined: Mon Apr 19, 2004 8:08 pm
Location: Warendorf

Re: I2C Zugriff auf DS1621 mit Java Library

Post by Didi »

Jou, ich hab's geschafft... Musste mich doch tiefer in die Materie einarbeiten als mir eigentlich lieb war. Nur um festzustellen, dass der LM75 ganz anders ist als DS1621 :-/
Jetzt kann ich euch endlich mitteilen wie warm es in meinem Wohnzimmer ist! Die Console spuckt folgendes aus:

Code: Select all

Temperature:		22.0°C; TH: 70.0°C; TL: 2.0°C
Higher-Resolution Temp:	21.8125°C

Config Byte:		10001110
Conversion Done bit: 	Conversion complete
Temperature High Flag: 	Not set
Temperature Low Flag: 	Not set
Nonvolatile Memory Busy Flag: 	Is not busy
Output Polarity Bit: 	Active high
One Shot Mode:		OFF; Continuously perform temperature conversion
Hab das Ergebnis meiner Bemühungen mit dran gehängt. Vielleicht finden die Klassen ja mal Eingang in eine neue Release von Herrn Wagners IOWJ Projekt.


Gruss und bis zum nächten Problem,
Didi
Attachments
DS1621.zip
I2C Communication Java Classes
(12.56 KiB) Downloaded 164 times
Post Reply