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 
39 #ifdef PREINIT_SUPPORTED
40 #include "preinit.h"
41 #endif
42 
43 #ifdef MikroCCoreVersion
44  #if MikroCCoreVersion >= 1
45  #include "delays.h"
46  #endif
47 #endif
48 
49 #include "drv_digital_out.h"
50 #include "drv_digital_in.h"
51 #include "drv_i2c_master.h"
52 #include "drv_spi_master.h"
53 #include "spi_specifics.h"
54 
75 #define ACCELQVAR_REG_PIN_CTRL 0x0C
76 #define ACCELQVAR_REG_WAKE_UP_DUR_EXT 0x0E
77 #define ACCELQVAR_REG_WHO_AM_I 0x0F
78 #define ACCELQVAR_REG_CTRL1 0x10
79 #define ACCELQVAR_REG_CTRL2 0x11
80 #define ACCELQVAR_REG_CTRL3 0x12
81 #define ACCELQVAR_REG_CTRL4 0x13
82 #define ACCELQVAR_REG_CTRL5 0x14
83 #define ACCELQVAR_REG_FIFO_CTRL 0x15
84 #define ACCELQVAR_REG_FIFO_WTM 0x16
85 #define ACCELQVAR_REG_INTERRUPT_CFG 0x17
86 #define ACCELQVAR_REG_SIXD 0x18
87 #define ACCELQVAR_REG_WAKE_UP_THS 0x1C
88 #define ACCELQVAR_REG_WAKE_UP_DUR 0x1D
89 #define ACCELQVAR_REG_FREE_FALL 0x1E
90 #define ACCELQVAR_REG_MD1_CFG 0x1F
91 #define ACCELQVAR_REG_MD2_CFG 0x20
92 #define ACCELQVAR_REG_WAKE_UP_SRC 0x21
93 #define ACCELQVAR_REG_TAP_SRC 0x22
94 #define ACCELQVAR_REG_SIXD_SRC 0x23
95 #define ACCELQVAR_REG_ALL_INT_SRC 0x24
96 #define ACCELQVAR_REG_STATUS 0x25
97 #define ACCELQVAR_REG_FIFO_STATUS1 0x26
98 #define ACCELQVAR_REG_FIFO_STATUS2 0x27
99 #define ACCELQVAR_REG_OUT_X_L 0x28
100 #define ACCELQVAR_REG_OUT_X_H 0x29
101 #define ACCELQVAR_REG_OUT_Y_L 0x2A
102 #define ACCELQVAR_REG_OUT_Y_H 0x2B
103 #define ACCELQVAR_REG_OUT_Z_L 0x2C
104 #define ACCELQVAR_REG_OUT_Z_H 0x2D
105 #define ACCELQVAR_REG_OUT_T_AH_QVAR_L 0x2E
106 #define ACCELQVAR_REG_OUT_T_AH_QVAR_H 0x2F
107 #define ACCELQVAR_REG_AH_QVAR_CFG 0x31
108 #define ACCELQVAR_REG_SELF_TEST 0x32
109 #define ACCELQVAR_REG_I3C_IF_CTRL 0x33
110 #define ACCELQVAR_REG_EMB_FUNC_STATUS_MAINPAGE 0x34
111 #define ACCELQVAR_REG_FSM_STATUS_MAINPAGE 0x35
112 #define ACCELQVAR_REG_MLC_STATUS_MAINPAGE 0x36
113 #define ACCELQVAR_REG_SLEEP 0x3D
114 #define ACCELQVAR_REG_IF_WAKE_UP 0x3E
115 #define ACCELQVAR_REG_FUNC_CFG_ACCESS 0x3F
116 #define ACCELQVAR_REG_FIFO_DATA_OUT_TAG 0x40
117 #define ACCELQVAR_REG_FIFO_DATA_OUT_X_L 0x41
118 #define ACCELQVAR_REG_FIFO_DATA_OUT_X_H 0x42
119 #define ACCELQVAR_REG_FIFO_DATA_OUT_Y_L 0x43
120 #define ACCELQVAR_REG_FIFO_DATA_OUT_Y_H 0x44
121 #define ACCELQVAR_REG_FIFO_DATA_OUT_Z_L 0x45
122 #define ACCELQVAR_REG_FIFO_DATA_OUT_Z_H 0x46
123 #define ACCELQVAR_REG_FIFO_BATCH_DEC 0x47
124 #define ACCELQVAR_REG_TAP_CFG0 0x6F
125 #define ACCELQVAR_REG_TAP_CFG1 0x70
126 #define ACCELQVAR_REG_TAP_CFG2 0x71
127 #define ACCELQVAR_REG_TAP_CFG3 0x72
128 #define ACCELQVAR_REG_TAP_CFG4 0x73
129 #define ACCELQVAR_REG_TAP_CFG5 0x74
130 #define ACCELQVAR_REG_TAP_CFG6 0x75
131 #define ACCELQVAR_REG_TIMESTAMP0 0x7A
132 #define ACCELQVAR_REG_TIMESTAMP1 0x7B
133 #define ACCELQVAR_REG_TIMESTAMP2 0x7C
134 #define ACCELQVAR_REG_TIMESTAMP3 0x7D
135  // accelqvar_reg
137 
152 #define ACCELQVAR_WHO_AM_I 0x47
153 
158 #define ACCELQVAR_CTRL1_INT1_ON_RES 0x40
159 #define ACCELQVAR_CTRL1_SW_RESET 0x20
160 #define ACCELQVAR_CTRL1_IF_ADD_INC 0x10
161 #define ACCELQVAR_CTRL1_DRDY_PULSED 0x08
162 #define ACCELQVAR_CTRL1_WU_X_EN 0x04
163 #define ACCELQVAR_CTRL1_WU_Y_EN 0x02
164 #define ACCELQVAR_CTRL1_WU_Z_EN 0x01
165 
170 #define ACCELQVAR_CTRL2_INT1_BOOT 0x80
171 #define ACCELQVAR_CTRL2_INT1_FIFO_FULL 0x40
172 #define ACCELQVAR_CTRL2_INT1_FIFO_TH 0x20
173 #define ACCELQVAR_CTRL2_INT1_FIFO_OVR 0x10
174 #define ACCELQVAR_CTRL2_INT1_DRDY 0x08
175 
180 #define ACCELQVAR_CTRL3_INT2_BOOT 0x80
181 #define ACCELQVAR_CTRL3_INT2_FIFO_FULL 0x40
182 #define ACCELQVAR_CTRL3_INT2_FIFO_TH 0x20
183 #define ACCELQVAR_CTRL3_INT2_FIFO_OVR 0x10
184 #define ACCELQVAR_CTRL3_INT2_DRDY 0x08
185 #define ACCELQVAR_CTRL3_HP_EN 0x04
186 #define ACCELQVAR_CTRL3_ST_SIGN_Y 0x02
187 #define ACCELQVAR_CTRL3_ST_SIGN_X 0x01
188 
193 #define ACCELQVAR_CTRL4_INACT_ODR_25 0xC0
194 #define ACCELQVAR_CTRL4_INACT_ODR_3 0x80
195 #define ACCELQVAR_CTRL4_INACT_ODR1_6 0x40
196 #define ACCELQVAR_CTRL4_INACT_ODR1_STAT 0x00
197 #define ACCELQVAR_CTRL4_BDU 0x20
198 #define ACCELQVAR_CTRL4_EMB_FUNC_EN 0x10
199 #define ACCELQVAR_CTRL4_FIFO_EN 0x08
200 #define ACCELQVAR_CTRL4_SOC 0x02
201 #define ACCELQVAR_CTRL4_BOOT 0x01
202 
207 #define ACCELQVAR_CTRL5_ODR_ONE_SHOT_IFACE 0xF0
208 #define ACCELQVAR_CTRL5_ODR_ONE_SHOT_INT2 0xE0
209 #define ACCELQVAR_CTRL5_ODR_800_HZ 0xB0
210 #define ACCELQVAR_CTRL5_ODR_400_HZ 0xA0
211 #define ACCELQVAR_CTRL5_ODR_200_HZ 0x90
212 #define ACCELQVAR_CTRL5_ODR_100_HZ 0x80
213 #define ACCELQVAR_CTRL5_ODR_50_HZ 0x70
214 #define ACCELQVAR_CTRL5_ODR_25_HZ 0x60
215 #define ACCELQVAR_CTRL5_ODR_12_5_HZ 0x50
216 #define ACCELQVAR_CTRL5_ODR_6_HZ 0x40
217 #define ACCELQVAR_CTRL5_ODR_ULP_25_HZ 0x30
218 #define ACCELQVAR_CTRL5_ODR_ULP_3_HZ 0x20
219 #define ACCELQVAR_CTRL5_ODR_ULP_1_6_HZ 0x10
220 #define ACCELQVAR_CTRL5_ODR_PWR_DOWN 0x00
221 #define ACCELQVAR_CTRL5_BW_ODR_16 0x0C
222 #define ACCELQVAR_CTRL5_BW_ODR_8 0x08
223 #define ACCELQVAR_CTRL5_BW_ODR_4 0x04
224 #define ACCELQVAR_CTRL5_BW_ODR_2 0x00
225 #define ACCELQVAR_CTRL5_FS_16_G 0x03
226 #define ACCELQVAR_CTRL5_FS_8_G 0x02
227 #define ACCELQVAR_CTRL5_FS_4_G 0x01
228 #define ACCELQVAR_CTRL5_FS_2_G 0x00
229 
234 #define ACCELQVAR_AH_QVAR_CFG_AH_QVAR_EN 0x80
235 #define ACCELQVAR_AH_QVAR_CFG_AH_QVAR_NOTCH_EN 0x40
236 #define ACCELQVAR_AH_QVAR_CFG_AH_QVAR_NOTCH_CUTOFF 0x00
237 #define ACCELQVAR_AH_QVAR_CFG_AH_QVAR_C_ZIN_75_MOHM 0x0C
238 #define ACCELQVAR_AH_QVAR_CFG_AH_QVAR_C_ZIN_310_MOHM 0x08
239 #define ACCELQVAR_AH_QVAR_CFG_AH_QVAR_C_ZIN_175_MOHM 0x04
240 #define ACCELQVAR_AH_QVAR_CFG_AH_QVAR_C_ZIN_520_MOHM 0x00
241 #define ACCELQVAR_AH_QVAR_CFG_AH_QVAR_GAIN_4 0x03
242 #define ACCELQVAR_AH_QVAR_CFG_AH_QVAR_GAIN_2 0x02
243 #define ACCELQVAR_AH_QVAR_CFG_AH_QVAR_GAIN_1 0x01
244 #define ACCELQVAR_AH_QVAR_CFG_AH_QVAR_GAIN_0_5 0x00
245 
250 #define ACCELQVAR_IF_WAKE_UP_SOFT_PD 0x01
251 
256 #define ACCELQVAR_SENSITIVITY_FS_2G 0.061f
257 #define ACCELQVAR_SENSITIVITY_FS_4G 0.122f
258 #define ACCELQVAR_SENSITIVITY_FS_8G 0.244f
259 #define ACCELQVAR_SENSITIVITY_FS_16G 0.488f
260 
265 #define ACCELQVAR_QVAR_DIVIDER 74.4f
266 #define ACCELQVAR_TEMP_DIVIDER 355.5f
267 #define ACCELQVAR_TEMP_ZERO_VAL 25.0f
268 
274 #define ACCELQVAR_DEVICE_ADDRESS_GND 0x18
275 #define ACCELQVAR_DEVICE_ADDRESS_VCC 0x19
276 
285 #define ACCELQVAR_SET_DATA_SAMPLE_EDGE SET_SPI_DATA_SAMPLE_EDGE
286 #define ACCELQVAR_SET_DATA_SAMPLE_MIDDLE SET_SPI_DATA_SAMPLE_MIDDLE
287  // accelqvar_set
289 
304 #define ACCELQVAR_MAP_MIKROBUS( cfg, mikrobus ) \
305  cfg.scl = MIKROBUS( mikrobus, MIKROBUS_SCL ); \
306  cfg.sda = MIKROBUS( mikrobus, MIKROBUS_SDA ); \
307  cfg.miso = MIKROBUS( mikrobus, MIKROBUS_MISO ); \
308  cfg.mosi = MIKROBUS( mikrobus, MIKROBUS_MOSI ); \
309  cfg.sck = MIKROBUS( mikrobus, MIKROBUS_SCK ); \
310  cfg.cs = MIKROBUS( mikrobus, MIKROBUS_CS ); \
311  cfg.it1 = MIKROBUS( mikrobus, MIKROBUS_AN ); \
312  cfg.it2 = MIKROBUS( mikrobus, MIKROBUS_INT )
313  // accelqvar_map // accelqvar
316 
321 typedef enum
322 {
327 
332 struct accelqvar_s;
333 typedef err_t ( *accelqvar_master_io_t )( struct accelqvar_s*, uint8_t, uint8_t*, uint8_t );
339 typedef struct accelqvar_s
340 {
341  digital_in_t it1;
342  digital_in_t it2;
344  i2c_master_t i2c;
345  spi_master_t spi;
347  uint8_t slave_address;
348  pin_name_t chip_select;
354  float sensitivity;
355 
357 
362 typedef struct
363 {
364  pin_name_t scl;
365  pin_name_t sda;
366  pin_name_t miso;
367  pin_name_t mosi;
368  pin_name_t sck;
369  pin_name_t cs;
370  pin_name_t it1;
371  pin_name_t it2;
373  uint32_t i2c_speed;
374  uint8_t i2c_address;
376  uint32_t spi_speed;
377  spi_master_mode_t spi_mode;
378  spi_master_chip_select_polarity_t cs_polarity;
383 
388 typedef struct
389 {
390  float x;
391  float y;
392  float z;
395 
400 typedef enum
401 {
403  ACCELQVAR_ERROR = -1
404 
406 
423 
439 
454 
468 
483 err_t accelqvar_generic_write ( accelqvar_t *ctx, uint8_t reg, uint8_t *data_in, uint8_t len );
484 
499 err_t accelqvar_generic_read ( accelqvar_t *ctx, uint8_t reg, uint8_t *data_out, uint8_t len );
500 
514 err_t accelqvar_get_device_id ( accelqvar_t *ctx, uint8_t *device_id );
515 
529 
543 err_t accelqvar_set_odr ( accelqvar_t *ctx, uint8_t odr );
544 
558 err_t accelqvar_set_fsr ( accelqvar_t *ctx, uint8_t fsr );
559 
575 
589 
603 
617 err_t accelqvar_get_qvar_data ( accelqvar_t *ctx, float *qvar );
618 
631 
644 
645 #ifdef __cplusplus
646 }
647 #endif
648 #endif // ACCELQVAR_H
649  // accelqvar
651 
652 // ------------------------------------------------------------------------ END
accelqvar_cfg_t::scl
pin_name_t scl
Definition: accelqvar.h:364
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:345
accelqvar_axes_t::y
float y
Definition: accelqvar.h:391
accelqvar_cfg_t::i2c_speed
uint32_t i2c_speed
Definition: accelqvar.h:373
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:402
accelqvar_cfg_t::it1
pin_name_t it1
Definition: accelqvar.h:370
spi_specifics.h
This file contains SPI specific macros, functions, etc.
accelqvar_s::it1
digital_in_t it1
Definition: accelqvar.h:341
accelqvar_cfg_t::spi_mode
spi_master_mode_t spi_mode
Definition: accelqvar.h:377
accelqvar_cfg_t::miso
pin_name_t miso
Definition: accelqvar.h:366
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:368
accelqvar_s::read_f
accelqvar_master_io_t read_f
Definition: accelqvar.h:352
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:392
accelqvar_cfg_t::i2c_address
uint8_t i2c_address
Definition: accelqvar.h:374
ACCELQVAR_DRV_SEL_I2C
@ ACCELQVAR_DRV_SEL_I2C
Definition: accelqvar.h:324
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:348
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:347
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:389
accelqvar_s::sensitivity
float sensitivity
Definition: accelqvar.h:354
accelqvar_cfg_t::cs_polarity
spi_master_chip_select_polarity_t cs_polarity
Definition: accelqvar.h:378
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:380
accelqvar_cfg_t::cs
pin_name_t cs
Definition: accelqvar.h:369
accelqvar_s::write_f
accelqvar_master_io_t write_f
Definition: accelqvar.h:351
accelqvar_drv_t
accelqvar_drv_t
AccelQvar Click driver selector.
Definition: accelqvar.h:322
accelqvar_master_io_t
err_t(* accelqvar_master_io_t)(struct accelqvar_s *, uint8_t, uint8_t *, uint8_t)
Definition: accelqvar.h:333
accelqvar_s::it2
digital_in_t it2
Definition: accelqvar.h:342
accelqvar_return_value_t
accelqvar_return_value_t
AccelQvar Click return value data.
Definition: accelqvar.h:401
accelqvar_s
AccelQvar Click context object.
Definition: accelqvar.h:340
accelqvar_cfg_t
AccelQvar Click configuration object.
Definition: accelqvar.h:363
accelqvar_cfg_t::sda
pin_name_t sda
Definition: accelqvar.h:365
accelqvar_cfg_t::mosi
pin_name_t mosi
Definition: accelqvar.h:367
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:371
ACCELQVAR_ERROR
@ ACCELQVAR_ERROR
Definition: accelqvar.h:403
accelqvar_cfg_t::spi_speed
uint32_t spi_speed
Definition: accelqvar.h:376
ACCELQVAR_DRV_SEL_SPI
@ ACCELQVAR_DRV_SEL_SPI
Definition: accelqvar.h:323
accelqvar_axes_t::x
float x
Definition: accelqvar.h:390
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:349
accelqvar_s::i2c
i2c_master_t i2c
Definition: accelqvar.h:344
accelqvar_drv_interface_sel
void accelqvar_drv_interface_sel(accelqvar_cfg_t *cfg, accelqvar_drv_t drv_sel)
AccelQvar driver interface setup function.