c3dhall11  2.0.0.0
c3dhall11.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 C3DHALL11_H
29 #define C3DHALL11_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 
59 #define C3DHALL11_REG_DEVICE_CONFIG_1 0x00
60 #define C3DHALL11_REG_DEVICE_CONFIG_2 0x01
61 #define C3DHALL11_REG_SENSOR_CONFIG_1 0x02
62 #define C3DHALL11_REG_SENSOR_CONFIG_2 0x03
63 #define C3DHALL11_REG_X_THR_CONFIG 0x04
64 #define C3DHALL11_REG_Y_THR_CONFIG 0x05
65 #define C3DHALL11_REG_Z_THR_CONFIG 0x06
66 #define C3DHALL11_REG_T_CONFIG 0x07
67 #define C3DHALL11_REG_INT_CONFIG_1 0x08
68 #define C3DHALL11_REG_MAG_GAIN_CONFIG 0x09
69 #define C3DHALL11_REG_MAG_OFFSET_CONFIG_1 0x0A
70 #define C3DHALL11_REG_MAG_OFFSET_CONFIG_2 0x0B
71 #define C3DHALL11_REG_I2C_ADDRESS 0x0C
72 #define C3DHALL11_REG_DEVICE_ID 0x0D
73 #define C3DHALL11_REG_MANUFACTURER_ID_LSB 0x0E
74 #define C3DHALL11_REG_MANUFACTURER_ID_MSB 0x0F
75 #define C3DHALL11_REG_T_MSB_RESULT 0x10
76 #define C3DHALL11_REG_T_LSB_RESULT 0x11
77 #define C3DHALL11_REG_X_MSB_RESULT 0x12
78 #define C3DHALL11_REG_X_LSB_RESULT 0x13
79 #define C3DHALL11_REG_Y_MSB_RESULT 0x14
80 #define C3DHALL11_REG_Y_LSB_RESULT 0x15
81 #define C3DHALL11_REG_Z_MSB_RESULT 0x16
82 #define C3DHALL11_REG_Z_LSB_RESULT 0x17
83 #define C3DHALL11_REG_CONV_STATUS 0x18
84 #define C3DHALL11_REG_ANGLE_RESULT_MSB 0x19
85 #define C3DHALL11_REG_ANGLE_RESULT_LSB 0x1A
86 #define C3DHALL11_REG_MAGNITUDE_RESULT 0x1B
87 #define C3DHALL11_REG_DEVICE_STATUS 0x1C
88  // c3dhall11_reg
90 
105 #define C3DHALL11_CRC_DISABLE 0x00
106 #define C3DHALL11_CRC_ENABLE 0x80
107 #define C3DHALL11_CRC_EN_BIT_MASK 0x80
108 #define C3DHALL11_MAG_TEMPCO_0 0x00
109 #define C3DHALL11_MAG_TEMPCO_0p12 0x20
110 #define C3DHALL11_MAG_TEMPCO_0p2 0x60
111 #define C3DHALL11_MAG_TEMPCO_BIT_MASK 0x60
112 #define C3DHALL11_CONV_AVG_1X 0x00
113 #define C3DHALL11_CONV_AVG_2X 0x04
114 #define C3DHALL11_CONV_AVG_4X 0x08
115 #define C3DHALL11_CONV_AVG_8X 0x0C
116 #define C3DHALL11_CONV_AVG_16X 0x10
117 #define C3DHALL11_CONV_AVG_32X 0x14
118 #define C3DHALL11_CONV_AVG_BIT_MASK 0x1C
119 #define C3DHALL11_I2C_RD_STANDARD 0x00
120 #define C3DHALL11_I2C_RD_1_BYTE_16BIT 0x01
121 #define C3DHALL11_I2C_RD_1_BYTE_8BIT 0x02
122 #define C3DHALL11_I2C_RD_BIT_MASK 0x03
123 
128 #define C3DHALL11_THR_HYST_2S_COMPLEMENT 0x00
129 #define C3DHALL11_THR_HYST_7LSB 0x20
130 #define C3DHALL11_THR_HYST_BIT_MASK 0xE0
131 #define C3DHALL11_LP_LN_ACTUVE_CURRENT_MODE 0x00
132 #define C3DHALL11_LP_LN_NOISE_MODE 0x10
133 #define C3DHALL11_LP_LN_BIT_MASK 0x10
134 #define C3DHALL11_I2C_GLITCH_FILTER_ON 0x00
135 #define C3DHALL11_I2C_GLITCH_FILTER_OFF 0x08
136 #define C3DHALL11_I2C_GLITCH_FILTER_BIT_MASK 0x08
137 #define C3DHALL11_TRIGGER_MODE_CMD 0x00
138 #define C3DHALL11_TRIGGER_MODE_INT 0x04
139 #define C3DHALL11_TRIGGER_MODE_BIT_MASK 0x04
140 #define C3DHALL11_OPERATING_MODE_STANDBY 0x00
141 #define C3DHALL11_OPERATING_MODE_SLEEP 0x01
142 #define C3DHALL11_OPERATING_MODE_CONTINUOUS 0x02
143 #define C3DHALL11_OPERATING_MODE_WS 0x03
144 #define C3DHALL11_OPERATING_MODE_BIT_MASK 0x03
145 
150 #define C3DHALL11_MAG_CH_EN_DISABLE 0x00
151 #define C3DHALL11_MAG_CH_EN_ENABLE_X 0x10
152 #define C3DHALL11_MAG_CH_EN_ENABLE_Y 0x20
153 #define C3DHALL11_MAG_CH_EN_ENABLE_XY 0x30
154 #define C3DHALL11_MAG_CH_EN_ENABLE_Z 0x40
155 #define C3DHALL11_MAG_CH_EN_ENABLE_ZX 0x50
156 #define C3DHALL11_MAG_CH_EN_ENABLE_YZ 0x60
157 #define C3DHALL11_MAG_CH_EN_ENABLE_XYZ 0x70
158 #define C3DHALL11_MAG_CH_EN_ENABLE_XYX 0x80
159 #define C3DHALL11_MAG_CH_EN_ENABLE_YXY 0x90
160 #define C3DHALL11_MAG_CH_EN_ENABLE_YZY 0xA0
161 #define C3DHALL11_MAG_CH_EN_ENABLE_XZX 0xB0
162 #define C3DHALL11_MAG_CH_EN_BIT_MASK 0xF0
163 #define C3DHALL11_SLEEPTIME_1MS 0x00
164 #define C3DHALL11_SLEEPTIME_5MS 0x01
165 #define C3DHALL11_SLEEPTIME_10MS 0x02
166 #define C3DHALL11_SLEEPTIME_15MS 0x03
167 #define C3DHALL11_SLEEPTIME_20MS 0x04
168 #define C3DHALL11_SLEEPTIME_30MS 0x05
169 #define C3DHALL11_SLEEPTIME_50MS 0x06
170 #define C3DHALL11_SLEEPTIME_100MS 0x07
171 #define C3DHALL11_SLEEPTIME_500MS 0x08
172 #define C3DHALL11_SLEEPTIME_1000MS 0x09
173 #define C3DHALL11_SLEEPTIME_2000MS 0x0A
174 #define C3DHALL11_SLEEPTIME_5000MS 0x0B
175 #define C3DHALL11_SLEEPTIME_20000MS 0x0C
176 #define C3DHALL11_SLEEPTIME_BIT_MASK 0x0F
177 
182 #define C3DHALL11_THRX_COUNT_1 0x00
183 #define C3DHALL11_THRX_COUNT_4 0x40
184 #define C3DHALL11_THRX_COUNT_BIT_MASK 0x40
185 #define C3DHALL11_MAG_THR_DIR_ABOVE 0x00
186 #define C3DHALL11_MAG_THR_DIR_BELOW 0x20
187 #define C3DHALL11_MAG_THR_DIR_BIT_MASK 0x20
188 #define C3DHALL11_MAG_GAIN_CH_1 0x00
189 #define C3DHALL11_MAG_GAIN_CH_2 0x10
190 #define C3DHALL11_MAG_GAIN_CH_BIT_MASK 0x10
191 #define C3DHALL11_ANGLE_EN_NO_ANGLE 0x00
192 #define C3DHALL11_ANGLE_EN_XY_ANGLE 0x04
193 #define C3DHALL11_ANGLE_EN_YZ_ANGLE 0x08
194 #define C3DHALL11_ANGLE_EN_XZ_ANGLE 0x0C
195 #define C3DHALL11_ANGLE_EN_BIT_MASK 0x0C
196 #define C3DHALL11_X_Y_RANGE_40mT 0x00
197 #define C3DHALL11_X_Y_RANGE_80mT 0x02
198 #define C3DHALL11_X_Y_RANGE_BIT_MASK 0x02
199 #define C3DHALL11_Z_RANGE_40mT 0x00
200 #define C3DHALL11_Z_RANGE_80mT 0x01
201 #define C3DHALL11_Z_RANGE_BIT_MASK 0x01
202 
207 #define C3DHALL11_T_THR_CONFIG_BIT_MASK 0xFE
208 #define C3DHALL11_T_CH_EN_DISABLE 0x00
209 #define C3DHALL11_T_CH_EN_ENABLE 0x01
210 #define C3DHALL11_T_CH_EN_BIT_MASK 0x01
211 
216 #define C3DHALL11_RSLT_INT_NO_ASSERT 0x00
217 #define C3DHALL11_RSLT_INT_ASSERT 0x80
218 #define C3DHALL11_RSLT_INT_BIT_MASK 0x80
219 #define C3DHALL11_THRSLD_INT_NO_ASSERT 0x00
220 #define C3DHALL11_THRSLD_INT_ASSERT 0x40
221 #define C3DHALL11_THRSLD_INT_BIT_MASK 0x40
222 #define C3DHALL11_INT_STATE_LATCHED 0x00
223 #define C3DHALL11_INT_STATE_PULSE_10US 0x20
224 #define C3DHALL11_INT_STATE_BIT_MASK 0x20
225 #define C3DHALL11_INT_MODE_NO_INT 0x00
226 #define C3DHALL11_INT_MODE_INT 0x04
227 #define C3DHALL11_INT_MODE_INT_WO_I2C_BUSY 0x08
228 #define C3DHALL11_INT_MODE_SCL 0x0C
229 #define C3DHALL11_INT_MODE_SCL_WO_I2C_BUSY 0x10
230 #define C3DHALL11_INT_MODE_BIT_MASK 0x1C
231 #define C3DHALL11_MASK_INTB_ENABLE 0x00
232 #define C3DHALL11_MASK_INTB_DISABLE 0x01
233 #define C3DHALL11_MASK_INTB_BIT_MASK 0x01
234 
239 #define C3DHALL11_DEVICE_ID 0x01
240 #define C3DHALL11_MANUFACTURER_ID_LSB 0x49
241 #define C3DHALL11_MANUFACTURER_ID_MSB 0x54
242 
247 #define C3DHALL11_CONV_STATUS_SET_COUNT 0xE0
248 #define C3DHALL11_CONV_STATUS_DIAG_STATUS 0x02
249 #define C3DHALL11_CONV_STATUS_DATA_READY 0x01
250 
255 #define C3DHALL11_DEVICE_STATUS_INTB_RB 0x10
256 #define C3DHALL11_DEVICE_STATUS_OSC_ER 0x08
257 #define C3DHALL11_DEVICE_STATUS_INT_ER 0x04
258 #define C3DHALL11_DEVICE_STATUS_OTP_CRC_ER 0x02
259 #define C3DHALL11_DEVICE_STATUS_VCC_UV_ER 0x01
260 
265 #define C3DHALL11_TEMP_SENS_T0 25.0
266 #define C3DHALL11_TEMP_ADC_T0 17508
267 #define C3DHALL11_TEMP_ADC_RESOLUTION 60.1
268 #define C3DHALL11_ANGLE_RESOLUTION 16.0
269 #define C3DHALL11_XYZ_SENSITIVITY_40mT 820.0
270 #define C3DHALL11_XYZ_SENSITIVITY_80mT 410.0
271 
277 #define C3DHALL11_DEVICE_ADDRESS 0x35
278  // c3dhall11_set
280 
295 #define C3DHALL11_MAP_MIKROBUS( cfg, mikrobus ) \
296  cfg.scl = MIKROBUS( mikrobus, MIKROBUS_SCL ); \
297  cfg.sda = MIKROBUS( mikrobus, MIKROBUS_SDA ); \
298  cfg.int_pin = MIKROBUS( mikrobus, MIKROBUS_INT )
299  // c3dhall11_map // c3dhall11
302 
307 typedef struct
308 {
309  float x_axis;
310  float y_axis;
311  float z_axis;
312  float angle;
313  float temperature;
314  uint8_t magnitude;
315 
317 
322 typedef struct
323 {
324  // Input pins
325  digital_in_t int_pin;
327  // Modules
328  i2c_master_t i2c;
330  // I2C slave address
331  uint8_t slave_address;
333 } c3dhall11_t;
334 
339 typedef struct
340 {
341  pin_name_t scl;
342  pin_name_t sda;
344  pin_name_t int_pin;
346  uint32_t i2c_speed;
347  uint8_t i2c_address;
350 
355 typedef enum
356 {
358  C3DHALL11_ERROR = -1
359 
361 
378 
393 
407 
422 err_t c3dhall11_generic_write ( c3dhall11_t *ctx, uint8_t reg, uint8_t *data_in, uint8_t len );
423 
438 err_t c3dhall11_generic_read ( c3dhall11_t *ctx, uint8_t reg, uint8_t *data_out, uint8_t len );
439 
452 err_t c3dhall11_write_register ( c3dhall11_t *ctx, uint8_t reg, uint8_t data_in );
453 
466 err_t c3dhall11_read_register ( c3dhall11_t *ctx, uint8_t reg, uint8_t *data_out );
467 
477 
489 
505 
506 #ifdef __cplusplus
507 }
508 #endif
509 #endif // C3DHALL11_H
510  // c3dhall11
512 
513 // ------------------------------------------------------------------------ END
c3dhall11_cfg_t::i2c_speed
uint32_t i2c_speed
Definition: c3dhall11.h:346
c3dhall11_t::slave_address
uint8_t slave_address
Definition: c3dhall11.h:331
c3dhall11_cfg_setup
void c3dhall11_cfg_setup(c3dhall11_cfg_t *cfg)
3D Hall 11 configuration object setup function.
c3dhall11_generic_write
err_t c3dhall11_generic_write(c3dhall11_t *ctx, uint8_t reg, uint8_t *data_in, uint8_t len)
3D Hall 11 I2C writing function.
c3dhall11_default_cfg
err_t c3dhall11_default_cfg(c3dhall11_t *ctx)
3D Hall 11 default configuration function.
c3dhall11_generic_read
err_t c3dhall11_generic_read(c3dhall11_t *ctx, uint8_t reg, uint8_t *data_out, uint8_t len)
3D Hall 11 I2C reading function.
c3dhall11_t::i2c
i2c_master_t i2c
Definition: c3dhall11.h:328
c3dhall11_write_register
err_t c3dhall11_write_register(c3dhall11_t *ctx, uint8_t reg, uint8_t data_in)
3D Hall 11 write register function.
c3dhall11_data_t::angle
float angle
Definition: c3dhall11.h:312
c3dhall11_cfg_t::i2c_address
uint8_t i2c_address
Definition: c3dhall11.h:347
C3DHALL11_ERROR
@ C3DHALL11_ERROR
Definition: c3dhall11.h:358
c3dhall11_t::int_pin
digital_in_t int_pin
Definition: c3dhall11.h:325
c3dhall11_data_t::x_axis
float x_axis
Definition: c3dhall11.h:309
C3DHALL11_OK
@ C3DHALL11_OK
Definition: c3dhall11.h:357
c3dhall11_cfg_t::int_pin
pin_name_t int_pin
Definition: c3dhall11.h:344
c3dhall11_init
err_t c3dhall11_init(c3dhall11_t *ctx, c3dhall11_cfg_t *cfg)
3D Hall 11 initialization function.
c3dhall11_read_register
err_t c3dhall11_read_register(c3dhall11_t *ctx, uint8_t reg, uint8_t *data_out)
3D Hall 11 read register function.
c3dhall11_get_int_pin
uint8_t c3dhall11_get_int_pin(c3dhall11_t *ctx)
3D Hall 11 get int pin function.
c3dhall11_check_communication
err_t c3dhall11_check_communication(c3dhall11_t *ctx)
3D Hall 11 check communication function.
c3dhall11_data_t
3D Hall 11 Click data object.
Definition: c3dhall11.h:308
c3dhall11_cfg_t
3D Hall 11 Click configuration object.
Definition: c3dhall11.h:340
c3dhall11_t
3D Hall 11 Click context object.
Definition: c3dhall11.h:323
c3dhall11_data_t::magnitude
uint8_t magnitude
Definition: c3dhall11.h:314
c3dhall11_data_t::y_axis
float y_axis
Definition: c3dhall11.h:310
c3dhall11_cfg_t::scl
pin_name_t scl
Definition: c3dhall11.h:341
c3dhall11_read_data
err_t c3dhall11_read_data(c3dhall11_t *ctx, c3dhall11_data_t *data_out)
3D Hall 11 read data function.
c3dhall11_return_value_t
c3dhall11_return_value_t
3D Hall 11 Click return value data.
Definition: c3dhall11.h:356
c3dhall11_cfg_t::sda
pin_name_t sda
Definition: c3dhall11.h:342
c3dhall11_data_t::z_axis
float z_axis
Definition: c3dhall11.h:311
c3dhall11_data_t::temperature
float temperature
Definition: c3dhall11.h:313