PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : MEMS-Sensor LSM330DL DataReadyInterrupt



patz
21.11.2013, 13:05
Hallo liebe Community

ich arbeite momentan mit einer Sensorkombination von Beschleunigungssensor und Gyroskop.
Der Sensor ist der LSM330DL von STMicroelectronics.

Für Interessierte hier das Datenblatt: http://www.st.com/web/en/resource/technical/document/datasheet/DM00034579.pdf

Dies ist mein erster Sensor den ich mir von Grund auf erarbeiten muss, und erhoffe mir hier eine kleine Hilfestellung von den Leuten hier im Forum die
schon mehr Erfahrung mit Sensoren gemacht haben. Im besten Fall sogar mit ähnlichen Sensoren von ST.

Nun zu meinem Problem, woran ich nun schon ein paar Wochen sitze:
Der Gyroskop besitzt einen DRDY-Pin welchen man für einen DataReady-Interrupt konfigurieren kann. Mein Versändniss von diesem DRDY-Interrupt ist, dass jedes mal wenn im Sensor
neue Daten zur Verfügung gestellt wurden wird auf der DRDY-Leitung der Pegel auf Low gezogen und somit ein Interrupt ausgelöst.
Momentan ist es so, dass ich die Leitung mit einem Oszi messe und der Pegel dauerhaft auf High ist - also kein Interrupt ausgelöst wird.

Ich teste dies momentan mit einem sehr abgespeckten Programm wo ich den Sensor initialisiere, und danach in einer Endlosschleife warte.

Die Konfiguration der Register ist wiefolgt:
CTRL_REG1_G: 400Hz - 50Hz cutoff, normal mode, xyz - enable
CTRL_REG2_G: everything 0
CTRL_REG3_G: I2_DRDY enable
CTRL_REG4_G: continuous update, LSB, 2000dps, 4-wire
CTRL_REG5_G: FIFO disabled, HPF disabled

Für ein paar Hinweise oder auch nur Ideen wäre ich sehr dankbar!

Grüße patz

RoboHolIC
21.11.2013, 17:21
Momentan ist es so, dass ich die Leitung mit einem Oszi messe und der Pegel dauerhaft auf High ist - also kein Interrupt ausgelöst wird
...
Die Konfiguration der Register ist wiefolgt:
REG1: 400Hz - 50Hz cutoff, normal mode, xyz - enable
REG2: everything 0
REG3: I2_DRDY enable
REG4: continuous update, LSB, 2000dps, 4-wire
REG5: FIFO disabled, HPF disabled

"Figure 13" und "Figure 14" legen nahe, dass die Interrupts High-aktiv sind.
Die Bezeichnungen REGn habe ich nicht gefunden, sodass ich die Konfiguration nicht prüfen kann.
Hängen die INT-Leitungen an Pullups?

Peter(TOO)
21.11.2013, 18:38
Hallo patz,

Da gibt's fast unendlich viele Kombinationen für die Interrupts bei diesem Chip, ist alles frei programmierbar!

Es scheint 3 Interruptausänge zu gebe und du kannst angeben, was an welchem Pin erscheinen soll.

Interrupts musst du quittieren, e gibt aber auch eine Autoquittierung.

Da musst du dich selber durchlesen und ausfiltern, was für deine Anwendung relevant ist.

MfG Peter(TOO)

patz
22.11.2013, 10:14
Danke für eure schnelle Antwort.


"Figure 13" und "Figure 14" legen nahe, dass die Interrupts High-aktiv sind.
Hängen die INT-Leitungen an Pullups?

Dies gilt aber nicht grundsätzlich. Im Register CTRL_REG3_G (H_Lactive) kann zum Beispiel für den INT1_G ausgewählt werden ob dieser nun High-/Low-active ist.
Momentan ist der DRDY-Pin auf dem Prozessor auf Input, ohne einem internen/externen Pullup.


Die Bezeichnungen REGn habe ich nicht gefunden, sodass ich die Konfiguration nicht prüfen kann.
Entschuldigung für die ungenaue Angabe. Ich meine natürlich die CTRL_REGn_G Register.


Da gibt's fast unendlich viele Kombinationen für die Interrupts bei diesem Chip, ist alles frei programmierbar!

Es scheint 3 Interruptausänge zu gebe und du kannst angeben, was an welchem Pin erscheinen soll.

Wenn du es genau nimmst, gibt es für diesen Chip 4 Interruptausgänge. (INT1_A, INT2_A, INT1_G, DRDY_G)
_A referenziert den Accelerometer und _G den Gyropskopen auf den ich mich momentan fokussiere.

Im CTRL_REG3_G kann man den DRDY-Interrupt aktivieren/deaktivieren und zudem noch diverse FIFO Allerts darauf konfigurieren.
In meinem Fall ist dieser nur aktiviert ansonsten nichts. Dann würde ich davon ausgehen, das sich der DRDY so verhält wie in meinem Eingangspost beschrieben.
Leider gibt es so gut wie keine Doku darüber.


Interrupts musst du quittieren, es gibt aber auch eine Autoquittierung.
Ähm... wo und wie muss ich die denn quittieren? Am besten wäre es, wenn du kurz beschreiben könntest wie du es von anderen Sensoren kennst.
Ich kenne das Datenblatt vom LSM330DL schon fast auswendig, so oft habe ich das durchgeblättert in der Hoffnung so etwas zu finden.

Das einzige was so in die Richtung gehen würde, wäre die Einstellung BDU im CTRL_REG4_G. Dort kann man einstellen, das die Output-Register nicht aktualisiert
werden solange sie nicht komplett ausgelesen wurden. Bei mir steht BDU auf continuous update.


Da musst du dich selber durchlesen und ausfiltern, was für deine Anwendung relevant ist.
Dort bin ich ja schon seit einigen Wochen dabei. Das einzige was ich momentan möchte ist, dass ich einen Interrupt bekomme wenn für alle Achsen neue Werte
in den Registern liegen.

Danke für eure Mühe.
patz

Peter(TOO)
22.11.2013, 11:04
Hallo patz,


Ähm... wo und wie muss ich die denn quittieren? Am besten wäre es, wenn du kurz beschreiben könntest wie du es von anderen Sensoren kennst.
Ich kenne das Datenblatt vom LSM330DL schon fast auswendig, so oft habe ich das durchgeblättert in der Hoffnung so etwas zu finden.


z.B. INT_SRC_G
Reading at this address clears the INT1_SRC_G IA bit (and eventually the interrupt signal
on the INT1_G pin)

Schau dir auch mal dieses Datenblatt an:
http://www.st.com/st-web-ui/static/active/en/resource/technical/document/datasheet/DM00037200.pdf

Entwickler sind grundsätzlich faul :-)
Wenn ein Konzept funktioniert, wird es nicht grundsätzlich geändert, somit helfen auch Datenblätter von Schwester-Chips weiter.

Hier noch etwas zu diesen Chips:
http://www.st.com/st-web-ui/static/active/en/resource/technical/document/design_tip/DM00067982.pdf
http://www.st.com/st-web-ui/static/active/en/resource/technical/document/design_tip/DM00069521.pdf

In den Anhängen ist weitere Literatur aufgeführt, welche vielleicht weiter hilft.

MfG Peter(TOO)