eCompass (6-axes electronic compass) / Electronic Compass with Three-axis Magnetic Field Sensor and Three-axis Accelerometer by Bosch Sensortech

Dependents:   BLE_EddystoneBeacon_w_ACC_TY51822

Committer:
kenjiArai
Date:
Sun Sep 07 07:15:37 2014 +0000
Revision:
1:b022f8d7884d
Parent:
0:8de5e2fd5c48
Child:
2:93141eb80862
modified n-byte read/write function,  added clock frequency change function

Who changed what in which revision?

UserRevisionLine numberNew contents of line
kenjiArai 0:8de5e2fd5c48 1 /*
kenjiArai 0:8de5e2fd5c48 2 * mbed library program
kenjiArai 0:8de5e2fd5c48 3 * BMC050 COMPASS 6 AXIS, made by Bosch Sensortec
kenjiArai 0:8de5e2fd5c48 4 * http://jp.bosch-sensortec.com/content/language1/html/5033.htm
kenjiArai 0:8de5e2fd5c48 5 *
kenjiArai 0:8de5e2fd5c48 6 * Copyright (c) 2014 Kenji Arai / JH1PJL
kenjiArai 0:8de5e2fd5c48 7 * http://www.page.sannet.ne.jp/kenjia/index.html
kenjiArai 0:8de5e2fd5c48 8 * http://mbed.org/users/kenjiArai/
kenjiArai 0:8de5e2fd5c48 9 * Created: July 19th, 2014
kenjiArai 1:b022f8d7884d 10 * Revised: September 7th, 2014
kenjiArai 0:8de5e2fd5c48 11 *
kenjiArai 0:8de5e2fd5c48 12 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
kenjiArai 0:8de5e2fd5c48 13 * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE
kenjiArai 0:8de5e2fd5c48 14 * AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
kenjiArai 0:8de5e2fd5c48 15 * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
kenjiArai 0:8de5e2fd5c48 16 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
kenjiArai 0:8de5e2fd5c48 17 */
kenjiArai 0:8de5e2fd5c48 18
kenjiArai 0:8de5e2fd5c48 19 #ifndef BMC050_H
kenjiArai 0:8de5e2fd5c48 20 #define BMC050_H
kenjiArai 0:8de5e2fd5c48 21
kenjiArai 0:8de5e2fd5c48 22 #include "mbed.h"
kenjiArai 0:8de5e2fd5c48 23
kenjiArai 1:b022f8d7884d 24 ////////////// ADDRESS DEFINITION ///////////////
kenjiArai 0:8de5e2fd5c48 25 // BMC050 Address/accelerometer
kenjiArai 0:8de5e2fd5c48 26 // 7bit address = 0b001100x(0x18 or 0x19 depends on SDO)
kenjiArai 0:8de5e2fd5c48 27 // -> 8bit = 0b001100x0(0x30,0x32) -> 0x31,0x33(Read) or 0x30,0x32(Write)
kenjiArai 0:8de5e2fd5c48 28 #define BMC050_A_G_CHIP_ADDR 0x30 // SDO pin = Ground
kenjiArai 0:8de5e2fd5c48 29 #define BMC050_A_V_CHIP_ADDR 0x32 // SDO pin = Vdd
kenjiArai 0:8de5e2fd5c48 30 // BMC050 Address/magnetometer
kenjiArai 0:8de5e2fd5c48 31 // 7bit address = 0b001000x(0x10,0x11,0x12 or 0x13 depends on SDO and CSB2)
kenjiArai 0:8de5e2fd5c48 32 // -> 8bit = 0b00100xx0(0x20,0x22,0x24,0x26)
kenjiArai 0:8de5e2fd5c48 33 #define BMC050_M_GG_CHIP_ADDR 0x20 // CSB2 pin = Ground, SDO pin = Ground
kenjiArai 0:8de5e2fd5c48 34 #define BMC050_M_GV_CHIP_ADDR 0x22 // CSB2 pin = Ground, SDO pin = Vdd
kenjiArai 0:8de5e2fd5c48 35 #define BMC050_M_VG_CHIP_ADDR 0x24 // CSB2 pin = Vdd, SDO pin = Ground
kenjiArai 0:8de5e2fd5c48 36 #define BMC050_M_VV_CHIP_ADDR 0x26 // CSB2 pin = Vdd, SDO pin = Vdd
kenjiArai 1:b022f8d7884d 37 #define BMC050_MAG_NOT_USED_ADDR 0xff // If you only used acc and keep mag as suspend
kenjiArai 0:8de5e2fd5c48 38
kenjiArai 0:8de5e2fd5c48 39 // BMC050 ACC ID
kenjiArai 0:8de5e2fd5c48 40 #define I_AM_BMC050_ACC 0x03
kenjiArai 0:8de5e2fd5c48 41 // BMC050 ACC ID
kenjiArai 0:8de5e2fd5c48 42 #define I_AM_BMC050_MAG 0x32
kenjiArai 0:8de5e2fd5c48 43
kenjiArai 1:b022f8d7884d 44 ////////////// REGISTER DEFINITION //////////////
kenjiArai 0:8de5e2fd5c48 45 // accelerometer
kenjiArai 0:8de5e2fd5c48 46 #define BMC050_A_WHO_AM_I 0x00
kenjiArai 0:8de5e2fd5c48 47 // reserved
kenjiArai 0:8de5e2fd5c48 48 #define BMC050_A_OUT_X_L 0x02
kenjiArai 0:8de5e2fd5c48 49 #define BMC050_A_OUT_X_H 0x03
kenjiArai 0:8de5e2fd5c48 50 #define BMC050_A_OUT_Y_L 0x04
kenjiArai 0:8de5e2fd5c48 51 #define BMC050_A_OUT_Y_H 0x05
kenjiArai 0:8de5e2fd5c48 52 #define BMC050_A_OUT_Z_L 0x06
kenjiArai 0:8de5e2fd5c48 53 #define BMC050_A_OUT_Z_H 0x07
kenjiArai 0:8de5e2fd5c48 54 #define BMC050_A_OUT_TEMP 0x08
kenjiArai 0:8de5e2fd5c48 55 #define BMC050_A_STATUS_REG0 0x09
kenjiArai 0:8de5e2fd5c48 56 #define BMC050_A_STATUS_REG1 0x0a
kenjiArai 0:8de5e2fd5c48 57 #define BMC050_A_STATUS_REG2 0x0b
kenjiArai 0:8de5e2fd5c48 58 #define BMC050_A_STATUS_REG3 0x0c
kenjiArai 0:8de5e2fd5c48 59 // reserved
kenjiArai 0:8de5e2fd5c48 60 // reserved
kenjiArai 0:8de5e2fd5c48 61 #define BMC050_A_G_RANGE 0x0f
kenjiArai 0:8de5e2fd5c48 62 #define BMC050_A_BANDWIDTH 0x10
kenjiArai 0:8de5e2fd5c48 63 #define BMC050_A_POWER_MODE 0x11
kenjiArai 0:8de5e2fd5c48 64 // reserved
kenjiArai 0:8de5e2fd5c48 65 #define BMC050_A_FILTER 0x13
kenjiArai 0:8de5e2fd5c48 66 #define BMC050_A_SW_RESET 0x14
kenjiArai 0:8de5e2fd5c48 67 // not implement yet 0x15 to 0x35
kenjiArai 0:8de5e2fd5c48 68 #define BMC050_A_OFST_COMP0 0x36
kenjiArai 0:8de5e2fd5c48 69 #define BMC050_A_OFST_COMP1 0x37
kenjiArai 0:8de5e2fd5c48 70 #define BMC050_A_OFST_COMP_DX 0x38
kenjiArai 0:8de5e2fd5c48 71 #define BMC050_A_OFST_COMP_DY 0x39
kenjiArai 0:8de5e2fd5c48 72 #define BMC050_A_OFST_COMP_DZ 0x3a
kenjiArai 0:8de5e2fd5c48 73 #define BMC050_A_OFST_COMP_DX_UF 0x3b
kenjiArai 0:8de5e2fd5c48 74 #define BMC050_A_OFST_COMP_DY_UF 0x3c
kenjiArai 0:8de5e2fd5c48 75 #define BMC050_A_OFST_COMP_DZ_UF 0x3d
kenjiArai 0:8de5e2fd5c48 76
kenjiArai 0:8de5e2fd5c48 77 // magnetometer
kenjiArai 0:8de5e2fd5c48 78 #define BMC050_M_WHO_AM_I 0x40
kenjiArai 0:8de5e2fd5c48 79 // reserved
kenjiArai 0:8de5e2fd5c48 80 #define BMC050_M_OUT_X_L 0x42
kenjiArai 0:8de5e2fd5c48 81 #define BMC050_M_OUT_X_H 0x43
kenjiArai 0:8de5e2fd5c48 82 #define BMC050_M_OUT_Y_L 0x44
kenjiArai 0:8de5e2fd5c48 83 #define BMC050_M_OUT_Y_H 0x45
kenjiArai 0:8de5e2fd5c48 84 #define BMC050_M_OUT_Z_L 0x46
kenjiArai 0:8de5e2fd5c48 85 #define BMC050_M_OUT_Z_H 0x47
kenjiArai 0:8de5e2fd5c48 86 #define BMC050_M_HALL_L 0x48
kenjiArai 0:8de5e2fd5c48 87 #define BMC050_M_HALL_H 0x49
kenjiArai 0:8de5e2fd5c48 88 #define BMC050_M_INTERRUPT 0x4a
kenjiArai 0:8de5e2fd5c48 89 #define BMC050_M_POWER_MODE 0x4b
kenjiArai 0:8de5e2fd5c48 90 #define BMC050_M_OPERATION 0x4c
kenjiArai 0:8de5e2fd5c48 91 // not implement yet 0x4d to 0x50
kenjiArai 0:8de5e2fd5c48 92 #define BMC050_M_REPETITION_XY 0x51
kenjiArai 0:8de5e2fd5c48 93 #define BMC050_M_REPETITION_Z 0x51
kenjiArai 0:8de5e2fd5c48 94
kenjiArai 1:b022f8d7884d 95 ////////////// CONTROL DEFINITION ///////////////
kenjiArai 0:8de5e2fd5c48 96 // Full Scale
kenjiArai 0:8de5e2fd5c48 97 #define BMC050_FS_2G 0x03
kenjiArai 0:8de5e2fd5c48 98 #define BMC050_FS_4G 0x05
kenjiArai 0:8de5e2fd5c48 99 #define BMC050_FS_8G 0x08
kenjiArai 0:8de5e2fd5c48 100 #define BMC050_FS_16G 0x0c
kenjiArai 0:8de5e2fd5c48 101 // Bandwidth (Low pass)
kenjiArai 0:8de5e2fd5c48 102 #define BMC050_NOT_FILTERED 0x00
kenjiArai 0:8de5e2fd5c48 103 #define BMC050_BW_7R81 0x08
kenjiArai 0:8de5e2fd5c48 104 #define BMC050_BW_15R63 0x09
kenjiArai 0:8de5e2fd5c48 105 #define BMC050_BW_31R25 0x0a
kenjiArai 0:8de5e2fd5c48 106 #define BMC050_BW_62R5 0x0b
kenjiArai 0:8de5e2fd5c48 107 #define BMC050_BW_125 0x0c
kenjiArai 0:8de5e2fd5c48 108 #define BMC050_BW_250 0x0d
kenjiArai 0:8de5e2fd5c48 109 #define BMC050_BW_500 0x0e
kenjiArai 0:8de5e2fd5c48 110 #define BMC050_BW_1000 0x0f
kenjiArai 0:8de5e2fd5c48 111
kenjiArai 0:8de5e2fd5c48 112 // Output Data Rate (ODR)
kenjiArai 0:8de5e2fd5c48 113 #define BMC050_DR_10 0
kenjiArai 0:8de5e2fd5c48 114 #define BMC050_DR_2 1
kenjiArai 0:8de5e2fd5c48 115 #define BMC050_DR_6 2
kenjiArai 0:8de5e2fd5c48 116 #define BMC050_DR_8 3
kenjiArai 0:8de5e2fd5c48 117 #define BMC050_DR_15 4
kenjiArai 0:8de5e2fd5c48 118 #define BMC050_DR_20 5
kenjiArai 0:8de5e2fd5c48 119 #define BMC050_DR_25 6
kenjiArai 0:8de5e2fd5c48 120 #define BMC050_DR_30 7
kenjiArai 0:8de5e2fd5c48 121
kenjiArai 0:8de5e2fd5c48 122 // definition for Nomalization
kenjiArai 0:8de5e2fd5c48 123 #define GRAVITY (9.80665F)
kenjiArai 0:8de5e2fd5c48 124 #define BMC050_GAIN (3.91F)
kenjiArai 1:b022f8d7884d 125 #define BMC050_DUMMY 0
kenjiArai 0:8de5e2fd5c48 126
kenjiArai 1:b022f8d7884d 127 ////////////// DATA TYPE DEFINITION /////////////
kenjiArai 0:8de5e2fd5c48 128 typedef struct {
kenjiArai 0:8de5e2fd5c48 129 uint8_t addr;
kenjiArai 0:8de5e2fd5c48 130 uint8_t g_range;
kenjiArai 0:8de5e2fd5c48 131 uint8_t bandwith;
kenjiArai 0:8de5e2fd5c48 132 uint8_t filter;
kenjiArai 0:8de5e2fd5c48 133 } BMC050ACC_TypeDef;
kenjiArai 0:8de5e2fd5c48 134
kenjiArai 0:8de5e2fd5c48 135 typedef struct {
kenjiArai 0:8de5e2fd5c48 136 uint8_t addr;
kenjiArai 0:8de5e2fd5c48 137 uint8_t data_rate;
kenjiArai 0:8de5e2fd5c48 138 } BMC050MAG_TypeDef;
kenjiArai 0:8de5e2fd5c48 139
kenjiArai 0:8de5e2fd5c48 140 /** Interface for Bosch Sensortec COMPASS 6 AXIS
kenjiArai 0:8de5e2fd5c48 141 * Chip: BMC050, two chips configuration (Accelerometer 3axis & Magnetometer 3axis)
kenjiArai 0:8de5e2fd5c48 142 *
kenjiArai 0:8de5e2fd5c48 143 * @code
kenjiArai 0:8de5e2fd5c48 144 * #include "mbed.h"
kenjiArai 0:8de5e2fd5c48 145 *
kenjiArai 0:8de5e2fd5c48 146 * const BMC050ACC_TypeDef acc_parameter = {
kenjiArai 0:8de5e2fd5c48 147 * BMC050_A_G_CHIP_ADDR, // I2C Address
kenjiArai 0:8de5e2fd5c48 148 * BMC050_FS_2G, // G-range slection
kenjiArai 0:8de5e2fd5c48 149 * BMC050_BW_250, // Bandwidth
kenjiArai 0:8de5e2fd5c48 150 * };
kenjiArai 1:b022f8d7884d 151 *
kenjiArai 1:b022f8d7884d 152 * #if 1
kenjiArai 0:8de5e2fd5c48 153 * const BMC050MAG_TypeDef mag_parameter = {
kenjiArai 0:8de5e2fd5c48 154 * BMC050_M_GG_CHIP_ADDR,// I2C Address
kenjiArai 0:8de5e2fd5c48 155 * BMC050_DR_10 // Data Rate
kenjiArai 0:8de5e2fd5c48 156 * };
kenjiArai 1:b022f8d7884d 157 * #else // If you would like to keep "Suspend mode" for mag
kenjiArai 1:b022f8d7884d 158 * const BMC050MAG_TypeDef mag_parameter = {
kenjiArai 1:b022f8d7884d 159 * BMC050_MAG_NOT_USED_ADDR,// Not use mag sensor
kenjiArai 1:b022f8d7884d 160 * BMC050_DUMMY // dummy
kenjiArai 1:b022f8d7884d 161 * };
kenjiArai 1:b022f8d7884d 162 * #endif
kenjiArai 0:8de5e2fd5c48 163 *
kenjiArai 0:8de5e2fd5c48 164 * // I2C Communication
kenjiArai 0:8de5e2fd5c48 165 * I2C i2c(dp5,dp27); // SDA, SCL
kenjiArai 0:8de5e2fd5c48 166 * BMC050 bmc050(i2c, &acc_parameter, &mag_parameter);
kenjiArai 0:8de5e2fd5c48 167 *
kenjiArai 0:8de5e2fd5c48 168 * int main() {
kenjiArai 0:8de5e2fd5c48 169 * float fa[3];
kenjiArai 0:8de5e2fd5c48 170 * float fg[3];
kenjiArai 0:8de5e2fd5c48 171 *
kenjiArai 0:8de5e2fd5c48 172 * if (bmc050.read_id_acc() == BMC050_A_G_CHIP_ADDR){
kenjiArai 0:8de5e2fd5c48 173 * bmc050.read_data_acc(fa);
kenjiArai 0:8de5e2fd5c48 174 * }
kenjiArai 0:8de5e2fd5c48 175 * if (bmc050.read_id_mag() == BMC050_M_GG_CHIP_ADDR){
kenjiArai 0:8de5e2fd5c48 176 * bmc050.read_data_mag(fg);
kenjiArai 0:8de5e2fd5c48 177 * }
kenjiArai 0:8de5e2fd5c48 178 * }
kenjiArai 0:8de5e2fd5c48 179 * @endcode
kenjiArai 0:8de5e2fd5c48 180 */
kenjiArai 0:8de5e2fd5c48 181
kenjiArai 0:8de5e2fd5c48 182 class BMC050{
kenjiArai 0:8de5e2fd5c48 183 public:
kenjiArai 0:8de5e2fd5c48 184 /** Configure data pin
kenjiArai 0:8de5e2fd5c48 185 * @param data SDA and SCL pins
kenjiArai 0:8de5e2fd5c48 186 * @param parameter address for acc (BMC050ACC_TypeDef)
kenjiArai 0:8de5e2fd5c48 187 * @param parameter address for mag (BMC050MAG_TypeDef)
kenjiArai 0:8de5e2fd5c48 188 */
kenjiArai 0:8de5e2fd5c48 189 BMC050(PinName p_sda, PinName p_scl,
kenjiArai 0:8de5e2fd5c48 190 const BMC050ACC_TypeDef *acc_parameter, const BMC050MAG_TypeDef *mag_parameter);
kenjiArai 0:8de5e2fd5c48 191
kenjiArai 0:8de5e2fd5c48 192 /** Configure data pin (with other devices on I2C line)
kenjiArai 0:8de5e2fd5c48 193 * @param I2C previous definition
kenjiArai 0:8de5e2fd5c48 194 * @param other parameters -> please see BMC050(PinName p_sda, PinName p_scl,...)
kenjiArai 0:8de5e2fd5c48 195 */
kenjiArai 0:8de5e2fd5c48 196 BMC050(I2C& p_i2c,
kenjiArai 0:8de5e2fd5c48 197 const BMC050ACC_TypeDef *acc_parameter, const BMC050MAG_TypeDef *mag_parameter);
kenjiArai 0:8de5e2fd5c48 198
kenjiArai 0:8de5e2fd5c48 199 /** Read a float type data from accelerometer
kenjiArai 0:8de5e2fd5c48 200 * @param float type of three arry's address, e.g. float dt[3];
kenjiArai 0:8de5e2fd5c48 201 * @return acc motion data unit: m/s/s
kenjiArai 0:8de5e2fd5c48 202 * @return dt[0]->x, dt[1]->y, dt[2]->z
kenjiArai 0:8de5e2fd5c48 203 */
kenjiArai 0:8de5e2fd5c48 204 void read_data_acc(float *dt);
kenjiArai 0:8de5e2fd5c48 205
kenjiArai 1:b022f8d7884d 206 /** Read a float type data from accelerometer
kenjiArai 1:b022f8d7884d 207 * @param float type of three arry's address, e.g. float dt[3];
kenjiArai 1:b022f8d7884d 208 * @return acc motion data unit: mg
kenjiArai 1:b022f8d7884d 209 * @return dt[0]->x, dt[1]->y, dt[2]->z
kenjiArai 1:b022f8d7884d 210 */
kenjiArai 1:b022f8d7884d 211 void read_mg_acc(float *dt);
kenjiArai 1:b022f8d7884d 212
kenjiArai 0:8de5e2fd5c48 213 /** Read a float type data from magnetometer
kenjiArai 0:8de5e2fd5c48 214 * @param float type of three arry's address, e.g. float dt[3];
kenjiArai 0:8de5e2fd5c48 215 * @return magnettic field data unit: uT(micro T)
kenjiArai 0:8de5e2fd5c48 216 * @return dt[0]->x, dt[1]->y, dt[2]->z
kenjiArai 0:8de5e2fd5c48 217 */
kenjiArai 0:8de5e2fd5c48 218 void read_data_mag(float *dt);
kenjiArai 0:8de5e2fd5c48 219
kenjiArai 0:8de5e2fd5c48 220 /** Read temperature data
kenjiArai 0:8de5e2fd5c48 221 * @param none
kenjiArai 0:8de5e2fd5c48 222 * @return temperature unit: deg.C
kenjiArai 0:8de5e2fd5c48 223 */
kenjiArai 0:8de5e2fd5c48 224 float read_temp();
kenjiArai 0:8de5e2fd5c48 225
kenjiArai 0:8de5e2fd5c48 226 /** Read a acc chip ID number
kenjiArai 0:8de5e2fd5c48 227 * @param none
kenjiArai 0:8de5e2fd5c48 228 * @return should be I_AM_BMC050_ACC(0x03)
kenjiArai 0:8de5e2fd5c48 229 */
kenjiArai 0:8de5e2fd5c48 230 uint8_t read_id_acc();
kenjiArai 0:8de5e2fd5c48 231
kenjiArai 0:8de5e2fd5c48 232 /** Read a mag chip ID number
kenjiArai 0:8de5e2fd5c48 233 * @param none
kenjiArai 0:8de5e2fd5c48 234 * @return should be I_AM_BMC050_MAG(0x32)
kenjiArai 0:8de5e2fd5c48 235 */
kenjiArai 0:8de5e2fd5c48 236 uint8_t read_id_mag();
kenjiArai 0:8de5e2fd5c48 237
kenjiArai 0:8de5e2fd5c48 238 /** Read Data Ready flag /Acc
kenjiArai 0:8de5e2fd5c48 239 * @param none
kenjiArai 0:8de5e2fd5c48 240 * @return 1 = Ready
kenjiArai 0:8de5e2fd5c48 241 */
kenjiArai 0:8de5e2fd5c48 242 uint8_t data_ready_acc();
kenjiArai 0:8de5e2fd5c48 243
kenjiArai 0:8de5e2fd5c48 244 /** Read Data Ready flag /Mag
kenjiArai 0:8de5e2fd5c48 245 * @param none
kenjiArai 0:8de5e2fd5c48 246 * @return 1 = Ready
kenjiArai 0:8de5e2fd5c48 247 */
kenjiArai 0:8de5e2fd5c48 248 uint8_t data_ready_mag();
kenjiArai 0:8de5e2fd5c48 249
kenjiArai 0:8de5e2fd5c48 250 /** Read register (general purpose)
kenjiArai 0:8de5e2fd5c48 251 * @param register's address
kenjiArai 0:8de5e2fd5c48 252 * @return register data
kenjiArai 0:8de5e2fd5c48 253 */
kenjiArai 0:8de5e2fd5c48 254 uint8_t read_reg_acc(uint8_t addr);
kenjiArai 1:b022f8d7884d 255
kenjiArai 1:b022f8d7884d 256 /** Read register (general purpose)
kenjiArai 1:b022f8d7884d 257 * @param register's address
kenjiArai 1:b022f8d7884d 258 * @return register data
kenjiArai 1:b022f8d7884d 259 */
kenjiArai 0:8de5e2fd5c48 260 uint8_t read_reg_mag(uint8_t addr);
kenjiArai 0:8de5e2fd5c48 261
kenjiArai 1:b022f8d7884d 262 /** Set I2C clock frequency
kenjiArai 1:b022f8d7884d 263 * @param freq.
kenjiArai 1:b022f8d7884d 264 * @return none
kenjiArai 1:b022f8d7884d 265 */
kenjiArai 1:b022f8d7884d 266 void frequency(int hz);
kenjiArai 1:b022f8d7884d 267
kenjiArai 0:8de5e2fd5c48 268 /** Write register (general purpose)
kenjiArai 0:8de5e2fd5c48 269 * @param register's address
kenjiArai 0:8de5e2fd5c48 270 * @param data
kenjiArai 0:8de5e2fd5c48 271 * @return none
kenjiArai 0:8de5e2fd5c48 272 */
kenjiArai 0:8de5e2fd5c48 273 void write_reg_acc(uint8_t addr, uint8_t data);
kenjiArai 1:b022f8d7884d 274
kenjiArai 1:b022f8d7884d 275 /** Write register (general purpose)
kenjiArai 1:b022f8d7884d 276 * @param register's address
kenjiArai 1:b022f8d7884d 277 * @param data
kenjiArai 1:b022f8d7884d 278 * @return none
kenjiArai 1:b022f8d7884d 279 */
kenjiArai 0:8de5e2fd5c48 280 void write_reg_mag(uint8_t addr, uint8_t data);
kenjiArai 0:8de5e2fd5c48 281
kenjiArai 0:8de5e2fd5c48 282 protected:
kenjiArai 0:8de5e2fd5c48 283 void initialize(const BMC050ACC_TypeDef *acc_parameter,
kenjiArai 0:8de5e2fd5c48 284 const BMC050MAG_TypeDef *mag_parameter);
kenjiArai 0:8de5e2fd5c48 285
kenjiArai 0:8de5e2fd5c48 286 I2C i2c;
kenjiArai 0:8de5e2fd5c48 287
kenjiArai 0:8de5e2fd5c48 288 private:
kenjiArai 0:8de5e2fd5c48 289 float fs_factor_acc;// full scale factor
kenjiArai 0:8de5e2fd5c48 290 char dbf[2]; // working buffer
kenjiArai 0:8de5e2fd5c48 291 uint8_t acc_addr; // acc sensor address
kenjiArai 0:8de5e2fd5c48 292 uint8_t acc_id; // acc ID
kenjiArai 0:8de5e2fd5c48 293 uint8_t acc_ready; // acc is on I2C line = 1, not = 0
kenjiArai 0:8de5e2fd5c48 294 uint8_t mag_addr; // mag sensor address
kenjiArai 0:8de5e2fd5c48 295 uint8_t mag_id; // mag ID
kenjiArai 0:8de5e2fd5c48 296 uint8_t mag_ready; // mag is on I2C line = 1, not = 0
kenjiArai 0:8de5e2fd5c48 297 };
kenjiArai 0:8de5e2fd5c48 298
kenjiArai 0:8de5e2fd5c48 299 #endif // BMC050_H