Hallo zusammen, ich möchte eine MPU-9250 (Breakout Board von Sparkfun) mit einem Mikrocontroller Interrupt-gesteuert per I2C auslesen und dabei am liebsten die I2C Master Funktionalität der MPU benutzen, um auch die Kompassmesswerte in einem Rutsch zu bekommen (vgl. https://github.com/kriswiner/MPU-9250/issues/86). Als Controller hab ich erstmal einen STM32 mit CubeMX HAL verwendet. Der I2C Bus ist mit 400 kHz Taktfrequenz konfiguriert. Mein Programm macht nun folgendes: 1. Warten, bis die MPU bereit ist 2. Reset und 200 ms warten 3. WHO_I_AM Register prüfen 4. Samplingrate vom Gyro auf 1 kHz stellen (0x01 ins CONFIG Register schreiben) 5. In einer Endlosschleife die Messwertregister auslesen Das funktioniert. Wenn ich nun zwischen 4. und 5. noch den Interrupt Pin einschalte, d.h. 0x01 ins INT_ENABLE Register schreibe, kann ich etwa 10-30 Samples lesen und dann bleibt der I2C Bus hängen (HAL meldet busy). Zuerst dachte ich an einen Fehler in der STM HAL und hab das ganze noch auf einem Arduino implementiert, wo sich der Fehler aber reproduzieren lässt. Wenn ich nun den I2C Bypass aktiviere, also 0x02 ins INT_PIN_CFG Register schreibe, funktioniert der Code wieder. Der Bypass selbst läuft auch, d.h. ich kann dann das Kompassmodul ansprechen. Schalte ich nun jedoch das I2C Mastermodul der MPU ein (Bit 5 im USER_CTRL Register), tritt das Problem wieder auf. Slaves habe ich dabei noch nicht konfiguriert. Ich habe die Registerdoku jetzt noch zwei Mal durchgelesen, aber nach meinem Verständnis sollte das so funktionieren. Weiß jemand, ob ich da vielleicht doch noch etwas übersehen habe? Muss noch etwas anderes konfiguriert werden?
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.