Farhan Alam
/
MPU9250_withflashmemorytest
Fork of MPU9250 by
Diff: MPU9250.h
- Revision:
- 4:337af8bbd44e
- Parent:
- 3:c138317c9753
- Child:
- 5:c7d9f3353b7c
--- a/MPU9250.h Sat Jul 08 14:49:30 2017 +0000 +++ b/MPU9250.h Sun Jul 09 13:01:22 2017 +0000 @@ -3,7 +3,8 @@ #include "mbed.h" #include "math.h" - +#include "FLASH.h" +#include "user.h" // See also MPU-9250 Register Map and Descriptions, Revision 4.0, RM-MPU-9250A-00, Rev. 1.4, 9/9/2013 for registers not listed in // above document; the MPU9250 and MPU9150 are virtually identical but the latter has a different register map // @@ -266,7 +267,7 @@ } } -/* + void getMres() { switch (Mscale) { @@ -280,8 +281,8 @@ break; } } -*/ -/* + + void getGres() { switch (Gscale) { @@ -325,7 +326,7 @@ } } -*/ + void readAccelData(int16_t * destination) { uint8_t rawData[6]; // x/y/z accel register data stored here @@ -333,8 +334,19 @@ destination[0] = (int16_t)(((int16_t)rawData[0] << 8) | rawData[1]) ; // Turn the MSB and LSB into a signed 16-bit value destination[1] = (int16_t)(((int16_t)rawData[2] << 8) | rawData[3]) ; destination[2] = (int16_t)(((int16_t)rawData[4] << 8) | rawData[5]) ; + reg8_bit[X_H]=rawData[0]; + reg8_bit[X_L]=rawData[1]; + reg8_bit[Y_H]=rawData[2]; + reg8_bit[Y_L]=rawData[3]; + reg8_bit[Z_H]=rawData[4]; + reg8_bit[Z_L]=rawData[5]; } + + + + + void readGyroData(int16_t * destination) { uint8_t rawData[6]; // x/y/z gyro register data stored here @@ -342,6 +354,12 @@ destination[0] = (int16_t)(((int16_t)rawData[0] << 8) | rawData[1]) ; // Turn the MSB and LSB into a signed 16-bit value destination[1] = (int16_t)(((int16_t)rawData[2] << 8) | rawData[3]) ; destination[2] = (int16_t)(((int16_t)rawData[4] << 8) | rawData[5]) ; + reg8_bit[X_H]=rawData[0]; + reg8_bit[X_L]=rawData[1]; + reg8_bit[Y_H]=rawData[2]; + reg8_bit[Y_L]=rawData[3]; + reg8_bit[Z_H]=rawData[4]; + reg8_bit[Z_L]=rawData[5]; } void readMagData(int16_t * destination) @@ -354,6 +372,12 @@ destination[0] = (int16_t)(((int16_t)rawData[1] << 8) | rawData[0]); // Turn the MSB and LSB into a signed 16-bit value destination[1] = (int16_t)(((int16_t)rawData[3] << 8) | rawData[2]) ; // Data stored as little Endian destination[2] = (int16_t)(((int16_t)rawData[5] << 8) | rawData[4]) ; + reg8_bit[X_H]=rawData[0]; + reg8_bit[X_L]=rawData[1]; + reg8_bit[Y_H]=rawData[2]; + reg8_bit[Y_L]=rawData[3]; + reg8_bit[Z_H]=rawData[4]; + reg8_bit[Z_L]=rawData[5]; } } } @@ -594,7 +618,7 @@ dest2[1] = (float)accel_bias[1]/(float)accelsensitivity; dest2[2] = (float)accel_bias[2]/(float)accelsensitivity; } - +/* // Accelerometer and gyroscope self test; check calibration wrt factory settings void MPU9250SelfTest(float * destination) // Should return percent deviation from factory trim values, +/- 14 or less deviation is a pass @@ -681,9 +705,25 @@ } } +*/ + + + + + + + + + + + + +/* + + // Implementation of Sebastian Madgwick's "...efficient orientation filter for... inertial/magnetic sensor arrays" // (see http://www.x-io.co.uk/category/open-source/ for examples and more details) // which fuses acceleration, rotation rate, and magnetic moments to produce a quaternion-based estimate of absolute @@ -782,7 +822,7 @@ } - + */ // Similar to Madgwick scheme but uses proportional and integral filtering on the error between estimated reference vectors and // measured ones.