uv4 2.0.0.0
uv4.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 UV4_H
36#define UV4_H
37
42#ifdef PREINIT_SUPPORTED
43#include "preinit.h"
44#endif
45
46#ifdef MikroCCoreVersion
47 #if MikroCCoreVersion >= 1
48 #include "delays.h"
49 #endif
50#endif
51
52#include "drv_digital_out.h"
53#include "drv_digital_in.h"
54#include "drv_i2c_master.h"
55
56// -------------------------------------------------------------- PUBLIC MACROS
66#define UV4_MAP_MIKROBUS( cfg, mikrobus ) \
67 cfg.scl = MIKROBUS( mikrobus, MIKROBUS_SCL ); \
68 cfg.sda = MIKROBUS( mikrobus, MIKROBUS_SDA ); \
69 cfg.int_pin = MIKROBUS( mikrobus, MIKROBUS_INT )
76#define UV4_RETVAL uint8_t
77
78#define UV4_OK 0x00
79#define UV4_INIT_ERROR 0xFF
86#define UV4_PART_ID_REG 0x00
87#define UV4_HW_ID_REG 0x01
88#define UV4_REV_ID_REG 0x02
89#define UV4_INFO_0_REG 0x03
90#define UV4_INFO_1_REG 0x04
91#define UV4_INPUT_3_REG 0x07
92#define UV4_INPUT_2_REG 0x08
93#define UV4_INPUT_1_REG 0x09
94#define UV4_INPUT_0_REG 0x0A
95#define UV4_COMMAND_REG 0x0B
96#define UV4_IRQ_ENABLE_REG 0x0F
97#define UV4_RESPONSE_1_REG 0x10
98#define UV4_RESPONSE_0_REG 0x11
99#define UV4_IRQ_STATUS_REG 0x12
100#define UV4_OUTPUT_0_REG 0x13
101#define UV4_OUTPUT_1_REG 0x14
102#define UV4_OUTPUT_2_REG 0x15
103#define UV4_OUTPUT_3_REG 0x16
104#define UV4_OUTPUT_4_REG 0x17
105#define UV4_OUTPUT_5_REG 0x18
106#define UV4_OUTPUT_6_REG 0x19
107#define UV4_OUTPUT_7_REG 0x1A
108#define UV4_OUTPUT_8_REG 0x1B
109#define UV4_OUTPUT_9_REG 0x1C
110#define UV4_OUTPUT_10_REG 0x1D
111#define UV4_OUTPUT_11_REG 0x1E
112#define UV4_OUTPUT_12_REG 0x1F
113#define UV4_OUTPUT_13_REG 0x20
114#define UV4_OUTPUT_14_REG 0x21
115#define UV4_OUTPUT_15_REG 0x22
116#define UV4_OUTPUT_16_REG 0x23
117#define UV4_OUTPUT_17_REG 0x24
118#define UV4_OUTPUT_18_REG 0x25
119#define UV4_OUTPUT_19_REG 0x26
120#define UV4_OUTPUT_20_REG 0x27
121#define UV4_OUTPUT_21_REG 0x28
122#define UV4_OUTPUT_22_REG 0x29
123#define UV4_OUTPUT_23_REG 0x2A
124#define UV4_OUTPUT_24_REG 0x2B
125#define UV4_OUTPUT_25_REG 0x2C
132#define UV4_I2C_ADDR_PARAM 0x00
133#define UV4_CHAN_LIST_PARAM 0x01
134#define UV4_ADCCONFIG_0_PARAM 0x02
135#define UV4_ADCSENS_0_PARAM 0x03
136#define UV4_ADCPOST_0_PARAM 0x04
137#define UV4_MEASCONFIG_0_PARAM 0x05
138#define UV4_ADCCONFIG_1_PARAM 0x06
139#define UV4_ADCSENS_1_PARAM 0x07
140#define UV4_ADCPOST_1_PARAM 0x08
141#define UV4_MEASCONFIG_1_PARAM 0x09
142#define UV4_ADCCONFIG_2_PARAM 0x0A
143#define UV4_ADCSENS_2_PARAM 0x0B
144#define UV4_ADCPOST_2_PARAM 0x0C
145#define UV4_MEASCONFIG_2_PARAM 0x0D
146#define UV4_ADCCONFIG_3_PARAM 0x0E
147#define UV4_ADCSENS_3_PARAM 0x0F
148#define UV4_ADCPOST_3_PARAM 0x10
149#define UV4_MEASCONFIG_3_PARAM 0x11
150#define UV4_ADCCONFIG_4_PARAM 0x12
151#define UV4_ADCSENS_4_PARAM 0x13
152#define UV4_ADCPOST_4_PARAM 0x14
153#define UV4_MEASCONFIG_4_PARAM 0x15
154#define UV4_ADCCONFIG_5_PARAM 0x16
155#define UV4_ADCSENS_5_PARAM 0x17
156#define UV4_ADCPOST_5_PARAM 0x18
157#define UV4_MEASCONFIG_5_PARAM 0x19
158#define UV4_MEASRATE_H_PARAM 0x1A
159#define UV4_MEASRATE_L_PARAM 0x1B
160#define UV4_MEASCOUNT_0_PARAM 0x1C
161#define UV4_MEASCOUNT_1_PARAM 0x1D
162#define UV4_MEASCOUNT_2_PARAM 0x1E
163#define UV4_THRESHOLD0_H_PARAM 0x25
164#define UV4_THRESHOLD0_L_PARAM 0x26
165#define UV4_THRESHOLD1_H_PARAM 0x27
166#define UV4_THRESHOLD1_L_PARAM 0x28
167#define UV4_THRESHOLD2_H_PARAM 0x29
168#define UV4_THRESHOLD2_L_PARAM 0x2A
169#define UV4_BURST_PARAM 0x2B
176#define UV4_RESET_CTR_CMD 0x00
177#define UV4_RESET_SW_CMD 0x01
178#define UV4_FORCE_CMD 0x11
179#define UV4_PAUSE_CMD 0x12
180#define UV4_START_CMD 0x13
187#define UV4_ALL_INTERR_DISABLE 0x00
188#define UV4_CHAN0_INTERR_ENABLE 0x01
189#define UV4_CHAN1_INTERR_ENABLE 0x02
190#define UV4_CHAN2_INTERR_ENABLE 0x04
191#define UV4_CHAN3_INTERR_ENABLE 0x08
192#define UV4_CHAN4_INTERR_ENABLE 0x10
193#define UV4_CHAN5_INTERR_ENABLE 0x20
200#define UV4_ALL_CHANNELS_DISABLE 0x00
201#define UV4_CHAN0_ENABLE 0x01
202#define UV4_CHAN1_ENABLE 0x02
203#define UV4_CHAN2_ENABLE 0x04
204#define UV4_CHAN3_ENABLE 0x08
205#define UV4_CHAN4_ENABLE 0x10
206#define UV4_CHAN5_ENABLE 0x20
213#define UV4_DATARATE_1024 0x00
214#define UV4_DATARATE_2048 0x20
215#define UV4_DATARATE_4096 0x40
216#define UV4_DATARATE_512 0x60
223#define UV4_OPT_FUNC_SMALL_IR 0x00
224#define UV4_OPT_FUNC_MEDIUM_IR 0x01
225#define UV4_OPT_FUNC_LARGE_IR 0x02
226#define UV4_OPT_FUNC_WHITE 0x0B
227#define UV4_OPT_FUNC_LARGE_WHITE 0x0D
228#define UV4_OPT_FUNC_UV 0x18
229#define UV4_OPT_FUNC_UV_DEEP 0x19
236#define UV4_NORMAL_GAIN 0x00
237#define UV4_HIGH_RANGE 0x80
238#define UV4_1_MEASUREMENT 0x00
239#define UV4_2_MEASUREMENTS 0x10
240#define UV4_4_MEASUREMENTS 0x20
241#define UV4_8_MEASUREMENTS 0x30
242#define UV4_16_MEASUREMENTS 0x40
243#define UV4_32_MEASUREMENTS 0x50
244#define UV4_64_MEASUREMENTS 0x60
245#define UV4_128_MEASUREMENTS 0x70
246#define UV4_MEASTIME_24MICROSEC 0x00
247#define UV4_MEASTIME_48MICROSEC 0x01
248#define UV4_MEASTIME_96MICROSEC 0x02
249#define UV4_MEASTIME_25MILISEC 0x0A
250#define UV4_MEASTIME_50MILISEC 0x0B
257#define UV4_16BIT_OUT 0x00
258#define UV4_24BIT_OUT 0x40
259#define UV4_NO_SHIFT_RIGHT 0x00
260#define UV4_1BIT_SHIFT_RIGHT 0x08
261#define UV4_2BITS_SHIFT_RIGHT 0x10
262#define UV4_3BITS_SHIFT_RIGHT 0x18
263#define UV4_4BITS_SHIFT_RIGHT 0x20
270#define UV4_THRESHOLDS_DISABLE 0x00
271#define UV4_THRESHOLD0_INTERR_ENABLE 0x01
272#define UV4_THRESHOLD1_INTERR_ENABLE 0x02
273#define UV4_THRESHOLD2_INTERR_ENABLE 0x03
280#define UV4_NO_COUNTER_SELECTED 0x00
281#define UV4_MEASCOUNT1_SELECT 0x40
282#define UV4_MEASCOUNT2_SELECT 0x80
283#define UV4_MEASCOUNT3_SELECT 0xC0
290#define UV4_BURST_DISABLE 0x00
291#define UV4_BURST_ENABLE 0x80
298#define UV4_AUTOINC_ENABLE 0x00
299#define UV4_AUTOINC_DISABLE 0x40
306#define UV4_OK 0x00
307#define UV4_ADDR_ERR 0x01
308#define UV4_PARAM_ERR 0x02
309#define UV4_CMMND_ERR 0x03
310#define UV4_LOC_ERR 0x04
311#define UV4_ACCM_OVERFLOW 0x05
312#define UV4_BUFF_OVERFLOW 0x06
313#define UV4_RST_OCCURED 0x07
314#define UV4_INTERR_OCCURED 0xFF
315#define UV4_NO_INTERR 0x00
318 // End group macro
319// --------------------------------------------------------------- PUBLIC TYPES
328typedef struct
329{
330
331 digital_in_t int_pin;
332
333 // Modules
334
335 i2c_master_t i2c;
336
337 // ctx variable
338
340
341 uint8_t config_byte;
342
343 uint8_t optical_data[ 6 ];
344
345 uint8_t tmp;
346 uint8_t bit_size[ 6 ];
347 uint8_t inc_en;
348
349} uv4_t;
350
354typedef struct
355{
356 // Communication gpio pins
357
358 pin_name_t scl;
359 pin_name_t sda;
360
361 // Additional gpio pins
362
363 pin_name_t int_pin;
364
365 // static variable
366
367 uint32_t i2c_speed;
368 uint8_t i2c_address;
369
370 uint8_t config_byte;
371 uint8_t optical_data[ 6 ];
372
373 uint8_t dev_tmp;
374
375} uv4_cfg_t;
376
377 // End types group
378// ----------------------------------------------- PUBLIC FUNCTION DECLARATIONS
379
385#ifdef __cplusplus
386extern "C"{
387#endif
388
398
408
416void uv4_default_cfg ( uv4_t* ctx );
417
428UV4_RETVAL uv4_write_reg ( uv4_t* ctx, const uint8_t reg_address, const uint8_t transfer_data );
429
443UV4_RETVAL uv4_read_reg ( uv4_t* ctx, uint8_t reg_address, uint8_t* data_out,
444 uint8_t n_bytes );
445
459UV4_RETVAL uv4_write_param_data ( uv4_t* ctx, uint8_t param_address, uint8_t transfer_data );
460
474UV4_RETVAL uv4_read_param_data(uv4_t* ctx, uint8_t param_address, uint8_t* param_out);
475
486void uv4_read_measurements(uv4_t* ctx, uint32_t* measure_out);
487
501UV4_RETVAL uv4_check_err_and_ctr(uv4_t* ctx, uint8_t* cnt_data);
502
513
514#ifdef __cplusplus
515}
516#endif
517#endif // _UV4_H_
518
519 // End public_function group
521
522// ------------------------------------------------------------------------- END
#define UV4_RETVAL
Definition uv4.h:76
void uv4_default_cfg(uv4_t *ctx)
Click Default Configuration function.
void uv4_cfg_setup(uv4_cfg_t *cfg)
Config Object Initialization function.
UV4_RETVAL uv4_init(uv4_t *ctx, uv4_cfg_t *cfg)
Initialization function.
UV4_RETVAL uv4_check_interr(uv4_t *ctx)
Error And Counter Check function.
UV4_RETVAL uv4_write_param_data(uv4_t *ctx, uint8_t param_address, uint8_t transfer_data)
Parameter Data Write Function.
UV4_RETVAL uv4_write_reg(uv4_t *ctx, const uint8_t reg_address, const uint8_t transfer_data)
Generic write function.
UV4_RETVAL uv4_read_param_data(uv4_t *ctx, uint8_t param_address, uint8_t *param_out)
Parameter Data Read Function.
UV4_RETVAL uv4_check_err_and_ctr(uv4_t *ctx, uint8_t *cnt_data)
Error And Counter Check function.
UV4_RETVAL uv4_read_reg(uv4_t *ctx, uint8_t reg_address, uint8_t *data_out, uint8_t n_bytes)
Generic read function.
void uv4_read_measurements(uv4_t *ctx, uint32_t *measure_out)
Measurements Read Function.
Click configuration structure definition.
Definition uv4.h:355
uint32_t i2c_speed
Definition uv4.h:367
uint8_t config_byte
Definition uv4.h:370
uint8_t dev_tmp
Definition uv4.h:373
pin_name_t scl
Definition uv4.h:358
pin_name_t int_pin
Definition uv4.h:363
pin_name_t sda
Definition uv4.h:359
uint8_t i2c_address
Definition uv4.h:368
Click ctx object definition.
Definition uv4.h:329
uint8_t tmp
Definition uv4.h:345
uint8_t config_byte
Definition uv4.h:341
digital_in_t int_pin
Definition uv4.h:331
uint8_t inc_en
Definition uv4.h:347
i2c_master_t i2c
Definition uv4.h:335
uint8_t slave_address
Definition uv4.h:339