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