Not a real MPU6050 but imc-20689

Fork of MPU6050 by Erik -

Committer:
Ucial
Date:
Tue Oct 23 10:48:22 2018 +0000
Revision:
3:d2b927200037
Parent:
2:5c63e20c50f3
adf

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Sissors 0:6757f7363a9f 1 #ifndef MPU6050_H
Sissors 0:6757f7363a9f 2 #define MPU6050_H
Sissors 0:6757f7363a9f 3
Sissors 0:6757f7363a9f 4 #include "mbed.h"
Ucial 3:d2b927200037 5 #include "math.h"
Sissors 1:a3366f09e95c 6
Ucial 3:d2b927200037 7 #define PI 3.14159265359 // This value will be used when calculating angles
Ucial 3:d2b927200037 8 #define dt 0.005 // 200 Hz sampling period
Sissors 0:6757f7363a9f 9
Ucial 3:d2b927200037 10 #define XGOFFS_TC 0x00 // Bit 7 PWR_MODE, bits 6:1 XG_OFFS_TC, bit 0 OTP_BNK_VLD
Ucial 3:d2b927200037 11 #define YGOFFS_TC 0x01
Ucial 3:d2b927200037 12 #define ZGOFFS_TC 0x02
Ucial 3:d2b927200037 13 #define X_FINE_GAIN 0x03 // [7:0] fine gain
Ucial 3:d2b927200037 14 #define Y_FINE_GAIN 0x04
Ucial 3:d2b927200037 15 #define Z_FINE_GAIN 0x05
Ucial 3:d2b927200037 16 #define XA_OFFSET_H 0x06 // User-defined trim values for accelerometer
Ucial 3:d2b927200037 17 #define XA_OFFSET_L_TC 0x07
Ucial 3:d2b927200037 18 #define YA_OFFSET_H 0x08
Ucial 3:d2b927200037 19 #define YA_OFFSET_L_TC 0x09
Ucial 3:d2b927200037 20 #define ZA_OFFSET_H 0x0A
Ucial 3:d2b927200037 21 #define ZA_OFFSET_L_TC 0x0B
Ucial 3:d2b927200037 22 #define SELF_TEST_X 0x0D
Ucial 3:d2b927200037 23 #define SELF_TEST_Y 0x0E
Ucial 3:d2b927200037 24 #define SELF_TEST_Z 0x0F
Ucial 3:d2b927200037 25 #define SELF_TEST_A 0x10
Ucial 3:d2b927200037 26 #define XG_OFFS_USRH 0x13 // User-defined trim values for gyroscope; supported in MPU-6050?
Ucial 3:d2b927200037 27 #define XG_OFFS_USRL 0x14
Ucial 3:d2b927200037 28 #define YG_OFFS_USRH 0x15
Ucial 3:d2b927200037 29 #define YG_OFFS_USRL 0x16
Ucial 3:d2b927200037 30 #define ZG_OFFS_USRH 0x17
Ucial 3:d2b927200037 31 #define ZG_OFFS_USRL 0x18
Ucial 3:d2b927200037 32 #define SMPLRT_DIV 0x19
Ucial 3:d2b927200037 33 #define CONFIG 0x1A
Ucial 3:d2b927200037 34 #define GYRO_CONFIG 0x1B
Ucial 3:d2b927200037 35 #define ACCEL_CONFIG 0x1C
Ucial 3:d2b927200037 36 #define FF_THR 0x1D // Free-fall
Ucial 3:d2b927200037 37 #define FF_DUR 0x1E // Free-fall
Ucial 3:d2b927200037 38 #define MOT_THR 0x1F // Motion detection threshold bits [7:0]
Ucial 3:d2b927200037 39 #define MOT_DUR 0x20 // Duration counter threshold for motion interrupt generation, 1 kHz rate, LSB = 1 ms
Ucial 3:d2b927200037 40 #define ZMOT_THR 0x21 // Zero-motion detection threshold bits [7:0]
Ucial 3:d2b927200037 41 #define ZRMOT_DUR 0x22 // Duration counter threshold for zero motion interrupt generation, 16 Hz rate, LSB = 64 ms
Ucial 3:d2b927200037 42 #define FIFO_EN 0x23
Ucial 3:d2b927200037 43 #define I2C_MST_CTRL 0x24
Ucial 3:d2b927200037 44 #define I2C_SLV0_ADDR 0x25
Ucial 3:d2b927200037 45 #define I2C_SLV0_REG 0x26
Ucial 3:d2b927200037 46 #define I2C_SLV0_CTRL 0x27
Ucial 3:d2b927200037 47 #define I2C_SLV1_ADDR 0x28
Ucial 3:d2b927200037 48 #define I2C_SLV1_REG 0x29
Ucial 3:d2b927200037 49 #define I2C_SLV1_CTRL 0x2A
Ucial 3:d2b927200037 50 #define I2C_SLV2_ADDR 0x2B
Ucial 3:d2b927200037 51 #define I2C_SLV2_REG 0x2C
Ucial 3:d2b927200037 52 #define I2C_SLV2_CTRL 0x2D
Ucial 3:d2b927200037 53 #define I2C_SLV3_ADDR 0x2E
Ucial 3:d2b927200037 54 #define I2C_SLV3_REG 0x2F
Ucial 3:d2b927200037 55 #define I2C_SLV3_CTRL 0x30
Ucial 3:d2b927200037 56 #define I2C_SLV4_ADDR 0x31
Ucial 3:d2b927200037 57 #define I2C_SLV4_REG 0x32
Ucial 3:d2b927200037 58 #define I2C_SLV4_DO 0x33
Ucial 3:d2b927200037 59 #define I2C_SLV4_CTRL 0x34
Ucial 3:d2b927200037 60 #define I2C_SLV4_DI 0x35
Ucial 3:d2b927200037 61 #define I2C_MST_STATUS 0x36
Ucial 3:d2b927200037 62 #define INT_PIN_CFG 0x37
Ucial 3:d2b927200037 63 #define INT_ENABLE 0x38
Ucial 3:d2b927200037 64 #define DMP_INT_STATUS 0x39 // Check DMP interrupt
Ucial 3:d2b927200037 65 #define INT_STATUS 0x3A
Ucial 3:d2b927200037 66 #define ACCEL_XOUT_H 0x3B
Ucial 3:d2b927200037 67 #define ACCEL_XOUT_L 0x3C
Ucial 3:d2b927200037 68 #define ACCEL_YOUT_H 0x3D
Ucial 3:d2b927200037 69 #define ACCEL_YOUT_L 0x3E
Ucial 3:d2b927200037 70 #define ACCEL_ZOUT_H 0x3F
Ucial 3:d2b927200037 71 #define ACCEL_ZOUT_L 0x40
Ucial 3:d2b927200037 72 #define TEMP_OUT_H 0x41
Ucial 3:d2b927200037 73 #define TEMP_OUT_L 0x42
Ucial 3:d2b927200037 74 #define GYRO_XOUT_H 0x43
Ucial 3:d2b927200037 75 #define GYRO_XOUT_L 0x44
Ucial 3:d2b927200037 76 #define GYRO_YOUT_H 0x45
Ucial 3:d2b927200037 77 #define GYRO_YOUT_L 0x46
Ucial 3:d2b927200037 78 #define GYRO_ZOUT_H 0x47
Ucial 3:d2b927200037 79 #define GYRO_ZOUT_L 0x48
Ucial 3:d2b927200037 80 #define EXT_SENS_DATA_00 0x49
Ucial 3:d2b927200037 81 #define EXT_SENS_DATA_01 0x4A
Ucial 3:d2b927200037 82 #define EXT_SENS_DATA_02 0x4B
Ucial 3:d2b927200037 83 #define EXT_SENS_DATA_03 0x4C
Ucial 3:d2b927200037 84 #define EXT_SENS_DATA_04 0x4D
Ucial 3:d2b927200037 85 #define EXT_SENS_DATA_05 0x4E
Ucial 3:d2b927200037 86 #define EXT_SENS_DATA_06 0x4F
Ucial 3:d2b927200037 87 #define EXT_SENS_DATA_07 0x50
Ucial 3:d2b927200037 88 #define EXT_SENS_DATA_08 0x51
Ucial 3:d2b927200037 89 #define EXT_SENS_DATA_09 0x52
Ucial 3:d2b927200037 90 #define EXT_SENS_DATA_10 0x53
Ucial 3:d2b927200037 91 #define EXT_SENS_DATA_11 0x54
Ucial 3:d2b927200037 92 #define EXT_SENS_DATA_12 0x55
Ucial 3:d2b927200037 93 #define EXT_SENS_DATA_13 0x56
Ucial 3:d2b927200037 94 #define EXT_SENS_DATA_14 0x57
Ucial 3:d2b927200037 95 #define EXT_SENS_DATA_15 0x58
Ucial 3:d2b927200037 96 #define EXT_SENS_DATA_16 0x59
Ucial 3:d2b927200037 97 #define EXT_SENS_DATA_17 0x5A
Ucial 3:d2b927200037 98 #define EXT_SENS_DATA_18 0x5B
Ucial 3:d2b927200037 99 #define EXT_SENS_DATA_19 0x5C
Ucial 3:d2b927200037 100 #define EXT_SENS_DATA_20 0x5D
Ucial 3:d2b927200037 101 #define EXT_SENS_DATA_21 0x5E
Ucial 3:d2b927200037 102 #define EXT_SENS_DATA_22 0x5F
Ucial 3:d2b927200037 103 #define EXT_SENS_DATA_23 0x60
Ucial 3:d2b927200037 104 #define MOT_DETECT_STATUS 0x61
Ucial 3:d2b927200037 105 #define I2C_SLV0_DO 0x63
Ucial 3:d2b927200037 106 #define I2C_SLV1_DO 0x64
Ucial 3:d2b927200037 107 #define I2C_SLV2_DO 0x65
Ucial 3:d2b927200037 108 #define I2C_SLV3_DO 0x66
Ucial 3:d2b927200037 109 #define I2C_MST_DELAY_CTRL 0x67
Ucial 3:d2b927200037 110 #define SIGNAL_PATH_RESET 0x68
Ucial 3:d2b927200037 111 #define MOT_DETECT_CTRL 0x69
Ucial 3:d2b927200037 112 #define USER_CTRL 0x6A // Bit 7 enable DMP, bit 3 reset DMP
Ucial 3:d2b927200037 113 #define PWR_MGMT_1 0x6B // Device defaults to the SLEEP mode
Ucial 3:d2b927200037 114 #define PWR_MGMT_2 0x6C
Ucial 3:d2b927200037 115 #define DMP_BANK 0x6D // Activates a specific bank in the DMP
Ucial 3:d2b927200037 116 #define DMP_RW_PNT 0x6E // Set read/write pointer to a specific start address in specified DMP bank
Ucial 3:d2b927200037 117 #define DMP_REG 0x6F // Register in DMP from which to read or to which to write
Ucial 3:d2b927200037 118 #define DMP_REG_1 0x70
Ucial 3:d2b927200037 119 #define DMP_REG_2 0x71
Ucial 3:d2b927200037 120 #define FIFO_COUNTH 0x72
Ucial 3:d2b927200037 121 #define FIFO_COUNTL 0x73
Ucial 3:d2b927200037 122 #define FIFO_R_W 0x74
Ucial 3:d2b927200037 123 #define WHO_AM_I_MPU6050 0x75 // Should return 0x68
Ucial 3:d2b927200037 124
Ucial 3:d2b927200037 125 // Using the GY-521 breakout board, I set ADO to 0 by grounding through a 4k7 resistor
Ucial 3:d2b927200037 126 // Seven-bit device address is 110100 for ADO = 0 and 110101 for ADO = 1
Ucial 3:d2b927200037 127 #define ADO 0
Ucial 3:d2b927200037 128 #if ADO
Ucial 3:d2b927200037 129 #define MPU6050_ADDRESS 0x69<<1 // Device address when ADO = 1
Ucial 3:d2b927200037 130 #else
Ucial 3:d2b927200037 131 #define MPU6050_ADDRESS 0x68<<1 // Device address when ADO = 0
Sissors 1:a3366f09e95c 132 #endif
Sissors 1:a3366f09e95c 133
Ucial 3:d2b927200037 134 extern float aRes, gRes;
Sissors 0:6757f7363a9f 135
Ucial 3:d2b927200037 136 /* whoAmI func uses this func, variables etc */
Sissors 0:6757f7363a9f 137
Ucial 3:d2b927200037 138 extern Serial pc;
Sissors 0:6757f7363a9f 139
Ucial 3:d2b927200037 140 /* Sensor datas to be used in program */
Ucial 3:d2b927200037 141 extern float ax,ay,az;
Ucial 3:d2b927200037 142 extern float gx,gy,gz;
Ucial 3:d2b927200037 143 extern int16_t accelData[3],gyroData[3],tempData;
Ucial 3:d2b927200037 144 extern float accelBias[3], gyroBias[3];
Ucial 3:d2b927200037 145
Ucial 3:d2b927200037 146 /* Function Prototypes */
Ucial 3:d2b927200037 147 class MPU6050
Ucial 3:d2b927200037 148 {
Ucial 3:d2b927200037 149 protected:
Ucial 3:d2b927200037 150 public:
Ucial 3:d2b927200037 151 void getAres();
Ucial 3:d2b927200037 152 void getGres();
Ucial 3:d2b927200037 153 void writeByte(uint8_t address, uint8_t subAddress, uint8_t data);
Ucial 3:d2b927200037 154 char readByte(uint8_t address, uint8_t subAddress);
Ucial 3:d2b927200037 155 void readBytes(uint8_t address, uint8_t subAddress, uint8_t byteNum, uint8_t* dest);
Ucial 3:d2b927200037 156 void whoAmI();
Ucial 3:d2b927200037 157 void init();
Ucial 3:d2b927200037 158 void reset();
Ucial 3:d2b927200037 159 void readAccelData(int16_t* dest);
Ucial 3:d2b927200037 160 void readGyroData(int16_t* dest);
Ucial 3:d2b927200037 161 int16_t readTempData();
Ucial 3:d2b927200037 162 void calibrate(float* dest1, float* dest2);
Ucial 3:d2b927200037 163 void complementaryFilter(float* pitch, float* roll);
Sissors 0:6757f7363a9f 164 };
Sissors 0:6757f7363a9f 165
Ucial 3:d2b927200037 166 #endif