mlvibrosens  2.1.0.0
mlvibrosens.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 MLVIBROSENS_H
29 #define MLVIBROSENS_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 
73 #define MLVIBROSENS_REG_INT_STATUS 0x00
74 #define MLVIBROSENS_REG_TEMP_OUT 0x01
75 #define MLVIBROSENS_REG_VECM_LSB 0x02
76 #define MLVIBROSENS_REG_VECM_MSB 0x03
77 #define MLVIBROSENS_REG_OUT_X_LSB 0x04
78 #define MLVIBROSENS_REG_OUT_X_MSB 0x05
79 #define MLVIBROSENS_REG_OUT_Y_LSB 0x06
80 #define MLVIBROSENS_REG_OUT_Y_MSB 0x07
81 #define MLVIBROSENS_REG_OUT_Z_LSB 0x08
82 #define MLVIBROSENS_REG_OUT_Z_MSB 0x09
83 #define MLVIBROSENS_REG_BUF_STATUS 0x0B
84 #define MLVIBROSENS_REG_BUF_X_LSB 0x0C
85 #define MLVIBROSENS_REG_BUF_X_MSB 0x0D
86 #define MLVIBROSENS_REG_BUF_Y_LSB 0x0E
87 #define MLVIBROSENS_REG_BUF_Y_MSB 0x0F
88 #define MLVIBROSENS_REG_BUF_Z_LSB 0x10
89 #define MLVIBROSENS_REG_BUF_Z_MSB 0x11
90 #define MLVIBROSENS_REG_PROD_REV 0x12
91 #define MLVIBROSENS_REG_WHO_AM_I 0x13
92 #define MLVIBROSENS_REG_SYS_MODE 0x14
93 #define MLVIBROSENS_REG_SENS_CONFIG1 0x15
94 #define MLVIBROSENS_REG_SENS_CONFIG2 0x16
95 #define MLVIBROSENS_REG_SENS_CONFIG3 0x17
96 #define MLVIBROSENS_REG_SENS_CONFIG4 0x18
97 #define MLVIBROSENS_REG_SENS_CONFIG5 0x19
98 #define MLVIBROSENS_REG_WAKE_IDLE_LSB 0x1A
99 #define MLVIBROSENS_REG_WAKE_IDLE_MSB 0x1B
100 #define MLVIBROSENS_REG_SLEEP_IDLE_LSB 0x1C
101 #define MLVIBROSENS_REG_SLEEP_IDLE_MSB 0x1D
102 #define MLVIBROSENS_REG_ASLP_COUNT_LSB 0x1E
103 #define MLVIBROSENS_REG_ASLP_COUNT_MSB 0x1F
104 #define MLVIBROSENS_REG_INT_EN 0x20
105 #define MLVIBROSENS_REG_INT_PIN_SEL 0x21
106 #define MLVIBROSENS_REG_OFF_X 0x22
107 #define MLVIBROSENS_REG_OFF_Y 0x23
108 #define MLVIBROSENS_REG_OFF_Z 0x24
109 #define MLVIBROSENS_REG_BUF_CONFIG1 0x26
110 #define MLVIBROSENS_REG_BUF_CONFIG2 0x27
111 #define MLVIBROSENS_REG_ORIENT_STATUS 0x28
112 #define MLVIBROSENS_REG_ORIENT_CONFIG 0x29
113 #define MLVIBROSENS_REG_ORIENT_DBCOUNT 0x2A
114 #define MLVIBROSENS_REG_ORIENT_BF_ZCOMP 0x2B
115 #define MLVIBROSENS_REG_ORIENT_THS_REG 0x2C
116 #define MLVIBROSENS_REG_SDCD_INT_SRC1 0x2D
117 #define MLVIBROSENS_REG_SDCD_INT_SRC2 0x2E
118 #define MLVIBROSENS_REG_SDCD_CONFIG1 0x2F
119 #define MLVIBROSENS_REG_SDCD_CONFIG2 0x30
120 #define MLVIBROSENS_REG_SDCD_OT_DBCNT 0x31
121 #define MLVIBROSENS_REG_SDCD_WT_DBCNT 0x32
122 #define MLVIBROSENS_REG_SDCD_LTHS_LSB 0x33
123 #define MLVIBROSENS_REG_SDCD_LTHS_MSB 0x34
124 #define MLVIBROSENS_REG_SDCD_UTHS_LSB 0x35
125 #define MLVIBROSENS_REG_SDCD_UTHS_MSB 0x36
126 #define MLVIBROSENS_REG_SELF_TEST_CONFIG1 0x37
127 #define MLVIBROSENS_REG_SELF_TEST_CONFIG2 0x38
128  // mlvibrosens_reg
130 
145 #define MLVIBROSENS_INT_STATUS_SRC_DRDY 0x80
146 #define MLVIBROSENS_INT_STATUS_SRC_OVF 0x40
147 #define MLVIBROSENS_INT_STATUS_SRC_BUF 0x20
148 #define MLVIBROSENS_INT_STATUS_SRC_SDCD_OT 0x10
149 #define MLVIBROSENS_INT_STATUS_SRC_SDCD_WT 0x08
150 #define MLVIBROSENS_INT_STATUS_SRC_ORIENT 0x04
151 #define MLVIBROSENS_INT_STATUS_SRC_ASLP 0x02
152 #define MLVIBROSENS_INT_STATUS_SRC_BOOT 0x01
153 
158 #define MLVIBROSENS_WHO_AM_I 0x86
159 
164 #define MLVIBROSENS_SENS_CONFIG1_RST 0x80
165 #define MLVIBROSENS_SENS_CONFIG1_ST_AXIS_SEL_DIS 0x00
166 #define MLVIBROSENS_SENS_CONFIG1_ST_AXIS_SEL_X 0x20
167 #define MLVIBROSENS_SENS_CONFIG1_ST_AXIS_SEL_Y 0x40
168 #define MLVIBROSENS_SENS_CONFIG1_ST_AXIS_SEL_Z 0x60
169 #define MLVIBROSENS_SENS_CONFIG1_ST_AXIS_SEL_MASK 0x60
170 #define MLVIBROSENS_SENS_CONFIG1_ST_POL 0x10
171 #define MLVIBROSENS_SENS_CONFIG1_SPI_M_4_WIRE 0x00
172 #define MLVIBROSENS_SENS_CONFIG1_SPI_M_3_WIRE 0x08
173 #define MLVIBROSENS_SENS_CONFIG1_SPI_M_MASK 0x08
174 #define MLVIBROSENS_SENS_CONFIG1_FSR_2G 0x00
175 #define MLVIBROSENS_SENS_CONFIG1_FSR_4G 0x02
176 #define MLVIBROSENS_SENS_CONFIG1_FSR_8G 0x04
177 #define MLVIBROSENS_SENS_CONFIG1_FSR_16G 0x06
178 #define MLVIBROSENS_SENS_CONFIG1_FSR_MASK 0x06
179 #define MLVIBROSENS_SENS_CONFIG1_MODE_STANDBY 0x00
180 #define MLVIBROSENS_SENS_CONFIG1_MODE_ACTIVE 0x01
181 #define MLVIBROSENS_SENS_CONFIG1_MODE_MASK 0x01
182 
187 #define MLVIBROSENS_SENS_CONFIG3_WAKE_ODR_MASK 0xF0
188 #define MLVIBROSENS_SENS_CONFIG3_SLEEP_ODR_MASK 0x0F
189 
194 #define MLVIBROSENS_SENS_CONFIG4_EXT_TRIG_M 0x80
195 #define MLVIBROSENS_SENS_CONFIG4_WAKE_SDCD_WT 0x40
196 #define MLVIBROSENS_SENS_CONFIG4_WAKE_SDCD_OT 0x20
197 #define MLVIBROSENS_SENS_CONFIG4_WAKE_ORIENT 0x10
198 #define MLVIBROSENS_SENS_CONFIG4_DRDY_PUL 0x08
199 #define MLVIBROSENS_SENS_CONFIG4_INT2_FUNC 0x04
200 #define MLVIBROSENS_SENS_CONFIG4_INT_PP_OD 0x02
201 #define MLVIBROSENS_SENS_CONFIG4_INT_POL 0x01
202 #define MLVIBROSENS_SENS_CONFIG4_INT_PP_LOW 0x00
203 
208 #define MLVIBROSENS_INT_EN_DRDY 0x80
209 #define MLVIBROSENS_INT_EN_BUF 0x40
210 #define MLVIBROSENS_INT_EN_SDCD_OT 0x20
211 #define MLVIBROSENS_INT_EN_SDCD_WT 0x10
212 #define MLVIBROSENS_INT_EN_ORIENT 0x08
213 #define MLVIBROSENS_INT_EN_ASLP 0x04
214 #define MLVIBROSENS_INT_EN_BOOT_DIS 0x02
215 #define MLVIBROSENS_INT_EN_WAKE_OUT 0x01
216 
221 #define MLVIBROSENS_INT_PIN_SEL_DRDY_INT2 0x80
222 #define MLVIBROSENS_INT_PIN_SEL_BUF_INT2 0x40
223 #define MLVIBROSENS_INT_PIN_SEL_SDCD_OT_INT2 0x20
224 #define MLVIBROSENS_INT_PIN_SEL_SDCD_WT_INT2 0x10
225 #define MLVIBROSENS_INT_PIN_SEL_ORIENT_INT2 0x08
226 #define MLVIBROSENS_INT_PIN_SEL_ASLP_INT2 0x04
227 #define MLVIBROSENS_INT_PIN_SEL_BOOT_INT2 0x02
228 #define MLVIBROSENS_INT_PIN_SEL_WAKE_OUT_INT2 0x01
229 #define MLVIBROSENS_INT_PIN_SEL_ALL_INT1 0x00
230 
235 #define MLVIBROSENS_MODE_STANDBY 0
236 #define MLVIBROSENS_MODE_ACTIVE 1
237 
242 #define MLVIBROSENS_FSR_2G 0
243 #define MLVIBROSENS_FSR_4G 1
244 #define MLVIBROSENS_FSR_8G 2
245 #define MLVIBROSENS_FSR_16G 3
246 
251 #define MLVIBROSENS_ODR_3200_HZ 0
252 #define MLVIBROSENS_ODR_1600_HZ 1
253 #define MLVIBROSENS_ODR_800_HZ 2
254 #define MLVIBROSENS_ODR_400_HZ 3
255 #define MLVIBROSENS_ODR_200_HZ 4
256 #define MLVIBROSENS_ODR_100_HZ 5
257 #define MLVIBROSENS_ODR_50_HZ 6
258 #define MLVIBROSENS_ODR_25_HZ 7
259 #define MLVIBROSENS_ODR_12_5_HZ 8
260 #define MLVIBROSENS_ODR_6_25_HZ 9
261 #define MLVIBROSENS_ODR_3_125_HZ 10
262 #define MLVIBROSENS_ODR_1_563_HZ 11
263 #define MLVIBROSENS_ODR_0_781_HZ 12
264 
269 #define MLVIBROSENS_LSB_PER_G_FSR_2G 1024
270 #define MLVIBROSENS_LSB_PER_G_FSR_4G 512
271 #define MLVIBROSENS_LSB_PER_G_FSR_8G 256
272 #define MLVIBROSENS_LSB_PER_G_FSR_16G 128
273 
278 #define MLVIBROSENS_TEMP_OFFSET 25
279 
284 #define MLVIBROSENS_VIBRO_STATE_IDLE 0
285 #define MLVIBROSENS_VIBRO_STATE_BALANCED 1
286 #define MLVIBROSENS_VIBRO_STATE_UNBALANCED 2
287 #define MLVIBROSENS_VIBRO_STATE_BOTH 3
288 
294 #define MLVIBROSENS_DEVICE_ADDRESS_0 0x18
295 #define MLVIBROSENS_DEVICE_ADDRESS_1 0x19
296  // mlvibrosens_set
298 
313 #define MLVIBROSENS_MAP_MIKROBUS( cfg, mikrobus ) \
314  cfg.scl = MIKROBUS( mikrobus, MIKROBUS_SCL ); \
315  cfg.sda = MIKROBUS( mikrobus, MIKROBUS_SDA ); \
316  cfg.bal = MIKROBUS( mikrobus, MIKROBUS_CS ); \
317  cfg.unb = MIKROBUS( mikrobus, MIKROBUS_PWM ); \
318  cfg.int_pin = MIKROBUS( mikrobus, MIKROBUS_INT )
319  // mlvibrosens_map // mlvibrosens
322 
327 typedef struct
328 {
329  // Output pins
330  digital_out_t bal;
331  digital_out_t unb;
333  // Input pins
334  digital_in_t int_pin;
336  // Modules
337  i2c_master_t i2c;
339  // I2C slave address
340  uint8_t slave_address;
342  uint16_t lsb_per_g;
344 } mlvibrosens_t;
345 
350 typedef struct
351 {
352  pin_name_t scl;
353  pin_name_t sda;
355  pin_name_t bal;
356  pin_name_t unb;
357  pin_name_t int_pin;
359  uint32_t i2c_speed;
360  uint8_t i2c_address;
363 
368 typedef struct
369 {
370  float x;
371  float y;
372  float z;
373  int8_t temperature;
376 
381 typedef enum
382 {
384  MLVIBROSENS_ERROR = -1
385 
387 
404 
419 
433 
448 err_t mlvibrosens_write_regs ( mlvibrosens_t *ctx, uint8_t reg, uint8_t *data_in, uint8_t len );
449 
464 err_t mlvibrosens_read_regs ( mlvibrosens_t *ctx, uint8_t reg, uint8_t *data_out, uint8_t len );
465 
478 err_t mlvibrosens_write_reg ( mlvibrosens_t *ctx, uint8_t reg, uint8_t data_in );
479 
492 err_t mlvibrosens_read_reg ( mlvibrosens_t *ctx, uint8_t reg, uint8_t *data_out );
493 
503 
513 
523 
533 
543 
556 void mlvibrosens_set_vibro_state ( mlvibrosens_t *ctx, uint8_t state );
557 
569 
581 err_t mlvibrosens_get_status ( mlvibrosens_t *ctx, uint8_t *status );
582 
594 
607 err_t mlvibrosens_set_mode ( mlvibrosens_t *ctx, uint8_t mode );
608 
623 err_t mlvibrosens_set_fsr ( mlvibrosens_t *ctx, uint8_t fsr );
624 
648 err_t mlvibrosens_set_odr ( mlvibrosens_t *ctx, uint8_t odr );
649 
663 
664 #ifdef __cplusplus
665 }
666 #endif
667 #endif // MLVIBROSENS_H
668  // mlvibrosens
670 
671 // ------------------------------------------------------------------------ END
mlvibrosens_cfg_t::int_pin
pin_name_t int_pin
Definition: mlvibrosens.h:357
MLVIBROSENS_OK
@ MLVIBROSENS_OK
Definition: mlvibrosens.h:383
mlvibrosens_set_vibro_state
void mlvibrosens_set_vibro_state(mlvibrosens_t *ctx, uint8_t state)
ML Vibro Sens set vibro state function.
mlvibrosens_t::slave_address
uint8_t slave_address
Definition: mlvibrosens.h:340
mlvibrosens_check_comm
err_t mlvibrosens_check_comm(mlvibrosens_t *ctx)
ML Vibro Sens check comm function.
mlvibrosens_cfg_t::i2c_speed
uint32_t i2c_speed
Definition: mlvibrosens.h:359
mlvibrosens_cfg_t
ML Vibro Sens Click configuration object.
Definition: mlvibrosens.h:351
mlvibrosens_balanced_enable
void mlvibrosens_balanced_enable(mlvibrosens_t *ctx)
ML Vibro Sens balanced enable function.
mlvibrosens_t::lsb_per_g
uint16_t lsb_per_g
Definition: mlvibrosens.h:342
mlvibrosens_get_int_pin
uint8_t mlvibrosens_get_int_pin(mlvibrosens_t *ctx)
ML Vibro Sens get int1 pin function.
mlvibrosens_write_reg
err_t mlvibrosens_write_reg(mlvibrosens_t *ctx, uint8_t reg, uint8_t data_in)
ML Vibro Sens write reg function.
mlvibrosens_cfg_t::sda
pin_name_t sda
Definition: mlvibrosens.h:353
mlvibrosens_return_value_t
mlvibrosens_return_value_t
ML Vibro Sens Click return value data.
Definition: mlvibrosens.h:382
mlvibrosens_data_t::z
float z
Definition: mlvibrosens.h:372
mlvibrosens_t::bal
digital_out_t bal
Definition: mlvibrosens.h:330
mlvibrosens_data_t
ML Vibro Sens Click Axes data structure.
Definition: mlvibrosens.h:369
MLVIBROSENS_ERROR
@ MLVIBROSENS_ERROR
Definition: mlvibrosens.h:384
mlvibrosens_cfg_t::i2c_address
uint8_t i2c_address
Definition: mlvibrosens.h:360
mlvibrosens_get_data
err_t mlvibrosens_get_data(mlvibrosens_t *ctx, mlvibrosens_data_t *data_out)
ML Vibro Sens get data function.
mlvibrosens_unbalanced_enable
void mlvibrosens_unbalanced_enable(mlvibrosens_t *ctx)
ML Vibro Sens unbalanced enable function.
mlvibrosens_init
err_t mlvibrosens_init(mlvibrosens_t *ctx, mlvibrosens_cfg_t *cfg)
ML Vibro Sens initialization function.
mlvibrosens_set_mode
err_t mlvibrosens_set_mode(mlvibrosens_t *ctx, uint8_t mode)
ML Vibro Sens set mode function.
mlvibrosens_read_reg
err_t mlvibrosens_read_reg(mlvibrosens_t *ctx, uint8_t reg, uint8_t *data_out)
ML Vibro Sens read reg function.
mlvibrosens_default_cfg
err_t mlvibrosens_default_cfg(mlvibrosens_t *ctx)
ML Vibro Sens default configuration function.
mlvibrosens_set_odr
err_t mlvibrosens_set_odr(mlvibrosens_t *ctx, uint8_t odr)
ML Vibro Sens set odr function.
mlvibrosens_cfg_t::unb
pin_name_t unb
Definition: mlvibrosens.h:356
mlvibrosens_t::unb
digital_out_t unb
Definition: mlvibrosens.h:331
mlvibrosens_set_fsr
err_t mlvibrosens_set_fsr(mlvibrosens_t *ctx, uint8_t fsr)
ML Vibro Sens set fsr function.
mlvibrosens_balanced_disable
void mlvibrosens_balanced_disable(mlvibrosens_t *ctx)
ML Vibro Sens balanced disable function.
mlvibrosens_t::i2c
i2c_master_t i2c
Definition: mlvibrosens.h:337
mlvibrosens_data_t::x
float x
Definition: mlvibrosens.h:370
mlvibrosens_data_t::temperature
int8_t temperature
Definition: mlvibrosens.h:373
mlvibrosens_unbalanced_disable
void mlvibrosens_unbalanced_disable(mlvibrosens_t *ctx)
ML Vibro Sens unbalanced disable function.
mlvibrosens_cfg_t::scl
pin_name_t scl
Definition: mlvibrosens.h:352
mlvibrosens_write_regs
err_t mlvibrosens_write_regs(mlvibrosens_t *ctx, uint8_t reg, uint8_t *data_in, uint8_t len)
ML Vibro Sens write regs function.
mlvibrosens_get_status
err_t mlvibrosens_get_status(mlvibrosens_t *ctx, uint8_t *status)
ML Vibro Sens get status function.
mlvibrosens_cfg_setup
void mlvibrosens_cfg_setup(mlvibrosens_cfg_t *cfg)
ML Vibro Sens configuration object setup function.
mlvibrosens_read_regs
err_t mlvibrosens_read_regs(mlvibrosens_t *ctx, uint8_t reg, uint8_t *data_out, uint8_t len)
ML Vibro Sens read regs function.
mlvibrosens_cfg_t::bal
pin_name_t bal
Definition: mlvibrosens.h:355
mlvibrosens_data_t::y
float y
Definition: mlvibrosens.h:371
mlvibrosens_t
ML Vibro Sens Click context object.
Definition: mlvibrosens.h:328
mlvibrosens_t::int_pin
digital_in_t int_pin
Definition: mlvibrosens.h:334
mlvibrosens_sw_reset
err_t mlvibrosens_sw_reset(mlvibrosens_t *ctx)
ML Vibro Sens sw reset function.