Self test boot program for testing icarus sensors
Dependencies: BLE_API mbed nRF51822
Fork of BLE_UARTConsole by
Diff: MPU9250Sensor.h
- Revision:
- 14:cb369746225d
- Parent:
- 13:ef0ce8fa871f
--- a/MPU9250Sensor.h Sun Apr 05 09:54:04 2015 +0000
+++ b/MPU9250Sensor.h Wed Apr 15 20:01:16 2015 +0000
@@ -6,29 +6,21 @@
#include "BaseSensor.h"
// mpu9250 registers
-#define MPU9250_XG_OFFS_TC 0x00
-#define MPU9250_YG_OFFS_TC 0x01
-#define MPU9250_ZG_OFFS_TC 0x02
-#define MPU9250_X_FINE_GAIN 0x03
-#define MPU9250_Y_FINE_GAIN 0x04
-#define MPU9250_Z_FINE_GAIN 0x05
-#define MPU9250_XA_OFFS_H 0x06
-#define MPU9250_XA_OFFS_L 0x07
-#define MPU9250_YA_OFFS_H 0x08
-#define MPU9250_YA_OFFS_L 0x09
-#define MPU9250_ZA_OFFS_H 0x0A
-#define MPU9250_ZA_OFFS_L 0x0B
-#define MPU9250_PRODUCT_ID 0x0C
-#define MPU9250_SELF_TEST_X 0x0D
-#define MPU9250_SELF_TEST_Y 0x0E
-#define MPU9250_SELF_TEST_Z 0x0F
-#define MPU9250_SELF_TEST_A 0x10
-#define MPU9250_XG_OFFS_USRH 0x13
-#define MPU9250_XG_OFFS_USRL 0x14
-#define MPU9250_YG_OFFS_USRH 0x15
-#define MPU9250_YG_OFFS_USRL 0x16
-#define MPU9250_ZG_OFFS_USRH 0x17
-#define MPU9250_ZG_OFFS_USRL 0x18
+#define MPU9250_SELF_TEST_X_GYRO 0x00
+#define MPU9250_SELF_TEST_Y_GYRO 0x01
+#define MPU9250_SELF_TEST_Z_GYRO 0x02
+
+#define MPU9250_SELF_TEST_X_ACCEL 0x0D
+#define MPU9250_SELF_TEST_Y_ACCEL 0x0E
+#define MPU9250_SELF_TEST_Z_ACCEL 0x0F
+
+
+#define MPU9250_XG_OFFSET_H 0x13
+#define MPU9250_XG_OFFSET_L 0x14
+#define MPU9250_YG_OFFSET_H 0x15
+#define MPU9250_YG_OFFSET_L 0x16
+#define MPU9250_ZG_OFFSET_H 0x17
+#define MPU9250_ZG_OFFSET_L 0x18
#define MPU9250_SMPLRT_DIV 0x19
#define MPU9250_CONFIG 0x1A
#define MPU9250_GYRO_CONFIG 0x1B
@@ -137,8 +129,8 @@
#define AK8963_HZH 0x08
#define AK8963_ST2 0x09
// Write/Read Reg
-#define AK8963_CNTL1 0x0A
-#define AK8963_CNTL2 0x0B
+#define AK8963_CNTL 0x0A
+#define AK8963_RSV 0x0B
#define AK8963_ASTC 0x0C
#define AK8963_TS1 0x0D
#define AK8963_TS2 0x0E
@@ -149,6 +141,46 @@
#define AK8963_ASAZ 0x12
#define MPU9250_READ_FLAG 0x80
+
+#define MPU9250_AFS_2G 0
+#define MPU9250_AFS_4G 1
+#define MPU9250_AFS_8G 2
+#define MPU9250_AFS_16G 3
+
+#define MPU9250_GFS_250DPS 0
+#define MPU9250_GFS_500DPS 1
+#define MPU9250_GFS_1000DPS 2
+#define MPU9250_GFS_2000DPS 3
+
+
+#define MPU9250_AFS_2G_MULTIPLIER 2.0/32768.0
+#define MPU9250_AFS_4G_MULTIPLIER 4.0/32768.0
+#define MPU9250_AFS_8G_MULTIPLIER 8.0/32768.0
+#define MPU9250_AFS_16G_MULTIPLIER 16.0/32768.0
+
+
+#define MPU9250_GFS_250DPS_MULTIPLIER 250.0/32768.0
+#define MPU9250_GFS_500DPS_MULTIPLIER 500.0/32768.0
+#define MPU9250_GFS_1000DPS_MULTIPLIER 1000.0/32768.0
+#define MPU9250_GFS_2000DPS_MULTIPLIER 2000.0/32768.0
+
+
+/* ---- Sensitivity --------------------------------------------------------- */
+
+#define MPU9250A_2g ((float)0.000061035156f) // 0.000061035156 g/LSB
+#define MPU9250A_4g ((float)0.000122070312f) // 0.000122070312 g/LSB
+#define MPU9250A_8g ((float)0.000244140625f) // 0.000244140625 g/LSB
+#define MPU9250A_16g ((float)0.000488281250f) // 0.000488281250 g/LSB
+
+#define MPU9250G_250dps ((float)0.007633587786f) // 0.007633587786 dps/LSB
+#define MPU9250G_500dps ((float)0.015267175572f) // 0.015267175572 dps/LSB
+#define MPU9250G_1000dps ((float)0.030487804878f) // 0.030487804878 dps/LSB
+#define MPU9250G_2000dps ((float)0.060975609756f) // 0.060975609756 dps/LSB
+
+#define MPU9250M_4800uT ((float)0.15f) // 0.15 uT/LSB
+
+#define MPU9250T_85degC ((float)0.002995177763f) // 0.002995177763 degC/LSB
+
class MPU9250Sensor : public BaseSensor {
public:
@@ -163,8 +195,20 @@
SPI& spi;
DigitalOut& cs;
+ float magnetometerCalibration[3];
+ void initMagnetometr();
uint32_t selfTest(uint32_t* errorResult);
+ uint32_t gyroscopeSelfTest(uint32_t* errorResult);
+ uint32_t accelerometerSelfTest(uint32_t* errorResult);
+ uint32_t magnetometerSelfTest(uint32_t* errorResult);
+ void readGyroOffset(uint8_t reg, float* data);
+ void averageData(uint8_t reg,int16_t* data);
uint8_t readRegister( uint8_t reg);
+ uint8_t readRegisterI2C( uint8_t reg);
+ void readRegisters(uint8_t reg, uint8_t count, uint8_t * dest);
+ void readRegistersI2C(uint8_t reg, uint8_t count, uint8_t * dest);
+ void writeRegister( uint8_t reg, uint8_t data, uint8_t mask = 0xff,uint8_t pos = 0);
+ void writeRegisterI2C( uint8_t reg, uint8_t data, uint8_t mask = 0xff,uint8_t pos = 0);
};
#endif
\ No newline at end of file
