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.
:
Bearbeitet durch User
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.
:
Bearbeitet durch User
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.
:
Bearbeitet durch User
Hi >Und noch einen "Motion Detection" und diesen möchte ich auch nutzen. Wo? Mir reicht die Registernummer in http://www.google.de/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&ved=0CCIQFjAA&url=http%3A%2F%2Fwww.invensense.com%2Fmems%2Fgyro%2Fdocuments%2FRM-MPU-9150A-00v4_2.pdf&ei=iLARVaHTBYXeapHGgbAK&usg=AFQjCNFuM2q_6520XeyPTmnxeQdQIq6Csw&bvm=bv.89184060,d.d2s&cad=rja MfG Spess
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?
:
Bearbeitet durch User
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 :)
:
Bearbeitet durch User
Hi >Der Interrupt kommt, hab es mit einem Osszi gemessen und auch mit >einwenig LED spielereien :) Am gemeinsamen Interrupt-Ausgang? MfG Spess
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ß
:
Bearbeitet durch User
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 ....
1 | // FREE FALL
|
2 | MPU9150_Registers._0x1D_FREE_FALL_Accel_Threshold = 20; // 1 LSB = 32mg; 30 = 640 mg |
3 | MPU9150_Registers._0x1E_FREE_FALL_Duration = 2; // 1 LSB = 1 ms |
4 | MPU9150_Registers._0x69_Motion_detect_ctrl.FF_COUNT = 1; // decrement by 1 |
5 | // SHOCK
|
6 | MPU9150_Registers._0x1C_Accel_config.ACCEL_HPF = _on_5_00Hz; |
7 | MPU9150_Registers._0x1F_Motion_Detection_Threshold = 32; // 1 LSB = 32 mg; 1024 mg |
8 | MPU9150_Registers._0x20_Motion_Detection_Duration = 1; // 1 LSB = 1 ms |
9 | MPU9150_Registers._0x69_Motion_detect_ctrl.MOT_COUNT = 1; // decrement by 1 |
10 | MPU9150_Registers._0x69_Motion_detect_ctrl.ACCEL_ON_DELAY = 3; // 7 ms delay |
11 | // ZERO MOTION
|
12 | MPU9150_Registers._0x21_Zero_Motion_Detection_Threshold = 1; // 1 LSB = 32 mg; 2 = 64 mg |
13 | MPU9150_Registers._0x22_Zero_Motion_Detection_Duration = 46; // 1 LSB = 64 ms; 46 = 3000 ms |
:
Bearbeitet durch User
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 |
6 | accelgyro.setWakeCycleEnabled(false); |
7 | accelgyro.setStandbyXAccelEnabled(false); //acc axis enable |
8 | accelgyro.setStandbyYAccelEnabled(false); |
9 | accelgyro.setStandbyZAccelEnabled(false); |
10 | accelgyro.setDHPFMode(0x00); |
11 | accelgyro.setDLPFMode(0x00); |
12 | |
13 | accelgyro.setIntEnabled(0x40); //enable the mot_detect_int |
14 | accelgyro.setIntMotionEnabled(true); |
15 | accelgyro.setMotionDetectionDuration(1); //1 LSB = 1ms 25 LSB * (1/5Hz) = 5s |
16 | accelgyro.setMotionDetectionThreshold(64); //1 LSB = 32mg 10 LSB * 32 mg/LSB = 320mg |
17 | |
18 | delay(1); |
19 | |
20 | accelgyro.setDHPFMode(0x07); |
21 | accelgyro.setWakeFrequency(B01000111); //5Hz |
22 | |
23 | accelgyro.setWakeCycleEnabled(false); |
24 | accelgyro.setTempSensorEnabled(false); |
25 | |
26 | } |
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. :)
:
Bearbeitet durch User
Sergej M. schrieb: > Welcher Wert ist dann 2g? 2g (absolut) kann der Sensor nicht per Interrupt melden.
>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.
:
Bearbeitet durch User
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).
:
Bearbeitet durch User
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.
:
Bearbeitet durch User
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ß
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.
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
:
Bearbeitet durch User
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.
:
Bearbeitet durch User
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). ;-)
:
Bearbeitet durch User
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ß
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.