color16  2.1.0.0
color16.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 COLOR16_H
29 #define COLOR16_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 COLOR16_REG_AUXID 0x58
70 #define COLOR16_REG_REVID 0x59
71 #define COLOR16_REG_ID 0x5A
72 #define COLOR16_REG_CFG_12 0x66
73 #define COLOR16_REG_ENABLE 0x80
74 #define COLOR16_REG_ATIME 0x81
75 #define COLOR16_REG_WTIME 0x83
76 #define COLOR16_REG_SP_TH_L_LSB 0x84
77 #define COLOR16_REG_SP_TH_L_MSB 0x85
78 #define COLOR16_REG_SP_TH_H_LSB 0x86
79 #define COLOR16_REG_SP_TH_H_MSB 0x87
80 #define COLOR16_REG_STATUS 0x93
81 #define COLOR16_REG_ASTATUS 0x94
82 #define COLOR16_REG_DATA_0_L 0x95
83 #define COLOR16_REG_DATA_0_H 0x96
84 #define COLOR16_REG_DATA_1_L 0x97
85 #define COLOR16_REG_DATA_1_H 0x98
86 #define COLOR16_REG_DATA_2_L 0x99
87 #define COLOR16_REG_DATA_2_H 0x9A
88 #define COLOR16_REG_DATA_3_L 0x9B
89 #define COLOR16_REG_DATA_3_H 0x9C
90 #define COLOR16_REG_DATA_4_L 0x9D
91 #define COLOR16_REG_DATA_4_H 0x9E
92 #define COLOR16_REG_DATA_5_L 0x9F
93 #define COLOR16_REG_DATA_5_H 0xA0
94 #define COLOR16_REG_DATA_6_L 0xA1
95 #define COLOR16_REG_DATA_6_H 0xA2
96 #define COLOR16_REG_DATA_7_L 0xA3
97 #define COLOR16_REG_DATA_7_H 0xA4
98 #define COLOR16_REG_DATA_8_L 0xA5
99 #define COLOR16_REG_DATA_8_H 0xA6
100 #define COLOR16_REG_DATA_9_L 0xA7
101 #define COLOR16_REG_DATA_9_H 0xA8
102 #define COLOR16_REG_DATA_10_L 0xA9
103 #define COLOR16_REG_DATA_10_H 0xAA
104 #define COLOR16_REG_DATA_11_L 0xAB
105 #define COLOR16_REG_DATA_11_H 0xAC
106 #define COLOR16_REG_DATA_12_L 0xAD
107 #define COLOR16_REG_DATA_12_H 0xAE
108 #define COLOR16_REG_DATA_13_L 0xAF
109 #define COLOR16_REG_DATA_13_H 0xB0
110 #define COLOR16_REG_DATA_14_L 0xB1
111 #define COLOR16_REG_DATA_14_H 0xB2
112 #define COLOR16_REG_DATA_15_L 0xB3
113 #define COLOR16_REG_DATA_15_H 0xB4
114 #define COLOR16_REG_DATA_16_L 0xB5
115 #define COLOR16_REG_DATA_16_H 0xB6
116 #define COLOR16_REG_DATA_17_L 0xB7
117 #define COLOR16_REG_DATA_17_H 0xB8
118 #define COLOR16_REG_STATUS_2 0x90
119 #define COLOR16_REG_STATUS_3 0x91
120 #define COLOR16_REG_STATUS_5 0xBB
121 #define COLOR16_REG_STATUS_4 0xBC
122 #define COLOR16_REG_CFG_0 0xBF
123 #define COLOR16_REG_CFG_1 0xC6
124 #define COLOR16_REG_CFG_3 0xC7
125 #define COLOR16_REG_CFG_6 0xF5
126 #define COLOR16_REG_CFG_8 0xC9
127 #define COLOR16_REG_CFG_9 0xCA
128 #define COLOR16_REG_CFG_10 0x65
129 #define COLOR16_REG_PERS 0xCF
130 #define COLOR16_REG_GPIO 0x6B
131 #define COLOR16_REG_ASTEP_LSB 0xD4
132 #define COLOR16_REG_ASTEP_MSB 0xD5
133 #define COLOR16_REG_CFG_20 0xD6
134 #define COLOR16_REG_LED 0xCD
135 #define COLOR16_REG_AGC_GAIN_MAX 0xD7
136 #define COLOR16_REG_AZ_CONFIG 0xDE
137 #define COLOR16_REG_FD_TIME_1 0xE0
138 #define COLOR16_REG_FD_TIME_2 0xE2
139 #define COLOR16_REG_FD_CFG_0 0xDF
140 #define COLOR16_REG_FD_STATUS 0xE3
141 #define COLOR16_REG_INTENAB 0xF9
142 #define COLOR16_REG_CONTROL 0xFA
143 #define COLOR16_REG_FIFO_MAP 0xFC
144 #define COLOR16_REG_FIFO_LVL 0xFD
145 #define COLOR16_REG_FDATA_L 0xFE
146 #define COLOR16_REG_FDATA_H 0xFF
147  // color16_reg
149 
164 #define COLOR16_ENABLE_FDEN 0x40
165 #define COLOR16_ENABLE_SMUXEN 0x10
166 #define COLOR16_ENABLE_WEN 0x08
167 #define COLOR16_ENABLE_SP_EN 0x02
168 #define COLOR16_ENABLE_PON 0x01
169 #define COLOR16_ENABLE_POFF 0x00
170 
175 #define COLOR16_CFG_0_LOW_POWER 0x20
176 #define COLOR16_CFG_0_REG_BANK 0x10
177 #define COLOR16_CFG_0_WLONG 0x04
178 
183 #define COLOR16_CFG_1_AGAIN_0p5 0x00
184 #define COLOR16_CFG_1_AGAIN_1 0x01
185 #define COLOR16_CFG_1_AGAIN_2 0x02
186 #define COLOR16_CFG_1_AGAIN_4 0x03
187 #define COLOR16_CFG_1_AGAIN_8 0x04
188 #define COLOR16_CFG_1_AGAIN_16 0x05
189 #define COLOR16_CFG_1_AGAIN_32 0x06
190 #define COLOR16_CFG_1_AGAIN_64 0x07
191 #define COLOR16_CFG_1_AGAIN_128 0x08
192 #define COLOR16_CFG_1_AGAIN_256 0x09
193 #define COLOR16_CFG_1_AGAIN_512 0x0A
194 #define COLOR16_CFG_1_AGAIN_1024 0x0B
195 #define COLOR16_CFG_1_AGAIN_2048 0x0C
196 #define COLOR16_CFG_1_AGAIN_MASK 0x1F
197 
202 #define COLOR16_CFG_20_FD_FIFO_8BIT 0x80
203 #define COLOR16_CFG_20_AUTO_SMUX_6CH 0x00
204 #define COLOR16_CFG_20_AUTO_SMUX_12CH 0x40
205 #define COLOR16_CFG_20_AUTO_SMUX_18CH 0x60
206 #define COLOR16_CFG_20_AUTO_SMUX_MASK 0x60
207 
212 #define COLOR16_CONTROL_SW_RESET 0x08
213 #define COLOR16_CONTROL_SP_MAN_AZ 0x04
214 #define COLOR16_CONTROL_FIFO_CLR 0x02
215 #define COLOR16_CONTROL_CLEAR_SAI_ACT 0x01
216 
221 #define COLOR16_LED_OFF 0x00
222 #define COLOR16_LED_ON 0x80
223 #define COLOR16_LED_DRIVE_CURR_MIN 4
224 #define COLOR16_LED_DRIVE_CURR_MAX 258
225 #define COLOR16_LED_DRIVE_CURR_STEP 2
226 #define COLOR16_LED_DRIVE_CURR_DEFAULT 8
227 
232 #define COLOR16_STATUS_ASAT 0x80
233 #define COLOR16_STATUS_AINT 0x08
234 #define COLOR16_STATUS_FINT 0x04
235 #define COLOR16_STATUS_SINT 0x01
236 
241 #define COLOR16_ASTATUS_ASAT 0x80
242 #define COLOR16_ASTATUS_AGAIN_MASK 0x0F
243 
248 #define COLOR16_STATUS_2_AVALID 0x40
249 #define COLOR16_STATUS_2_ASAT_DIG 0x10
250 #define COLOR16_STATUS_2_ASAT_ANA 0x08
251 #define COLOR16_STATUS_2_FDSAT_ANA 0x02
252 #define COLOR16_STATUS_2_FDSAT_DIG 0x01
253 
258 #define COLOR16_DEVICE_ID 0x81
259 
264 #define COLOR16_ACCESS_REG_BANK_ABOVE_80H 0
265 #define COLOR16_ACCESS_REG_BANK_20H_7FH 1
266 
271 #define COLOR16_SINGLE_STEP_MS 0.00278f
272 #define COLOR16_ATIME_MAX 255
273 #define COLOR16_ASTEP_MAX 65534
274 #define COLOR16_INTEGRATION_TIME_MAX ( ( float ) ( COLOR16_ATIME_MAX + 1 ) * ( COLOR16_ASTEP_MAX + 1 ) * COLOR16_SINGLE_STEP_MS )
275 #define COLOR16_INTEGRATION_TIME_MIN COLOR16_SINGLE_STEP_MS
276 #define COLOR16_INTEGRATION_TIME_DEFAULT 90.0f
277 #define COLOR16_WAIT_STEP_MS 2.78f
278 #define COLOR16_WTIME_MAX 255
279 #define COLOR16_WAIT_TIME_MAX ( ( float ) ( COLOR16_WTIME_MAX + 1 ) * COLOR16_WAIT_STEP_MS )
280 #define COLOR16_WAIT_TIME_MIN COLOR16_WAIT_STEP_MS
281 #define COLOR16_WAIT_TIME_DEFAULT 100.0f
282 
288 #define COLOR16_DEVICE_ADDRESS 0x39
289  // color16_set
291 
306 #define COLOR16_MAP_MIKROBUS( cfg, mikrobus ) \
307  cfg.scl = MIKROBUS( mikrobus, MIKROBUS_SCL ); \
308  cfg.sda = MIKROBUS( mikrobus, MIKROBUS_SDA ); \
309  cfg.ldr = MIKROBUS( mikrobus, MIKROBUS_AN ); \
310  cfg.int_pin = MIKROBUS( mikrobus, MIKROBUS_INT )
311  // color16_map // color16
314 
319 typedef struct
320 {
321  uint8_t status;
322  uint8_t astatus;
323  uint16_t ch_fz;
324  uint16_t ch_fy;
325  uint16_t ch_fxl;
326  uint16_t ch_nir;
327  uint16_t ch_2x_vis_1;
328  uint16_t ch_fd_1;
329  uint16_t ch_f2;
330  uint16_t ch_f3;
331  uint16_t ch_f4;
332  uint16_t ch_f6;
333  uint16_t ch_2x_vis_2;
334  uint16_t ch_fd_2;
335  uint16_t ch_f1;
336  uint16_t ch_f5;
337  uint16_t ch_f7;
338  uint16_t ch_f8;
339  uint16_t ch_2x_vis_3;
340  uint16_t ch_fd_3;
341 
343 
348 typedef struct
349 {
350  // Output pins
351  digital_out_t ldr;
353  // Input pins
354  digital_in_t int_pin;
356  // Modules
357  i2c_master_t i2c;
359  // I2C slave address
360  uint8_t slave_address;
362 } color16_t;
363 
368 typedef struct
369 {
370  pin_name_t scl;
371  pin_name_t sda;
373  pin_name_t ldr;
374  pin_name_t int_pin;
376  uint32_t i2c_speed;
377  uint8_t i2c_address;
379 } color16_cfg_t;
380 
385 typedef enum
386 {
388  COLOR16_ERROR = -1
389 
391 
408 
422 err_t color16_init ( color16_t *ctx, color16_cfg_t *cfg );
423 
437 
452 err_t color16_generic_write ( color16_t *ctx, uint8_t reg, uint8_t *data_in, uint8_t len );
453 
468 err_t color16_generic_read ( color16_t *ctx, uint8_t reg, uint8_t *data_out, uint8_t len );
469 
482 err_t color16_write_register ( color16_t *ctx, uint8_t reg, uint8_t data_in );
483 
496 err_t color16_read_register ( color16_t *ctx, uint8_t reg, uint8_t *data_out );
497 
511 err_t color16_write_register_word ( color16_t *ctx, uint8_t reg, uint16_t data_in );
512 
526 err_t color16_read_register_word ( color16_t *ctx, uint8_t reg, uint16_t *data_out );
527 
539 
549 void color16_set_ldr_pin ( color16_t *ctx, uint8_t state );
550 
560 
573 err_t color16_set_reg_bank_access ( color16_t *ctx, uint8_t reg_bank );
574 
586 
598 err_t color16_enable_ext_led ( color16_t *ctx, uint8_t led_curr );
599 
613 err_t color16_set_integration_time_ms ( color16_t *ctx, float int_time_ms );
614 
627 err_t color16_set_wait_time_ms ( color16_t *ctx, float wait_time_ms );
628 
642 err_t color16_read_data ( color16_t *ctx, color16_data_t *data_out );
643 
644 #ifdef __cplusplus
645 }
646 #endif
647 #endif // COLOR16_H
648  // color16
650 
651 // ------------------------------------------------------------------------ END
color16_data_t::ch_fd_3
uint16_t ch_fd_3
Definition: color16.h:340
color16_read_register
err_t color16_read_register(color16_t *ctx, uint8_t reg, uint8_t *data_out)
Color 16 read register function.
COLOR16_ERROR
@ COLOR16_ERROR
Definition: color16.h:388
color16_cfg_t::ldr
pin_name_t ldr
Definition: color16.h:373
color16_data_t::status
uint8_t status
Definition: color16.h:321
color16_t::ldr
digital_out_t ldr
Definition: color16.h:351
color16_cfg_t
Color 16 Click configuration object.
Definition: color16.h:369
color16_data_t::ch_f3
uint16_t ch_f3
Definition: color16.h:330
color16_t::i2c
i2c_master_t i2c
Definition: color16.h:357
color16_t::int_pin
digital_in_t int_pin
Definition: color16.h:354
color16_generic_read
err_t color16_generic_read(color16_t *ctx, uint8_t reg, uint8_t *data_out, uint8_t len)
Color 16 I2C reading function.
color16_cfg_t::i2c_speed
uint32_t i2c_speed
Definition: color16.h:376
color16_read_data
err_t color16_read_data(color16_t *ctx, color16_data_t *data_out)
Color 16 read data function.
color16_cfg_t::scl
pin_name_t scl
Definition: color16.h:370
color16_data_t::ch_fxl
uint16_t ch_fxl
Definition: color16.h:325
color16_set_reg_bank_access
err_t color16_set_reg_bank_access(color16_t *ctx, uint8_t reg_bank)
Color 16 set reg bank access function.
color16_generic_write
err_t color16_generic_write(color16_t *ctx, uint8_t reg, uint8_t *data_in, uint8_t len)
Color 16 I2C writing function.
color16_cfg_t::int_pin
pin_name_t int_pin
Definition: color16.h:374
color16_enable_ext_led
err_t color16_enable_ext_led(color16_t *ctx, uint8_t led_curr)
Color 16 enable ext led function.
color16_read_register_word
err_t color16_read_register_word(color16_t *ctx, uint8_t reg, uint16_t *data_out)
Color 16 read register word function.
color16_cfg_t::i2c_address
uint8_t i2c_address
Definition: color16.h:377
color16_data_t
Color 16 Click data object.
Definition: color16.h:320
color16_set_ldr_pin
void color16_set_ldr_pin(color16_t *ctx, uint8_t state)
Color 16 set ldr pin function.
color16_init
err_t color16_init(color16_t *ctx, color16_cfg_t *cfg)
Color 16 initialization function.
color16_data_t::ch_2x_vis_2
uint16_t ch_2x_vis_2
Definition: color16.h:333
color16_data_t::ch_f4
uint16_t ch_f4
Definition: color16.h:331
color16_set_integration_time_ms
err_t color16_set_integration_time_ms(color16_t *ctx, float int_time_ms)
Color 16 set integration time ms function.
color16_write_register
err_t color16_write_register(color16_t *ctx, uint8_t reg, uint8_t data_in)
Color 16 write register function.
color16_data_t::ch_f6
uint16_t ch_f6
Definition: color16.h:332
color16_data_t::ch_f2
uint16_t ch_f2
Definition: color16.h:329
color16_t::slave_address
uint8_t slave_address
Definition: color16.h:360
color16_t
Color 16 Click context object.
Definition: color16.h:349
color16_get_int_pin
uint8_t color16_get_int_pin(color16_t *ctx)
Color 16 get int pin function.
color16_return_value_t
color16_return_value_t
Color 16 Click return value data.
Definition: color16.h:386
color16_data_t::ch_fd_1
uint16_t ch_fd_1
Definition: color16.h:328
COLOR16_OK
@ COLOR16_OK
Definition: color16.h:387
color16_data_t::ch_f7
uint16_t ch_f7
Definition: color16.h:337
color16_disable_ext_led
err_t color16_disable_ext_led(color16_t *ctx)
Color 16 disable ext led function.
color16_data_t::ch_nir
uint16_t ch_nir
Definition: color16.h:326
color16_set_wait_time_ms
err_t color16_set_wait_time_ms(color16_t *ctx, float wait_time_ms)
Color 16 set wait time ms function.
color16_cfg_t::sda
pin_name_t sda
Definition: color16.h:371
color16_check_communication
err_t color16_check_communication(color16_t *ctx)
Color 16 check communication function.
color16_data_t::ch_f8
uint16_t ch_f8
Definition: color16.h:338
color16_write_register_word
err_t color16_write_register_word(color16_t *ctx, uint8_t reg, uint16_t data_in)
Color 16 write register word function.
color16_data_t::ch_f5
uint16_t ch_f5
Definition: color16.h:336
color16_data_t::ch_fz
uint16_t ch_fz
Definition: color16.h:323
color16_default_cfg
err_t color16_default_cfg(color16_t *ctx)
Color 16 default configuration function.
color16_data_t::ch_fy
uint16_t ch_fy
Definition: color16.h:324
color16_data_t::ch_2x_vis_1
uint16_t ch_2x_vis_1
Definition: color16.h:327
color16_data_t::ch_fd_2
uint16_t ch_fd_2
Definition: color16.h:334
color16_cfg_setup
void color16_cfg_setup(color16_cfg_t *cfg)
Color 16 configuration object setup function.
color16_data_t::ch_2x_vis_3
uint16_t ch_2x_vis_3
Definition: color16.h:339
color16_data_t::astatus
uint8_t astatus
Definition: color16.h:322
color16_data_t::ch_f1
uint16_t ch_f1
Definition: color16.h:335