Hi Leute,
ich beschäftige mich momentan mit dem MPU9150 Beschleunigungssensor und
will den "high g interrupt verwenden.
Ich konfiguriere den MPU9150 mit einem Seeeduino Stalker.
Folgende Konfigurationsparameter übergebe ich an den Sensor:
1. accelgyro.setIntEnabled(64);
2. accelgyro.setIntMotionEnabled(true);
3. accelgyro.setMotionDetectionThreshold(32); //32mg/LSB laut
Datenblatt
4. accelgyro.setMotionDetectionDuration(5);
1 und 2 war ja verständlich, Register setzen (siehe Datenblatt), nun ist
mir der Zusammenhang der Punkte bzw. Funktionen 3 und 4 nicht ganz klar.
Mit den obigen Einstellungen und auch einigen weiteren kann ich den
Interrupt sehen, jedoch ist mir nicht klar wie ich den Schwellwert so
einstelle das es z.B. nur bei 5g ausschlägt.
Hatte jemand damit schon Erfahrung und kann mir weiter helfen, einen
Ansatz oder Beispiel.
Vielen Dank schon mal.
Gruß
Sergej
Sergej M. schrieb:> Sergej M. schrieb:>> Keiner eine Idee?>> Immer noch keiner eine Idee?
Also ich hab bei "Seeeduino Stalker" aufgehört zu lesen. Sorry.
Dein Problem ist nicht nachzuvollziehen. Threshold = Schwellwert. Den
willst du doch einstellen. Den Zusammengang zwischen den Registerwert
und einem realen Messwert entnimmt man dem Datenblatt.
Aber wie gesagt, Ratschläge an Arduinos sind für die Katz, daher stell
ich das auch nun wieder ein.
Hat doch nichts mit Arduino zutun, das ist nur der Mikrocontroller, das
Hauptproblem ist der Beschleunigungssensor, womit konfiguriert wird ist
nebensächlich.
Nochmal für nicht technisch versierte :-)
Der BeSensor kann konfiguriert werden das er bei bestimmten Kräften
einen Interruptsignal generiert. Diese beiden Funktionen haben einen
Einfluss darauf. Den beiden Funktionen 3 & 4 wird ein 8Bit Wert
übergeben, für den Schwellwert gilt also max. 255 Zahlenwerte. Aus dem
Datenblatt ist zu entnehmen das 32mg = 1LSB sind, sprich 32×255= 8160mg.
Wie kann man also rausfinden bei welchen Schwellwert das Interruptsignal
generiert wird?
Wenn das Interruptsignal bei 5g generiert werden soll welchen Zahlenwert
sollte man dan in den Register reinschreiben?
Hoffe jetzt ist besser zu verstehen was ich meine
Hi
>Nochmal für nicht technisch versierte :-)>Der BeSensor kann konfiguriert werden das er bei bestimmten Kräften>einen Interruptsignal generiert.
Sicher? Lt. Datenblatt kennt der Sensor vier Interruptquellen:
Interrupt Name Module
FIFO Overflow FIFO
Data Ready Sensor Registers
I2C Master errors: Lost Arbitration, NACKs I2C Master
I2C Slave 4 I2C Master
In den Sensorregistern kann ich auch nichts anderes finden.
MfG Spess
spess53 schrieb:> Sicher? Lt. Datenblatt kennt der Sensor vier Interruptquellen:
Und noch einen "Motion Detection" und diesen möchte ich auch nutzen.
Habe schon den Hersteller angeschrieben, eventuelle kommt da ja noch
was. Solange dachte ich das jemand schonmal mit dem Sensor gearbeitet
hat und die Konfiguration kennt.
Sergej M. schrieb:> Einfluss darauf. Den beiden Funktionen 3 & 4 wird ein 8Bit Wert> übergeben, für den Schwellwert gilt also max. 255 Zahlenwerte. Aus dem> Datenblatt ist zu entnehmen das 32mg = 1LSB sind, sprich 32×255= 8160mg.> Wie kann man also rausfinden bei welchen Schwellwert das Interruptsignal> generiert wird?>> Wenn das Interruptsignal bei 5g generiert werden soll welchen Zahlenwert> sollte man dan in den Register reinschreiben?
Sagmal kannst du keinen Dreisatz. Sorry dein Problem wird immer noch
nicht klar. Bist du wirklich zu doof 5000mg (=5g) / 32 = 156,25 zu
rechnen und dann 156 in das blöde Register zu schreiben? Ernsthaft? Oder
wo ist das Problem?
Die DURATION wird dann ja wohl die Zeitspanne angeben, wie lange diese
Beschleunigung anliegen muss. Oder was auch immer, aber das steht im
Datenblatt.
Arduinos halt. Denken is nich, lesen is nich.
@Cyblord,
pass mal auf Kleiner, wenn du selber keine Ahnung hast solltest du dein
Mund nicht so weit aufmachen und andere beleidigen, dachte das ist ein
anständiges Forum wo Fragen beantwortet werden und nicht dummrum
gelabert wird.
Worauf basieren den euer ach so schlauen Annahmen? Hast du schon mal ins
Datenblatt geschaut oder kannst du nur nutzlose Posts schreiben?
Also laut euren Aussagen kann der Sensor nur auf 8g reagieren oder wie?
Aber egal wenn hier nur solche unqualifizierte Posts kommen könnt ihr
den Post schliessen, von solchen Dummschwätzern wir ihr kann man nichts
brauchbares erwarten.
Nebenbei hast du schona mal was von Testen gehört? Wenn nicht dann
solltest du dir die Frage stellen wer hier noch der blöde ist.
Vielen Dank nochmal für die sehr hilfreichen Posts.
Sergej M. schrieb:> @Cyblord,>> pass mal auf Kleiner, wenn du selber keine Ahnung hast solltest du dein> Mund nicht so weit aufmachen und andere beleidigen, dachte das ist ein> anständiges Forum wo Fragen beantwortet werden und nicht dummrum> gelabert wird.
Nun, da ich Ahnung habe, kann deinen Rat wohl in den Wind schlagen. Und
für dich als Arduino-Nutzerlein bin ich der µC-Gott. Alles klar?
Und wer sowas hier schreibt:
> Also laut euren Aussagen kann der Sensor nur auf 8g reagieren oder wie?
und dabei anderen vorwirft, sie hätten keine Ahnung. Meine Fresse Junge.
Mehr Vorrechnen kann man es dir nicht mehr. Soll ichs vortanzen?
8g ist der maximale Wert, da 32*255 ~ 8g. Daher nur 156 ins Register und
nicht 255.
> Worauf basieren den euer ach so schlauen Annahmen?
Auf dieser Zeile in deinem eigenen Code du Spaten:
//32mg/LSB laut Datenblatt
> Hast du schon mal ins> Datenblatt geschaut
Nein, meinst du ich mach deine Arbeit oder wie? Außerdem scheinst du das
ja wohl bereits nachgeschaut zu haben.
Wenn die 32 mg/LSB doch nicht stimmen sollten, dann guck den korrekten
Wert doch einfach nach.
Und wieder versteht einfach niemand wo dein Problem liegt. Ich tippe auf
Ardunio-typische absolute Unfähigkeit. Oder aber du kannst dich nicht
ausdrücken. Ich weiß es nicht.
Cyblord ---- schrieb:> Nun, da ich Ahnung habe, kann deinen Rat wohl in den Wind schlagen. Und> für dich als Arduino-Nutzerlein bin ich der µC-Gott. Alles klar?>
Ja das merkt man ja auch.
Und ich verstehe immer noch nicht was dich jetzt am Arduino stört. Hast
du schon gewusst das die Arduinos einen Atmega µC haben?
> Und wer sowas hier schreibt:>> Also laut euren Aussagen kann der Sensor nur auf 8g reagieren oder wie?>> und dabei anderen vorwirft, sie hätten keine Ahnung. Meine Fresse Junge.> Mehr Vorrechnen kann man es dir nicht mehr. Soll ichs vortanzen?> 8g ist der maximale Wert, da 32*255 ~ 8g. Daher nur 156 ins Register und> nicht 255.>
Ok auf maximal 8g, ist das fur deinen eingeschränkten Verstand besser zu
verstehen?
>>> Worauf basieren den euer ach so schlauen Annahmen?>> Auf dieser Zeile in deinem eigenen Code du Spaten:> //32mg/LSB laut Datenblatt
Hast du mal gelesen was zu dem Wert geschrieben steht?
>>> Hast du schon mal ins>> Datenblatt geschaut> Nein, meinst du ich mach deine Arbeit oder wie? Außerdem scheinst du das> ja wohl bereits nachgeschaut zu haben.
Habe ich dich gebeten hier was zu schreiben wenn du von dem Sensor keine
Ahnung hast?
> Wenn die 32 mg/LSB doch nicht stimmen sollten, dann guck den korrekten> Wert doch einfach nach.
Und wieder mal, wenn du solche Aussagen machst vergewissere dich doch
mal ob die stimmen.
>> Und wieder versteht einfach niemand wo dein Problem liegt. Ich tippe auf> Ardunio-typische absolute Unfähigkeit. Oder aber du kannst dich nicht> ausdrücken. Ich weiß es nicht.
Dein Dreisatz funktioniert nicht, denkst du ich bohre hier nur in der
Nase. Nicht alle Menschen sind wie du, nicht nachschauen keine Ahnung
vom Thema haben und trotzdem andere anschnauzen und schalu daher reden.
Sry erstmal ohne Link aber im Datenblatt Seite 32/52 steht alles
beschrieben. Da ist ein Ablaufplan mit allen Registern.
Das ist mir aber klar nur die Schwellwerte sind uneindeutig.
Sergej M. schrieb:> Sry erstmal ohne Link aber im Datenblatt Seite 32/52 steht alles> beschrieben. Da ist ein Ablaufplan mit allen Registern.
Kann es sein dass du Sensoren irgendwie verwechselst? Auf Seite 32 steht
davon rein gar nichts.
Auch die Tabelle mit den Interruptquellen ist halt schon recht
eindeutig. Wenn da nur diese stehen und kein Motion Interrupt, dann
wirds keinen geben.
Ich finde auch absolut keinen Register mit einem "Motion Detection
Threshold" oder irgendwas ähnliches.
> Hast du mal gelesen was zu dem Wert geschrieben steht?
Ja, dass er so im Datenblatt steht. Also glaube ich das. Wenn nun dein
Problem darin bestehen würde, zu verifizieren ob dieser Wert auch
wirklich korrekt ist, warum schreibst du das dann nicht einfach?
Hi
>Sry erstmal ohne Link aber im Datenblatt Seite 32/52 steht alles>beschrieben. Da ist ein Ablaufplan mit allen Registern.
Die Register gibt es in der Register-Map überhaupt nicht. Interessant
ist, das das Datenblatt von 2012, die Registermap von 2013 stammt.
Vielleicht haben sie es nicht hinbekommen und diese Funktion(en)
gestrichen. Das würde auch diese Registermap, z.B. beginnend mit 0x0D,
erklären.
MfG Spess
Hier das Datenblatt, zu diesen Sensor gibt es zwei Dokumente einmal das
Datenblatt und dann noch das Registermap Dokument.
hier das Datenblatt:
http://dlnmh9ip6v2uc.cloudfront.net/datasheets/Sensors/IMU/PS-MPU-9150A.pdf
Der Interrupt kommt, hab es mit einem Osszi gemessen und auch mit
einwenig LED spielereien :)
Ich kann ja mal schreiben was ich schon alles weiss.
Für den Sensor gibt es eine C++ Library, dort sind die notigen
Funktionen mit den entsprechenden Registern zu finden.
Aus dem Datenblatt ist zu entnehmen wie der Motion Detection Int
konfiguriert werden soll.
Habe auch einige andere Beschleunigungssensoren angeschaut die auch
einen Motion Detection Int haben. Dort hat jedoch jede Einstellung (2g,
4g, 8g usw.) ihre eigene Sensibilität. Hier ist es dann nur die 32mg/LSB
für alle Einstellungen.
Hier wird es schon deutlicher wie es funktioniert, aber mit einem
anderen Sensor und als Free Fall Int.
http://www.ecnmag.com/articles/2013/04/one-accelerometer-interrupt-pin-both-wakeup-and-non-motion-detection
Wenn man die 2te Abbildung betrachtet wird es schon klarer, aber ich bin
immer noch nicht dahinter gekommen wie man rausfindet wieviel mg wieviel
g darstellen.
Auch die Zeit, die als Duration eingestellt wird ist klar. Das ist dann
auch nicht mehr nötig, aber der Schwellwert ist immer noch unklar,
zumindest für mich.
Gruß
Bevor du mit motion detection, free fall und zero motion anfängst,
sollte der Sensor erstmal richtig konfiguriert sein. Ist das bei dir der
Fall? bekommst du Beschl. und Winkelg. Werte?
Das ist meine config für FF, Motion ....
Sergej M. schrieb:> Hier ist es dann nur die 32mg/LSB für alle Einstellungen.
Aber das ist doch eindeutig, der Bereich ist von 32 mg bis 255*32 mg.
Und das relativ zum Wert der während des Register setzen ansteht, siehe
** im Ablaufdiagramm.
Jojo S. schrieb:> Sergej M. schrieb:>> Hier ist es dann nur die 32mg/LSB für alle Einstellungen.>> Aber das ist doch eindeutig, der Bereich ist von 32 mg bis 255*32 mg.> Und das relativ zum Wert der während des Register setzen ansteht, siehe> ** im Ablaufdiagramm.
Welcher Wert ist dann 2g?
@ Carsten M.
Ich habe wie schon in den oberen Posts erwähnt wie ich die Register
setze (siehe Datenblatt Seite 32/52).
So sieht meine Funktion dann aus
1
void init_high_g_int(){
2
3
//datasheet PS-MPU-9150A page 32/52 LSB = least significant bit
4
5
accelgyro.setSleepEnabled(false); //wake up the acc
Ich will eine verbindliche Aussage, wie die Werte gesetzt werden müssen.
Wenn ich z.B. den Schwellwert wie in dem Ablauf setze dann kommt ein
Interrupt wenn man die Hand auf den Tisch ablegt.
Wenn jemand eine Formel oder ähliches hat wäre das super. Dann könnte
ich es gleich mal nachprüfen. :)
>Wenn jemand eine Formel oder ähnliches hat...
1 LSB = 32 mg
1 LSB = 1 ms
ist doch Formel genug!?
Dann spielen noch der filter und der motion count einer Rolle.
Sieht aus, als ob dein filter off ist. (0x07)
Jojo S. schrieb:> Sergej M. schrieb:>> Welcher Wert ist dann 2g?>> 2g (absolut) kann der Sensor nicht per Interrupt melden.
Das ist klar, jedoch sollte es doch möglich sein die mg-Werte so zu
interpretieren das dieser einem g-Wert zugeordnet werden können, oder
nicht?
Carsten M. schrieb:>>Wenn jemand eine Formel oder ähnliches hat...>> 1 LSB = 32 mg> 1 LSB = 1 ms>> ist doch Formel genug!?>> Dann spielen noch der filter und der motion count einer Rolle.
Das ist doch keine Formel, das sind nur zwei Variablen.
LSB = 60
mg = 32 = 0,032g
Ich meine sowas wie Schwelwert = LSB/mg = 60/32 = 1,875g?
> Sieht aus, als ob dein filter off ist. (0x07)
Hab es so konfiguriert wie im Ablaufplan.
Ein Fehler gabs aber noch, hab am Ende
1
accelgyro.setWakeCycleEnabled(true);
nicht wieder auf true gesetzt, ob das was ausmacht.
Bin mir gerade nicht sicher, ob du die "Formel" (ok ist nur ne
Gleichung) richtig verstehst.
1 LSB = 32 mg heisst:
wenn du 1 ins Register schreibst ist Threshold 32 mg
bei 2 ist es 64 mg,
bei 3 ist Threshold 96 mg ...
...
bei 59 ist Threshold 1888 mg (deine 1,88 g).
Carsten M. schrieb:> Bin mir gerade nicht sicher, ob du die "Formel" (ok ist nur ne> Gleichung) richtig verstehst.
Ich bin mir nicht sicher ob der TE uns langsam hier alle verarscht.
>> 1 LSB = 32 mg heisst:> wenn du 1 ins Register schreibst ist Threshold 32 mg> bei 2 ist es 64 mg,> bei 3 ist Threshold 96 mg ...> ...> bei 59 ist Threshold 1888 mg (deine 1,88 g).
Dieser Zusammenhang wurde jetzt einige male verdeutlicht. Die Formel
wurde aufgestellt und vorgerechnet. Jetzt nochmal von dir. Darum sage
ich ja auch dauernd, dass das Problem des TE irgendwie nicht klar wird.
Das meine ich ernst.
Sergej M. schrieb:>>> Welcher Wert ist dann 2g?>>>> 2g (absolut) kann der Sensor nicht per Interrupt melden.>> Das ist klar, jedoch sollte es doch möglich sein die mg-Werte so zu> interpretieren das dieser einem g-Wert zugeordnet werden können, oder> nicht?
Das 'm' steht für milli und zwischen mg und g liegt einfach der Faktor
1000, wenn das nicht klar ist dann bitte nicht mehr weiterlesen und auf
gar keinen Fall weiterprogrammieren.
Das Gleiche gilt wenn man nicht 'Rel_Threshold = 32 mg * x' nach x
umgestellt bekommt. LSB heisst nur 'Least significant bit' und ist kein
Wert von x, es entspricht nur einer Auflösung von x mg.
Meine Aussage bezog sich aber mehr darauf das man nicht 2g (oder ca.
2000 mg) einstellt sondern die relative Schwelle von +/- 2g, bezogen auf
den aktuellen Wert. Wenn der im Ruhezustand gerade zufällig =0 ist dann
kommt der Interrupt bei Messwert > +2g oder Messwert <-2g
(Vorrausgesetzt die Zeit 'Motion Duration' wurde erreicht). Wenn das
Register gesetzt wird und zu dem Zeitpunkt der Messwert 1g ist sind die
Schwellen +3g und -1g. So interpretiere ich das Datenblatt und so zeigt
es auch das Diagramm deines alternativen Sensors.
und was 'setWakeCycleEnabled' macht sollte die Doku zu der Lib die du
verwendest erklären, da kann man wieder nur raten.
Carsten M. schrieb:> Bin mir gerade nicht sicher, ob du die "Formel" (ok ist nur ne> Gleichung) richtig verstehst.
Also wenn du deine "Formel" meinst, dann nicht.
>> 1 LSB = 32 mg heisst:> wenn du 1 ins Register schreibst ist Threshold 32 mg> bei 2 ist es 64 mg,> bei 3 ist Threshold 96 mg ...> ...> bei 59 ist Threshold 1888 mg (deine 1,88 g).
Das ist schon längst allen klar, jedoch müssen ja die mg-Werte was
aussagen.
Die Formel habe ich jetzt nur so hingeschrieben, die muss nicht
stimmern.
Klingt natürlich plausibel, dass LSB von 255 dann einen Wert von 8196mg
= 8,1g ergibt, stimmt das aber?
Wieso steht dann im Datenblatt nicht das es nur bis max 8g eingestellt
werden kann, obwohl der Sensor bis 16g konfigurierbar ist.
Ist dir Bewußt das 1mg "ein milli g", also 1 Tausendstel g?
32mg sind also 0,032g. Wenn du nun den Schwellwert bei 2g haben willst
dann mußt du doch nur 2g/0,032g=62,5 rechnen. Wenn du also 62 in das
Register schreibst entspricht das 62*0,032g=2g. Verstanden?
>obwohl der Sensor bis 16g konfigurierbar ist.
Eventuell weil er positive und negative Beschleunigung mißt. Cih habe
das Datenblatt auch noch nicht gelesen, aber kann er +-16g messen oder
nur +-8g?
Wenn er nur +-8g messen kann und er normalerweise 0g haben würde dann
wären ein schwellwert von 8g schon logisch.
Ach Leute, das ist doch zum Mäusemelken.
Ihr braucht mir die Grundlagen der Informatik und der Mathematik nicht
zu erklären. Meine Frage war doch sehr simpel.
Noch mal an den Anfang.
Sensor kann Motion Interrupt
1 LSB im Register ergibt, laut Datenblatt, 32mg
Maximaler Schwelwert 255 LSB * 32 = 8196mg rund 8g
Sensor kann auf +-16g konfiguriert werden
Der Interrupt dann wohl nicht wie es aussieht
Alle eure Tipps hatte ich bevor ich hier was geschrieben habe selber
validiert und bin nicht zu den Ergebnissen gekommen die theoretisch
rauskommen müssten.
Daher meine Zweifel. Ich hoffen wir können uns nun weiter unterhalten,
ohne das alle ausfallend werden, ich halte mich ja auch einigermassen
zurück. :)
Gruß
Carsten M. schrieb:> ok dann ist ja alles klar. aber ich würde nicht am Sensor zweifeln> sondern an meinem Code oder meinem Verständnis an der Funktionsweise.
Also würdest du sagen das der Sensor nur bis 8g einen Interrupt
generieren kann? Was ja den Berechnungen zu entnehmen ist.
Auch Datnblätter haben fehler oder sind unvollständig. Ich denke mal
wenn ich den Messbereich auf 2g stelle, daß der Sensor dann auch nicht
mehr bis 8g messen kann. Wäre auch unlogisch wenn er das könnte. Also
wird man für den Bereich +-16g halt 64mg/LSB ins Register schreiben
müssen und für 2g halt 8mg/LSB usw.
Das solltest du jedoch testen. z.B. so: wenn du den gleichen Wert is
Schwellwertregister schreibst und das in verschiedene Meßbereichen
machst wird der Interupt sensibler?
uwe schrieb:> Das solltest du jedoch testen. z.B. so: wenn du den gleichen Wert is> Schwellwertregister schreibst und das in verschiedene Meßbereichen> machst wird der Interupt sensibler?
Nein wird es nicht (mit 2g und 16g getestet). Wäre auch unlogisch, im
Konfigurationsablaufplan wird ja auch nicht vorerst der Sensor
konfiguriert, oder wird zumindest nichts erwähnt bei welcher
Konfiguration die es machen.
Gruß
In der Registerbeschreibung wird auf das Datenblatt verwiesen:
'This register configures the detection threshold for Motion interrupt
generation. The mg per LSB increment for MOT_THR can be found in the
Electrical Specifications table of the MPU - 9150 Product Specification
document.'
Im Datenblatt findest du auf S.12 :
'NTELLIGENCE FUNCTION INCREMENT 32 mg/LSB'
ohne irgendwelche Anmerkungen das dieser Wert auf die Messbereich
Skalierung bezogen ist, daher würde ich das auch so glauben.
Jojo S. schrieb:> Im Datenblatt findest du auf S.12 :> 'NTELLIGENCE FUNCTION INCREMENT 32 mg/LSB'
Genau, was mich aber stuzig macht ist die "intelegente Funktion", der
Wert orientiert sich ja anscheinend an der Konfiguration. Dazu ist auch
nichts zu finden.
Wie schon erwähnt, andere Sensoren haben verschiedene Sensibilitäten für
verschiedene g-Kräfte.
Mit 'Intelligenz' ist mit Sicherheit der integrierte DMP (Digital Motion
Processor) gemeint der unabhängig von der Ausgabegeschwindigkeit und
Auflösung Bewegungsüberwachung macht und meldet.
Jojo S. schrieb:> Mit 'Intelligenz' ist mit Sicherheit der integrierte DMP (Digital Motion> Processor) gemeint der unabhängig von der Ausgabegeschwindigkeit und> Auflösung Bewegungsüberwachung macht und meldet.
Vielen Dank das ist mal was nützliches.
Um mal einen Zwischenstand fest zu halten.
- Keiner hat mit dem Sensor und dem Motion Detection INterrupt
gearbeitet.
- Alle Vermuttungen und Aussagen basieren auf das durchlesen des
Datenblattes.
- Die einstellung des Sensors hat nichts mit dem Interrupt zu tun
- Der Interrupt kann theoretisch nur auf maximal +8g reagieren
Wenn du Anfangs geschrieben hättest das du für 5000mg/32mg=156
konfiguriert hast und das trotzdem zu empfindlich erscheint dann wäre
der Thread sicher deutlich kürzer geworden...
Ich habe den Sensor auch vor kurzem ausprobiert, aber die Werte nur auf
ein OLED Display geschrieben und noch nicht den Interrupt genutzt. Dazu
habe ich die Lib von
https://github.com/jrowberg/i2cdevlib/tree/master/Arduino/MPU9150
genutzt (aber unter mbed).
Im Code wird auf eine Spec 2.0 verwiesen und da ist die Empfindlichkeit
MOT_THR mit 2 mg/LSB angegeben. Ich habe versucht die zu finden und erst
einmal eine neuere 4.2/4.3 gefunden: und da gibt es die Kapitel Motion
Detection & entsprechende Interrupts gar nicht mehr!
Das ist irgendein Geschiss mit dem DMP, vielleicht mit den Rechten an
den Algorithmen oder sowas, jedenfalls ist der DMP Teil ja auch nicht
offen dokumentiert. Möglicherweise kann man über die DMP Konfiguration
auch die MOT_THR Empfindlichkeit verstellen?
Auf die Schnelle habe ich noch das gefunden:
http://www.i2cdevlib.com/forums/topic/153-official-dmp-documentation-is-released-by-invensense/
Nach Registrierung kann man die DMP Docs eventuell doch runterladen,
aber da bin ich erstmal raus.
>- Keiner hat mit dem Sensor und dem Motion Detection INterrupt>gearbeitet.
Doch. Was denkst du warum ich code dafür schreibe.
Es funzt auch. Allerdings will ich keine 16 g erreichen. ;-) Sondern mir
reicht ein Int, wenn man die Hand auf die Tischplatte legt. Genau das
wollte ich. Ich will damit sicher stellen, dass das Gerät in totaler
Ruhe ist.
btw.
Um den DMP zu aktivieren muß man extra firmware in die MPU hochladen,
wenn ich mich recht erinneren.
@Jojo S.
Ok danke, werde ich mir mal genauer anschauen.
Carsten M. schrieb:>>- Keiner hat mit dem Sensor und dem Motion Detection INterrupt>>gearbeitet.>> Doch. Was denkst du warum ich code dafür schreibe.> Es funzt auch. Allerdings will ich keine 16 g erreichen. ;-) Sondern mir> reicht ein Int, wenn man die Hand auf die Tischplatte legt. Genau das> wollte ich. Ich will damit sicher stellen, dass das Gerät in totaler> Ruhe ist.>> btw.> Um den DMP zu aktivieren muß man extra firmware in die MPU hochladen,> wenn ich mich recht erinneren.
Sorry hast ja wirklich den Code :)
Aber kannst du mir den erklären was genau du da eingestellt hast und
wieso?
Und hast du es mal nachgeprüft?
Gruß
Naja so gut das halt geht.
Ich schüttle das Ding gut - bekomme Schock (Motion) Detection Int
Ich lasse es 3 Sekunden ruhig liegen - bekomme Zero Motion Int
Wenn ich jetzt nur daran wackle gibt es nochmal ein Zero Motion Int!
Das hat mich erst verwundert, dann habe ich aber gelesen, dass auch ein
Int generiert wird, wenn der Sensor aus dem Zero Motion Zusand kommt.
Carsten M. schrieb:> Naja so gut das halt geht.> Ich schüttle das Ding gut - bekomme Schock (Motion) Detection Int> Ich lasse es 3 Sekunden ruhig liegen - bekomme Zero Motion Int> Wenn ich jetzt nur daran wackle gibt es nochmal ein Zero Motion Int!> Das hat mich erst verwundert, dann habe ich aber gelesen, dass auch ein> Int generiert wird, wenn der Sensor aus dem Zero Motion Zusand kommt.
Super das du es auch mal ausprobiert hast.
Jedoch beantwortet es nicht meine Frage :)
Wie gesagt ich hate es auch schon mit verschiedenen Werte ausprobiert,
aber das ist ja dann sowas wie trial and error.
Ich hätte gerne so eine Art mathematischen Beweis für einen Protokol. Da
kann ich schlecht rein schreiben: ich habe es mal schwach und mal stark
geschüttelt :)
Der einzige mathematische Ansatz war ja der den schon alle x-Mal
durgekaut haben (xLSB * 32mg).
Gruß
Keine Ahnung was du für Möglichkeiten hast. Aber woher willst du denn
(mathematisch) genaue Beschleunigung nehmen/erzeugen? Die einzige, die
mir zur Verfügung steht ist 1g (9,81 m/s2). ;-)
Sergej M. schrieb:> Der einzige mathematische Ansatz war ja der den schon alle x-Mal> durgekaut haben (xLSB * 32mg).
Nun, man muss sich schon auf die Herstellerangaben verlassen können.
Mehr Beweis braucht es selten. Der mathematische Zusammenhang zwischen
Messgröße und Register ist das einzige was du brauchst. Testest du deine
Thermometer auch erstmal in der Kühlkammer durch oder glaubst du den
Angaben?
Wenn du der Meinung bist, das stimmt nicht, dann musst du definierte
Beschleunigungen erzeugen können und mit den Ausgaben des Sensors
vergleichen.
Nur warum sollte das so nicht stimmen?
Was ist denn genau der Hintergrund deines Misstrauens?
Warum willst du den Sensor unbedingt exakt qualifizieren?
Carsten M. schrieb:> Keine Ahnung was du für Möglichkeiten hast. Aber woher willst du denn> (mathematisch) genaue Beschleunigung nehmen/erzeugen? Die einzige, die> mir zur Verfügung steht ist 1g (9,81 m/s2). ;-)
z.B. mit sowas
> Testest du deine> Thermometer auch erstmal in der Kühlkammer durch oder glaubst du den> Angaben?
Ich mache das nicht aber der Hersteller sicherlich, sonst kann er ja
keine Angeben machen ;)
> Nur warum sollte das so nicht stimmen?> Was ist denn genau der Hintergrund deines Misstrauens?
Mit fehlen Angaben wie z.B. der Interrupt kann nur auf max. 8g reagieren
oder sowas.
> Warum willst du den Sensor unbedingt exakt qualifizieren?
Naja ich verwende diesen Sensor und einer der Hauptaufgaben des
Projektes ist es den Interrupt richtig einzustellen, wenn da Fragen
kommen mit wie haben sie den Schwellwert definiert und validiert dann
sage ich ammmm ammmm siehe diesen Thread :)
Dann ließ den Beschleunigungswert ständig aus und wenn der Interupt
kommt merke dir den letzten Wert undden danch ausgelesen. Das Zeichnest
du dir in ein Diagramm. Wenn du das noch validieren mußt dann nimm ein
Kalibriertes Beschleunigungsmessgerät und befestige die Beiden
miteinader und mach den Test nochmal.
Nun jut Leute,
vielen Dank an alle, hab mir auf jeden Fall geholfen.
Wenn ich was neues Handfestes erfahre werde ich es hier posten, wenn
nicht dann ist die hier disskutierte Lösung die Richtige :-)
Gruß