proximity13  2.0.0.0
proximity13.h
Go to the documentation of this file.
1 /*
2  * MikroSDK - MikroE Software Development Kit
3  * Copyright© 2020 MikroElektronika d.o.o.
4  *
5  * Permission is hereby granted, free of charge, to any person
6  * obtaining a copy of this software and associated documentation
7  * files (the "Software"), to deal in the Software without restriction,
8  * including without limitation the rights to use, copy, modify, merge,
9  * publish, distribute, sublicense, and/or sell copies of the Software,
10  * and to permit persons to whom the Software is furnished to do so,
11  * subject to the following conditions:
12  *
13  * The above copyright notice and this permission notice shall be
14  * included in all copies or substantial portions of the Software.
15  *
16  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17  * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
19  * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
20  * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
21  * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE
22  * OR OTHER DEALINGS IN THE SOFTWARE.
23  */
24 
33 // ----------------------------------------------------------------------------
34 
35 #ifndef PROXIMITY13_H
36 #define PROXIMITY13_H
37 
38 #include "mikrosdk_version.h"
39 
40 #ifdef __GNUC__
41 #if mikroSDK_GET_VERSION < 20800ul
42 #include "rcu_delays.h"
43 #else
44 #include "delays.h"
45 #endif
46 #endif
47 
48 #include "drv_digital_in.h"
49 #include "drv_i2c_master.h"
50 
51 
52 // -------------------------------------------------------------- PUBLIC MACROS
62 #define PROXIMITY13_MAP_MIKROBUS( cfg, mikrobus ) \
63  cfg.scl = MIKROBUS( mikrobus, MIKROBUS_SCL ); \
64  cfg.sda = MIKROBUS( mikrobus, MIKROBUS_SDA ); \
65  cfg.int_pin = MIKROBUS( mikrobus, MIKROBUS_INT )
66 
72 #define PROXIMITY13_RETVAL uint8_t
73 
74 #define PROXIMITY13_OK 0x00
75 #define PROXIMITY13_INIT_ERROR 0xFF
76 #define PROXIMITY13_ERROR 0xEE
77 
83 #define PROXIMITY13_SLAVE_ADDRESS 0x53
84 
90 #define PROXIMITY13_REG_PART_ID 0x00
91 #define PROXIMITY13_REG_HW_ID 0x01
92 #define PROXIMITY13_REG_REV_ID 0x02
93 #define PROXIMITY13_REG_INFO_0 0x03
94 #define PROXIMITY13_REG_INFO_1 0x04
95 #define PROXIMITY13_REG_HOSTIN_0 0x0A
96 #define PROXIMITY13_REG_COMMAND 0x0B
97 #define PROXIMITY13_REG_IRQ_ENABLE 0x0F
98 #define PROXIMITY13_REG_RESPONSE_1 0x10
99 #define PROXIMITY13_REG_RESPONSE_0 0x11
100 #define PROXIMITY13_REG_IRQ_STATUS 0x12
101 #define PROXIMITY13_REG_HOSTOUT_0 0x13
102 #define PROXIMITY13_REG_HOSTOUT_1 0x14
103 #define PROXIMITY13_REG_HOSTOUT_2 0x15
104 #define PROXIMITY13_REG_HOSTOUT_3 0x16
105 #define PROXIMITY13_REG_HOSTOUT_4 0x17
106 #define PROXIMITY13_REG_HOSTOUT_5 0x18
107 #define PROXIMITY13_REG_HOSTOUT_6 0x19
108 #define PROXIMITY13_REG_HOSTOUT_7 0x1A
109 #define PROXIMITY13_REG_HOSTOUT_8 0x1B
110 #define PROXIMITY13_REG_HOSTOUT_9 0x1C
111 #define PROXIMITY13_REG_HOSTOUT_10 0x1D
112 #define PROXIMITY13_REG_HOSTOUT_11 0x1E
113 #define PROXIMITY13_REG_HOSTOUT_12 0x1F
114 #define PROXIMITY13_REG_HOSTOUT_13 0x20
115 #define PROXIMITY13_REG_HOSTOUT_14 0x21
116 #define PROXIMITY13_REG_HOSTOUT_15 0x22
117 #define PROXIMITY13_REG_HOSTOUT_16 0x23
118 #define PROXIMITY13_REG_HOSTOUT_17 0x24
119 #define PROXIMITY13_REG_HOSTOUT_18 0x25
120 #define PROXIMITY13_REG_HOSTOUT_19 0x26
121 #define PROXIMITY13_REG_HOSTOUT_20 0x27
122 #define PROXIMITY13_REG_HOSTOUT_21 0x28
123 #define PROXIMITY13_REG_HOSTOUT_22 0x29
124 #define PROXIMITY13_REG_HOSTOUT_23 0x2A
125 #define PROXIMITY13_REG_HOSTOUT_24 0x2B
126 #define PROXIMITY13_REG_HOSTOUT_25 0x2C
127 
133 #define PROXIMITY13_PARAMETER_I2C_ADDR 0x00
134 #define PROXIMITY13_PARAMETER_CHAN_LIST 0x01
135 #define PROXIMITY13_PARAMETER_ADCCONFIG_0 0x02
136 #define PROXIMITY13_PARAMETER_ADCSENS_0 0x03
137 #define PROXIMITY13_PARAMETER_ADCPOST_0 0x04
138 #define PROXIMITY13_PARAMETER_MEASCONFIG_0 0x05
139 #define PROXIMITY13_PARAMETER_ADCCONFIG_1 0x06
140 #define PROXIMITY13_PARAMETER_ADCSENS_1 0x07
141 #define PROXIMITY13_PARAMETER_ADCPOST_1 0x08
142 #define PROXIMITY13_PARAMETER_MEASCONFIG_1 0x09
143 #define PROXIMITY13_PARAMETER_ADCCONFIG_2 0x0A
144 #define PROXIMITY13_PARAMETER_ADCSENS_2 0x0B
145 #define PROXIMITY13_PARAMETER_ADCPOST_2 0x0C
146 #define PROXIMITY13_PARAMETER_MEASCONFIG_2 0x0D
147 #define PROXIMITY13_PARAMETER_ADCCONFIG_3 0x0E
148 #define PROXIMITY13_PARAMETER_ADCSENS_3 0x0F
149 #define PROXIMITY13_PARAMETER_ADCPOST_3 0x10
150 #define PROXIMITY13_PARAMETER_MEASCONFIG_3 0x11
151 #define PROXIMITY13_PARAMETER_ADCCONFIG_4 0x12
152 #define PROXIMITY13_PARAMETER_ADCSENS_4 0x13
153 #define PROXIMITY13_PARAMETER_ADCPOST_4 0x14
154 #define PROXIMITY13_PARAMETER_MEASCONFIG_4 0x15
155 #define PROXIMITY13_PARAMETER_ADCCONFIG_5 0x16
156 #define PROXIMITY13_PARAMETER_ADCSENS_5 0x17
157 #define PROXIMITY13_PARAMETER_ADCPOST_5 0x18
158 #define PROXIMITY13_PARAMETER_MEASCONFIG_5 0x19
159 #define PROXIMITY13_PARAMETER_MEASRATE_H 0x1A
160 #define PROXIMITY13_PARAMETER_MEASRATE_L 0x1B
161 #define PROXIMITY13_PARAMETER_MEASCOUNT_0 0x1C
162 #define PROXIMITY13_PARAMETER_MEASCOUNT_1 0x1D
163 #define PROXIMITY13_PARAMETER_MEASCOUNT_2 0x1E
164 #define PROXIMITY13_PARAMETER_LED1_A 0x1F
165 #define PROXIMITY13_PARAMETER_LED1_B 0x20
166 #define PROXIMITY13_PARAMETER_LED2_A 0x21
167 #define PROXIMITY13_PARAMETER_LED2_B 0x22
168 #define PROXIMITY13_PARAMETER_LED3_A 0x23
169 #define PROXIMITY13_PARAMETER_LED3_B 0x24
170 #define PROXIMITY13_PARAMETER_THRESHOLD0_H 0x25
171 #define PROXIMITY13_PARAMETER_THRESHOLD0_L 0x26
172 #define PROXIMITY13_PARAMETER_THRESHOLD1_H 0x27
173 #define PROXIMITY13_PARAMETER_THRESHOLD1_L 0x28
174 #define PROXIMITY13_PARAMETER_THRESHOLD2_H 0x29
175 #define PROXIMITY13_PARAMETER_THRESHOLD2_L 0x2A
176 #define PROXIMITY13_PARAMETER_BURST 0x2B
177 
183 #define PROXIMITY13_CMD_RESET_CTR 0x00
184 #define PROXIMITY13_CMD_RESET_SW 0x01
185 #define PROXIMITY13_CMD_FORCE 0x11
186 #define PROXIMITY13_CMD_PAUSE 0x12
187 #define PROXIMITY13_CMD_START 0x13
188 
194 #define PROXIMITY13_DEV_ID_VAL 0x53
195 #define PROXIMITY13_HW_ID_VAL 0x01
196 #define PROXIMITY13_REV_ID_VAL 0x11
197 
203 #define PROXIMITY13_ADC_CFG_RATE_48p8_US 0x00
204 #define PROXIMITY13_ADC_CFG_RATE_97p6_US 0x20
205 #define PROXIMITY13_ADC_CFG_RATE_195_US 0x40
206 #define PROXIMITY13_ADC_CFG_RATE_24p4_US 0x60
207 #define PROXIMITY13_ADC_CFG_MUX_SMALL_IR 0x00
208 #define PROXIMITY13_ADC_CFG_MUX_MEDIUM_IR 0x01
209 #define PROXIMITY13_ADC_CFG_MUX_LARGE_IR 0x02
210 #define PROXIMITY13_ADC_CFG_MUX_WHITE 0x0B
211 #define PROXIMITY13_ADC_CFG_MUX_LARGE_WHITE 0x0D
212 
218 #define PROXIMITY13_ADC_SENS_SW_GAIN_1 0x00
219 #define PROXIMITY13_ADC_SENS_SW_GAIN_2 0x10
220 #define PROXIMITY13_ADC_SENS_SW_GAIN_4 0x20
221 #define PROXIMITY13_ADC_SENS_SW_GAIN_8 0x30
222 #define PROXIMITY13_ADC_SENS_SW_GAIN_16 0x40
223 #define PROXIMITY13_ADC_SENS_SW_GAIN_32 0x50
224 #define PROXIMITY13_ADC_SENS_SW_GAIN_64 0x60
225 #define PROXIMITY13_ADC_SENS_SW_GAIN_128 0x70
226 #define PROXIMITY13_ADC_SENS_HW_GAIN_MIN_24p4_US 0x00
227 #define PROXIMITY13_ADC_SENS_HW_GAIN_MAX_50_MS 0x0B
228 
234 #define PROXIMITY13_ADC_POST_RESOLUTION_16 0x00
235 #define PROXIMITY13_ADC_POST_RESOLUTION_24 0x40
236 #define PROXIMITY13_ADC_POST_INT_MORE_THEN_THRESH 0x00
237 #define PROXIMITY13_ADC_POST_INT_LESS_THEN_THRESH 0x04
238 #define PROXIMITY13_ADC_POST_INT_NO_TRESH 0x00
239 #define PROXIMITY13_ADC_POST_INT_THRESHOLD_0_EN 0x01
240 #define PROXIMITY13_ADC_POST_INT_THRESHOLD_1_EN 0x02
241 #define PROXIMITY13_ADC_POST_INT_BETWEEN_TRESHOLD 0x03
242 
248 #define PROXIMITY13_MEAS_CFG_BURST_ONLY 0x00
249 #define PROXIMITY13_MEAS_CFG_MEASCOUNT0 0x40
250 #define PROXIMITY13_MEAS_CFG_MEASCOUNT1 0x80
251 #define PROXIMITY13_MEAS_CFG_MEASCOUNT2 0xC0
252 #define PROXIMITY13_MEAS_CFG_NOMINAL_LED 0x00
253 #define PROXIMITY13_MEAS_CFG_LED_UNDEFINED 0x10
254 #define PROXIMITY13_MEAS_CFG_LED_INC_9_PCT 0x20
255 #define PROXIMITY13_MEAS_CFG_LED_INC_10_PCT 0x30
256 #define PROXIMITY13_MEAS_CFG_LED_A 0x00
257 #define PROXIMITY13_MEAS_CFG_LED_B 0x08
258 #define PROXIMITY13_MEAS_CFG_LED_2 0x04
259 #define PROXIMITY13_MEAS_CFG_LED_3 0x02
260 #define PROXIMITY13_MEAS_CFG_LED_1 0x01
261 
267 #define PROXIMITY13_PIN_HIGH 1
268 #define PROXIMITY13_PIN_LOW 0
269 
275 #define PROXIMITY13_CHANNEL_0 0x01
276 #define PROXIMITY13_CHANNEL_1 0x02
277 #define PROXIMITY13_CHANNEL_2 0x04
278 #define PROXIMITY13_CHANNEL_3 0x08
279 #define PROXIMITY13_CHANNEL_4 0x10
280 #define PROXIMITY13_CHANNEL_5 0x20
281  // End group macro
284 // --------------------------------------------------------------- PUBLIC TYPES
293 typedef struct
294 {
295  // Input pins
296 
297  digital_in_t int_pin;
298 
299  // Modules
300 
301  i2c_master_t i2c;
302 
303  // ctx variable
304 
305  uint8_t slave_address;
306 
307 } proximity13_t;
308 
312 typedef struct
313 {
314  // Communication gpio pins
315 
316  pin_name_t scl;
317  pin_name_t sda;
318 
319  // Additional gpio pins
320 
321  pin_name_t int_pin;
322 
323  // static variable
324 
325  uint32_t i2c_speed;
326  uint8_t i2c_address;
327 
329 
333 typedef struct
334 {
335  uint8_t adc_cfg;
336  uint8_t adc_sens;
337  uint8_t adc_post;
338  uint8_t measure_cfg;
340 
344 typedef struct
345 {
346  uint32_t channel_0;
347  uint32_t channel_1;
348  uint32_t channel_2;
349  uint32_t channel_3;
350  uint32_t channel_4;
351  uint32_t channel_5;
353  // End types group
355 
356 // ----------------------------------------------- PUBLIC FUNCTION DECLARATIONS
357 
363 #ifdef __cplusplus
364 extern "C"{
365 #endif
366 
376 
386 
395 
405 void proximity13_generic_write ( proximity13_t *ctx, uint8_t reg_adr, uint8_t write_data );
406 
417 uint8_t proximity13_generic_read ( proximity13_t *ctx, uint8_t reg_adr );
418 
429 
440 uint8_t proximity13_send_command ( proximity13_t *ctx, uint8_t cmd_val );
441 
453 uint8_t proximity13_set_parameter ( proximity13_t *ctx, uint8_t param, uint8_t cmd_val );
454 
466 uint8_t porximity13_config_channel ( proximity13_t *ctx, uint8_t chn_num, proximity13_config_t cfg_val );
467 
478 
488 
489 #ifdef __cplusplus
490 }
491 #endif
492 #endif // _PROXIMITY13_H_
493  // End public_function group
496 
497 // ------------------------------------------------------------------------- END
proximity13_t::int_pin
digital_in_t int_pin
Definition: proximity13.h:297
proximity13_chn_val_t::channel_2
uint32_t channel_2
Definition: proximity13.h:348
proximity13_set_parameter
uint8_t proximity13_set_parameter(proximity13_t *ctx, uint8_t param, uint8_t cmd_val)
Sets parameter.
proximity13_t::slave_address
uint8_t slave_address
Definition: proximity13.h:305
proximity13_read_channels
void proximity13_read_channels(proximity13_t *ctx, proximity13_chn_val_t *chn_val)
Reads all enabled channels.
porximity13_config_channel
uint8_t porximity13_config_channel(proximity13_t *ctx, uint8_t chn_num, proximity13_config_t cfg_val)
Configuration of channel.
proximity13_chn_val_t
Structure for reading values of channels.
Definition: proximity13.h:345
proximity13_cfg_t::sda
pin_name_t sda
Definition: proximity13.h:317
proximity13_default_cfg
void proximity13_default_cfg(proximity13_t *ctx)
Click Default Configuration function.
proximity13_config_t::adc_sens
uint8_t adc_sens
Definition: proximity13.h:336
proximity13_chn_val_t::channel_3
uint32_t channel_3
Definition: proximity13.h:349
proximity13_cfg_t
Click configuration structure definition.
Definition: proximity13.h:313
proximity13_send_command
uint8_t proximity13_send_command(proximity13_t *ctx, uint8_t cmd_val)
Sends command to command register.
proximity13_config_t::adc_post
uint8_t adc_post
Definition: proximity13.h:337
proximity13_init
PROXIMITY13_RETVAL proximity13_init(proximity13_t *ctx, proximity13_cfg_t *cfg)
Initialization function.
proximity13_config_t::adc_cfg
uint8_t adc_cfg
Definition: proximity13.h:335
proximity13_chn_val_t::channel_4
uint32_t channel_4
Definition: proximity13.h:350
proximity13_chn_val_t::channel_5
uint32_t channel_5
Definition: proximity13.h:351
porximity13_check_id
uint8_t porximity13_check_id(proximity13_t *ctx)
Checks id of the device.
proximity13_chn_val_t::channel_1
uint32_t channel_1
Definition: proximity13.h:347
PROXIMITY13_RETVAL
#define PROXIMITY13_RETVAL
Definition: proximity13.h:72
proximity13_t::i2c
i2c_master_t i2c
Definition: proximity13.h:301
proximity13_cfg_t::int_pin
pin_name_t int_pin
Definition: proximity13.h:321
proximity13_get_int_pin_status
uint8_t proximity13_get_int_pin_status(proximity13_t *ctx)
Checks status of int pin.
proximity13_cfg_t::i2c_speed
uint32_t i2c_speed
Definition: proximity13.h:325
proximity13_t
Click ctx object definition.
Definition: proximity13.h:294
proximity13_generic_write
void proximity13_generic_write(proximity13_t *ctx, uint8_t reg_adr, uint8_t write_data)
Generic write function.
proximity13_chn_val_t::channel_0
uint32_t channel_0
Definition: proximity13.h:346
proximity13_config_t
Structure for configurating device.
Definition: proximity13.h:334
proximity13_config_t::measure_cfg
uint8_t measure_cfg
Definition: proximity13.h:338
proximity13_cfg_t::i2c_address
uint8_t i2c_address
Definition: proximity13.h:326
proximity13_cfg_setup
void proximity13_cfg_setup(proximity13_cfg_t *cfg)
Config Object Initialization function.
proximity13_generic_read
uint8_t proximity13_generic_read(proximity13_t *ctx, uint8_t reg_adr)
Generic read function.
proximity13_cfg_t::scl
pin_name_t scl
Definition: proximity13.h:316