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
Diff: BMC050.h
- Revision:
- 1:b022f8d7884d
- Parent:
- 0:8de5e2fd5c48
- Child:
- 2:93141eb80862
diff -r 8de5e2fd5c48 -r b022f8d7884d BMC050.h --- a/BMC050.h Sun Jul 20 13:16:25 2014 +0000 +++ b/BMC050.h Sun Sep 07 07:15:37 2014 +0000 @@ -7,7 +7,7 @@ * http://www.page.sannet.ne.jp/kenjia/index.html * http://mbed.org/users/kenjiArai/ * Created: July 19th, 2014 - * Revised: July 20th, 2014 + * Revised: September 7th, 2014 * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE @@ -21,7 +21,7 @@ #include "mbed.h" -////////////// ADDRESS DEFINITION ///////////////////////////////////////////// +////////////// ADDRESS DEFINITION /////////////// // BMC050 Address/accelerometer // 7bit address = 0b001100x(0x18 or 0x19 depends on SDO) // -> 8bit = 0b001100x0(0x30,0x32) -> 0x31,0x33(Read) or 0x30,0x32(Write) @@ -34,13 +34,14 @@ #define BMC050_M_GV_CHIP_ADDR 0x22 // CSB2 pin = Ground, SDO pin = Vdd #define BMC050_M_VG_CHIP_ADDR 0x24 // CSB2 pin = Vdd, SDO pin = Ground #define BMC050_M_VV_CHIP_ADDR 0x26 // CSB2 pin = Vdd, SDO pin = Vdd +#define BMC050_MAG_NOT_USED_ADDR 0xff // If you only used acc and keep mag as suspend // BMC050 ACC ID #define I_AM_BMC050_ACC 0x03 // BMC050 ACC ID #define I_AM_BMC050_MAG 0x32 -////////////// REGISTER DEFINITION //////////////////////////////////////////// +////////////// REGISTER DEFINITION ////////////// // accelerometer #define BMC050_A_WHO_AM_I 0x00 // reserved @@ -91,7 +92,7 @@ #define BMC050_M_REPETITION_XY 0x51 #define BMC050_M_REPETITION_Z 0x51 -////////////// CONTROL DEFINITION ///////////////////////////////////////////// +////////////// CONTROL DEFINITION /////////////// // Full Scale #define BMC050_FS_2G 0x03 #define BMC050_FS_4G 0x05 @@ -121,8 +122,9 @@ // definition for Nomalization #define GRAVITY (9.80665F) #define BMC050_GAIN (3.91F) +#define BMC050_DUMMY 0 -////////////// DATA TYPE DEFINITION /////////////////////////////////////////// +////////////// DATA TYPE DEFINITION ///////////// typedef struct { uint8_t addr; uint8_t g_range; @@ -146,11 +148,18 @@ * BMC050_FS_2G, // G-range slection * BMC050_BW_250, // Bandwidth * }; - * + * + * #if 1 * const BMC050MAG_TypeDef mag_parameter = { * BMC050_M_GG_CHIP_ADDR,// I2C Address * BMC050_DR_10 // Data Rate * }; + * #else // If you would like to keep "Suspend mode" for mag + * const BMC050MAG_TypeDef mag_parameter = { + * BMC050_MAG_NOT_USED_ADDR,// Not use mag sensor + * BMC050_DUMMY // dummy + * }; + * #endif * * // I2C Communication * I2C i2c(dp5,dp27); // SDA, SCL @@ -194,6 +203,13 @@ */ void read_data_acc(float *dt); + /** Read a float type data from accelerometer + * @param float type of three arry's address, e.g. float dt[3]; + * @return acc motion data unit: mg + * @return dt[0]->x, dt[1]->y, dt[2]->z + */ + void read_mg_acc(float *dt); + /** Read a float type data from magnetometer * @param float type of three arry's address, e.g. float dt[3]; * @return magnettic field data unit: uT(micro T) @@ -236,21 +252,36 @@ * @return register data */ uint8_t read_reg_acc(uint8_t addr); + + /** Read register (general purpose) + * @param register's address + * @return register data + */ uint8_t read_reg_mag(uint8_t addr); + /** Set I2C clock frequency + * @param freq. + * @return none + */ + void frequency(int hz); + /** Write register (general purpose) * @param register's address * @param data * @return none */ void write_reg_acc(uint8_t addr, uint8_t data); + + /** Write register (general purpose) + * @param register's address + * @param data + * @return none + */ void write_reg_mag(uint8_t addr, uint8_t data); protected: void initialize(const BMC050ACC_TypeDef *acc_parameter, const BMC050MAG_TypeDef *mag_parameter); - void i2c_read_n_bytes(int, char*, int); - void i2c_write_n_bytes(int, char*, int); I2C i2c;