accelqvar  2.1.0.0
accelqvar.h
Go to the documentation of this file.
1 /****************************************************************************
2 ** Copyright (C) 2020 MikroElektronika d.o.o.
3 ** Contact: https://www.mikroe.com/contact
4 **
5 ** Permission is hereby granted, free of charge, to any person obtaining a copy
6 ** of this software and associated documentation files (the "Software"), to deal
7 ** in the Software without restriction, including without limitation the rights
8 ** to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 ** copies of the Software, and to permit persons to whom the Software is
10 ** furnished to do so, subject to the following conditions:
11 ** The above copyright notice and this permission notice shall be
12 ** included in all copies or substantial portions of the Software.
13 **
14 ** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15 ** EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
16 ** OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
17 ** IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
18 ** DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT
19 ** OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
20 ** USE OR OTHER DEALINGS IN THE SOFTWARE.
21 ****************************************************************************/
22 
28 #ifndef ACCELQVAR_H
29 #define ACCELQVAR_H
30 
31 #ifdef __cplusplus
32 extern "C"{
33 #endif
34 
35 #include "drv_digital_out.h"
36 #include "drv_digital_in.h"
37 #include "drv_i2c_master.h"
38 #include "drv_spi_master.h"
39 #include "spi_specifics.h"
40 
61 #define ACCELQVAR_REG_PIN_CTRL 0x0C
62 #define ACCELQVAR_REG_WAKE_UP_DUR_EXT 0x0E
63 #define ACCELQVAR_REG_WHO_AM_I 0x0F
64 #define ACCELQVAR_REG_CTRL1 0x10
65 #define ACCELQVAR_REG_CTRL2 0x11
66 #define ACCELQVAR_REG_CTRL3 0x12
67 #define ACCELQVAR_REG_CTRL4 0x13
68 #define ACCELQVAR_REG_CTRL5 0x14
69 #define ACCELQVAR_REG_FIFO_CTRL 0x15
70 #define ACCELQVAR_REG_FIFO_WTM 0x16
71 #define ACCELQVAR_REG_INTERRUPT_CFG 0x17
72 #define ACCELQVAR_REG_SIXD 0x18
73 #define ACCELQVAR_REG_WAKE_UP_THS 0x1C
74 #define ACCELQVAR_REG_WAKE_UP_DUR 0x1D
75 #define ACCELQVAR_REG_FREE_FALL 0x1E
76 #define ACCELQVAR_REG_MD1_CFG 0x1F
77 #define ACCELQVAR_REG_MD2_CFG 0x20
78 #define ACCELQVAR_REG_WAKE_UP_SRC 0x21
79 #define ACCELQVAR_REG_TAP_SRC 0x22
80 #define ACCELQVAR_REG_SIXD_SRC 0x23
81 #define ACCELQVAR_REG_ALL_INT_SRC 0x24
82 #define ACCELQVAR_REG_STATUS 0x25
83 #define ACCELQVAR_REG_FIFO_STATUS1 0x26
84 #define ACCELQVAR_REG_FIFO_STATUS2 0x27
85 #define ACCELQVAR_REG_OUT_X_L 0x28
86 #define ACCELQVAR_REG_OUT_X_H 0x29
87 #define ACCELQVAR_REG_OUT_Y_L 0x2A
88 #define ACCELQVAR_REG_OUT_Y_H 0x2B
89 #define ACCELQVAR_REG_OUT_Z_L 0x2C
90 #define ACCELQVAR_REG_OUT_Z_H 0x2D
91 #define ACCELQVAR_REG_OUT_T_AH_QVAR_L 0x2E
92 #define ACCELQVAR_REG_OUT_T_AH_QVAR_H 0x2F
93 #define ACCELQVAR_REG_AH_QVAR_CFG 0x31
94 #define ACCELQVAR_REG_SELF_TEST 0x32
95 #define ACCELQVAR_REG_I3C_IF_CTRL 0x33
96 #define ACCELQVAR_REG_EMB_FUNC_STATUS_MAINPAGE 0x34
97 #define ACCELQVAR_REG_FSM_STATUS_MAINPAGE 0x35
98 #define ACCELQVAR_REG_MLC_STATUS_MAINPAGE 0x36
99 #define ACCELQVAR_REG_SLEEP 0x3D
100 #define ACCELQVAR_REG_IF_WAKE_UP 0x3E
101 #define ACCELQVAR_REG_FUNC_CFG_ACCESS 0x3F
102 #define ACCELQVAR_REG_FIFO_DATA_OUT_TAG 0x40
103 #define ACCELQVAR_REG_FIFO_DATA_OUT_X_L 0x41
104 #define ACCELQVAR_REG_FIFO_DATA_OUT_X_H 0x42
105 #define ACCELQVAR_REG_FIFO_DATA_OUT_Y_L 0x43
106 #define ACCELQVAR_REG_FIFO_DATA_OUT_Y_H 0x44
107 #define ACCELQVAR_REG_FIFO_DATA_OUT_Z_L 0x45
108 #define ACCELQVAR_REG_FIFO_DATA_OUT_Z_H 0x46
109 #define ACCELQVAR_REG_FIFO_BATCH_DEC 0x47
110 #define ACCELQVAR_REG_TAP_CFG0 0x6F
111 #define ACCELQVAR_REG_TAP_CFG1 0x70
112 #define ACCELQVAR_REG_TAP_CFG2 0x71
113 #define ACCELQVAR_REG_TAP_CFG3 0x72
114 #define ACCELQVAR_REG_TAP_CFG4 0x73
115 #define ACCELQVAR_REG_TAP_CFG5 0x74
116 #define ACCELQVAR_REG_TAP_CFG6 0x75
117 #define ACCELQVAR_REG_TIMESTAMP0 0x7A
118 #define ACCELQVAR_REG_TIMESTAMP1 0x7B
119 #define ACCELQVAR_REG_TIMESTAMP2 0x7C
120 #define ACCELQVAR_REG_TIMESTAMP3 0x7D
121  // accelqvar_reg
123 
138 #define ACCELQVAR_WHO_AM_I 0x47
139 
144 #define ACCELQVAR_CTRL1_INT1_ON_RES 0x40
145 #define ACCELQVAR_CTRL1_SW_RESET 0x20
146 #define ACCELQVAR_CTRL1_IF_ADD_INC 0x10
147 #define ACCELQVAR_CTRL1_DRDY_PULSED 0x08
148 #define ACCELQVAR_CTRL1_WU_X_EN 0x04
149 #define ACCELQVAR_CTRL1_WU_Y_EN 0x02
150 #define ACCELQVAR_CTRL1_WU_Z_EN 0x01
151 
156 #define ACCELQVAR_CTRL2_INT1_BOOT 0x80
157 #define ACCELQVAR_CTRL2_INT1_FIFO_FULL 0x40
158 #define ACCELQVAR_CTRL2_INT1_FIFO_TH 0x20
159 #define ACCELQVAR_CTRL2_INT1_FIFO_OVR 0x10
160 #define ACCELQVAR_CTRL2_INT1_DRDY 0x08
161 
166 #define ACCELQVAR_CTRL3_INT2_BOOT 0x80
167 #define ACCELQVAR_CTRL3_INT2_FIFO_FULL 0x40
168 #define ACCELQVAR_CTRL3_INT2_FIFO_TH 0x20
169 #define ACCELQVAR_CTRL3_INT2_FIFO_OVR 0x10
170 #define ACCELQVAR_CTRL3_INT2_DRDY 0x08
171 #define ACCELQVAR_CTRL3_HP_EN 0x04
172 #define ACCELQVAR_CTRL3_ST_SIGN_Y 0x02
173 #define ACCELQVAR_CTRL3_ST_SIGN_X 0x01
174 
179 #define ACCELQVAR_CTRL4_INACT_ODR_25 0xC0
180 #define ACCELQVAR_CTRL4_INACT_ODR_3 0x80
181 #define ACCELQVAR_CTRL4_INACT_ODR1_6 0x40
182 #define ACCELQVAR_CTRL4_INACT_ODR1_STAT 0x00
183 #define ACCELQVAR_CTRL4_BDU 0x20
184 #define ACCELQVAR_CTRL4_EMB_FUNC_EN 0x10
185 #define ACCELQVAR_CTRL4_FIFO_EN 0x08
186 #define ACCELQVAR_CTRL4_SOC 0x02
187 #define ACCELQVAR_CTRL4_BOOT 0x01
188 
193 #define ACCELQVAR_CTRL5_ODR_ONE_SHOT_IFACE 0xF0
194 #define ACCELQVAR_CTRL5_ODR_ONE_SHOT_INT2 0xE0
195 #define ACCELQVAR_CTRL5_ODR_800_HZ 0xB0
196 #define ACCELQVAR_CTRL5_ODR_400_HZ 0xA0
197 #define ACCELQVAR_CTRL5_ODR_200_HZ 0x90
198 #define ACCELQVAR_CTRL5_ODR_100_HZ 0x80
199 #define ACCELQVAR_CTRL5_ODR_50_HZ 0x70
200 #define ACCELQVAR_CTRL5_ODR_25_HZ 0x60
201 #define ACCELQVAR_CTRL5_ODR_12_5_HZ 0x50
202 #define ACCELQVAR_CTRL5_ODR_6_HZ 0x40
203 #define ACCELQVAR_CTRL5_ODR_ULP_25_HZ 0x30
204 #define ACCELQVAR_CTRL5_ODR_ULP_3_HZ 0x20
205 #define ACCELQVAR_CTRL5_ODR_ULP_1_6_HZ 0x10
206 #define ACCELQVAR_CTRL5_ODR_PWR_DOWN 0x00
207 #define ACCELQVAR_CTRL5_BW_ODR_16 0x0C
208 #define ACCELQVAR_CTRL5_BW_ODR_8 0x08
209 #define ACCELQVAR_CTRL5_BW_ODR_4 0x04
210 #define ACCELQVAR_CTRL5_BW_ODR_2 0x00
211 #define ACCELQVAR_CTRL5_FS_16_G 0x03
212 #define ACCELQVAR_CTRL5_FS_8_G 0x02
213 #define ACCELQVAR_CTRL5_FS_4_G 0x01
214 #define ACCELQVAR_CTRL5_FS_2_G 0x00
215 
220 #define ACCELQVAR_AH_QVAR_CFG_AH_QVAR_EN 0x80
221 #define ACCELQVAR_AH_QVAR_CFG_AH_QVAR_NOTCH_EN 0x40
222 #define ACCELQVAR_AH_QVAR_CFG_AH_QVAR_NOTCH_CUTOFF 0x00
223 #define ACCELQVAR_AH_QVAR_CFG_AH_QVAR_C_ZIN_75_MOHM 0x0C
224 #define ACCELQVAR_AH_QVAR_CFG_AH_QVAR_C_ZIN_310_MOHM 0x08
225 #define ACCELQVAR_AH_QVAR_CFG_AH_QVAR_C_ZIN_175_MOHM 0x04
226 #define ACCELQVAR_AH_QVAR_CFG_AH_QVAR_C_ZIN_520_MOHM 0x00
227 #define ACCELQVAR_AH_QVAR_CFG_AH_QVAR_GAIN_4 0x03
228 #define ACCELQVAR_AH_QVAR_CFG_AH_QVAR_GAIN_2 0x02
229 #define ACCELQVAR_AH_QVAR_CFG_AH_QVAR_GAIN_1 0x01
230 #define ACCELQVAR_AH_QVAR_CFG_AH_QVAR_GAIN_0_5 0x00
231 
236 #define ACCELQVAR_IF_WAKE_UP_SOFT_PD 0x01
237 
242 #define ACCELQVAR_SENSITIVITY_FS_2G 0.061f
243 #define ACCELQVAR_SENSITIVITY_FS_4G 0.122f
244 #define ACCELQVAR_SENSITIVITY_FS_8G 0.244f
245 #define ACCELQVAR_SENSITIVITY_FS_16G 0.488f
246 
251 #define ACCELQVAR_QVAR_DIVIDER 74.4f
252 #define ACCELQVAR_TEMP_DIVIDER 355.5f
253 #define ACCELQVAR_TEMP_ZERO_VAL 25.0f
254 
260 #define ACCELQVAR_DEVICE_ADDRESS_GND 0x18
261 #define ACCELQVAR_DEVICE_ADDRESS_VCC 0x19
262 
271 #define ACCELQVAR_SET_DATA_SAMPLE_EDGE SET_SPI_DATA_SAMPLE_EDGE
272 #define ACCELQVAR_SET_DATA_SAMPLE_MIDDLE SET_SPI_DATA_SAMPLE_MIDDLE
273  // accelqvar_set
275 
290 #define ACCELQVAR_MAP_MIKROBUS( cfg, mikrobus ) \
291  cfg.scl = MIKROBUS( mikrobus, MIKROBUS_SCL ); \
292  cfg.sda = MIKROBUS( mikrobus, MIKROBUS_SDA ); \
293  cfg.miso = MIKROBUS( mikrobus, MIKROBUS_MISO ); \
294  cfg.mosi = MIKROBUS( mikrobus, MIKROBUS_MOSI ); \
295  cfg.sck = MIKROBUS( mikrobus, MIKROBUS_SCK ); \
296  cfg.cs = MIKROBUS( mikrobus, MIKROBUS_CS ); \
297  cfg.it1 = MIKROBUS( mikrobus, MIKROBUS_AN ); \
298  cfg.it2 = MIKROBUS( mikrobus, MIKROBUS_INT )
299  // accelqvar_map // accelqvar
302 
307 typedef enum
308 {
313 
318 struct accelqvar_s;
319 typedef err_t ( *accelqvar_master_io_t )( struct accelqvar_s*, uint8_t, uint8_t*, uint8_t );
325 typedef struct accelqvar_s
326 {
327  digital_in_t it1;
328  digital_in_t it2;
330  i2c_master_t i2c;
331  spi_master_t spi;
333  uint8_t slave_address;
334  pin_name_t chip_select;
340  float sensitivity;
341 
343 
348 typedef struct
349 {
350  pin_name_t scl;
351  pin_name_t sda;
352  pin_name_t miso;
353  pin_name_t mosi;
354  pin_name_t sck;
355  pin_name_t cs;
356  pin_name_t it1;
357  pin_name_t it2;
359  uint32_t i2c_speed;
360  uint8_t i2c_address;
362  uint32_t spi_speed;
363  spi_master_mode_t spi_mode;
364  spi_master_chip_select_polarity_t cs_polarity;
369 
374 typedef struct
375 {
376  float x;
377  float y;
378  float z;
381 
386 typedef enum
387 {
389  ACCELQVAR_ERROR = -1
390 
392 
409 
425 
440 
454 
469 err_t accelqvar_generic_write ( accelqvar_t *ctx, uint8_t reg, uint8_t *data_in, uint8_t len );
470 
485 err_t accelqvar_generic_read ( accelqvar_t *ctx, uint8_t reg, uint8_t *data_out, uint8_t len );
486 
500 err_t accelqvar_get_device_id ( accelqvar_t *ctx, uint8_t *device_id );
501 
515 
529 err_t accelqvar_set_odr ( accelqvar_t *ctx, uint8_t odr );
530 
544 err_t accelqvar_set_fsr ( accelqvar_t *ctx, uint8_t fsr );
545 
561 
575 
589 
603 err_t accelqvar_get_qvar_data ( accelqvar_t *ctx, float *qvar );
604 
617 
630 
631 #ifdef __cplusplus
632 }
633 #endif
634 #endif // ACCELQVAR_H
635  // accelqvar
637 
638 // ------------------------------------------------------------------------ END
accelqvar_cfg_t::scl
pin_name_t scl
Definition: accelqvar.h:350
accelqvar_generic_write
err_t accelqvar_generic_write(accelqvar_t *ctx, uint8_t reg, uint8_t *data_in, uint8_t len)
AccelQvar data writing function.
accelqvar_s::spi
spi_master_t spi
Definition: accelqvar.h:331
accelqvar_axes_t::y
float y
Definition: accelqvar.h:377
accelqvar_cfg_t::i2c_speed
uint32_t i2c_speed
Definition: accelqvar.h:359
accelqvar_get_axes_data
err_t accelqvar_get_axes_data(accelqvar_t *ctx, accelqvar_axes_t *axes)
AccelQvar get the accel sensor axes function.
ACCELQVAR_OK
@ ACCELQVAR_OK
Definition: accelqvar.h:388
accelqvar_cfg_t::it1
pin_name_t it1
Definition: accelqvar.h:356
spi_specifics.h
This file contains SPI specific macros, functions, etc.
accelqvar_s::it1
digital_in_t it1
Definition: accelqvar.h:327
accelqvar_cfg_t::spi_mode
spi_master_mode_t spi_mode
Definition: accelqvar.h:363
accelqvar_cfg_t::miso
pin_name_t miso
Definition: accelqvar.h:352
accelqvar_get_int2
uint8_t accelqvar_get_int2(accelqvar_t *ctx)
AccelQvar get interrupt 2 function.
accelqvar_cfg_t::sck
pin_name_t sck
Definition: accelqvar.h:354
accelqvar_s::read_f
accelqvar_master_io_t read_f
Definition: accelqvar.h:338
accelqvar_spi_wake_up
err_t accelqvar_spi_wake_up(accelqvar_t *ctx)
AccelQvar SPI wake up function.
accelqvar_set_odr
err_t accelqvar_set_odr(accelqvar_t *ctx, uint8_t odr)
AccelQvar ODR selection function.
accelqvar_axes_t::z
float z
Definition: accelqvar.h:378
accelqvar_cfg_t::i2c_address
uint8_t i2c_address
Definition: accelqvar.h:360
ACCELQVAR_DRV_SEL_I2C
@ ACCELQVAR_DRV_SEL_I2C
Definition: accelqvar.h:310
accelqvar_t
struct accelqvar_s accelqvar_t
AccelQvar Click context object.
accelqvar_en_qvar
err_t accelqvar_en_qvar(accelqvar_t *ctx)
AccelQvar enable QVAR function.
accelqvar_s::chip_select
pin_name_t chip_select
Definition: accelqvar.h:334
accelqvar_init
err_t accelqvar_init(accelqvar_t *ctx, accelqvar_cfg_t *cfg)
AccelQvar initialization function.
accelqvar_set_fsr
err_t accelqvar_set_fsr(accelqvar_t *ctx, uint8_t fsr)
AccelQvar set full scale function.
accelqvar_s::slave_address
uint8_t slave_address
Definition: accelqvar.h:333
accelqvar_cfg_setup
void accelqvar_cfg_setup(accelqvar_cfg_t *cfg)
AccelQvar configuration object setup function.
accelqvar_axes_t
AccelQvar Click axes data.
Definition: accelqvar.h:375
accelqvar_s::sensitivity
float sensitivity
Definition: accelqvar.h:340
accelqvar_cfg_t::cs_polarity
spi_master_chip_select_polarity_t cs_polarity
Definition: accelqvar.h:364
accelqvar_get_int1
uint8_t accelqvar_get_int1(accelqvar_t *ctx)
AccelQvar get interrupt 1 function.
accelqvar_cfg_t::drv_sel
accelqvar_drv_t drv_sel
Definition: accelqvar.h:366
accelqvar_cfg_t::cs
pin_name_t cs
Definition: accelqvar.h:355
accelqvar_s::write_f
accelqvar_master_io_t write_f
Definition: accelqvar.h:337
accelqvar_drv_t
accelqvar_drv_t
AccelQvar Click driver selector.
Definition: accelqvar.h:308
accelqvar_master_io_t
err_t(* accelqvar_master_io_t)(struct accelqvar_s *, uint8_t, uint8_t *, uint8_t)
Definition: accelqvar.h:319
accelqvar_s::it2
digital_in_t it2
Definition: accelqvar.h:328
accelqvar_return_value_t
accelqvar_return_value_t
AccelQvar Click return value data.
Definition: accelqvar.h:387
accelqvar_s
AccelQvar Click context object.
Definition: accelqvar.h:326
accelqvar_cfg_t
AccelQvar Click configuration object.
Definition: accelqvar.h:349
accelqvar_cfg_t::sda
pin_name_t sda
Definition: accelqvar.h:351
accelqvar_cfg_t::mosi
pin_name_t mosi
Definition: accelqvar.h:353
accelqvar_generic_read
err_t accelqvar_generic_read(accelqvar_t *ctx, uint8_t reg, uint8_t *data_out, uint8_t len)
AccelQvar data reading function.
accelqvar_sw_reset
err_t accelqvar_sw_reset(accelqvar_t *ctx)
AccelQvar software reset function.
accelqvar_get_device_id
err_t accelqvar_get_device_id(accelqvar_t *ctx, uint8_t *device_id)
AccelQvar get device ID function.
accelqvar_cfg_t::it2
pin_name_t it2
Definition: accelqvar.h:357
ACCELQVAR_ERROR
@ ACCELQVAR_ERROR
Definition: accelqvar.h:389
accelqvar_cfg_t::spi_speed
uint32_t spi_speed
Definition: accelqvar.h:362
ACCELQVAR_DRV_SEL_SPI
@ ACCELQVAR_DRV_SEL_SPI
Definition: accelqvar.h:309
accelqvar_axes_t::x
float x
Definition: accelqvar.h:376
accelqvar_get_qvar_data
err_t accelqvar_get_qvar_data(accelqvar_t *ctx, float *qvar)
AccelQvar get QVAR data function.
accelqvar_default_cfg
err_t accelqvar_default_cfg(accelqvar_t *ctx)
AccelQvar default configuration function.
accelqvar_s::drv_sel
accelqvar_drv_t drv_sel
Definition: accelqvar.h:335
accelqvar_s::i2c
i2c_master_t i2c
Definition: accelqvar.h:330
accelqvar_drv_interface_sel
void accelqvar_drv_interface_sel(accelqvar_cfg_t *cfg, accelqvar_drv_t drv_sel)
AccelQvar driver interface setup function.