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
BMC050.h@1:b022f8d7884d, 2014-09-07 (annotated)
- 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?
User | Revision | Line number | New 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 |