uv5  2.1.0.0
uv5.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 UV5_H
29 #define UV5_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 UV5_CFG_STATE_REG_OSR 0x00
70 #define UV5_CFG_STATE_REG_AGEN 0x02
71 #define UV5_CFG_STATE_REG_CREG1 0x06
72 #define UV5_CFG_STATE_REG_CREG2 0x07
73 #define UV5_CFG_STATE_REG_CREG3 0x08
74 #define UV5_CFG_STATE_REG_BREAK 0x09
75 #define UV5_CFG_STATE_REG_EDGES 0x0A
76 #define UV5_CFG_STATE_REG_OPTREG 0x0B
77 #define UV5_MESASURE_STATE_REG_OSR 0x00
78 #define UV5_MESASURE_STATE_REG_TEMP 0x01
79 #define UV5_MESASURE_STATE_REG_MRES1 0x02
80 #define UV5_MESASURE_STATE_REG_MRES2 0x03
81 #define UV5_MESASURE_STATE_REG_MRES3 0x04
82 #define UV5_MESASURE_STATE_REG_OUTCONV_L 0x05
83 #define UV5_MESASURE_STATE_REG_OUTCONV_H 0x06
84  // uv5_reg
86 
106 #define UV5_START_MEASURMENT 0x80
107 #define UV5_POWER_DOWN 0x40
108 #define UV5_SW_RESET 0x08
109 #define UV5_CONFIGURATION_MODE 0x02
110 #define UV5_MEASUREMENT_MODE 0x03
111 
116 #define UV5_DEVID 0x20
117 #define UV5_MUT 0x01
118 
123 #define UV5_GAIN_2048X 0x00
124 #define UV5_GAIN_1024X 0x10
125 #define UV5_GAIN_512X 0x20
126 #define UV5_GAIN_256X 0x30
127 #define UV5_GAIN_128X 0x40
128 #define UV5_GAIN_64X 0x50
129 #define UV5_GAIN_32X 0x60
130 #define UV5_GAIN_16X 0x70
131 #define UV5_GAIN_8X 0x80
132 #define UV5_GAIN_4X 0x90
133 #define UV5_GAIN_2X 0xA0
134 #define UV5_GAIN_1X 0xB0
135 #define UV5_TIME_1_MS 0x00
136 #define UV5_TIME_2_MS 0x01
137 #define UV5_TIME_4_MS 0x02
138 #define UV5_TIME_8_MS 0x03
139 #define UV5_TIME_16_MS 0x04
140 #define UV5_TIME_32_MS 0x05
141 #define UV5_TIME_64_MS 0x06
142 #define UV5_TIME_128_MS 0x07
143 #define UV5_TIME_256_MS 0x08
144 #define UV5_TIME_512_MS 0x09
145 #define UV5_TIME_1024_MS 0x0A
146 #define UV5_TIME_2048_MS 0x0B
147 #define UV5_TIME_4096_MS 0x0C
148 #define UV5_TIME_8192_MS 0x0D
149 #define UV5_TIME_16384_MS 0x0E
150 
155 #define UV5_EN_TM 0x40
156 #define UV5_EN_DIV 0x08
157 #define UV5_DIV_256 0x07
158 #define UV5_DIV_128 0x06
159 #define UV5_DIV_64 0x05
160 #define UV5_DIV_32 0x04
161 #define UV5_DIV_16 0x03
162 #define UV5_DIV_8 0x02
163 #define UV5_DIV_4 0x01
164 #define UV5_DIV_2 0x00
165 
170 #define UV5_MMODE_CONT 0x00
171 #define UV5_MMODE_CMD 0x40
172 #define UV5_MMODE_SYNS 0x80
173 #define UV5_MMODE_SYND 0xC0
174 #define UV5_STANDBY_ON 0x10
175 #define UV5_READY_PUSH_PULL 0x00
176 #define UV5_READY_OPEN_DRAIN 0x08
177 #define UV5_CCLK_1024_KHZ 0x00
178 #define UV5_CCLK_2048_KHZ 0x01
179 #define UV5_CCLK_4096_KHZ 0x02
180 #define UV5_CCLK_8192_KHZ 0x03
181 
182 #define UV5_TEMPERATURE_CALC_CONST 0.05
183 #define UV5_TEMPERATURE_CALC_VALUE 66.9
184 
190 #define UV5_DEVICE_ADDRESS_00 0x74
191 #define UV5_DEVICE_ADDRESS_01 0x75
192 #define UV5_DEVICE_ADDRESS_10 0x76
193 #define UV5_DEVICE_ADDRESS_11 0x77
194  // uv5_set
196 
211 #define UV5_MAP_MIKROBUS( cfg, mikrobus ) \
212  cfg.scl = MIKROBUS( mikrobus, MIKROBUS_SCL ); \
213  cfg.sda = MIKROBUS( mikrobus, MIKROBUS_SDA ); \
214  cfg.syn = MIKROBUS( mikrobus, MIKROBUS_RST ); \
215  cfg.rdy = MIKROBUS( mikrobus, MIKROBUS_INT )
216  // uv5_map // uv5
219 
224 typedef struct
225 {
226  // Output pins
227  digital_out_t syn;
229  // Input pins
230  digital_in_t rdy;
232  // Modules
233  i2c_master_t i2c;
235  // I2C slave address
236  uint8_t slave_address;
238 } uv5_t;
239 
244 typedef struct
245 {
246  pin_name_t scl;
247  pin_name_t sda;
249  pin_name_t syn;
250  pin_name_t rdy;
252  uint32_t i2c_speed;
253  uint8_t i2c_address;
255 } uv5_cfg_t;
256 
261 typedef enum
262 {
263  UV5_OK = 0,
264  UV5_ERROR = -1
265 
267 
283 void uv5_cfg_setup ( uv5_cfg_t *cfg );
284 
298 err_t uv5_init ( uv5_t *ctx, uv5_cfg_t *cfg );
299 
312 err_t uv5_default_cfg ( uv5_t *ctx );
313 
328 err_t uv5_generic_write ( uv5_t *ctx, uint8_t reg, uint8_t *data_in, uint8_t len );
329 
344 err_t uv5_generic_read ( uv5_t *ctx, uint8_t reg, uint8_t *data_out, uint8_t len );
345 
346 
360 err_t uv5_write_cfg_reg ( uv5_t *ctx, uint8_t reg, uint8_t data_in );
361 
375 err_t uv5_write_measu_reg ( uv5_t *ctx, uint8_t reg, uint8_t *data_in );
376 
390 err_t uv5_read_cfg_reg ( uv5_t *ctx, uint8_t reg, uint8_t *data_out );
391 
405 err_t uv5_read_measu_reg ( uv5_t *ctx, uint8_t reg, uint8_t *data_out );
406 
416 void uv5_set_syn_pin ( uv5_t *ctx, uint8_t pin_state );
417 
427 uint8_t uv5_get_rdy_pin ( uv5_t *ctx );
428 
439 err_t uv5_sw_reset ( uv5_t *ctx );
440 
452 err_t uv5_temperature_read ( uv5_t *ctx, float *temp_data );
453 
465 err_t uv5_channel_uva_read ( uv5_t *ctx, uint16_t *uva_data );
466 
478 err_t uv5_channel_uvb_read ( uv5_t *ctx, uint16_t *uvb_data );
479 
491 err_t uv5_channel_uvc_read ( uv5_t *ctx, uint16_t *uvc_data );
492 
493 #ifdef __cplusplus
494 }
495 #endif
496 #endif // UV5_H
497  // uv5
499 
500 // ------------------------------------------------------------------------ END
uv5_cfg_t::i2c_speed
uint32_t i2c_speed
Definition: uv5.h:252
uv5_channel_uvc_read
err_t uv5_channel_uvc_read(uv5_t *ctx, uint16_t *uvc_data)
UV 5 read raw UVC data function.
uv5_set_syn_pin
void uv5_set_syn_pin(uv5_t *ctx, uint8_t pin_state)
UV 5 set SYN pin state function.
uv5_sw_reset
err_t uv5_sw_reset(uv5_t *ctx)
UV 5 software reset function.
uv5_cfg_t::sda
pin_name_t sda
Definition: uv5.h:247
uv5_t::i2c
i2c_master_t i2c
Definition: uv5.h:233
uv5_t::slave_address
uint8_t slave_address
Definition: uv5.h:236
uv5_get_rdy_pin
uint8_t uv5_get_rdy_pin(uv5_t *ctx)
UV 5 get READY pin state function.
uv5_generic_read
err_t uv5_generic_read(uv5_t *ctx, uint8_t reg, uint8_t *data_out, uint8_t len)
UV 5 I2C reading function.
uv5_read_cfg_reg
err_t uv5_read_cfg_reg(uv5_t *ctx, uint8_t reg, uint8_t *data_out)
UV 5 configuration mode register reading function.
uv5_cfg_setup
void uv5_cfg_setup(uv5_cfg_t *cfg)
UV 5 configuration object setup function.
uv5_cfg_t::scl
pin_name_t scl
Definition: uv5.h:246
uv5_t::rdy
digital_in_t rdy
Definition: uv5.h:230
uv5_t
UV 5 Click context object.
Definition: uv5.h:225
uv5_read_measu_reg
err_t uv5_read_measu_reg(uv5_t *ctx, uint8_t reg, uint8_t *data_out)
UV 5 measurement mode register reading function.
uv5_cfg_t
UV 5 Click configuration object.
Definition: uv5.h:245
uv5_default_cfg
err_t uv5_default_cfg(uv5_t *ctx)
UV 5 default configuration function.
uv5_temperature_read
err_t uv5_temperature_read(uv5_t *ctx, float *temp_data)
UV 5 read temperature function.
uv5_return_value_t
uv5_return_value_t
UV 5 Click return value data.
Definition: uv5.h:262
uv5_channel_uvb_read
err_t uv5_channel_uvb_read(uv5_t *ctx, uint16_t *uvb_data)
UV 5 read raw UVB data function.
uv5_write_cfg_reg
err_t uv5_write_cfg_reg(uv5_t *ctx, uint8_t reg, uint8_t data_in)
UV 5 configuration mode register write function.
uv5_generic_write
err_t uv5_generic_write(uv5_t *ctx, uint8_t reg, uint8_t *data_in, uint8_t len)
UV 5 I2C writing function.
uv5_cfg_t::syn
pin_name_t syn
Definition: uv5.h:249
uv5_write_measu_reg
err_t uv5_write_measu_reg(uv5_t *ctx, uint8_t reg, uint8_t *data_in)
UV 5 measurement mode register write function.
uv5_t::syn
digital_out_t syn
Definition: uv5.h:227
uv5_cfg_t::rdy
pin_name_t rdy
Definition: uv5.h:250
uv5_channel_uva_read
err_t uv5_channel_uva_read(uv5_t *ctx, uint16_t *uva_data)
UV 5 read raw UVA data function.
UV5_ERROR
@ UV5_ERROR
Definition: uv5.h:264
UV5_OK
@ UV5_OK
Definition: uv5.h:263
uv5_cfg_t::i2c_address
uint8_t i2c_address
Definition: uv5.h:253
uv5_init
err_t uv5_init(uv5_t *ctx, uv5_cfg_t *cfg)
UV 5 initialization function.