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
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.
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
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."
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.