A library for the Invensense MPU9150
MPU9150.h@1:1b0ada1695a7, 2014-06-04 (annotated)
- 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?
User | Revision | Line number | New 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 |