MPU6050 simple library

Dependents:   MPU6050_test Drone MPU6050_test acelerometro ... more

Committer:
ritarosakai
Date:
Mon Aug 19 08:57:14 2019 +0000
Revision:
16:002d3ac85242
Parent:
15:6036740714ad
Remove __disable_irq

Who changed what in which revision?

UserRevisionLine numberNew contents of line
ritarosakai 0:6d1b9bcd64ca 1 #ifndef __MPU6050_H
ritarosakai 0:6d1b9bcd64ca 2 #define __MPU6050_H
ritarosakai 0:6d1b9bcd64ca 3
ritarosakai 0:6d1b9bcd64ca 4 #include "mbed.h"
ritarosakai 0:6d1b9bcd64ca 5
ritarosakai 0:6d1b9bcd64ca 6 #define MPU6050_XG_OFFS_TC 0x00
ritarosakai 0:6d1b9bcd64ca 7 #define MPU6050_YG_OFFS_TC 0x01
ritarosakai 0:6d1b9bcd64ca 8 #define MPU6050_ZG_OFFS_TC 0x02
ritarosakai 0:6d1b9bcd64ca 9 #define MPU6050_X_FINE_GAIN 0x03
ritarosakai 0:6d1b9bcd64ca 10 #define MPU6050_Y_FINE_GAIN 0x04
ritarosakai 0:6d1b9bcd64ca 11 #define MPU6050_Z_FINE_GAIN 0x05
ritarosakai 0:6d1b9bcd64ca 12 #define MPU6050_XA_OFFS_H 0x06
ritarosakai 0:6d1b9bcd64ca 13 #define MPU6050_XA_OFFS_L_TC 0x07
ritarosakai 0:6d1b9bcd64ca 14 #define MPU6050_YA_OFFS_H 0x08
ritarosakai 0:6d1b9bcd64ca 15 #define MPU6050_YA_OFFS_L_TC 0x09
ritarosakai 0:6d1b9bcd64ca 16 #define MPU6050_ZA_OFFS_H 0x0A
ritarosakai 0:6d1b9bcd64ca 17 #define MPU6050_ZA_OFFS_L_TC 0x0B
ritarosakai 0:6d1b9bcd64ca 18 #define MPU6050_XG_OFFS_USRH 0x13
ritarosakai 0:6d1b9bcd64ca 19 #define MPU6050_XG_OFFS_USRL 0x14
ritarosakai 0:6d1b9bcd64ca 20 #define MPU6050_YG_OFFS_USRH 0x15
ritarosakai 0:6d1b9bcd64ca 21 #define MPU6050_YG_OFFS_USRL 0x16
ritarosakai 0:6d1b9bcd64ca 22 #define MPU6050_ZG_OFFS_USRH 0x17
ritarosakai 0:6d1b9bcd64ca 23 #define MPU6050_ZG_OFFS_USRL 0x18
ritarosakai 0:6d1b9bcd64ca 24 #define MPU6050_SMPLRT_DIV 0x19
ritarosakai 0:6d1b9bcd64ca 25 #define MPU6050_CONFIG 0x1A
ritarosakai 0:6d1b9bcd64ca 26 #define MPU6050_GYRO_CONFIG 0x1B
ritarosakai 0:6d1b9bcd64ca 27 #define MPU6050_ACCEL_CONFIG 0x1C
ritarosakai 0:6d1b9bcd64ca 28 #define MPU6050_FF_THR 0x1D
ritarosakai 0:6d1b9bcd64ca 29 #define MPU6050_FF_DUR 0x1E
ritarosakai 0:6d1b9bcd64ca 30 #define MPU6050_MOT_THR 0x1F
ritarosakai 0:6d1b9bcd64ca 31 #define MPU6050_MOT_DUR 0x20
ritarosakai 0:6d1b9bcd64ca 32 #define MPU6050_ZRMOT_THR 0x21
ritarosakai 0:6d1b9bcd64ca 33 #define MPU6050_ZRMOT_DUR 0x22
ritarosakai 0:6d1b9bcd64ca 34 #define MPU6050_FIFO_EN 0x23
ritarosakai 0:6d1b9bcd64ca 35 #define MPU6050_I2C_MST_CTRL 0x24
ritarosakai 0:6d1b9bcd64ca 36 #define MPU6050_I2C_SLV0_ADDR 0x25
ritarosakai 0:6d1b9bcd64ca 37 #define MPU6050_I2C_SLV0_REG 0x26
ritarosakai 0:6d1b9bcd64ca 38 #define MPU6050_I2C_SLV0_CTRL 0x27
ritarosakai 0:6d1b9bcd64ca 39 #define MPU6050_I2C_SLV1_ADDR 0x28
ritarosakai 0:6d1b9bcd64ca 40 #define MPU6050_I2C_SLV1_REG 0x29
ritarosakai 0:6d1b9bcd64ca 41 #define MPU6050_I2C_SLV1_CTRL 0x2A
ritarosakai 0:6d1b9bcd64ca 42 #define MPU6050_I2C_SLV2_ADDR 0x2B
ritarosakai 0:6d1b9bcd64ca 43 #define MPU6050_I2C_SLV2_REG 0x2C
ritarosakai 0:6d1b9bcd64ca 44 #define MPU6050_I2C_SLV2_CTRL 0x2D
ritarosakai 0:6d1b9bcd64ca 45 #define MPU6050_I2C_SLV3_ADDR 0x2E
ritarosakai 0:6d1b9bcd64ca 46 #define MPU6050_I2C_SLV3_REG 0x2F
ritarosakai 0:6d1b9bcd64ca 47 #define MPU6050_I2C_SLV3_CTRL 0x30
ritarosakai 0:6d1b9bcd64ca 48 #define MPU6050_I2C_SLV4_ADDR 0x31
ritarosakai 0:6d1b9bcd64ca 49 #define MPU6050_I2C_SLV4_REG 0x32
ritarosakai 0:6d1b9bcd64ca 50 #define MPU6050_I2C_SLV4_DO 0x33
ritarosakai 0:6d1b9bcd64ca 51 #define MPU6050_I2C_SLV4_CTRL 0x34
ritarosakai 0:6d1b9bcd64ca 52 #define MPU6050_I2C_SLV4_DI 0x35
ritarosakai 0:6d1b9bcd64ca 53 #define MPU6050_I2C_MST_STATUS 0x36
ritarosakai 0:6d1b9bcd64ca 54 #define MPU6050_INT_PIN_CFG 0x37
ritarosakai 0:6d1b9bcd64ca 55 #define MPU6050_INT_ENABLE 0x38
ritarosakai 0:6d1b9bcd64ca 56 #define MPU6050_DMP_INT_STATUS 0x39
ritarosakai 0:6d1b9bcd64ca 57 #define MPU6050_INT_STATUS 0x3A
ritarosakai 0:6d1b9bcd64ca 58 #define MPU6050_ACCEL_XOUT_H 0x3B
ritarosakai 0:6d1b9bcd64ca 59 #define MPU6050_ACCEL_XOUT_L 0x3C
ritarosakai 0:6d1b9bcd64ca 60 #define MPU6050_ACCEL_YOUT_H 0x3D
ritarosakai 0:6d1b9bcd64ca 61 #define MPU6050_ACCEL_YOUT_L 0x3E
ritarosakai 0:6d1b9bcd64ca 62 #define MPU6050_ACCEL_ZOUT_H 0x3F
ritarosakai 0:6d1b9bcd64ca 63 #define MPU6050_ACCEL_ZOUT_L 0x40
ritarosakai 0:6d1b9bcd64ca 64 #define MPU6050_TEMP_OUT_H 0x41
ritarosakai 0:6d1b9bcd64ca 65 #define MPU6050_TEMP_OUT_L 0x42
ritarosakai 0:6d1b9bcd64ca 66 #define MPU6050_GYRO_XOUT_H 0x43
ritarosakai 0:6d1b9bcd64ca 67 #define MPU6050_GYRO_XOUT_L 0x44
ritarosakai 0:6d1b9bcd64ca 68 #define MPU6050_GYRO_YOUT_H 0x45
ritarosakai 0:6d1b9bcd64ca 69 #define MPU6050_GYRO_YOUT_L 0x46
ritarosakai 0:6d1b9bcd64ca 70 #define MPU6050_GYRO_ZOUT_H 0x47
ritarosakai 0:6d1b9bcd64ca 71 #define MPU6050_GYRO_ZOUT_L 0x48
ritarosakai 0:6d1b9bcd64ca 72 #define MPU6050_EXT_SENS_DATA_00 0x49
ritarosakai 0:6d1b9bcd64ca 73 #define MPU6050_EXT_SENS_DATA_01 0x4A
ritarosakai 0:6d1b9bcd64ca 74 #define MPU6050_EXT_SENS_DATA_02 0x4B
ritarosakai 0:6d1b9bcd64ca 75 #define MPU6050_EXT_SENS_DATA_03 0x4C
ritarosakai 0:6d1b9bcd64ca 76 #define MPU6050_EXT_SENS_DATA_04 0x4D
ritarosakai 0:6d1b9bcd64ca 77 #define MPU6050_EXT_SENS_DATA_05 0x4E
ritarosakai 0:6d1b9bcd64ca 78 #define MPU6050_EXT_SENS_DATA_06 0x4F
ritarosakai 0:6d1b9bcd64ca 79 #define MPU6050_EXT_SENS_DATA_07 0x50
ritarosakai 0:6d1b9bcd64ca 80 #define MPU6050_EXT_SENS_DATA_08 0x51
ritarosakai 0:6d1b9bcd64ca 81 #define MPU6050_EXT_SENS_DATA_09 0x52
ritarosakai 0:6d1b9bcd64ca 82 #define MPU6050_EXT_SENS_DATA_10 0x53
ritarosakai 0:6d1b9bcd64ca 83 #define MPU6050_EXT_SENS_DATA_11 0x54
ritarosakai 0:6d1b9bcd64ca 84 #define MPU6050_EXT_SENS_DATA_12 0x55
ritarosakai 0:6d1b9bcd64ca 85 #define MPU6050_EXT_SENS_DATA_13 0x56
ritarosakai 0:6d1b9bcd64ca 86 #define MPU6050_EXT_SENS_DATA_14 0x57
ritarosakai 0:6d1b9bcd64ca 87 #define MPU6050_EXT_SENS_DATA_15 0x58
ritarosakai 0:6d1b9bcd64ca 88 #define MPU6050_EXT_SENS_DATA_16 0x59
ritarosakai 0:6d1b9bcd64ca 89 #define MPU6050_EXT_SENS_DATA_17 0x5A
ritarosakai 0:6d1b9bcd64ca 90 #define MPU6050_EXT_SENS_DATA_18 0x5B
ritarosakai 0:6d1b9bcd64ca 91 #define MPU6050_EXT_SENS_DATA_19 0x5C
ritarosakai 0:6d1b9bcd64ca 92 #define MPU6050_EXT_SENS_DATA_20 0x5D
ritarosakai 0:6d1b9bcd64ca 93 #define MPU6050_EXT_SENS_DATA_21 0x5E
ritarosakai 0:6d1b9bcd64ca 94 #define MPU6050_EXT_SENS_DATA_22 0x5F
ritarosakai 0:6d1b9bcd64ca 95 #define MPU6050_EXT_SENS_DATA_23 0x60
ritarosakai 0:6d1b9bcd64ca 96 #define MPU6050_MOT_DETECT_STATUS 0x61
ritarosakai 0:6d1b9bcd64ca 97 #define MPU6050_I2C_SLV0_DO 0x63
ritarosakai 0:6d1b9bcd64ca 98 #define MPU6050_I2C_SLV1_DO 0x64
ritarosakai 0:6d1b9bcd64ca 99 #define MPU6050_I2C_SLV2_DO 0x65
ritarosakai 0:6d1b9bcd64ca 100 #define MPU6050_I2C_SLV3_DO 0x66
ritarosakai 0:6d1b9bcd64ca 101 #define MPU6050_I2C_MST_DELAY_CTRL 0x67
ritarosakai 0:6d1b9bcd64ca 102 #define MPU6050_SIGNAL_PATH_RESET 0x68
ritarosakai 0:6d1b9bcd64ca 103 #define MPU6050_MOT_DETECT_CTRL 0x69
ritarosakai 0:6d1b9bcd64ca 104 #define MPU6050_USER_CTRL 0x6A
ritarosakai 0:6d1b9bcd64ca 105 #define MPU6050_PWR_MGMT_1 0x6B
ritarosakai 0:6d1b9bcd64ca 106 #define MPU6050_PWR_MGMT_2 0x6C
ritarosakai 0:6d1b9bcd64ca 107 #define MPU6050_BANK_SEL 0x6D
ritarosakai 0:6d1b9bcd64ca 108 #define MPU6050_MEM_START_ADDR 0x6E
ritarosakai 0:6d1b9bcd64ca 109 #define MPU6050_MEM_R_W 0x6F
ritarosakai 0:6d1b9bcd64ca 110 #define MPU6050_DMP_CFG_1 0x70
ritarosakai 0:6d1b9bcd64ca 111 #define MPU6050_DMP_CFG_2 0x71
ritarosakai 0:6d1b9bcd64ca 112 #define MPU6050_FIFO_COUNTH 0x72
ritarosakai 0:6d1b9bcd64ca 113 #define MPU6050_FIFO_COUNTL 0x73
ritarosakai 0:6d1b9bcd64ca 114 #define MPU6050_FIFO_R_W 0x74
ritarosakai 0:6d1b9bcd64ca 115 #define MPU6050_WHO_AM_I 0x75
ritarosakai 9:2dd52ac40c96 116
ritarosakai 12:b8a396aa0a50 117 /** API for MPC6050
ritarosakai 11:7cccbf912a71 118 *
ritarosakai 12:b8a396aa0a50 119 * MCP6050 is a 6-axis I2C sensor
ritarosakai 10:31cec9253c7c 120 *
ritarosakai 13:e0e64e818d05 121 * @code
ritarosakai 12:b8a396aa0a50 122 * #include "mbed.h"
ritarosakai 12:b8a396aa0a50 123 * #include "MPU6050.h"
ritarosakai 10:31cec9253c7c 124 *
ritarosakai 12:b8a396aa0a50 125 * MPU6050 mpu(D7,D8);
ritarosakai 10:31cec9253c7c 126 *
ritarosakai 12:b8a396aa0a50 127 * float gx,gy,gz,ax,ay,az;
ritarosakai 10:31cec9253c7c 128 *
ritarosakai 12:b8a396aa0a50 129 * int main()
ritarosakai 12:b8a396aa0a50 130 * {
ritarosakai 12:b8a396aa0a50 131 * if(mpu.getID()==0x68) {
ritarosakai 12:b8a396aa0a50 132 * printf("MPU6050 OK");
ritarosakai 12:b8a396aa0a50 133 * wait(1);
ritarosakai 12:b8a396aa0a50 134 * } else {
ritarosakai 12:b8a396aa0a50 135 * printf("MPU6050 error ID=0x%x\r\n",mpu.getID());
ritarosakai 12:b8a396aa0a50 136 * while(1) {
ritarosakai 12:b8a396aa0a50 137 * }
ritarosakai 12:b8a396aa0a50 138 * }
ritarosakai 12:b8a396aa0a50 139 * mpu.start();
ritarosakai 12:b8a396aa0a50 140 * while(1) {
ritarosakai 12:b8a396aa0a50 141 * mpu.read(&gx,&gy,&gz,&ax,&ay,&az);
ritarosakai 12:b8a396aa0a50 142 * printf("gx,gy,gz,ax,ay,az %.1f,%.1f,%.1f,%.2f,%.2f,%.2f\r\n",gx,gy,gz,ax,ay,az);
ritarosakai 12:b8a396aa0a50 143 * wait(0.1);
ritarosakai 12:b8a396aa0a50 144 * }
ritarosakai 12:b8a396aa0a50 145 * }
ritarosakai 13:e0e64e818d05 146 * 
ritarosakai 13:e0e64e818d05 147 * @endcode
ritarosakai 9:2dd52ac40c96 148 */
ritarosakai 0:6d1b9bcd64ca 149 class MPU6050
ritarosakai 0:6d1b9bcd64ca 150 {
ritarosakai 0:6d1b9bcd64ca 151 public:
ritarosakai 6:37d0473b0bf4 152
ritarosakai 4:3ae3b817e1f8 153 /** Create a MPU6050 Instance
ritarosakai 7:f80a0baa6866 154 *
ritarosakai 14:a993e922395d 155 *@param sda SDA pin name of I2C
ritarosakai 14:a993e922395d 156 *@param scl SCL pin name of I2C
ritarosakai 4:3ae3b817e1f8 157 */
ritarosakai 6:37d0473b0bf4 158 MPU6050(PinName sda, PinName scl);
ritarosakai 6:37d0473b0bf4 159
ritarosakai 4:3ae3b817e1f8 160 /** Init MCP6050
ritarosakai 7:f80a0baa6866 161 *
ritarosakai 13:e0e64e818d05 162 * Disable sleep mode
ritarosakai 15:6036740714ad 163 *
ritarosakai 13:e0e64e818d05 164 * Set gyro range as +- 1000 deg/s
ritarosakai 15:6036740714ad 165 *
ritarosakai 13:e0e64e818d05 166 * Set accel range as +- 4G
ritarosakai 15:6036740714ad 167 *
ritarosakai 13:e0e64e818d05 168 * Set sample rate as 470 Hz
ritarosakai 4:3ae3b817e1f8 169 */
ritarosakai 6:37d0473b0bf4 170 void start(void);
ritarosakai 6:37d0473b0bf4 171
ritarosakai 4:3ae3b817e1f8 172 /**Get WHO_AM_I
ritarosakai 7:f80a0baa6866 173 *
ritarosakai 13:e0e64e818d05 174 * return 0x68
ritarosakai 4:3ae3b817e1f8 175 */
ritarosakai 6:37d0473b0bf4 176 char getID(void);
ritarosakai 6:37d0473b0bf4 177
ritarosakai 7:f80a0baa6866 178 /**Get data in float
ritarosakai 7:f80a0baa6866 179 *
ritarosakai 13:e0e64e818d05 180 * The unit is G or deg/s
ritarosakai 6:37d0473b0bf4 181 */
ritarosakai 0:6d1b9bcd64ca 182 bool read(float *gx, float *gy, float *gz,float *ax, float *ay, float *az);
ritarosakai 6:37d0473b0bf4 183
ritarosakai 4:3ae3b817e1f8 184 /**Get data in int
ritarosakai 7:f80a0baa6866 185 *
ritarosakai 13:e0e64e818d05 186 *return as 16bit value
ritarosakai 4:3ae3b817e1f8 187 */
ritarosakai 6:37d0473b0bf4 188 bool readraw(int *gx, int *gy, int *gz,int *ax, int *ay, int *az);
ritarosakai 6:37d0473b0bf4 189
ritarosakai 0:6d1b9bcd64ca 190 private:
ritarosakai 0:6d1b9bcd64ca 191 I2C _MPU6050;
ritarosakai 0:6d1b9bcd64ca 192 float gx, gy, gz,ax,ay,az;
ritarosakai 0:6d1b9bcd64ca 193 bool write_reg(int addr_i2c,int addr_reg, char v);
ritarosakai 0:6d1b9bcd64ca 194 bool read_reg(int addr_i2c,int addr_reg, char *v);
ritarosakai 0:6d1b9bcd64ca 195 bool read_data(char sad, char sub, char *buf, int length);
ritarosakai 0:6d1b9bcd64ca 196 };
ritarosakai 0:6d1b9bcd64ca 197
ritarosakai 0:6d1b9bcd64ca 198 #endif