proximity22 2.2.0
Loading...
Searching...
No Matches
proximity22.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
27
28#ifndef PROXIMITY22_H
29#define PROXIMITY22_H
30
31#ifdef __cplusplus
32extern "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
58
63
68
73#define PROXIMITY22_REG_LOTL 0x07
74#define PROXIMITY22_REG_LOTH 0x08
75#define PROXIMITY22_REG_SNL 0x09
76#define PROXIMITY22_REG_SNH 0x0A
77#define PROXIMITY22_REG_IPTAT 0x1A
78#define PROXIMITY22_REG_ENABLE 0x80
79#define PROXIMITY22_REG_PTIME 0x82
80#define PROXIMITY22_REG_AILTL 0x84
81#define PROXIMITY22_REG_AILTH 0x85
82#define PROXIMITY22_REG_AIHTL 0x86
83#define PROXIMITY22_REG_AIHTH 0x87
84#define PROXIMITY22_REG_PILTL 0x88
85#define PROXIMITY22_REG_PILTH 0x89
86#define PROXIMITY22_REG_PIHTL 0x8A
87#define PROXIMITY22_REG_PIHTH 0x8B
88#define PROXIMITY22_REG_PERS 0x8C
89#define PROXIMITY22_REG_CFG0 0x8D
90#define PROXIMITY22_REG_PCFG0 0x8E
91#define PROXIMITY22_REG_PCFG1 0x8F
92#define PROXIMITY22_REG_PCFG2 0x90
93#define PROXIMITY22_REG_REVID 0x91
94#define PROXIMITY22_REG_ID 0x92
95#define PROXIMITY22_REG_REVID2 0x93
96#define PROXIMITY22_REG_CFG1 0x94
97#define PROXIMITY22_REG_AGAIN_1_0 0x95
98#define PROXIMITY22_REG_AGAIN_3_2 0x96
99#define PROXIMITY22_REG_LDR0_CFG 0x9A
100#define PROXIMITY22_REG_LDR1_CFG 0x9B
101#define PROXIMITY22_REG_EYE_SAFETY_CFG 0x9E
102#define PROXIMITY22_REG_EYE_SAFETY_STATUS 0x9F
103#define PROXIMITY22_REG_STATUS 0xA0
104#define PROXIMITY22_REG_STATUS_2 0xA1
105#define PROXIMITY22_REG_STATUS_3 0xA2
106#define PROXIMITY22_REG_PID_L 0xA5
107#define PROXIMITY22_REG_PID_H 0xA6
108#define PROXIMITY22_REG_CFG2 0xA7
109#define PROXIMITY22_REG_RESET 0xA8
110#define PROXIMITY22_REG_CFG3 0xAB
111#define PROXIMITY22_REG_CFG6 0xAE
112#define PROXIMITY22_REG_PWM_CFG 0xB0
113#define PROXIMITY22_REG_VSYNC_CFG 0xB1
114#define PROXIMITY22_REG_VSYNC_PRD_L 0xB2
115#define PROXIMITY22_REG_VSYNC_PRD_H 0xB3
116#define PROXIMITY22_REG_PWM_PRD_L 0xB5
117#define PROXIMITY22_REG_PWM_PRD_H 0xB6
118#define PROXIMITY22_REG_PWM_HIP_L 0xB7
119#define PROXIMITY22_REG_PWM_HIP_H 0xB8
120#define PROXIMITY22_REG_POFFSET 0xC0
121#define PROXIMITY22_REG_POFFSET_SIGN 0xC1
122#define PROXIMITY22_REG_AZ_CONFIG 0xD6
123#define PROXIMITY22_REG_CALIB 0xD7
124#define PROXIMITY22_REG_CALIB_OFFSET 0xD8
125#define PROXIMITY22_REG_CALIBCFG 0xD9
126#define PROXIMITY22_REG_PCFG4 0xDA
127#define PROXIMITY22_REG_CALIBSTAT 0xDC
128#define PROXIMITY22_REG_INTENAB 0xDD
129#define PROXIMITY22_REG_INTENAB_2 0xDE
130#define PROXIMITY22_REG_ASD_L 0xE0
131#define PROXIMITY22_REG_ASD_H 0xE1
132#define PROXIMITY22_REG_ASP1_L 0xE2
133#define PROXIMITY22_REG_ASP1_H 0xE3
134#define PROXIMITY22_REG_ASP2_L 0xE4
135#define PROXIMITY22_REG_ASP2_H 0xE5
136#define PROXIMITY22_REG_ATIME 0xE6
137#define PROXIMITY22_REG_AWTIME 0xE7
138#define PROXIMITY22_REG_ACFG 0xE8
139#define PROXIMITY22_REG_PSD_L 0xEA
140#define PROXIMITY22_REG_PSD_H 0xEB
141#define PROXIMITY22_REG_PWTIME 0xEC
142#define PROXIMITY22_REG_FIFO_STATUS_1 0xF0
143#define PROXIMITY22_REG_FIFO_CONTROL 0xF1
144#define PROXIMITY22_REG_PDATA_L 0xF4
145#define PROXIMITY22_REG_PDATA_H 0xF5
146#define PROXIMITY22_REG_TDATA_L 0xF6
147#define PROXIMITY22_REG_TDATA_H 0xF7
148#define PROXIMITY22_REG_FIFO_ADATA_7 0xF8
149#define PROXIMITY22_REG_FIFO_ADATA_6 0xF9
150#define PROXIMITY22_REG_FIFO_ADATA_5 0xFA
151#define PROXIMITY22_REG_FIFO_ADATA_4 0xFB
152#define PROXIMITY22_REG_FIFO_ADATA_3 0xFC
153#define PROXIMITY22_REG_FIFO_ADATA_2 0xFD
154#define PROXIMITY22_REG_FIFO_ADATA_1 0xFE
155#define PROXIMITY22_REG_FIFO_ADATA_0 0xFF
156 // proximity22_reg
158
163
168
173#define PROXIMITY22_IPTAT_INIT 0x03
174
179#define PROXIMITY22_ENABLE_PVSYNC_EN 0x80
180#define PROXIMITY22_ENABLE_AVSYNC_EN 0x40
181#define PROXIMITY22_ENABLE_TEN 0x20
182#define PROXIMITY22_ENABLE_PWEN 0x10
183#define PROXIMITY22_ENABLE_AWEN 0x08
184#define PROXIMITY22_ENABLE_PEN 0x04
185#define PROXIMITY22_ENABLE_AEN 0x02
186#define PROXIMITY22_ENABLE_PON 0x01
187
192#define PROXIMITY22_PTIME_88_US 0x00
193#define PROXIMITY22_PTIME_2_816_MS 0x1F
194#define PROXIMITY22_PTIME_22_528_US 0xFF
195
200#define PROXIMITY22_PCFG0_PGAIN_1X 0x00
201#define PROXIMITY22_PCFG0_PGAIN_2X 0x20
202#define PROXIMITY22_PCFG0_PGAIN_4X 0x40
203#define PROXIMITY22_PCFG0_PGAIN_8X 0x60
204#define PROXIMITY22_PCFG0_PGAIN_16X 0x80
205#define PROXIMITY22_PCFG0_PGAIN_MASK 0xE0
206#define PROXIMITY22_PCFG0_PGAIN2_2_5X 0x00
207#define PROXIMITY22_PCFG0_PGAIN2_5X 0x01
208#define PROXIMITY22_PCFG0_PGAIN2_10X 0x03
209#define PROXIMITY22_PCFG0_PGAIN2_MASK 0x03
210
215#define PROXIMITY22_PCFG1_PPULSE_LENH_MASK 0xC0
216#define PROXIMITY22_PCFG1_PPULSE_1 0x00
217#define PROXIMITY22_PCFG1_PPULSE_32 0x1F
218#define PROXIMITY22_PCFG1_PPULSE_64 0x3F
219#define PROXIMITY22_PCFG1_PPULSE_MASK 0x3F
220
225#define PROXIMITY22_PCFG2_PPULSE_LENL_2_US 0x00
226#define PROXIMITY22_PCFG2_PPULSE_LENL_34_US 0x20
227#define PROXIMITY22_PCFG2_PPULSE_LENL_257_US 0xFF
228
233#define PROXIMITY22_DEVICE_ID 0x82
234
239#define PROXIMITY22_CFG1_PD_MUX_SEL_TWO_CHANN_MODE 0x00
240#define PROXIMITY22_CFG1_PD_MUX_SEL_COLOR_MODE 0x06
241#define PROXIMITY22_CFG1_PD_MUX_SEL_MASK 0x0E
242#define PROXIMITY22_CFG1_ENAB_TEMP_SENSOR 0x01
243
248#define PROXIMITY22_AGAIN_1X 0x00
249#define PROXIMITY22_AGAIN_2X 0x01
250#define PROXIMITY22_AGAIN_4X 0x02
251#define PROXIMITY22_AGAIN_8X 0x03
252#define PROXIMITY22_AGAIN_16X 0x04
253#define PROXIMITY22_AGAIN_32X 0x05
254#define PROXIMITY22_AGAIN_64X 0x06
255#define PROXIMITY22_AGAIN_128X 0x07
256#define PROXIMITY22_AGAIN_256X 0x08
257#define PROXIMITY22_AGAIN_512X 0x09
258#define PROXIMITY22_AGAIN_1024X 0x0A
259#define PROXIMITY22_AGAIN_2048X 0x0B
260#define PROXIMITY22_AGAIN_4096X 0x0C
261
266#define PROXIMITY22_LDR0_CFG_EN_LDR_0 0x40
267#define PROXIMITY22_LDR0_CFG_ISINK_LSB_0_5_MA 0x00
268#define PROXIMITY22_LDR0_CFG_ISINK_LSB_1_0_MA 0x10
269#define PROXIMITY22_LDR0_CFG_ISINK_LSB_1_5_MA 0x20
270#define PROXIMITY22_LDR0_CFG_ISINK_LSB_2_0_MA 0x30
271#define PROXIMITY22_LDR0_CFG_ISINK_LSB_MASK 0x30
272#define PROXIMITY22_LDR0_CFG_PLDRIVE0_0 0x00
273#define PROXIMITY22_LDR0_CFG_PLDRIVE0_4 0x04
274#define PROXIMITY22_LDR0_CFG_PLDRIVE0_15 0x0F
275#define PROXIMITY22_LDR0_CFG_PLDRIVE0_MASK 0x0F
276
281#define PROXIMITY22_LDR1_CFG_EN_LDR_1 0x40
282#define PROXIMITY22_LDR1_CFG_PLDRIVE1_0 0x00
283#define PROXIMITY22_LDR1_CFG_PLDRIVE1_4 0x04
284#define PROXIMITY22_LDR1_CFG_PLDRIVE1_15 0x0F
285#define PROXIMITY22_LDR1_CFG_PLDRIVE1_MASK 0x0F
286
291#define PROXIMITY22_STATUS_3_PWM_PRD_CHG_INT 0x80
292#define PROXIMITY22_STATUS_3_ATINT 0x10
293#define PROXIMITY22_STATUS_3_FTINT 0x08
294#define PROXIMITY22_STATUS_3_AWINT 0x04
295#define PROXIMITY22_STATUS_3_ASAT 0x02
296#define PROXIMITY22_STATUS_3_AINT 0x01
297
302#define PROXIMITY22_RESET_INV_XRES 0x08
303#define PROXIMITY22_RESET_ENAB_XRES 0x04
304#define PROXIMITY22_RESET_HARD_RESET 0x02
305#define PROXIMITY22_RESET_SOFT_RESET 0x01
306
311#define PROXIMITY22_CFG3_INT_READ_CLEAR 0x80
312#define PROXIMITY22_CFG3_MODE_CFG_SEQUENTIAL 0x00
313#define PROXIMITY22_CFG3_MODE_CFG_CONCURRENT 0x20
314#define PROXIMITY22_CFG3_MODE_CFG_FULL_PARALLEL 0x40
315#define PROXIMITY22_CFG3_MODE_CFG_MASK 0x60
316#define PROXIMITY22_CFG3_SAI 0x10
317#define PROXIMITY22_CFG3_PID_EN 0x08
318#define PROXIMITY22_CFG3_RESERVED 0x01
319
324#define PROXIMITY22_CFG6_DISABLE_APC 0x40
325#define PROXIMITY22_CFG6_RESERVED 0x3F
326
331#define PROXIMITY22_CALIB_OFFCAL_ENAB_AVG 0x80
332#define PROXIMITY22_CALIB_ELECTRICAL_CALIBRATION 0x20
333#define PROXIMITY22_CALIB_PTIME_IN_CALIB 0x10
334#define PROXIMITY22_CALIB_START_OFFSET_CAL 0x01
335
340#define PROXIMITY22_CALIBCFG_BINSRCH_TARGET_3 0x00
341#define PROXIMITY22_CALIBCFG_BINSRCH_TARGET_7 0x20
342#define PROXIMITY22_CALIBCFG_BINSRCH_TARGET_15 0x40
343#define PROXIMITY22_CALIBCFG_BINSRCH_TARGET_31 0x60
344#define PROXIMITY22_CALIBCFG_BINSRCH_TARGET_63 0x80
345#define PROXIMITY22_CALIBCFG_BINSRCH_TARGET_127 0xA0
346#define PROXIMITY22_CALIBCFG_BINSRCH_TARGET_255 0xC0
347#define PROXIMITY22_CALIBCFG_BINSRCH_TARGET_511 0xE0
348#define PROXIMITY22_CALIBCFG_BINSRCH_TARGET_MASK 0xE0
349#define PROXIMITY22_CALIBCFG_RESERVED 0x10
350#define PROXIMITY22_CALIBCFG_PROX_AUTO_OFFSET_ADJ 0x08
351#define PROXIMITY22_CALIBCFG_PROX_DATA_AVG_DIS 0x00
352#define PROXIMITY22_CALIBCFG_PROX_DATA_AVG_2 0x01
353#define PROXIMITY22_CALIBCFG_PROX_DATA_AVG_4 0x02
354#define PROXIMITY22_CALIBCFG_PROX_DATA_AVG_8 0x03
355#define PROXIMITY22_CALIBCFG_PROX_DATA_AVG_16 0x04
356#define PROXIMITY22_CALIBCFG_PROX_DATA_AVG_MASK 0x07
357
362#define PROXIMITY22_CALIBSTAT_OFFSET_ADJUSTED 0x04
363#define PROXIMITY22_CALIBSTAT_CALIB_FINISHED 0x01
364
369#define PROXIMITY22_INTENAB_2_PWMIEN 0x80
370#define PROXIMITY22_INTENAB_2_ESIEN 0x10
371#define PROXIMITY22_INTENAB_2_ATIEN 0x08
372#define PROXIMITY22_INTENAB_2_FTIEN 0x04
373#define PROXIMITY22_INTENAB_2_PWIEN 0x02
374#define PROXIMITY22_INTENAB_2_AWIEN 0x01
375
380#define PROXIMITY22_ATIME_2_779_MS 0x00
381#define PROXIMITY22_ATIME_88_923_MS 0x1F
382#define PROXIMITY22_ATIME_711_381_MS 0xFF
383
388#define PROXIMITY22_AWTIME_2_779_MS 0x00
389#define PROXIMITY22_AWTIME_200_088_MS 0x47
390#define PROXIMITY22_AWTIME_711_381_MS 0xFF
391
396#define PROXIMITY22_FIFO_CONTROL_FIFO_LVL_LSB 0x40
397#define PROXIMITY22_FIFO_CONTROL_FIFO_THR_LVL_MASK 0x38
398#define PROXIMITY22_FIFO_CONTROL_FIFO_CLR 0x04
399#define PROXIMITY22_FIFO_CONTROL_FIFO_EMPTY 0x02
400#define PROXIMITY22_FIFO_CONTROL_FIFO_OVF 0x01
401
406#define PROXIMITY22_TEMP_OFFSET 399.0
407#define PROXIMITY22_TEMP_RES 1.48
408
414#define PROXIMITY22_DEVICE_ADDRESS 0x39
415 // proximity22_set
417
422
427
432#define PROXIMITY22_MAP_MIKROBUS( cfg, mikrobus ) \
433 cfg.scl = MIKROBUS( mikrobus, MIKROBUS_SCL ); \
434 cfg.sda = MIKROBUS( mikrobus, MIKROBUS_SDA ); \
435 cfg.rst = MIKROBUS( mikrobus, MIKROBUS_RST ); \
436 cfg.int_pin = MIKROBUS( mikrobus, MIKROBUS_INT )
437 // proximity22_map // proximity22
440
445typedef struct
446{
447 // Output pins
448 digital_out_t rst;
449
450 // Input pins
451 digital_in_t int_pin;
452
453 // Modules
454 i2c_master_t i2c;
455
456 // I2C slave address
458
460
465typedef struct
466{
467 pin_name_t scl;
468 pin_name_t sda;
469
470 pin_name_t rst;
471 pin_name_t int_pin;
472
473 uint32_t i2c_speed;
474 uint8_t i2c_address;
475
477
488
493typedef struct
494{
495 uint16_t clear;
496 uint16_t red;
497 uint16_t green;
498 uint16_t blue;
499
501
506typedef struct
507{
508 uint16_t proximity;
511
513
519
530
545
559
572err_t proximity22_write_regs ( proximity22_t *ctx, uint8_t reg, uint8_t *data_in, uint8_t len );
573
586err_t proximity22_read_regs ( proximity22_t *ctx, uint8_t reg, uint8_t *data_out, uint8_t len );
587
599err_t proximity22_write_reg ( proximity22_t *ctx, uint8_t reg, uint8_t data_in );
600
612err_t proximity22_read_reg ( proximity22_t *ctx, uint8_t reg, uint8_t *data_out );
613
622void proximity22_set_rst_pin ( proximity22_t *ctx, uint8_t state );
623
633
642
653
664
675
686err_t proximity22_read_prox ( proximity22_t *ctx, uint16_t *prox );
687
698err_t proximity22_read_temp ( proximity22_t *ctx, float *temp );
699
711
723
724#ifdef __cplusplus
725}
726#endif
727#endif // PROXIMITY22_H
728 // proximity22
730
731// ------------------------------------------------------------------------ END
err_t proximity22_read_prox(proximity22_t *ctx, uint16_t *prox)
Proximity 22 read proximity function.
err_t proximity22_check_comm(proximity22_t *ctx)
Proximity 22 check communication function.
err_t proximity22_read_temp(proximity22_t *ctx, float *temp)
Proximity 22 read temperature function.
err_t proximity22_read_als(proximity22_t *ctx, proximity22_als_t *als)
Proximity 22 read ALS data function.
void proximity22_cfg_setup(proximity22_cfg_t *cfg)
Proximity 22 configuration object setup function.
void proximity22_reset_device(proximity22_t *ctx)
Proximity 22 reset device function.
void proximity22_set_rst_pin(proximity22_t *ctx, uint8_t state)
Proximity 22 set RST pin function.
uint8_t proximity22_get_int_pin(proximity22_t *ctx)
Proximity 22 get INT pin function.
err_t proximity22_read_data(proximity22_t *ctx, proximity22_data_t *data_out)
Proximity 22 read sensor data function.
err_t proximity22_write_reg(proximity22_t *ctx, uint8_t reg, uint8_t data_in)
Proximity 22 write register function.
err_t proximity22_read_regs(proximity22_t *ctx, uint8_t reg, uint8_t *data_out, uint8_t len)
Proximity 22 read registers function.
err_t proximity22_default_cfg(proximity22_t *ctx)
Proximity 22 default configuration function.
err_t proximity22_read_reg(proximity22_t *ctx, uint8_t reg, uint8_t *data_out)
Proximity 22 read register function.
err_t proximity22_init(proximity22_t *ctx, proximity22_cfg_t *cfg)
Proximity 22 initialization function.
err_t proximity22_soft_reset(proximity22_t *ctx)
Proximity 22 software reset function.
err_t proximity22_clear_fifo(proximity22_t *ctx)
Proximity 22 clear FIFO function.
err_t proximity22_write_regs(proximity22_t *ctx, uint8_t reg, uint8_t *data_in, uint8_t len)
Proximity 22 write registers function.
proximity22_return_value_t
Proximity 22 Click return value data.
Definition proximity22.h:483
@ PROXIMITY22_OK
Definition proximity22.h:484
@ PROXIMITY22_ERROR
Definition proximity22.h:485
Proximity 22 Click als data object.
Definition proximity22.h:494
uint16_t clear
Definition proximity22.h:495
uint16_t blue
Definition proximity22.h:498
uint16_t green
Definition proximity22.h:497
uint16_t red
Definition proximity22.h:496
Proximity 22 Click configuration object.
Definition proximity22.h:466
uint32_t i2c_speed
Definition proximity22.h:473
pin_name_t scl
Definition proximity22.h:467
pin_name_t int_pin
Definition proximity22.h:471
pin_name_t sda
Definition proximity22.h:468
pin_name_t rst
Definition proximity22.h:470
uint8_t i2c_address
Definition proximity22.h:474
Proximity 22 Click data object.
Definition proximity22.h:507
proximity22_als_t als
Definition proximity22.h:510
uint16_t proximity
Definition proximity22.h:508
float temperature
Definition proximity22.h:509
Proximity 22 Click context object.
Definition proximity22.h:446
digital_in_t int_pin
Definition proximity22.h:451
i2c_master_t i2c
Definition proximity22.h:454
digital_out_t rst
Definition proximity22.h:448
uint8_t slave_address
Definition proximity22.h:457