Forum: Mikrocontroller und Digitale Elektronik i2c Fehler bei mit myRio


von Domenic (Gast)


Lesenswert?

Hallo Zusammen

Ich habe folgendes Problem: Ich steuere mit einem Ni myRio (1900 
version) einen lsm9ds0 Sensor auf einer Adafruit Platine an. Das ganze 
wird mit labView programmiert und seiner i2c Library gesteuert. Die 
Register kann man problemlos einzel ein und auslesen, doch will man ein 
burst read oder write machen, funktioniert es nicht. da nur die read 
funktion zeitkritisch ist, habe ich nur diese mit dem Osziloskop 
angesehen: der Part vom myRio scheint eigentlich in Ordnung zu sein, dh. 
ack bits warden gesetzt etc. aber der Sensor schreibt dann so oft wie 
man nach mehr bytes fragt immer nur den wert des ersten registers 
zurück.
was bedeutet, das man das nicht gebrauchen kann...
Das ganze habe ich auch mit einem Arduino mega 2560 getested. dazu habe 
ich die adafruit sensor library verwendet. Bei dieser hat das Burst read 
funktioniert.
Der einzige unterschied im signal ist, dass der Arduino zwischen den 
Bytes ein bischen mehr zeit hat, was aber mit der geschwindigkeit der 
Geräte zu tun haben könnte.

falls jemand so ein problem schon hatte oder eine idee hat, wo das 
Problem Liegen könnte, würde ich mich über die hilfe freuen

Freundliche Grüsse Domenic

von Joachim B. (jar)


Lesenswert?

vielleicht konnt dein Teil mit Clockstretching nicht zurecht?

Wir der Clock denn vom Sender im Burstmodus unten gehalten und dein Teil 
"übersieht" dieses?

Domenic schrieb:
> der Part vom myRio scheint eigentlich in Ordnung zu sein

ja scheint, passiert denn Clockstretching vom Sender?
Behält CLOCK etwa low?

Domenic schrieb:
> aber der Sensor schreibt dann so oft wie
> man nach mehr bytes fragt immer nur den wert des ersten registers
> zurück.

das ist wenn der Sender noch beschäftigt ist/war.

Bei einem I2C EEPROM am Arduino funktioniert es auch nicht so richtig, 
alle Routinen machen nach einem WRITE in delay von 5-10ms weil es keine 
Busy Routine gibt.

Da ich sinnlose Warterei von 5-10ms nach jedem Byte nicht mag starte ich 
nach einem write eine neuerliche Leseanfrage und wenn ein ERROR zurück 
kommt weil das I2C EEPROM noch beschäftigt ist warte ich bis das I2C 
EEPROM wieder bereit ist bevor ich weitergehe.

Aber vielleicht ist es bei dir was anderes, schaue dir den Clock an ob 
der low bleibt, evtl. ist die Routine bei dem myRio auch fehlerhaft 
implementiert, dann nehme einen anderen Port und warte auf CLOCK high.

von Domenic (Gast)


Lesenswert?

Joachim B. schrieb:
> ja scheint, passiert denn Clockstretching vom Sender?
> Behält CLOCK etwa low?

Ich bin mir nicht ganz sicher, da das ganze ja mit pullups ist, sollte 
es 0 dominant sein, oder habe ich das falsch verstanden? in diesem fall 
zieht er nicht auf 0, bzw. macht kein stretching.
Aber das mit dem clockstretching war auch mein erster gedanke aber war 
mir nicht sicher da ich noch nie ein solches problem hatte.
vielen dank für die Antwort.

Freundliche Grüsse
Domenic

von Peter D. (peda)


Lesenswert?

Domenic schrieb:
> aber der Sensor schreibt dann so oft wie
> man nach mehr bytes fragt immer nur den wert des ersten registers
> zurück.

Datasheet:

"In order to read multiple bytes, it is necessary to assert the most 
significant bit of the subaddress field. In other words, SUB(7) must be 
equal to 1 while SUB(6-0) represents the address of first register to be 
read."

von Domenic (Gast)


Lesenswert?

Peter D. schrieb:
> "In order to read multiple bytes, it is necessary to assert the most
> significant bit of the subaddress field. In other words, SUB(7) must be
> equal to 1 while SUB(6-0) represents the address of first register to be
> read."

uiii das passiert, wenn man das Datenblatt nicht alles genau liesst...
vielen dank dafür. jetzt kommt mir auch, das der arduino dieses bit 
gesetzt hat. ich dachte, das es ein fehler war... aber nun Weiss ich's 
besser.
nochmals vielen Dank für die Info.

mit Freundlichen Grüssen

Domenic

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
Noch kein Account? Hier anmelden.