Testsetup BMI088 (SEED), gyro ok, Acc Problem T:\T-IMS-IndNav\01_Technisches\70_Hardwareentwicklung\20190828_083342.jpg

Dependencies:   mbed

Committer:
altb2
Date:
Wed Aug 28 08:32:22 2019 +0000
Revision:
0:577a6606809f
First implement, ; acc does not work (it worked once!)

Who changed what in which revision?

UserRevisionLine numberNew contents of line
altb2 0:577a6606809f 1 /*
altb2 0:577a6606809f 2 * A library for Grove - 6-Axis Accelerometer&Gyroscope(BMI088)
altb2 0:577a6606809f 3 *
altb2 0:577a6606809f 4 * Copyright (c) 2018 seeed technology co., ltd.
altb2 0:577a6606809f 5 * Author : Wayen Weng
altb2 0:577a6606809f 6 * Create Time : June 2018
altb2 0:577a6606809f 7 * Change Log :
altb2 0:577a6606809f 8 *
altb2 0:577a6606809f 9 * The MIT License (MIT)
altb2 0:577a6606809f 10 *
altb2 0:577a6606809f 11 * Permission is hereby granted, free of charge, to any person obtaining a copy
altb2 0:577a6606809f 12 * of this software and associated documentation files (the "Software"), to deal
altb2 0:577a6606809f 13 * in the Software without restriction, including without limitation the rights
altb2 0:577a6606809f 14 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
altb2 0:577a6606809f 15 * copies of the Software, and to permit persons to whom the Software is
altb2 0:577a6606809f 16 * furnished to do so, subject to the following conditions:
altb2 0:577a6606809f 17 *
altb2 0:577a6606809f 18 * The above copyright notice and this permission notice shall be included in
altb2 0:577a6606809f 19 * all copies or substantial portions of the Software.
altb2 0:577a6606809f 20 *
altb2 0:577a6606809f 21 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
altb2 0:577a6606809f 22 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
altb2 0:577a6606809f 23 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
altb2 0:577a6606809f 24 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
altb2 0:577a6606809f 25 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
altb2 0:577a6606809f 26 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
altb2 0:577a6606809f 27 * THE SOFTWARE.
altb2 0:577a6606809f 28 */
altb2 0:577a6606809f 29 #include "mbed.h"
altb2 0:577a6606809f 30
altb2 0:577a6606809f 31 #ifndef __BOSCH_BMI088_H__
altb2 0:577a6606809f 32 #define __BOSCH_BMI088_H__
altb2 0:577a6606809f 33
altb2 0:577a6606809f 34 #define BMI088_ACC_ADDRESS 0x19<<1 //0x19<<1
altb2 0:577a6606809f 35
altb2 0:577a6606809f 36 #define BMI088_ACC_CHIP_ID 0x00 // Default value 0x1E
altb2 0:577a6606809f 37 #define BMI088_ACC_ERR_REG 0x02
altb2 0:577a6606809f 38 #define BMI088_ACC_STATUS 0x03
altb2 0:577a6606809f 39
altb2 0:577a6606809f 40 #define BMI088_ACC_X_LSB 0x12
altb2 0:577a6606809f 41 #define BMI088_ACC_X_MSB 0x13
altb2 0:577a6606809f 42 #define BMI088_ACC_Y_LSB 0x14
altb2 0:577a6606809f 43 #define BMI088_ACC_Y_MSB 0x15
altb2 0:577a6606809f 44 #define BMI088_ACC_Z_LSB 0x16
altb2 0:577a6606809f 45 #define BMI088_ACC_Z_MSB 0x17
altb2 0:577a6606809f 46
altb2 0:577a6606809f 47 #define BMI088_ACC_SENSOR_TIME_0 0x18
altb2 0:577a6606809f 48 #define BMI088_ACC_SENSOR_TIME_1 0x19
altb2 0:577a6606809f 49 #define BMI088_ACC_SENSOR_TIME_2 0x1A
altb2 0:577a6606809f 50
altb2 0:577a6606809f 51 #define BMI088_ACC_INT_STAT_1 0x1D
altb2 0:577a6606809f 52
altb2 0:577a6606809f 53 #define BMI088_ACC_TEMP_MSB 0x22
altb2 0:577a6606809f 54 #define BMI088_ACC_TEMP_LSB 0x23
altb2 0:577a6606809f 55
altb2 0:577a6606809f 56 #define BMI088_ACC_CONF 0x40
altb2 0:577a6606809f 57 #define BMI088_ACC_RANGE 0x41
altb2 0:577a6606809f 58
altb2 0:577a6606809f 59 #define BMI088_ACC_INT1_IO_CTRL 0x53
altb2 0:577a6606809f 60 #define BMI088_ACC_INT2_IO_CTRL 0x54
altb2 0:577a6606809f 61 #define BMI088_ACC_INT_MAP_DATA 0x58
altb2 0:577a6606809f 62
altb2 0:577a6606809f 63 #define BMI088_ACC_SELF_TEST 0x6D
altb2 0:577a6606809f 64
altb2 0:577a6606809f 65 #define BMI088_ACC_PWR_CONF 0x7C
altb2 0:577a6606809f 66 #define BMI088_ACC_PWR_CTRl 0x7D
altb2 0:577a6606809f 67
altb2 0:577a6606809f 68 #define BMI088_ACC_SOFT_RESET 0x7E
altb2 0:577a6606809f 69
altb2 0:577a6606809f 70 #define BMI088_GYRO_ADDRESS 0x69<<1//0xD2 //0x69<<1
altb2 0:577a6606809f 71
altb2 0:577a6606809f 72 #define BMI088_GYRO_CHIP_ID 0x00 // Default value 0x0F
altb2 0:577a6606809f 73
altb2 0:577a6606809f 74 #define BMI088_GYRO_RATE_X_LSB 0x02
altb2 0:577a6606809f 75 #define BMI088_GYRO_RATE_X_MSB 0x03
altb2 0:577a6606809f 76 #define BMI088_GYRO_RATE_Y_LSB 0x04
altb2 0:577a6606809f 77 #define BMI088_GYRO_RATE_Y_MSB 0x05
altb2 0:577a6606809f 78 #define BMI088_GYRO_RATE_Z_LSB 0x06
altb2 0:577a6606809f 79 #define BMI088_GYRO_RATE_Z_MSB 0x07
altb2 0:577a6606809f 80
altb2 0:577a6606809f 81 #define BMI088_GYRO_INT_STAT_1 0x0A
altb2 0:577a6606809f 82
altb2 0:577a6606809f 83 #define BMI088_GYRO_RANGE 0x0F
altb2 0:577a6606809f 84 #define BMI088_GYRO_BAND_WIDTH 0x10
altb2 0:577a6606809f 85
altb2 0:577a6606809f 86 #define BMI088_GYRO_LPM_1 0x11
altb2 0:577a6606809f 87
altb2 0:577a6606809f 88 #define BMI088_GYRO_SOFT_RESET 0x14
altb2 0:577a6606809f 89
altb2 0:577a6606809f 90 #define BMI088_GYRO_INT_CTRL 0x15
altb2 0:577a6606809f 91 #define BMI088_GYRO_INT3_INT4_IO_CONF 0x16
altb2 0:577a6606809f 92 #define BMI088_GYRO_INT3_INT4_IO_MAP 0x18
altb2 0:577a6606809f 93
altb2 0:577a6606809f 94 #define BMI088_GYRO_SELF_TEST 0x3C
altb2 0:577a6606809f 95
altb2 0:577a6606809f 96 enum device_type_t // device type
altb2 0:577a6606809f 97 {
altb2 0:577a6606809f 98 ACC = 0x00, //
altb2 0:577a6606809f 99 GYRO = 0x01, //
altb2 0:577a6606809f 100 };
altb2 0:577a6606809f 101
altb2 0:577a6606809f 102 enum acc_scale_type_t // measurement rage
altb2 0:577a6606809f 103 {
altb2 0:577a6606809f 104 RANGE_3G = 0x00, //
altb2 0:577a6606809f 105 RANGE_6G = 0x01, //
altb2 0:577a6606809f 106 RANGE_12G = 0x02, //
altb2 0:577a6606809f 107 RANGE_24G = 0x03, //
altb2 0:577a6606809f 108 };
altb2 0:577a6606809f 109
altb2 0:577a6606809f 110 enum acc_odr_type_t // output data rate
altb2 0:577a6606809f 111 {
altb2 0:577a6606809f 112 ODR_12 = 0x05, //
altb2 0:577a6606809f 113 ODR_25 = 0x06, //
altb2 0:577a6606809f 114 ODR_50 = 0x07, //
altb2 0:577a6606809f 115 ODR_100 = 0x08, //
altb2 0:577a6606809f 116 ODR_200 = 0x09, //
altb2 0:577a6606809f 117 ODR_400 = 0x0A, //
altb2 0:577a6606809f 118 ODR_800 = 0x0B, //
altb2 0:577a6606809f 119 ODR_1600 = 0x0C, //
altb2 0:577a6606809f 120 };
altb2 0:577a6606809f 121
altb2 0:577a6606809f 122 enum acc_power_type_t // power mode
altb2 0:577a6606809f 123 {
altb2 0:577a6606809f 124 ACC_ACTIVE = 0x00, //
altb2 0:577a6606809f 125 ACC_SUSPEND = 0x03, //
altb2 0:577a6606809f 126 };
altb2 0:577a6606809f 127
altb2 0:577a6606809f 128 enum gyro_scale_type_t // measurement rage
altb2 0:577a6606809f 129 {
altb2 0:577a6606809f 130 RANGE_2000 = 0x00, //
altb2 0:577a6606809f 131 RANGE_1000 = 0x01, //
altb2 0:577a6606809f 132 RANGE_500 = 0x02, //
altb2 0:577a6606809f 133 RANGE_250 = 0x03, //
altb2 0:577a6606809f 134 RANGE_125 = 0x04, //
altb2 0:577a6606809f 135 };
altb2 0:577a6606809f 136
altb2 0:577a6606809f 137 enum gyro_odr_type_t // output data rate
altb2 0:577a6606809f 138 {
altb2 0:577a6606809f 139 ODR_2000_BW_532 = 0x00, //
altb2 0:577a6606809f 140 ODR_2000_BW_230 = 0x01, //
altb2 0:577a6606809f 141 ODR_1000_BW_116 = 0x02, //
altb2 0:577a6606809f 142 ODR_400_BW_47 = 0x03, //
altb2 0:577a6606809f 143 ODR_200_BW_23 = 0x04, //
altb2 0:577a6606809f 144 ODR_100_BW_12 = 0x05, //
altb2 0:577a6606809f 145 ODR_200_BW_64 = 0x06, //
altb2 0:577a6606809f 146 ODR_100_BW_32 = 0x07, //
altb2 0:577a6606809f 147 };
altb2 0:577a6606809f 148
altb2 0:577a6606809f 149 enum gyro_power_type_t // power mode
altb2 0:577a6606809f 150 {
altb2 0:577a6606809f 151 GYRO_NORMAL = 0x00, //
altb2 0:577a6606809f 152 GYRO_SUSPEND = 0x80, //
altb2 0:577a6606809f 153 GYRO_DEEP_SUSPEND = 0x20, //
altb2 0:577a6606809f 154 };
altb2 0:577a6606809f 155
altb2 0:577a6606809f 156 class BMI088
altb2 0:577a6606809f 157 {
altb2 0:577a6606809f 158 public:
altb2 0:577a6606809f 159
altb2 0:577a6606809f 160 BMI088(void);
altb2 0:577a6606809f 161
altb2 0:577a6606809f 162 bool isConnection(void);
altb2 0:577a6606809f 163
altb2 0:577a6606809f 164 void initialize(void);
altb2 0:577a6606809f 165
altb2 0:577a6606809f 166 void setAccPoweMode(acc_power_type_t mode);
altb2 0:577a6606809f 167 void setGyroPoweMode(gyro_power_type_t mode);
altb2 0:577a6606809f 168
altb2 0:577a6606809f 169 void setAccScaleRange(acc_scale_type_t range);
altb2 0:577a6606809f 170 void setAccOutputDataRate(acc_odr_type_t odr);
altb2 0:577a6606809f 171
altb2 0:577a6606809f 172 void setGyroScaleRange(gyro_scale_type_t range);
altb2 0:577a6606809f 173 void setGyroOutputDataRate(gyro_odr_type_t odr);
altb2 0:577a6606809f 174
altb2 0:577a6606809f 175 void getAcceleration(float* x, float* y, float* z);
altb2 0:577a6606809f 176 float getAccelerationX(void);
altb2 0:577a6606809f 177 float getAccelerationY(void);
altb2 0:577a6606809f 178 float getAccelerationZ(void);
altb2 0:577a6606809f 179
altb2 0:577a6606809f 180 void getGyroscope(float* x, float* y, float* z);
altb2 0:577a6606809f 181 float getGyroscopeX(void);
altb2 0:577a6606809f 182 float getGyroscopeY(void);
altb2 0:577a6606809f 183 float getGyroscopeZ(void);
altb2 0:577a6606809f 184
altb2 0:577a6606809f 185 uint16_t getTemperature(void);
altb2 0:577a6606809f 186
altb2 0:577a6606809f 187 uint8_t getAccID(void);
altb2 0:577a6606809f 188 uint8_t getGyroID(void);
altb2 0:577a6606809f 189
altb2 0:577a6606809f 190 void resetAcc(void);
altb2 0:577a6606809f 191 void resetGyro(void);
altb2 0:577a6606809f 192
altb2 0:577a6606809f 193 private:
altb2 0:577a6606809f 194
altb2 0:577a6606809f 195 void write8(device_type_t dev, char reg, uint8_t val);
altb2 0:577a6606809f 196 char read8(device_type_t dev, char reg);
altb2 0:577a6606809f 197 uint16_t read16(device_type_t dev, char reg);
altb2 0:577a6606809f 198 uint16_t read16Be(device_type_t dev, char reg);
altb2 0:577a6606809f 199 uint32_t read24(device_type_t dev, char reg);
altb2 0:577a6606809f 200 void read(device_type_t dev, char reg, char *, uint16_t len);
altb2 0:577a6606809f 201
altb2 0:577a6606809f 202 float accRange;
altb2 0:577a6606809f 203 float gyroRange;
altb2 0:577a6606809f 204 uint8_t devAddrAcc;
altb2 0:577a6606809f 205 uint8_t devAddrGyro;
altb2 0:577a6606809f 206 protected:
altb2 0:577a6606809f 207 I2C i2c;
altb2 0:577a6606809f 208 };
altb2 0:577a6606809f 209
altb2 0:577a6606809f 210 extern BMI088 bmi088;
altb2 0:577a6606809f 211
altb2 0:577a6606809f 212 #endif