accel24  2.1.0.0
accel24.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 ACCEL24_H
29 #define ACCEL24_H
30 
31 #ifdef __cplusplus
32 extern "C"{
33 #endif
34 
35 #include "mikrosdk_version.h"
36 
37 #ifdef __GNUC__
38 #if mikroSDK_GET_VERSION < 20800ul
39 #include "rcu_delays.h"
40 #else
41 #include "delays.h"
42 #endif
43 #endif
44 
45 #include "drv_digital_out.h"
46 #include "drv_digital_in.h"
47 #include "drv_i2c_master.h"
48 
69 #define ACCEL24_REG_INT_SRC0 0x00
70 #define ACCEL24_REG_INT_CLR0 0x00
71 #define ACCEL24_REG_INT_SRC1 0x01
72 #define ACCEL24_REG_INT_CLR1 0x01
73 #define ACCEL24_REG_STATUS 0x02
74 #define ACCEL24_REG_XOUT_MSB 0x03
75 #define ACCEL24_REG_XOUT_LSB 0x04
76 #define ACCEL24_REG_YOUT_MSB 0x05
77 #define ACCEL24_REG_YOUT_LSB 0x06
78 #define ACCEL24_REG_ZOUT_MSB 0x07
79 #define ACCEL24_REG_ZOUT_LSB 0x08
80 #define ACCEL24_REG_TOUT 0x09
81 #define ACCEL24_REG_INT_MASK0 0x0A
82 #define ACCEL24_REG_INT_MASK1 0x0B
83 #define ACCEL24_REG_DETECTION 0x0C
84 #define ACCEL24_REG_CONTROL 0x0D
85 #define ACCEL24_REG_WHO_AM_I 0x0F
86  // accel24_reg
88 
103 #define ACCEL24_INT_SRC0_CHORZ 0x80
104 #define ACCEL24_INT_SRC0_CHORXY 0x40
105 #define ACCEL24_INT_SRC0_SHYM 0x08
106 #define ACCEL24_INT_SRC0_SHYP 0x04
107 #define ACCEL24_INT_SRC0_SHXM 0x02
108 #define ACCEL24_INT_SRC0_SHXP 0x01
109 
114 #define ACCEL24_INT_CLR0_ORZC 0x80
115 #define ACCEL24_INT_CLR0_ORXYC 0x40
116 #define ACCEL24_INT_CLR0_SHYMC 0x08
117 #define ACCEL24_INT_CLR0_SHYPC 0x04
118 #define ACCEL24_INT_CLR0_SHXMC 0x02
119 #define ACCEL24_INT_CLR0_SHXPC 0x01
120 #define ACCEL24_INT_CLR0_ALL 0xCF
121 
126 #define ACCEL24_INT_SRC1_TILT 0x80
127 #define ACCEL24_INT_SRC1_ORZ 0x40
128 #define ACCEL24_INT_SRC1_ORXY_X_PLUS 0x00
129 #define ACCEL24_INT_SRC1_ORXY_Y_PLUS 0x10
130 #define ACCEL24_INT_SRC1_ORXY_X_MINUS 0x20
131 #define ACCEL24_INT_SRC1_ORXY_Y_MINUS 0x30
132 #define ACCEL24_INT_SRC1_ORXY_MASK 0x30
133 #define ACCEL24_INT_SRC1_DRDY 0x01
134 
139 #define ACCEL24_INT_CLR1_SW_RST 0x10
140 #define ACCEL24_INT_CLR1_DRDYC 0x01
141 
146 #define ACCEL24_STATUS_ORD 0x10
147 #define ACCEL24_STATUS_ORIZ_MSB 0x08
148 #define ACCEL24_STATUS_ORIZ_LSB 0x04
149 #define ACCEL24_STATUS_ORIXY_MSB 0x02
150 #define ACCEL24_STATUS_ORIXY_LSB 0x01
151 
156 #define ACCEL24_INT_MASK0_ORZE 0x80
157 #define ACCEL24_INT_MASK0_ORXYE 0x40
158 #define ACCEL24_INT_MASK0_SHYME 0x08
159 #define ACCEL24_INT_MASK0_SHYPE 0x04
160 #define ACCEL24_INT_MASK0_SHXME 0x02
161 #define ACCEL24_INT_MASK0_SHXPE 0x01
162 #define ACCEL24_INT_MASK0_NONE 0x00
163 #define ACCEL24_INT_MASK0_ALL 0xCF
164 
169 #define ACCEL24_INT_MASK1_TC 0x80
170 #define ACCEL24_INT_MASK1_DRDYE 0x01
171 
176 #define ACCEL24_DETECTION_SHM 0x80
177 #define ACCEL24_DETECTION_SHTH_0p25G 0x00
178 #define ACCEL24_DETECTION_SHTH_0p5G 0x10
179 #define ACCEL24_DETECTION_SHTH_0p75G 0x20
180 #define ACCEL24_DETECTION_SHTH_1G 0x30
181 #define ACCEL24_DETECTION_SHTH_1p25G 0x40
182 #define ACCEL24_DETECTION_SHTH_1p5G 0x50
183 #define ACCEL24_DETECTION_SHTH_1p75G 0x60
184 #define ACCEL24_DETECTION_SHTH_2G 0x70
185 #define ACCEL24_DETECTION_SHTH_MASK 0x70
186 #define ACCEL24_DETECTION_SHC_8 0x00
187 #define ACCEL24_DETECTION_SHC_16 0x04
188 #define ACCEL24_DETECTION_SHC_32 0x08
189 #define ACCEL24_DETECTION_SHC_64 0x0C
190 #define ACCEL24_DETECTION_SHC_MASK 0x0C
191 #define ACCEL24_DETECTION_ORC_16 0x00
192 #define ACCEL24_DETECTION_ORC_32 0x01
193 #define ACCEL24_DETECTION_ORC_64 0x02
194 #define ACCEL24_DETECTION_ORC_128 0x03
195 #define ACCEL24_DETECTION_ORC_MASK 0x03
196 #define ACCEL24_DETECTION_NONE 0x00
197 
202 #define ACCEL24_CONTROL_ST 0x80
203 #define ACCEL24_CONTROL_FSR_2G 0x00
204 #define ACCEL24_CONTROL_FSR_4G 0x20
205 #define ACCEL24_CONTROL_FSR_8G 0x40
206 #define ACCEL24_CONTROL_FSR_UNDEFINED 0x60
207 #define ACCEL24_CONTROL_FSR_MASK 0x60
208 #define ACCEL24_CONTROL_PD 0x01
209 
214 #define ACCEL24_ACCEL_RESOLUTION 2048.0f
215 #define ACCEL24_TEMP_SENSITIVITY 0.586f
216 #define ACCEL24_TEMP_NOMINAL 25.0f
217 
222 #define ACCEL24_FSR_2G 0
223 #define ACCEL24_FSR_4G 1
224 #define ACCEL24_FSR_8G 2
225 
230 #define ACCEL24_WHO_AM_I 0x05
231 #define ACCEL24_WHO_AM_I_MASK 0x0F
232 
238 #define ACCEL24_DEVICE_ADDRESS 0x15
239  // accel24_set
241 
256 #define ACCEL24_MAP_MIKROBUS( cfg, mikrobus ) \
257  cfg.scl = MIKROBUS( mikrobus, MIKROBUS_SCL ); \
258  cfg.sda = MIKROBUS( mikrobus, MIKROBUS_SDA ); \
259  cfg.int_pin = MIKROBUS( mikrobus, MIKROBUS_INT )
260  // accel24_map // accel24
263 
268 typedef struct
269 {
270  // Input pins
271  digital_in_t int_pin;
273  // Modules
274  i2c_master_t i2c;
276  // I2C slave address
277  uint8_t slave_address;
279  float fsr_sens;
281 } accel24_t;
282 
287 typedef struct
288 {
289  pin_name_t scl;
290  pin_name_t sda;
292  pin_name_t int_pin;
294  uint32_t i2c_speed;
295  uint8_t i2c_address;
297 } accel24_cfg_t;
298 
303 typedef struct
304 {
305  float x;
306  float y;
307  float z;
308  float temperature;
311 
316 typedef enum
317 {
319  ACCEL24_ERROR = -1
320 
322 
339 
353 err_t accel24_init ( accel24_t *ctx, accel24_cfg_t *cfg );
354 
368 
383 err_t accel24_generic_write ( accel24_t *ctx, uint8_t reg, uint8_t *data_in, uint8_t len );
384 
399 err_t accel24_generic_read ( accel24_t *ctx, uint8_t reg, uint8_t *data_out, uint8_t len );
400 
413 err_t accel24_write_register ( accel24_t *ctx, uint8_t reg, uint8_t data_in );
414 
427 err_t accel24_read_register ( accel24_t *ctx, uint8_t reg, uint8_t *data_out );
428 
440 
450 
462 
476 err_t accel24_set_full_scale_range ( accel24_t *ctx, uint8_t fsr );
477 
491 err_t accel24_read_data ( accel24_t *ctx, accel24_data_t *data_out );
492 
493 #ifdef __cplusplus
494 }
495 #endif
496 #endif // ACCEL24_H
497  // accel24
499 
500 // ------------------------------------------------------------------------ END
accel24_default_cfg
err_t accel24_default_cfg(accel24_t *ctx)
Accel 24 default configuration function.
accel24_return_value_t
accel24_return_value_t
Accel 24 Click return value data.
Definition: accel24.h:317
accel24_cfg_setup
void accel24_cfg_setup(accel24_cfg_t *cfg)
Accel 24 configuration object setup function.
ACCEL24_ERROR
@ ACCEL24_ERROR
Definition: accel24.h:319
accel24_t
Accel 24 Click context object.
Definition: accel24.h:269
accel24_check_communication
err_t accel24_check_communication(accel24_t *ctx)
Accel 24 check communication function.
accel24_data_t::z
float z
Definition: accel24.h:307
accel24_soft_reset
err_t accel24_soft_reset(accel24_t *ctx)
Accel 24 soft reset function.
accel24_read_data
err_t accel24_read_data(accel24_t *ctx, accel24_data_t *data_out)
Accel 24 read data function.
accel24_get_int_pin
uint8_t accel24_get_int_pin(accel24_t *ctx)
Accel 24 get int pin function.
accel24_cfg_t::sda
pin_name_t sda
Definition: accel24.h:290
accel24_cfg_t
Accel 24 Click configuration object.
Definition: accel24.h:288
accel24_data_t::x
float x
Definition: accel24.h:305
accel24_cfg_t::i2c_address
uint8_t i2c_address
Definition: accel24.h:295
accel24_init
err_t accel24_init(accel24_t *ctx, accel24_cfg_t *cfg)
Accel 24 initialization function.
accel24_cfg_t::i2c_speed
uint32_t i2c_speed
Definition: accel24.h:294
accel24_t::slave_address
uint8_t slave_address
Definition: accel24.h:277
accel24_t::int_pin
digital_in_t int_pin
Definition: accel24.h:271
accel24_cfg_t::scl
pin_name_t scl
Definition: accel24.h:289
accel24_data_t
Accel 24 Click data structure.
Definition: accel24.h:304
accel24_set_full_scale_range
err_t accel24_set_full_scale_range(accel24_t *ctx, uint8_t fsr)
Accel 24 set full scale range function.
accel24_read_register
err_t accel24_read_register(accel24_t *ctx, uint8_t reg, uint8_t *data_out)
Accel 24 read register function.
accel24_t::fsr_sens
float fsr_sens
Definition: accel24.h:279
accel24_write_register
err_t accel24_write_register(accel24_t *ctx, uint8_t reg, uint8_t data_in)
Accel 24 write register function.
accel24_generic_read
err_t accel24_generic_read(accel24_t *ctx, uint8_t reg, uint8_t *data_out, uint8_t len)
Accel 24 I2C reading function.
accel24_cfg_t::int_pin
pin_name_t int_pin
Definition: accel24.h:292
accel24_t::i2c
i2c_master_t i2c
Definition: accel24.h:274
ACCEL24_OK
@ ACCEL24_OK
Definition: accel24.h:318
accel24_data_t::y
float y
Definition: accel24.h:306
accel24_data_t::temperature
float temperature
Definition: accel24.h:308
accel24_generic_write
err_t accel24_generic_write(accel24_t *ctx, uint8_t reg, uint8_t *data_in, uint8_t len)
Accel 24 I2C writing function.