Hallo, ich kann meine IMU (MPU9250) fabelhaft mit SPI initialisieren und auslesen , aber es gelingt mir nicht, daten vom Magnetometer dieses Teils zu bekommen. (ATMEGA 328, AVR-Studio, C) Problem ist wahrscheinlich die Initialisierung des Magnetometers, möglicherweise geht das doch nur über I2C im bypass-mode. Deshalb die frage, hat das schon mal jemend mit SPI geschafft? Ich kann das Who i am register des magnetometers auslesen, aber anscheinend nix in ein register reinschreiben obwohl es dazu bei MPU9250 das register 99 gibt. Ich versuche also, die Register des Magnetometers so zu initialisieren: (Der erste Wert ist das register des MPU9250, der zweite der wert der geschrieben werden soll; ohne {39, 0x81} klappt es auch nicht). {36, 14}, // set I2C slave 0 to < 400 KHz {37, MAG_ADR | WRITE_REG}, // address of magnetometer into I2C-Slave // -0-Control register, write {38, MAG_REG_CNTL2}, // start writing into this register {39, 0x81}, // send this byte {99, 1}, // write value 1 into CNTL2: Reset magnetometer {39, 0x81}, // send this byte {37, MAG_ADR | WRITE_REG}, // address of magnetometer into I2C-Slave //-0-Control register, write {38, MAG_REG_CNTL1}, // start writing into this register {39, 0x81}, // send this byte {99, 0x16}, // write value 6 in CNTL1Cont meas mode 2; // 16 bit {39, 0x81}, // send this byte {37, MAG_ADR & READ_REG}, // address of magnetometer into I2C-Slave // -0-Control register, read {38, MAG_REG_STATUS1}, // start reading from this register; // MAG_REG_STATUS1 = 1 byte before data {39, 0x98}, // I2C_SLV0_EN=1 I2C_SLV0_REG_DIS=1 // I2C_SLV0_LENG =8 Danke für Hilfe!
Hallo Hamster, hast für das Problem bereits eine Lösung gefunden? MfG Eddie
Eddie schrieb: > hast für das Problem bereits eine Lösung gefunden? Seit über drei Jahren arbeite ich daran und schaue auch ständig hier im Forum nach, ob mir jemand doch noch den finalen Tip geben kann. Sorry, leider geht meine Lebenszeit dem Ende zu und ich werde es wohl nicht mehr schaffen :-(
Ich hätte eine ähnliche Frage. Ich möchte den Sensor über I²C auslesen. Laut Datenblatt besteht der Sensor aus 2 Teilen, einen für Acc und Gyro und einen für Mag. Beide Teile haben eine eigene Register-Map die jeweils bei Adresse 0 beginnt. Jetzt frage ich mich, wie man beide Teile getrennt anspricht. Von zwei verschiedenen Geräteadressen habe ich nichts im Datenblatt gefunden. Auch eine Adressuche am I²C-Bus zeigt mir nur ein Gerät an. Wird der Mag-Teil vom Acc/Gyro-Teil etwa wie ein extern angeschlossener Sensor behandelt ? Das Handling/Durchschleifen von extern angeschlossenen Sensoren scheint mir doch etwas umständlich zu sein.
Sven G. schrieb: > Von zwei verschiedenen Geräteadressen habe ich > nichts im Datenblatt gefunden. Auch eine Adressuche am I²C-Bus zeigt mir > nur ein Gerät an. Sven schau dir mal im Datenblatt die Kapitel 4.4 Block Diagram, 4.11 Auxiliary I2C Serial Interface und 7.2 I2C Interface an. https://www.invensense.com/wp-content/uploads/2015/02/PS-MPU-9250A-01-v1.1.pdf Insbesondere den Unterschied zwischen "I2C Master Mode" und "Pass-Through mode". Die Kurzfassung: Im I2C Master Mode kann nur der MPU-9250 (Accel+Gyro) direkt auf den eingebauten Magnetometer die(AK8963) zugreifen, aber nicht der Host-µC. Dagegen sind nur im Pass-Through mode beide Teile vom Host-µC unter zwei verschiedenen I2C Adressen erreichbar. Zitat: "Pass-Through mode (...) In this mode,the system processor can still access MPU-9250data through the I2C interface. Pass-Through mode is also used to access the AK8963 magnetometer directly from the host. In this configuration the slave address for the AK8963 is 0X0C or 12 decimal." "The slave address of the MPU-9250 is b110100X (0x68 / 0x69) which is 7 bits long. The LSB bit of the 7 bit address is determined by the logic level on pin AD0."
Vielen Dank. Es funktioniert. Falls andere Fragende auf diesen Thread stoßen: Ich fülle folgende Register des MPU9250 mit Werten: INT_PIN_CFG=0x22 INT_ENABLE=0x01 Dann ist der Pass-Through-Mode aktiviert und man kann den Mag-Teil unter der eigenen I2C-Adress 0x0C erreichen. Der Mag-Teil heißt übrigens AK8963 und man bekommt von dessen Hersteller ein eigenes Datenblatt. Im Mag-Teil muss man erst im Control-Register den Messmodus aktivieren und kann dann die Messdaten lesen. Obwohl ich einen "continuous" read mode verwende, muss ich nach jedem Auslesen der Daten den Modus neu setzen, damit die Daten aktualisiert werden. Da bin ich noch am Forschen, woran das liegt ....
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.