A library for the Invensense MPU9150

Dependencies:   I2CHelper

Dependents:   Atlas_Test

Committer:
ethanharstad
Date:
Wed Jun 04 05:56:54 2014 +0000
Revision:
1:1b0ada1695a7
Parent:
0:d6616b97605d
Child:
2:581fad93a809
Bare minimum accel/gyro function definitions

Who changed what in which revision?

UserRevisionLine numberNew contents of line
ethanharstad 0:d6616b97605d 1 #ifndef MPU9150_H_
ethanharstad 0:d6616b97605d 2 #define MPU9150_H_
ethanharstad 0:d6616b97605d 3
ethanharstad 1:1b0ada1695a7 4 #include "mbed.h"
ethanharstad 1:1b0ada1695a7 5
ethanharstad 1:1b0ada1695a7 6 #define MPU9150_ADDRESS_AD0_LOW 0x68
ethanharstad 1:1b0ada1695a7 7 #define MPU9150_ADDRESS_AD0_HIGH 0x69
ethanharstad 1:1b0ada1695a7 8 #define MPU9150_ADDRESS_DEFAULT MPU9150_ADDRESS_AD0_LOW
ethanharstad 1:1b0ada1695a7 9
ethanharstad 0:d6616b97605d 10 #define MPU9150_RA_SELF_TEST_X 0x0D
ethanharstad 0:d6616b97605d 11 #define MPU9150_RA_SELF_TEST_Y 0x0E
ethanharstad 0:d6616b97605d 12 #define MPU9150_RA_SELF_TEST_Z 0x0F
ethanharstad 0:d6616b97605d 13 #define MPU9150_RA_SELF_TEST_A 0x10
ethanharstad 0:d6616b97605d 14 #define MPU9150_RA_SMPLRT_DIV 0x19
ethanharstad 0:d6616b97605d 15 #define MPU9150_RA_CONFIG 0x1A
ethanharstad 0:d6616b97605d 16 #define MPU9150_RA_GYRO_CONFIG 0x1B
ethanharstad 0:d6616b97605d 17 #define MPU9150_RA_ACCEL_CONFIG 0x1C
ethanharstad 0:d6616b97605d 18 #define MPU9150_RA_FIFO_EN 0x23
ethanharstad 0:d6616b97605d 19 #define MPU9150_RA_I2C_MST_CTRL 0x24
ethanharstad 0:d6616b97605d 20 #define MPU9150_RA_I2C_SLV0_ADDR 0x25
ethanharstad 0:d6616b97605d 21 #define MPU9150_RA_I2C_SLV0_REG 0x26
ethanharstad 0:d6616b97605d 22 #define MPU9150_RA_I2C_SLV0_CTRL 0x27
ethanharstad 0:d6616b97605d 23 #define MPU9150_RA_I2C_SLV1_ADDR 0x28
ethanharstad 0:d6616b97605d 24 #define MPU9150_RA_I2C_SLV1_REG 0x29
ethanharstad 0:d6616b97605d 25 #define MPU9150_RA_I2C_SLV1_CTRL 0x2A
ethanharstad 0:d6616b97605d 26 #define MPU9150_RA_I2C_SLV2_ADDR 0x2B
ethanharstad 0:d6616b97605d 27 #define MPU9150_RA_I2C_SLV2_REG 0x2C
ethanharstad 0:d6616b97605d 28 #define MPU9150_RA_I2C_SLV2_CTRL 0x2D
ethanharstad 0:d6616b97605d 29 #define MPU9150_RA_I2C_SLV3_ADDR 0x2E
ethanharstad 0:d6616b97605d 30 #define MPU9150_RA_I2C_SLV3_REG 0x2F
ethanharstad 0:d6616b97605d 31 #define MPU9150_RA_I2C_SLV3_CTRL 0x30
ethanharstad 0:d6616b97605d 32 #define MPU9150_RA_I2C_SLV4_ADDR 0x31
ethanharstad 0:d6616b97605d 33 #define MPU9150_RA_I2C_SLV4_REG 0x32
ethanharstad 0:d6616b97605d 34 #define MPU9150_RA_I2C_SLV4_DO 0x33
ethanharstad 0:d6616b97605d 35 #define MPU9150_RA_I2C_SLV4_CTRL 0x34
ethanharstad 0:d6616b97605d 36 #define MPU9150_RA_I2C_SLV4_DI 0x35
ethanharstad 0:d6616b97605d 37 #define MPU9150_RA_I2C_MST_STATUS 0x36
ethanharstad 0:d6616b97605d 38 #define MPU9150_RA_INT_PIN_CFG 0x37
ethanharstad 0:d6616b97605d 39 #define MPU9150_RA_INT_ENABLE 0x38
ethanharstad 0:d6616b97605d 40 #define MPU9150_RA_INT_STATUS 0x3A
ethanharstad 0:d6616b97605d 41 #define MPU9150_RA_ACCEL_XOUT_H 0x3B
ethanharstad 0:d6616b97605d 42 #define MPU9150_RA_ACCEL_XOUT_L 0x3C
ethanharstad 0:d6616b97605d 43 #define MPU9150_RA_ACCEL_YOUT_H 0x3D
ethanharstad 0:d6616b97605d 44 #define MPU9150_RA_ACCEL_YOUT_L 0x3E
ethanharstad 0:d6616b97605d 45 #define MPU9150_RA_ACCEL_ZOUT_H 0x3F
ethanharstad 0:d6616b97605d 46 #define MPU9150_RA_ACCEL_ZOUT_L 0x40
ethanharstad 0:d6616b97605d 47 #define MPU9150_RA_TEMP_OUT_H 0x41
ethanharstad 0:d6616b97605d 48 #define MPU9150_RA_TEMP_OUT_L 0x42
ethanharstad 0:d6616b97605d 49 #define MPU9150_RA_GYRO_XOUT_H 0x43
ethanharstad 0:d6616b97605d 50 #define MPU9150_RA_GYRO_XOUT_L 0x44
ethanharstad 0:d6616b97605d 51 #define MPU9150_RA_GYRO_YOUT_H 0x45
ethanharstad 0:d6616b97605d 52 #define MPU9150_RA_GYRO_YOUT_L 0x46
ethanharstad 0:d6616b97605d 53 #define MPU9150_RA_GYRO_ZOUT_H 0x47
ethanharstad 0:d6616b97605d 54 #define MPU9150_RA_GYRO_ZOUT_L 0x48
ethanharstad 0:d6616b97605d 55 #define MPU9150_RA_EXT_SENS_DATA_00 0x49
ethanharstad 0:d6616b97605d 56 #define MPU9150_RA_EXT_SENS_DATA_01 0x4A
ethanharstad 0:d6616b97605d 57 #define MPU9150_RA_EXT_SENS_DATA_02 0x4B
ethanharstad 0:d6616b97605d 58 #define MPU9150_RA_EXT_SENS_DATA_03 0x4C
ethanharstad 0:d6616b97605d 59 #define MPU9150_RA_EXT_SENS_DATA_04 0x4D
ethanharstad 0:d6616b97605d 60 #define MPU9150_RA_EXT_SENS_DATA_05 0x4E
ethanharstad 0:d6616b97605d 61 #define MPU9150_RA_EXT_SENS_DATA_06 0x4F
ethanharstad 0:d6616b97605d 62 #define MPU9150_RA_EXT_SENS_DATA_07 0x50
ethanharstad 0:d6616b97605d 63 #define MPU9150_RA_EXT_SENS_DATA_08 0x51
ethanharstad 0:d6616b97605d 64 #define MPU9150_RA_EXT_SENS_DATA_09 0x52
ethanharstad 0:d6616b97605d 65 #define MPU9150_RA_EXT_SENS_DATA_10 0x53
ethanharstad 0:d6616b97605d 66 #define MPU9150_RA_EXT_SENS_DATA_11 0x54
ethanharstad 0:d6616b97605d 67 #define MPU9150_RA_EXT_SENS_DATA_12 0x55
ethanharstad 0:d6616b97605d 68 #define MPU9150_RA_EXT_SENS_DATA_13 0x56
ethanharstad 0:d6616b97605d 69 #define MPU9150_RA_EXT_SENS_DATA_14 0x57
ethanharstad 0:d6616b97605d 70 #define MPU9150_RA_EXT_SENS_DATA_15 0x58
ethanharstad 0:d6616b97605d 71 #define MPU9150_RA_EXT_SENS_DATA_16 0x59
ethanharstad 0:d6616b97605d 72 #define MPU9150_RA_EXT_SENS_DATA_17 0x5A
ethanharstad 0:d6616b97605d 73 #define MPU9150_RA_EXT_SENS_DATA_18 0x5B
ethanharstad 0:d6616b97605d 74 #define MPU9150_RA_EXT_SENS_DATA_19 0x5C
ethanharstad 0:d6616b97605d 75 #define MPU9150_RA_EXT_SENS_DATA_20 0x5D
ethanharstad 0:d6616b97605d 76 #define MPU9150_RA_EXT_SENS_DATA_21 0x5E
ethanharstad 0:d6616b97605d 77 #define MPU9150_RA_EXT_SENS_DATA_22 0x5F
ethanharstad 0:d6616b97605d 78 #define MPU9150_RA_EXT_SENS_DATA_23 0x60
ethanharstad 1:1b0ada1695a7 79 #define MPU9150_RA_I2C_SLV0_DO 0x63
ethanharstad 0:d6616b97605d 80 #define MPU9150_RA_I2C_SLV1_DO 0x64
ethanharstad 0:d6616b97605d 81 #define MPU9150_RA_I2C_SLV2_DO 0x65
ethanharstad 0:d6616b97605d 82 #define MPU9150_RA_I2C_SLV3_DO 0x66
ethanharstad 0:d6616b97605d 83 #define MPU9150_RA_I2C_MST_DELAY_CTRL 0x67
ethanharstad 0:d6616b97605d 84 #define MPU9150_RA_SIGNAL_PATH_RESET 0x68
ethanharstad 0:d6616b97605d 85 #define MPU9150_RA_USER_CTRL 0x6A
ethanharstad 0:d6616b97605d 86 #define MPU9150_RA_PWR_MGMT_1 0x6B
ethanharstad 0:d6616b97605d 87 #define MPU9150_RA_PWR_MGMT_2 0x6C
ethanharstad 0:d6616b97605d 88 #define MPU9150_RA_FIFO_COUNTH 0x72
ethanharstad 0:d6616b97605d 89 #define MPU9150_RA_FIFO_COUNTL 0x73
ethanharstad 0:d6616b97605d 90 #define MPU9150_RA_FIFO_R_W 0x74
ethanharstad 0:d6616b97605d 91 #define MPU9150_RA_WHO_AM_I 0x75
ethanharstad 0:d6616b97605d 92
ethanharstad 1:1b0ada1695a7 93 // CONFIG - EXT_SYNC_SET
ethanharstad 1:1b0ada1695a7 94 #define MPU9150_EXT_SYNC_DISABLED 0x00
ethanharstad 1:1b0ada1695a7 95 #define MPU9150_EXT_SYNC_TEMP_OUT_L 0x01
ethanharstad 1:1b0ada1695a7 96 #define MPU9150_EXT_SYNC_GYRO_XOUT_L 0x02
ethanharstad 1:1b0ada1695a7 97 #define MPU9150_EXT_SYNC_GYRO_YOUT_L 0x03
ethanharstad 1:1b0ada1695a7 98 #define MPU9150_EXT_SYNC_GYRO_ZOUT_L 0x04
ethanharstad 1:1b0ada1695a7 99 #define MPU9150_EXT_SYNC_ACCEL_XOUT_L 0x05
ethanharstad 1:1b0ada1695a7 100 #define MPU9150_EXT_SYNC_ACCEL_YOUT_L 0x06
ethanharstad 1:1b0ada1695a7 101 #define MPU9150_EXT_SYNC_ACCEL_ZOUT_L 0x07
ethanharstad 1:1b0ada1695a7 102
ethanharstad 1:1b0ada1695a7 103 // CONFIG - DLPF_CFG
ethanharstad 1:1b0ada1695a7 104 #define MPU9150_DLPF_BW_256 0x00
ethanharstad 1:1b0ada1695a7 105 #define MPU9150_DLPF_BW_188 0x01
ethanharstad 1:1b0ada1695a7 106 #define MPU9150_DLPF_BW_98 0x02
ethanharstad 1:1b0ada1695a7 107 #define MPU9150_DLPF_BW_42 0x03
ethanharstad 1:1b0ada1695a7 108 #define MPU9150_DLPF_BW_20 0x04
ethanharstad 1:1b0ada1695a7 109 #define MPU9150_DLPF_BW_10 0x05
ethanharstad 1:1b0ada1695a7 110 #define MPU9150_DLPF_BW_5 0x06
ethanharstad 1:1b0ada1695a7 111
ethanharstad 1:1b0ada1695a7 112 // GYRO_CONFIG
ethanharstad 1:1b0ada1695a7 113 #define MPU9150_GYRO_FS_250 0x00
ethanharstad 1:1b0ada1695a7 114 #define MPU9150_GYRO_FS_500 0x01
ethanharstad 1:1b0ada1695a7 115 #define MPU9150_GYRO_FS_1000 0x02
ethanharstad 1:1b0ada1695a7 116 #define MPU9150_GYRO_FS_2000 0x03
ethanharstad 1:1b0ada1695a7 117
ethanharstad 1:1b0ada1695a7 118 // ACCEL_CONFIG
ethanharstad 1:1b0ada1695a7 119 #define MPU9150_ACCEL_FS_2 0x00
ethanharstad 1:1b0ada1695a7 120 #define MPU9150_ACCEL_FS_4 0x01
ethanharstad 1:1b0ada1695a7 121 #define MPU9150_ACCEL_FS_8 0x02
ethanharstad 1:1b0ada1695a7 122 #define MPU9150_ACCEL_FS_16 0x03
ethanharstad 1:1b0ada1695a7 123
ethanharstad 0:d6616b97605d 124 class MPU9150 {
ethanharstad 0:d6616b97605d 125 public:
ethanharstad 0:d6616b97605d 126 MPU9150();
ethanharstad 1:1b0ada1695a7 127 explicit MPU9150(const bool AD0);
ethanharstad 1:1b0ada1695a7 128 MPU9150(const PinName sda, const PinName scl, const bool AD0);
ethanharstad 1:1b0ada1695a7 129
ethanharstad 1:1b0ada1695a7 130 void initialize();
ethanharstad 1:1b0ada1695a7 131 bool test();
ethanharstad 1:1b0ada1695a7 132
ethanharstad 1:1b0ada1695a7 133 // SMPRT_DIV Register
ethanharstad 1:1b0ada1695a7 134 uint8_t getSampleRateDivider();
ethanharstad 1:1b0ada1695a7 135 void setSampleRateDivider(const uint8_t divider);
ethanharstad 1:1b0ada1695a7 136
ethanharstad 1:1b0ada1695a7 137 // CONFIG Register
ethanharstad 1:1b0ada1695a7 138 uint8_t getExternalFrameSync();
ethanharstad 1:1b0ada1695a7 139 void setExternalFrameSync(const uint8_t sync);
ethanharstad 1:1b0ada1695a7 140 uint8_t getDLPFBandwidth();
ethanharstad 1:1b0ada1695a7 141 void setDLFPBandwidth(const uint8_t bandwidth);
ethanharstad 1:1b0ada1695a7 142
ethanharstad 1:1b0ada1695a7 143 // GYRO_CONFIG Register
ethanharstad 1:1b0ada1695a7 144 uint8_t getGyroFullScaleRange();
ethanharstad 1:1b0ada1695a7 145 void setGyroFullScaleRange(const uint8_t range);
ethanharstad 1:1b0ada1695a7 146
ethanharstad 1:1b0ada1695a7 147 // ACCEL_CONFIG Register
ethanharstad 1:1b0ada1695a7 148 uint8_t getAccelFullScaleRange();
ethanharstad 1:1b0ada1695a7 149 void setAccelFullScaleRange(const uint8_t range);
ethanharstad 1:1b0ada1695a7 150
ethanharstad 1:1b0ada1695a7 151 // ACCEL_OUT_* Registers
ethanharstad 1:1b0ada1695a7 152 int16_t getAccelX();
ethanharstad 1:1b0ada1695a7 153 int16_t getAccelY();
ethanharstad 1:1b0ada1695a7 154 int16_t getAccelZ();
ethanharstad 1:1b0ada1695a7 155
ethanharstad 1:1b0ada1695a7 156 // TEMP_OUT_* Registers
ethanharstad 1:1b0ada1695a7 157 int16_t getTemp();
ethanharstad 1:1b0ada1695a7 158
ethanharstad 1:1b0ada1695a7 159 // GYRO_OUT_* Registers
ethanharstad 1:1b0ada1695a7 160 int16_t getGyroX();
ethanharstad 1:1b0ada1695a7 161 int16_t getGyroY();
ethanharstad 1:1b0ada1695a7 162 int16_t getGyroZ();
ethanharstad 1:1b0ada1695a7 163
ethanharstad 1:1b0ada1695a7 164 // SIGNAL_PATH_RESET Register
ethanharstad 1:1b0ada1695a7 165 void resetGyroPath();
ethanharstad 1:1b0ada1695a7 166 void resetAccelPath();
ethanharstad 1:1b0ada1695a7 167 void resetTempPath();
ethanharstad 1:1b0ada1695a7 168
ethanharstad 1:1b0ada1695a7 169 // USER_CTRL Register
ethanharstad 1:1b0ada1695a7 170 bool getFifoEnabled();
ethanharstad 1:1b0ada1695a7 171 void setFifoEnabled(const bool fifo);
ethanharstad 1:1b0ada1695a7 172 bool getI2CMasterEnabled();
ethanharstad 1:1b0ada1695a7 173 void setI2CMasterEnabled(const bool master);
ethanharstad 1:1b0ada1695a7 174 void resetFifo();
ethanharstad 1:1b0ada1695a7 175 void resetI2CMaster();
ethanharstad 1:1b0ada1695a7 176 void resetSensors();
ethanharstad 1:1b0ada1695a7 177
ethanharstad 1:1b0ada1695a7 178 // PWR_MGMT_1 Register
ethanharstad 1:1b0ada1695a7 179 void reset();
ethanharstad 1:1b0ada1695a7 180 bool getSleepEnabled();
ethanharstad 1:1b0ada1695a7 181 void setSleepEnabled(const bool sleep);
ethanharstad 1:1b0ada1695a7 182 bool getCycleEnabled();
ethanharstad 1:1b0ada1695a7 183 void setCycleEnabled(const bool cycle);
ethanharstad 1:1b0ada1695a7 184 bool getTempEnabled();
ethanharstad 1:1b0ada1695a7 185 void setTempEnabled(const bool temp);
ethanharstad 1:1b0ada1695a7 186 uint8_t getClockSource();
ethanharstad 1:1b0ada1695a7 187 void setClockSource(const uint8_t source);
ethanharstad 1:1b0ada1695a7 188
ethanharstad 1:1b0ada1695a7 189 // PWR_MGMT_2 Register
ethanharstad 1:1b0ada1695a7 190 uint8_t getCycleFrequency();
ethanharstad 1:1b0ada1695a7 191 void setCycleFrequency(const uint8_t frequency);
ethanharstad 1:1b0ada1695a7 192 bool getStandbyAccelXEnabled();
ethanharstad 1:1b0ada1695a7 193 void setStandbyAccelXEnabled(const bool enabled);
ethanharstad 1:1b0ada1695a7 194 bool getStandbyAccelYEnabled();
ethanharstad 1:1b0ada1695a7 195 void setStandbyAccelYEnabled(const bool enabled);
ethanharstad 1:1b0ada1695a7 196 bool getStandbyAccelZEnabled();
ethanharstad 1:1b0ada1695a7 197 void setStandbyAccelZEnabled(const bool enabled);
ethanharstad 1:1b0ada1695a7 198 bool getStandbyGyroXEnabled();
ethanharstad 1:1b0ada1695a7 199 void setStandbyGyroXEnabled(const bool enabled);
ethanharstad 1:1b0ada1695a7 200 bool getStandbyGyroYEnabled();
ethanharstad 1:1b0ada1695a7 201 void setStandbyGyroYEnabled(const bool enabled);
ethanharstad 1:1b0ada1695a7 202 bool getStandbyGyroZEnabled();
ethanharstad 1:1b0ada1695a7 203 void setStandbyGyroZEnabled(const bool enabled);
ethanharstad 1:1b0ada1695a7 204
ethanharstad 1:1b0ada1695a7 205 // WHO_AM_I Register
ethanharstad 1:1b0ada1695a7 206 uint8_t getDeviceID();
ethanharstad 0:d6616b97605d 207
ethanharstad 0:d6616b97605d 208 private:
ethanharstad 1:1b0ada1695a7 209 uint8_t readByte(const uint8_t deviceAddress, const uint8_t registerAddress, uint8_t *data);
ethanharstad 1:1b0ada1695a7 210 bool writeByte(const uint8_t deviceAddress, const uint8_t registerAddress, const uint8_t *data);
ethanharstad 1:1b0ada1695a7 211
ethanharstad 0:d6616b97605d 212 I2C i2c_;
ethanharstad 0:d6616b97605d 213 uint8_t address_;
ethanharstad 1:1b0ada1695a7 214 };
ethanharstad 0:d6616b97605d 215
ethanharstad 0:d6616b97605d 216 #endif