Self test boot program for testing icarus sensors

Dependencies:   BLE_API mbed nRF51822

Fork of BLE_UARTConsole by Bluetooth Low Energy

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