proximity20  2.1.0.0
proximity20.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 PROXIMITY20_H
29 #define PROXIMITY20_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 PROXIMITY20_REG_PS_CONF1 0x00
74 #define PROXIMITY20_REG_PS_CONF2 0x01
75 #define PROXIMITY20_REG_PS_CONF3 0x02
76 #define PROXIMITY20_REG_PS_THDL 0x03
77 #define PROXIMITY20_REG_PS_THDH 0x04
78 #define PROXIMITY20_REG_PS_CANC 0x05
79 #define PROXIMITY20_REG_PS_DATA 0xF8
80 #define PROXIMITY20_REG_INT_FLAG 0xF9
81 #define PROXIMITY20_REG_ID 0xFA
82  // proximity20_reg
84 
99 #define PROXIMITY20_PS_CONF1_PS_HD_DIS 0x0000
100 #define PROXIMITY20_PS_CONF1_PS_HD_EN 0x4000
101 #define PROXIMITY20_PS_CONF1_PS_HD_MASK 0x4000
102 #define PROXIMITY20_PS_CONF1_PS_SP_INT_DIS 0x0000
103 #define PROXIMITY20_PS_CONF1_PS_SP_INT_EN 0x2000
104 #define PROXIMITY20_PS_CONF1_PS_SP_INT_MASK 0x2000
105 #define PROXIMITY20_PS_CONF1_PS_SMART_PERS_DIS 0x0000
106 #define PROXIMITY20_PS_CONF1_PS_SMART_PERS_EN 0x1000
107 #define PROXIMITY20_PS_CONF1_PS_SMART_PERS_MASK 0x1000
108 #define PROXIMITY20_PS_CONF1_PS_PERS_1 0x0000
109 #define PROXIMITY20_PS_CONF1_PS_PERS_2 0x0400
110 #define PROXIMITY20_PS_CONF1_PS_PERS_3 0x0800
111 #define PROXIMITY20_PS_CONF1_PS_PERS_4 0x0C00
112 #define PROXIMITY20_PS_CONF1_PS_PERS_MASK 0x0C00
113 #define PROXIMITY20_PS_CONF1_PS_INT_DIS 0x0000
114 #define PROXIMITY20_PS_CONF1_PS_INT_LOGIC_H 0x0100
115 #define PROXIMITY20_PS_CONF1_PS_INT_TRIG_HL 0x0300
116 #define PROXIMITY20_PS_CONF1_PS_INT_MASK 0x0300
117 #define PROXIMITY20_PS_CONF1_PS_CAL_DIS 0x0000
118 #define PROXIMITY20_PS_CONF1_PS_CAL_EN 0x0080
119 #define PROXIMITY20_PS_CONF1_PS_CAL_MASK 0x0080
120 #define PROXIMITY20_PS_CONF1_PS_ON_DIS 0x0000
121 #define PROXIMITY20_PS_CONF1_PS_ON_EN 0x0001
122 #define PROXIMITY20_PS_CONF1_PS_ON_MASK 0x0001
123 
128 #define PROXIMITY20_PS_CONF2_PS_SENS_NORMAL 0x0000
129 #define PROXIMITY20_PS_CONF2_PS_SENS_HIGH 0x2000
130 #define PROXIMITY20_PS_CONF2_PS_SENS_MASK 0x2000
131 #define PROXIMITY20_PS_CONF2_PS_OFFSET_DIS 0x0000
132 #define PROXIMITY20_PS_CONF2_PS_OFFSET_EN 0x1000
133 #define PROXIMITY20_PS_CONF2_PS_OFFSET_MASK 0x1000
134 #define PROXIMITY20_PS_CONF2_PS_CURRENT_7_MA 0x0000
135 #define PROXIMITY20_PS_CONF2_PS_CURRENT_9_MA 0x0100
136 #define PROXIMITY20_PS_CONF2_PS_CURRENT_11_MA 0x0200
137 #define PROXIMITY20_PS_CONF2_PS_CURRENT_12_MA 0x0300
138 #define PROXIMITY20_PS_CONF2_PS_CURRENT_15_MA 0x0400
139 #define PROXIMITY20_PS_CONF2_PS_CURRENT_17_MA 0x0500
140 #define PROXIMITY20_PS_CONF2_PS_CURRENT_19_MA 0x0600
141 #define PROXIMITY20_PS_CONF2_PS_CURRENT_20_MA 0x0700
142 #define PROXIMITY20_PS_CONF2_PS_CURRENT_MASK 0x0700
143 #define PROXIMITY20_PS_CONF2_PS_PERIOD_50_MS 0x0000
144 #define PROXIMITY20_PS_CONF2_PS_PERIOD_100_MS 0x0040
145 #define PROXIMITY20_PS_CONF2_PS_PERIOD_200_MS 0x0080
146 #define PROXIMITY20_PS_CONF2_PS_PERIOD_400_MS 0x00C0
147 #define PROXIMITY20_PS_CONF2_PS_PERIOD_MASK 0x00C0
148 #define PROXIMITY20_PS_CONF2_PS_IT_1T 0x0000
149 #define PROXIMITY20_PS_CONF2_PS_IT_2T 0x0010
150 #define PROXIMITY20_PS_CONF2_PS_IT_4T 0x0020
151 #define PROXIMITY20_PS_CONF2_PS_IT_8T 0x0030
152 #define PROXIMITY20_PS_CONF2_PS_IT_MASK 0x0030
153 #define PROXIMITY20_PS_CONF2_PS_MPS_1 0x0000
154 #define PROXIMITY20_PS_CONF2_PS_MPS_2 0x0004
155 #define PROXIMITY20_PS_CONF2_PS_MPS_4 0x0008
156 #define PROXIMITY20_PS_CONF2_PS_MPS_8 0x000C
157 #define PROXIMITY20_PS_CONF2_PS_MPS_MASK 0x000C
158 #define PROXIMITY20_PS_CONF2_PS_ITB_25_US 0x0000
159 #define PROXIMITY20_PS_CONF2_PS_ITB_50_US 0x0002
160 #define PROXIMITY20_PS_CONF2_PS_ITB_MASK 0x0002
161 #define PROXIMITY20_PS_CONF2_PS_GAIN_X1 0x0000
162 #define PROXIMITY20_PS_CONF2_PS_GAIN_X2 0x0001
163 #define PROXIMITY20_PS_CONF2_PS_GAIN_MASK 0x0001
164 
169 #define PROXIMITY20_PS_CONF3_PS_SPERIOD_DIS 0x0000
170 #define PROXIMITY20_PS_CONF3_PS_SPERIOD_6_25_MS 0x4000
171 #define PROXIMITY20_PS_CONF3_PS_SPERIOD_12_5_MS 0x8000
172 #define PROXIMITY20_PS_CONF3_PS_SPERIOD_25_MS 0xC000
173 #define PROXIMITY20_PS_CONF3_PS_SPERIOD_MASK 0xC000
174 #define PROXIMITY20_PS_CONF3_PS_SC_DIS 0x0000
175 #define PROXIMITY20_PS_CONF3_PS_SC_EN 0x1C00
176 #define PROXIMITY20_PS_CONF3_PS_SC_MASK 0x1C00
177 #define PROXIMITY20_PS_CONF3_PS_TRIG_OFF 0x0000
178 #define PROXIMITY20_PS_CONF3_PS_TRIG_ON 0x0020
179 #define PROXIMITY20_PS_CONF3_PS_TRIG_MASK 0x0020
180 #define PROXIMITY20_PS_CONF3_PS_MODE_AUTO 0x0000
181 #define PROXIMITY20_PS_CONF3_PS_MODE_FORCE 0x0010
182 #define PROXIMITY20_PS_CONF3_PS_MODE_MASK 0x0010
183 
188 #define PROXIMITY20_INT_FLAG_PS_SPFLAG 0x1000
189 #define PROXIMITY20_INT_FLAG_PS_IF_CLOSE 0x0200
190 #define PROXIMITY20_INT_FLAG_PS_IF_AWAY 0x0100
191 
196 #define PROXIMITY20_DEVICE_ID_U2 0x0129
197 #define PROXIMITY20_DEVICE_ID_U3 0x0128
198 
204 #define PROXIMITY20_DEVICE_ADDRESS_U2 0x51
205 #define PROXIMITY20_DEVICE_ADDRESS_U3 0x60
206  // proximity20_set
208 
223 #define PROXIMITY20_MAP_MIKROBUS( cfg, mikrobus ) \
224  cfg.scl = MIKROBUS( mikrobus, MIKROBUS_SCL ); \
225  cfg.sda = MIKROBUS( mikrobus, MIKROBUS_SDA ); \
226  cfg.en = MIKROBUS( mikrobus, MIKROBUS_RST ); \
227  cfg.int_pin = MIKROBUS( mikrobus, MIKROBUS_INT )
228  // proximity20_map // proximity20
231 
236 typedef struct
237 {
238  // Output pins
239  digital_out_t en;
241  // Input pins
242  digital_in_t int_pin;
244  // Modules
245  i2c_master_t i2c;
247  // I2C slave address
248  uint8_t slave_address;
250 } proximity20_t;
251 
256 typedef struct
257 {
258  pin_name_t scl;
259  pin_name_t sda;
261  pin_name_t en;
262  pin_name_t int_pin;
264  uint32_t i2c_speed;
265  uint8_t i2c_address;
268 
273 typedef enum
274 {
276  PROXIMITY20_ERROR = -1
277 
279 
296 
311 
325 
338 err_t proximity20_write_register ( proximity20_t *ctx, uint8_t reg, uint16_t data_in );
339 
352 err_t proximity20_read_register ( proximity20_t *ctx, uint8_t reg, uint16_t *data_out );
353 
365 err_t proximity20_set_device_address ( proximity20_t *ctx, uint8_t dev_addr );
366 
379 
392 err_t proximity20_read_proximity ( proximity20_t *ctx, uint16_t *ps_data_u2, uint16_t *ps_data_u3 );
393 
403 
413 
423 
424 #ifdef __cplusplus
425 }
426 #endif
427 #endif // PROXIMITY20_H
428  // proximity20
430 
431 // ------------------------------------------------------------------------ END
proximity20_t::en
digital_out_t en
Definition: proximity20.h:239
proximity20_init
err_t proximity20_init(proximity20_t *ctx, proximity20_cfg_t *cfg)
Proximity 20 initialization function.
proximity20_t::i2c
i2c_master_t i2c
Definition: proximity20.h:245
PROXIMITY20_ERROR
@ PROXIMITY20_ERROR
Definition: proximity20.h:276
proximity20_enable_device
void proximity20_enable_device(proximity20_t *ctx)
Proximity 20 enable device function.
proximity20_cfg_t::i2c_address
uint8_t i2c_address
Definition: proximity20.h:265
proximity20_t
Proximity 20 Click context object.
Definition: proximity20.h:237
proximity20_disable_device
void proximity20_disable_device(proximity20_t *ctx)
Proximity 20 disable device function.
proximity20_set_device_address
err_t proximity20_set_device_address(proximity20_t *ctx, uint8_t dev_addr)
Proximity 20 set device address function.
proximity20_read_register
err_t proximity20_read_register(proximity20_t *ctx, uint8_t reg, uint16_t *data_out)
Proximity 20 read register function.
proximity20_cfg_t
Proximity 20 Click configuration object.
Definition: proximity20.h:257
proximity20_t::int_pin
digital_in_t int_pin
Definition: proximity20.h:242
proximity20_cfg_t::i2c_speed
uint32_t i2c_speed
Definition: proximity20.h:264
proximity20_cfg_setup
void proximity20_cfg_setup(proximity20_cfg_t *cfg)
Proximity 20 configuration object setup function.
proximity20_write_register
err_t proximity20_write_register(proximity20_t *ctx, uint8_t reg, uint16_t data_in)
Proximity 20 write register function.
proximity20_cfg_t::en
pin_name_t en
Definition: proximity20.h:261
proximity20_t::slave_address
uint8_t slave_address
Definition: proximity20.h:248
proximity20_get_int_pin
uint8_t proximity20_get_int_pin(proximity20_t *ctx)
Proximity 20 get int pin function.
proximity20_cfg_t::sda
pin_name_t sda
Definition: proximity20.h:259
proximity20_return_value_t
proximity20_return_value_t
Proximity 20 Click return value data.
Definition: proximity20.h:274
proximity20_read_proximity
err_t proximity20_read_proximity(proximity20_t *ctx, uint16_t *ps_data_u2, uint16_t *ps_data_u3)
Proximity 20 read proximity function.
proximity20_cfg_t::scl
pin_name_t scl
Definition: proximity20.h:258
proximity20_check_communication
err_t proximity20_check_communication(proximity20_t *ctx)
Proximity 20 check communication function.
PROXIMITY20_OK
@ PROXIMITY20_OK
Definition: proximity20.h:275
proximity20_cfg_t::int_pin
pin_name_t int_pin
Definition: proximity20.h:262
proximity20_default_cfg
err_t proximity20_default_cfg(proximity20_t *ctx)
Proximity 20 default configuration function.