c10dof 2.0.0.0
c10dof.h
Go to the documentation of this file.
1/*
2 * MikroSDK - MikroE Software Development Kit
3 * Copyright© 2020 MikroElektronika d.o.o.
4 *
5 * Permission is hereby granted, free of charge, to any person
6 * obtaining a copy of this software and associated documentation
7 * files (the "Software"), to deal in the Software without restriction,
8 * including without limitation the rights to use, copy, modify, merge,
9 * publish, distribute, sublicense, and/or sell copies of the Software,
10 * and to permit persons to whom the Software is furnished to do so,
11 * subject to the following conditions:
12 *
13 * The above copyright notice and this permission notice shall be
14 * included in all copies or substantial portions of the Software.
15 *
16 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
19 * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
20 * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
21 * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE
22 * OR OTHER DEALINGS IN THE SOFTWARE.
23 */
24
33// ----------------------------------------------------------------------------
34
35#ifndef C10DOF_H
36#define C10DOF_H
37
42#ifdef PREINIT_SUPPORTED
43#include "preinit.h"
44#endif
45
46#ifdef MikroCCoreVersion
47 #if MikroCCoreVersion >= 1
48 #include "delays.h"
49 #endif
50#endif
51
52#include "drv_digital_out.h"
53#include "drv_digital_in.h"
54#include "drv_i2c_master.h"
55
56
57// -------------------------------------------------------------- PUBLIC MACROS
67#define C10DOF_MAP_MIKROBUS( cfg, mikrobus ) \
68 cfg.scl = MIKROBUS( mikrobus, MIKROBUS_SCL ); \
69 cfg.sda = MIKROBUS( mikrobus, MIKROBUS_SDA ); \
70 cfg.rst = MIKROBUS( mikrobus, MIKROBUS_RST ); \
71 cfg.int_pin = MIKROBUS( mikrobus, MIKROBUS_INT )
78#define C10DOF_RETVAL uint8_t
79
80#define C10DOF_OK 0x00
81#define C10DOF_INIT_ERROR 0xFF
87#define C10DOF_BNO055_ADDRESS_A 0x28
88#define C10DOF_BNO055_ADDRESS_B 0x29
89#define C10DOF_BNO055_ID 0xA0
96#define C10DOF_BNO055_PAGE_ID_ADDR 0x07
97#define C10DOF_BNO055_CHIP_ID_ADDR 0x00
98#define C10DOF_BNO055_ACCEL_REV_ID_ADDR 0x01
99#define C10DOF_BNO055_MAG_REV_ID_ADDR 0x02
100#define C10DOF_BNO055_GYRO_REV_ID_ADDR 0x03
101#define C10DOF_BNO055_SW_REV_ID_LSB_ADDR 0x04
102#define C10DOF_BNO055_SW_REV_ID_MSB_ADDR 0x05
103#define C10DOF_BNO055_BL_REV_ID_ADDR 0X06
110#define C10DOF_BNO055_ACCEL_DATA_X_LSB_ADDR 0x08
111#define C10DOF_BNO055_ACCEL_DATA_X_MSB_ADDR 0x09
112#define C10DOF_BNO055_ACCEL_DATA_Y_LSB_ADDR 0x0A
113#define C10DOF_BNO055_ACCEL_DATA_Y_MSB_ADDR 0x0B
114#define C10DOF_BNO055_ACCEL_DATA_Z_LSB_ADDR 0x0C
115#define C10DOF_BNO055_ACCEL_DATA_Z_MSB_ADDR 0x0D
122#define C10DOF_BNO055_MAG_DATA_X_LSB_ADDR 0x0E
123#define C10DOF_BNO055_MAG_DATA_X_MSB_ADDR 0x0F
124#define C10DOF_BNO055_MAG_DATA_Y_LSB_ADDR 0x10
125#define C10DOF_BNO055_MAG_DATA_Y_MSB_ADDR 0x11
126#define C10DOF_BNO055_MAG_DATA_Z_LSB_ADDR 0x12
127#define C10DOF_BNO055_MAG_DATA_Z_MSB_ADDR 0x13
134#define C10DOF_BNO055_GYRO_DATA_X_LSB_ADDR 0x14
135#define C10DOF_BNO055_GYRO_DATA_X_MSB_ADDR 0x15
136#define C10DOF_BNO055_GYRO_DATA_Y_LSB_ADDR 0x16
137#define C10DOF_BNO055_GYRO_DATA_Y_MSB_ADDR 0x17
138#define C10DOF_BNO055_GYRO_DATA_Z_LSB_ADDR 0x18
139#define C10DOF_BNO055_GYRO_DATA_Z_MSB_ADDR 0x19
146#define C10DOF_BNO055_EULER_H_LSB_ADDR 0x1A
147#define C10DOF_BNO055_EULER_H_MSB_ADDR 0x1B
148#define C10DOF_BNO055_EULER_R_LSB_ADDR 0x1C
149#define C10DOF_BNO055_EULER_R_MSB_ADDR 0x1D
150#define C10DOF_BNO055_EULER_P_LSB_ADDR 0x1E
151#define C10DOF_BNO055_EULER_P_MSB_ADDR 0x1F
158#define C10DOF_BNO055_QUATERNION_DATA_W_LSB_ADDR 0x20
159#define C10DOF_BNO055_QUATERNION_DATA_W_MSB_ADDR 0x21
160#define C10DOF_BNO055_QUATERNION_DATA_X_LSB_ADDR 0x22
161#define C10DOF_BNO055_QUATERNION_DATA_X_MSB_ADDR 0x23
162#define C10DOF_BNO055_QUATERNION_DATA_Y_LSB_ADDR 0x24
163#define C10DOF_BNO055_QUATERNION_DATA_Y_MSB_ADDR 0x25
164#define C10DOF_BNO055_QUATERNION_DATA_Z_LSB_ADDR 0x26
165#define C10DOF_BNO055_QUATERNION_DATA_Z_MSB_ADDR 0x27
172#define C10DOF_BNO055_LINEAR_ACCEL_DATA_X_LSB_ADDR 0x28
173#define C10DOF_BNO055_LINEAR_ACCEL_DATA_X_MSB_ADDR 0x29
174#define C10DOF_BNO055_LINEAR_ACCEL_DATA_Y_LSB_ADDR 0x2A
175#define C10DOF_BNO055_LINEAR_ACCEL_DATA_Y_MSB_ADDR 0x2B
176#define C10DOF_BNO055_LINEAR_ACCEL_DATA_Z_LSB_ADDR 0x2C
177#define C10DOF_BNO055_LINEAR_ACCEL_DATA_Z_MSB_ADDR 0x2D
184#define C10DOF_BNO055_GRAVITY_DATA_X_LSB_ADDR 0x2E
185#define C10DOF_BNO055_GRAVITY_DATA_X_MSB_ADDR 0x2F
186#define C10DOF_BNO055_GRAVITY_DATA_Y_LSB_ADDR 0x30
187#define C10DOF_BNO055_GRAVITY_DATA_Y_MSB_ADDR 0x31
188#define C10DOF_BNO055_GRAVITY_DATA_Z_LSB_ADDR 0x32
189#define C10DOF_BNO055_GRAVITY_DATA_Z_MSB_ADDR 0x33
196#define C10DOF_BNO055_TEMP_ADDR 0x34
203#define C10DOF_BNO055_CALIB_STAT_ADDR 0x35
204#define C10DOF_BNO055_SELFTEST_RESULT_ADDR 0x36
205#define C10DOF_BNO055_INTR_STAT_ADDR 0x37
206#define C10DOF_BNO055_SYS_CLK_STAT_ADDR 0x38
207#define C10DOF_BNO055_SYS_STAT_ADDR 0x39
208#define C10DOF_BNO055_SYS_ERR_ADDR 0x3A
215#define C10DOF_BNO055_UNIT_SEL_ADDR 0x3B
216#define C10DOF_BNO055_DATA_SELECT_ADDR 0x3C
223#define C10DOF_BNO055_OPR_MODE_ADDR 0x3D
224#define C10DOF_BNO055_PWR_MODE_ADDR 0x3E
225#define C10DOF_BNO055_SYS_TRIGGER_ADDR 0x3F
226#define C10DOF_BNO055_TEMP_SOURCE_ADDR 0x40
233#define C10DOF_BNO055_AXIS_MAP_CONFIG_ADDR 0x41
234#define C10DOF_BNO055_AXIS_MAP_SIGN_ADDR 0x42
241#define C10DOF_BNO055_SIC_MATRIX_0_LSB_ADDR 0x43
242#define C10DOF_BNO055_SIC_MATRIX_0_MSB_ADDR 0x44
243#define C10DOF_BNO055_SIC_MATRIX_1_LSB_ADDR 0x45
244#define C10DOF_BNO055_SIC_MATRIX_1_MSB_ADDR 0x46
245#define C10DOF_BNO055_SIC_MATRIX_2_LSB_ADDR 0x47
246#define C10DOF_BNO055_SIC_MATRIX_2_MSB_ADDR 0x48
247#define C10DOF_BNO055_SIC_MATRIX_3_LSB_ADDR 0x49
248#define C10DOF_BNO055_SIC_MATRIX_3_MSB_ADDR 0x4A
249#define C10DOF_BNO055_SIC_MATRIX_4_LSB_ADDR 0x4B
250#define C10DOF_BNO055_SIC_MATRIX_4_MSB_ADDR 0x4C
251#define C10DOF_BNO055_SIC_MATRIX_5_LSB_ADDR 0x4D
252#define C10DOF_BNO055_SIC_MATRIX_5_MSB_ADDR 0x4E
253#define C10DOF_BNO055_SIC_MATRIX_6_LSB_ADDR 0x4F
254#define C10DOF_BNO055_SIC_MATRIX_6_MSB_ADDR 0x50
255#define C10DOF_BNO055_SIC_MATRIX_7_LSB_ADDR 0x51
256#define C10DOF_BNO055_SIC_MATRIX_7_MSB_ADDR 0x52
257#define C10DOF_BNO055_SIC_MATRIX_8_LSB_ADDR 0x53
258#define C10DOF_BNO055_SIC_MATRIX_8_MSB_ADDR 0x54
265#define C10DOF_ACCEL_OFFSET_X_LSB_ADDR 0x55
266#define C10DOF_ACCEL_OFFSET_X_MSB_ADDR 0x56
267#define C10DOF_ACCEL_OFFSET_Y_LSB_ADDR 0x57
268#define C10DOF_ACCEL_OFFSET_Y_MSB_ADDR 0x58
269#define C10DOF_ACCEL_OFFSET_Z_LSB_ADDR 0x59
270#define C10DOF_ACCEL_OFFSET_Z_MSB_ADDR 0x5A
277#define C10DOF_MAG_OFFSET_X_LSB_ADDR 0x5B
278#define C10DOF_MAG_OFFSET_X_MSB_ADDR 0x5C
279#define C10DOF_MAG_OFFSET_Y_LSB_ADDR 0x5D
280#define C10DOF_MAG_OFFSET_Y_MSB_ADDR 0x5E
281#define C10DOF_MAG_OFFSET_Z_LSB_ADDR 0x5F
282#define C10DOF_MAG_OFFSET_Z_MSB_ADDR 0x60
289#define C10DOF_GYRO_OFFSET_X_LSB_ADDR 0x61
290#define C10DOF_GYRO_OFFSET_X_MSB_ADDR 0x62
291#define C10DOF_GYRO_OFFSET_Y_LSB_ADDR 0x63
292#define C10DOF_GYRO_OFFSET_Y_MSB_ADDR 0x64
293#define C10DOF_GYRO_OFFSET_Z_LSB_ADDR 0x65
294#define C10DOF_GYRO_OFFSET_Z_MSB_ADDR 0x66
301#define C10DOF_ACCEL_RADIUS_LSB_ADDR 0x67
302#define C10DOF_ACCEL_RADIUS_MSB_ADDR 0x68
303#define C10DOF_MAG_RADIUS_LSB_ADDR 0x69
304#define C10DOF_MAG_RADIUS_MSB_ADDR 0x6A
311#define C10DOF_BMP180_ADDRESS 0x77
312#define C10DOF_BMP180_PROM_START__ADDR 0xAA
313#define C10DOF_BMP180_CHIP_ID_REG 0xD0
314#define C10DOF_BMP180_VERSION_REG 0xD1
315#define C10DOF_BMP180_CTRL_MEAS_REG 0xF4
316#define C10DOF_BMP180_ADC_OUT_MSB_REG 0xF6
317#define C10DOF_BMP180_ADC_OUT_LSB_REG 0xF7
318#define C10DOF_BMP180_SOFT_RESET_REG 0xE0
319#define C10DOF_BMP180_REG_CALIB_PARAM_AC1_MSB 0xAA
320#define C10DOF_BMP180_REG_CALIB_PARAM_AC1_LSB 0xAB
321#define C10DOF_BMP180_REG_CALIB_PARAM_AC2_MSB 0xAC
322#define C10DOF_BMP180_REG_CALIB_PARAM_AC2_LSB 0xAD
323#define C10DOF_BMP180_REG_CALIB_PARAM_AC3_MSB 0xAE
324#define C10DOF_BMP180_REG_CALIB_PARAM_AC3_LSB 0xAF
325#define C10DOF_BMP180_REG_CALIB_PARAM_AC4_MSB 0xB0
326#define C10DOF_BMP180_REG_CALIB_PARAM_AC4_LSB 0xB1
327#define C10DOF_BMP180_REG_CALIB_PARAM_AC5_MSB 0xB2
328#define C10DOF_BMP180_REG_CALIB_PARAM_AC5_LSB 0xB3
329#define C10DOF_BMP180_REG_CALIB_PARAM_AC6_MSB 0xB4
330#define C10DOF_BMP180_REG_CALIB_PARAM_AC6_LSB 0xB5
331#define C10DOF_BMP180_REG_CALIB_PARAM_B1_MSB 0xB6
332#define C10DOF_BMP180_REG_CALIB_PARAM_B1_LSB 0xB7
333#define C10DOF_BMP180_REG_CALIB_PARAM_B2_MSB 0xB8
334#define C10DOF_BMP180_REG_CALIB_PARAM_B2_LSB 0xB9
335#define C10DOF_BMP180_REG_CALIB_PARAM_MB_MSB 0xBA
336#define C10DOF_BMP180_REG_CALIB_PARAM_MB_LSB 0xBB
337#define C10DOF_BMP180_REG_CALIB_PARAM_MC_MSB 0xBC
338#define C10DOF_BMP180_REG_CALIB_PARAM_MC_LSB 0xBD
339#define C10DOF_BMP180_REG_CALIB_PARAM_MD_MSB 0xBE
340#define C10DOF_BMP180_REG_CALIB_PARAM_MD_LSB 0xBF
341#define C10DOF_BMP180_REG_CONF_ADDR 0x07
342#define C10DOF_BMP180_PWR_MODE_ADDR 0x3E
343#define C10DOF_BMP180_OPR_MODE_ADDR 0x3D
344#define C10DOF_BMP180_T_MEASURE 0x2E
345#define C10DOF_BMP180_P_MEASURE 0x34
348 // End group macro
349// --------------------------------------------------------------- PUBLIC TYPES
358typedef struct
359{
360 // Output pins
361
362 digital_out_t rst;
363
364 // Input pins
365
366 digital_in_t int_pin;
367
368 // Modules
369
370 i2c_master_t i2c;
371
372 // ctx variable
373
375
376} c10dof_t;
377
381typedef struct
382{
383 // Communication gpio pins
384
385 pin_name_t scl;
386 pin_name_t sda;
387
388 // Additional gpio pins
389
390 pin_name_t rst;
391 pin_name_t int_pin;
392
393 // static variable
394
395 uint32_t i2c_speed;
396 uint8_t i2c_address;
397
399
400 // End types group
401// ----------------------------------------------- PUBLIC FUNCTION DECLARATIONS
402
408#ifdef __cplusplus
409extern "C"{
410#endif
411
421
431
440
451void c10dof_write_byte ( c10dof_t *ctx, uint8_t reg, uint8_t data_in, uint8_t slave_addr );
452
465uint8_t c10dof_read_byte ( c10dof_t *ctx, uint8_t reg, uint8_t slave_addr );
466
479uint16_t c10dof_read_data ( c10dof_t *ctx, uint8_t msb_reg, uint8_t slave_addr );
480
490
502
514
526
538
550
561uint16_t c10dof_get_soft_ID ( c10dof_t *ctx );
562
574
584
594
605void c10dof_set_config_mode ( c10dof_t *ctx, uint8_t config_mode );
606
617void c10dof_select_page ( c10dof_t *ctx, uint8_t page_number );
618
629void c10dof_config_accel ( c10dof_t *ctx, uint8_t acc_cnfg );
630
641void c10dof_config_gyro ( c10dof_t *ctx, uint8_t gyro_cnfg );
642
653void c10dof_config_mag ( c10dof_t *ctx, uint8_t mag_cnfg );
654
665void c10dof_set_sensor_units ( c10dof_t *ctx, uint8_t sensor_units );
666
678
690
700void c10dof_set_mode( c10dof_t *ctx, uint8_t mode_val );
701
711
721
731
741int16_t c10dof_read_raw_temperature ( c10dof_t *ctx, uint8_t msb_reg );
742
752int32_t c10dof_read_raw_pressure ( c10dof_t *ctx, uint8_t msb_addr );
753
762
771void c10dof_get_measurements ( c10dof_t *ctx, float *temperature, float *pressure );
772
783
794
805int16_t c10dof_get_axis( c10dof_t *ctx, uint8_t addr_reg_low );
806
817void c10dof_read_accel ( c10dof_t *ctx, int16_t *accelX, int16_t *accelY, int16_t *accelZ );
818
829void c10dof_read_mag ( c10dof_t *ctx, int16_t *magX, int16_t *magY, int16_t *magZ );
830
844void c10dof_read_gyro ( c10dof_t *ctx, int16_t *gyroX, int16_t *gyroY, int16_t *gyroZ );
845
856
857#ifdef __cplusplus
858}
859#endif
860#endif // _C10DOF_H_
861
862 // End public_function group
864
865// ------------------------------------------------------------------------- END
#define C10DOF_RETVAL
Definition c10dof.h:78
uint16_t c10dof_read_data(c10dof_t *ctx, uint8_t msb_reg, uint8_t slave_addr)
Generic read function.
uint8_t c10dof_get_system_error(c10dof_t *ctx)
System error code.
void c10dof_get_measurements(c10dof_t *ctx, float *temperature, float *pressure)
Get measurements value - temperature and pressure data function.
void c10dof_default_cfg(c10dof_t *ctx)
Click Default Configuration function.
uint8_t c10dof_get_mag_ID(c10dof_t *ctx)
ID function.
uint8_t c10dof_get_page_ID(c10dof_t *ctx)
ID function.
void c10dof_hw_reset(c10dof_t *ctx)
Reset function.
uint8_t c10dof_bno055_chip_ID(c10dof_t *ctx)
ID function.
uint8_t c10dof_bmp180_chip_ID(c10dof_t *ctx)
ID function.
void c10dof_set_mode(c10dof_t *ctx, uint8_t mode_val)
Mode.
int32_t c10dof_read_raw_pressure(c10dof_t *ctx, uint8_t msb_addr)
Raw pressure reading.
void c10dof_get_calib_param(c10dof_t *ctx)
Read the calibration parameter function.
C10DOF_RETVAL c10dof_init(c10dof_t *ctx, c10dof_cfg_t *cfg)
Initialization function.
void c10dof_read_gyro(c10dof_t *ctx, int16_t *gyroX, int16_t *gyroY, int16_t *gyroZ)
Function read Gyro X-axis, Y-axis and Z-axis axis.
void c10dof_write_byte(c10dof_t *ctx, uint8_t reg, uint8_t data_in, uint8_t slave_addr)
Generic write function.
void c10dof_read_mag(c10dof_t *ctx, int16_t *magX, int16_t *magY, int16_t *magZ)
Function read Magnetometar X-axis, Y-axis and Z-axis.
void c10dof_start_pressure_measure(c10dof_t *ctx)
Pressure reading start.
void c10dof_default_configuration_BNO055(c10dof_t *ctx)
Configuration function.
uint8_t c10dof_get_system_status(c10dof_t *ctx)
System status code.
void c10dof_default_configuration_BMP180(c10dof_t *ctx)
Configuration function.
void c10dof_cfg_setup(c10dof_cfg_t *cfg)
Config Object Initialization function.
int16_t c10dof_read_raw_temperature(c10dof_t *ctx, uint8_t msb_reg)
Raw temperature reading.
void c10dof_start_temperature_measure(c10dof_t *ctx)
Temperature reading start.
void c10dof_read_accel(c10dof_t *ctx, int16_t *accelX, int16_t *accelY, int16_t *accelZ)
Function read Accel X-axis, Y-axis and Z-axis.
void c10dof_config_accel(c10dof_t *ctx, uint8_t acc_cnfg)
Accel configuration function.
uint8_t c10dof_read_byte(c10dof_t *ctx, uint8_t reg, uint8_t slave_addr)
Generic read function.
int16_t c10dof_get_axis(c10dof_t *ctx, uint8_t addr_reg_low)
Function get axis data of BNO055 register.
void c10dof_set_config_mode(c10dof_t *ctx, uint8_t config_mode)
Configuration function.
uint8_t c10dof_get_gyro_ID(c10dof_t *ctx)
ID function.
void c10dof_config_mag(c10dof_t *ctx, uint8_t mag_cnfg)
Mag configuration function.
uint8_t c10dof_get_accel_ID(c10dof_t *ctx)
ID function.
uint8_t c10dof_check_interrupt(c10dof_t *ctx)
Check the state of interrupt function.
float c10dof_get_pressure(c10dof_t *ctx)
Get pressure value function.
void c10dof_set_normal_mode(c10dof_t *ctx)
Normal mode.
float c10dof_get_temperature(c10dof_t *ctx)
Get temperature value function.
uint16_t c10dof_get_soft_ID(c10dof_t *ctx)
ID function.
void c10dof_select_page(c10dof_t *ctx, uint8_t page_number)
Page selection function.
void c10dof_config_gyro(c10dof_t *ctx, uint8_t gyro_cnfg)
Gyro configuration function.
void c10dof_set_sensor_units(c10dof_t *ctx, uint8_t sensor_units)
Sensor units function.
Click configuration structure definition.
Definition c10dof.h:382
uint32_t i2c_speed
Definition c10dof.h:395
pin_name_t scl
Definition c10dof.h:385
pin_name_t int_pin
Definition c10dof.h:391
pin_name_t sda
Definition c10dof.h:386
pin_name_t rst
Definition c10dof.h:390
uint8_t i2c_address
Definition c10dof.h:396
Click ctx object definition.
Definition c10dof.h:359
digital_in_t int_pin
Definition c10dof.h:366
i2c_master_t i2c
Definition c10dof.h:370
digital_out_t rst
Definition c10dof.h:362
uint8_t slave_address
Definition c10dof.h:374