hwmonitor2  2.1.0.0
hwmonitor2.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 HWMONITOR2_H
29 #define HWMONITOR2_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 HWMONITOR2_REG_CONFIGURATION 0x00
70 #define HWMONITOR2_REG_INT_STATUS_1 0x01
71 #define HWMONITOR2_REG_INT_STATUS_2 0x02
72 #define HWMONITOR2_REG_INT_MASK_1 0x03
73 #define HWMONITOR2_REG_INT_MASK_2 0x04
74 #define HWMONITOR2_REG_FAN_DIVISOR 0x05
75 #define HWMONITOR2_REG_OS_T_RES_CONFIG 0x06
76 #define HWMONITOR2_REG_CONVERSION_RATE 0x07
77 #define HWMONITOR2_REG_CHANNEL_DISABLE 0x08
78 #define HWMONITOR2_REG_INPUT_MODE 0x09
79 #define HWMONITOR2_REG_ADC_CONTROL 0x0A
80 #define HWMONITOR2_REG_CONVERS_RATE_CNT 0x0B
81 #define HWMONITOR2_REG_RAM_IN_0 0x20
82 #define HWMONITOR2_REG_RAM_IN_1 0x21
83 #define HWMONITOR2_REG_RAM_IN_2 0x22
84 #define HWMONITOR2_REG_RAM_IN_3 0x23
85 #define HWMONITOR2_REG_RAM_IN_4 0x24
86 #define HWMONITOR2_REG_RAM_IN_5 0x25
87 #define HWMONITOR2_REG_RAM_IN_6 0x26
88 #define HWMONITOR2_REG_RAM_TEMPERATURE 0x27
89 #define HWMONITOR2_REG_RAM_FAN_1 0x28
90 #define HWMONITOR2_REG_RAM_FAN_2 0x29
91 #define HWMONITOR2_REG_RAM_LIM_IN_0_H 0x2A
92 #define HWMONITOR2_REG_RAM_LIM_IN_0_L 0x2B
93 #define HWMONITOR2_REG_RAM_LIM_IN_1_H 0x2C
94 #define HWMONITOR2_REG_RAM_LIM_IN_1_L 0x2D
95 #define HWMONITOR2_REG_RAM_LIM_IN_2_H 0x2E
96 #define HWMONITOR2_REG_RAM_LIM_IN_2_L 0x2F
97 #define HWMONITOR2_REG_RAM_LIM_IN_3_H 0x30
98 #define HWMONITOR2_REG_RAM_LIM_IN_3_L 0x31
99 #define HWMONITOR2_REG_RAM_LIM_IN_4_H 0x32
100 #define HWMONITOR2_REG_RAM_LIM_IN_4_L 0x33
101 #define HWMONITOR2_REG_RAM_LIM_IN_5_H 0x34
102 #define HWMONITOR2_REG_RAM_LIM_IN_5_L 0x35
103 #define HWMONITOR2_REG_RAM_LIM_IN_6_H 0x36
104 #define HWMONITOR2_REG_RAM_LIM_IN_6_L 0x37
105 #define HWMONITOR2_REG_RAM_LIM_HOT_H 0x38
106 #define HWMONITOR2_REG_RAM_LIM_HOT_L 0x39
107 #define HWMONITOR2_REG_RAM_LIM_TEMP_H 0x3A
108 #define HWMONITOR2_REG_RAM_LIM_TEMP_L 0x3B
109 #define HWMONITOR2_REG_RAM_CURRENT_LIM_FUN_1 0x3C
110 #define HWMONITOR2_REG_RAM_CURRENT_LIM_FUN_2 0x3D
111 #define HWMONITOR2_REG_RAM_MANUFACTURE_ID 0x3E
112 #define HWMONITOR2_REG_RAM_REVISION_ID 0x3F
113  // hwmonitor2_reg
115 
130 #define HWMONITOR2_SET_CONFIG_START_DIS 0x00
131 #define HWMONITOR2_SET_CONFIG_START_EN 0x01
132 #define HWMONITOR2_SET_CONFIG_INT_DIS 0x00
133 #define HWMONITOR2_SET_CONFIG_INT_EN 0x01
134 #define HWMONITOR2_SET_CONFIG_INT_OPEN_DRAIN 0x00
135 #define HWMONITOR2_SET_CONFIG_INT_ACT_LOW 0x01
136 #define HWMONITOR2_SET_CONFIG_INT_CLR_DIS 0x00
137 #define HWMONITOR2_SET_CONFIG_INT_CLR_EN 0x01
138 #define HWMONITOR2_SET_CONFIG_CHA_NCLR_GPI 0x00
139 #define HWMONITOR2_SET_CONFIG_CHA_GPI 0x01
140 #define HWMONITOR2_SET_CONFIG_GPO_LOW 0x00
141 #define HWMONITOR2_SET_CONFIG_GPO_HIGH 0x01
142 #define HWMONITOR2_SET_CONFIG_PWR_ON 0x00
143 #define HWMONITOR2_SET_CONFIG_PWR_DIS 0x01
144 
149 #define HWMONITOR2_SET_FAN1_MODE_COUNT 0x00
150 #define HWMONITOR2_SET_FAN1_MODE_SENS_INPUT 0x01
151 #define HWMONITOR2_SET_FAN2_MODE_COUNT 0x00
152 #define HWMONITOR2_SET_FAN2_MODE_SENS_INPUT 0x02
153 #define HWMONITOR2_SET_FAN1_CTRL_SPEED_DIV1 0x00
154 #define HWMONITOR2_SET_FAN1_CTRL_SPEED_DIV2 0x04
155 #define HWMONITOR2_SET_FAN1_CTRL_SPEED_DIV4 0x08
156 #define HWMONITOR2_SET_FAN1_CTRL_SPEED_DIV8 0x0C
157 #define HWMONITOR2_SET_FAN2_CTRL_SPEED_DIV1 0x00
158 #define HWMONITOR2_SET_FAN2_CTRL_SPEED_DIV2 0x10
159 #define HWMONITOR2_SET_FAN2_CTRL_SPEED_DIV4 0x20
160 #define HWMONITOR2_SET_FAN2_CTRL_SPEED_DIV8 0x30
161 #define HWMONITOR2_SET_MODE_OS_DISABLE 0x00
162 #define HWMONITOR2_SET_MODE_OS_ENABLE 0x01
163 #define HWMONITOR2_SET_MODE_RST_DISABLE 0x00
164 #define HWMONITOR2_SET_MODE_RST_ENABLE 0x01
165 
170 #define HWMONITOR2_SET_TEMP_RES_8_bit 0x00
171 #define HWMONITOR2_SET_TEMP_RES_11_bit 0x01
172 #define HWMONITOR2_TEMP_RES_11_bit_BIT_MASK 0x08
173 
178 #define HWMONITOR2_SET_ALL_CH_ENABLE 0x00
179 #define HWMONITOR2_SET_ALL_CH_DISABLE 0xFF
180 
185 #define HWMONITOR2_MANUFACTURERS_ID 0x80
186 #define HWMONITOR2_STEPPING_DIE_REVISION_ID 0x08
187 
192 #define HWMONITOR2_CH_0 0
193 #define HWMONITOR2_CH_1 1
194 #define HWMONITOR2_CH_2 2
195 #define HWMONITOR2_CH_3 3
196 #define HWMONITOR2_CH_4 4
197 #define HWMONITOR2_CH_5 5
198 #define HWMONITOR2_CH_6 6
199 #define HWMONITOR2_FAN_1 0
200 #define HWMONITOR2_FAN_2 1
201 
207 #define HWMONITOR2_DEVICE_ADDRESS_0 0x28
208 #define HWMONITOR2_DEVICE_ADDRESS_1 0x29
209 #define HWMONITOR2_DEVICE_ADDRESS_2 0x2A
210 #define HWMONITOR2_DEVICE_ADDRESS_3 0x2B
211 #define HWMONITOR2_DEVICE_ADDRESS_4 0x2C
212 #define HWMONITOR2_DEVICE_ADDRESS_5 0x2D
213 #define HWMONITOR2_DEVICE_ADDRESS_6 0x2E
214 #define HWMONITOR2_DEVICE_ADDRESS_7 0x2F
215  // hwmonitor2_set
217 
232 #define HWMONITOR2_MAP_MIKROBUS( cfg, mikrobus ) \
233  cfg.scl = MIKROBUS( mikrobus, MIKROBUS_SCL ); \
234  cfg.sda = MIKROBUS( mikrobus, MIKROBUS_SDA ); \
235  cfg.rst = MIKROBUS( mikrobus, MIKROBUS_RST ); \
236  cfg.int_pin = MIKROBUS( mikrobus, MIKROBUS_INT )
237  // hwmonitor2_map // hwmonitor2
240 
245 typedef struct
246 {
247  // Output pins
248  digital_out_t rst;
250  // Input pins
251  digital_in_t int_pin;
253  // Modules
254  i2c_master_t i2c;
256  // I2C slave address
257  uint8_t slave_address;
259 } hwmonitor2_t;
260 
265 typedef struct
266 {
267  pin_name_t scl;
268  pin_name_t sda;
270  pin_name_t rst;
271  pin_name_t int_pin;
273  uint32_t i2c_speed;
274  uint8_t i2c_address;
277 
282 typedef struct
283 {
284  uint8_t start;
285  uint8_t int_enable;
286  uint8_t int_pol_sel;
287  uint8_t int_clear;
288  uint8_t chas_clear;
289  uint8_t gpo;
290  uint8_t init;
293 
298 typedef enum
299 {
301  HWMONITOR2_ERROR = -1
302 
304 
321 
336 
350 
365 err_t hwmonitor2_generic_write ( hwmonitor2_t *ctx, uint8_t reg, uint8_t *data_in, uint8_t len );
366 
381 err_t hwmonitor2_generic_read ( hwmonitor2_t *ctx, uint8_t reg, uint8_t *data_out, uint8_t len );
382 
394 
410 
426 
441 err_t hwmonitor2_get_device_id ( hwmonitor2_t *ctx, uint8_t *manufacture_id, uint8_t *revision_id );
442 
458 err_t hwmonitor2_set_temp_res ( hwmonitor2_t *ctx, uint8_t temp_res );
459 
473 err_t hwmonitor2_set_ch_out ( hwmonitor2_t *ctx, uint8_t ch_out );
474 
488 err_t hwmonitor2_get_temperature ( hwmonitor2_t *ctx, float *temperature );
489 
504 err_t hwmonitor2_get_analog_inputs ( hwmonitor2_t *ctx, uint8_t ch_pos, float *voltage );
505 
520 err_t hwmonitor2_get_fan_output ( hwmonitor2_t *ctx, uint8_t fan_pos, uint8_t *fan_output );
521 
534 
535 #ifdef __cplusplus
536 }
537 #endif
538 #endif // HWMONITOR2_H
539  // hwmonitor2
541 
542 // ------------------------------------------------------------------------ END
hwmonitor2_config_t::start
uint8_t start
Definition: hwmonitor2.h:284
hwmonitor2_t::int_pin
digital_in_t int_pin
Definition: hwmonitor2.h:251
hwmonitor2_get_fan_output
err_t hwmonitor2_get_fan_output(hwmonitor2_t *ctx, uint8_t fan_pos, uint8_t *fan_output)
HW Monitor 2 gets FAN output function.
hwmonitor2_config_t::gpo
uint8_t gpo
Definition: hwmonitor2.h:289
hwmonitor2_get_analog_inputs
err_t hwmonitor2_get_analog_inputs(hwmonitor2_t *ctx, uint8_t ch_pos, float *voltage)
HW Monitor 2 gets analog inputs voltage function.
hwmonitor2_get_device_id
err_t hwmonitor2_get_device_id(hwmonitor2_t *ctx, uint8_t *manufacture_id, uint8_t *revision_id)
HW Monitor 2 gets device ID function.
HWMONITOR2_OK
@ HWMONITOR2_OK
Definition: hwmonitor2.h:300
hwmonitor2_get_int_pin
uint8_t hwmonitor2_get_int_pin(hwmonitor2_t *ctx)
HW Monitor 2 gets interrupt function.
hwmonitor2_get_config
err_t hwmonitor2_get_config(hwmonitor2_t *ctx, hwmonitor2_config_t *config)
HW Monitor 2 gets configuration function.
hwmonitor2_cfg_t::sda
pin_name_t sda
Definition: hwmonitor2.h:268
hwmonitor2_generic_read
err_t hwmonitor2_generic_read(hwmonitor2_t *ctx, uint8_t reg, uint8_t *data_out, uint8_t len)
HW Monitor 2 I2C reading function.
hwmonitor2_set_temp_res
err_t hwmonitor2_set_temp_res(hwmonitor2_t *ctx, uint8_t temp_res)
HW Monitor 2 set temperature resolution function.
hwmonitor2_get_temperature
err_t hwmonitor2_get_temperature(hwmonitor2_t *ctx, float *temperature)
HW Monitor 2 gets temperature function.
hwmonitor2_cfg_setup
void hwmonitor2_cfg_setup(hwmonitor2_cfg_t *cfg)
HW Monitor 2 configuration object setup function.
hwmonitor2_t
HW Monitor 2 Click context object.
Definition: hwmonitor2.h:246
hwmonitor2_default_cfg
err_t hwmonitor2_default_cfg(hwmonitor2_t *ctx)
HW Monitor 2 default configuration function.
hwmonitor2_cfg_t::i2c_speed
uint32_t i2c_speed
Definition: hwmonitor2.h:273
hwmonitor2_reset
void hwmonitor2_reset(hwmonitor2_t *ctx)
HW Monitor 2 reset function.
hwmonitor2_cfg_t::scl
pin_name_t scl
Definition: hwmonitor2.h:267
hwmonitor2_cfg_t::rst
pin_name_t rst
Definition: hwmonitor2.h:270
hwmonitor2_cfg_t::i2c_address
uint8_t i2c_address
Definition: hwmonitor2.h:274
hwmonitor2_t::rst
digital_out_t rst
Definition: hwmonitor2.h:248
hwmonitor2_generic_write
err_t hwmonitor2_generic_write(hwmonitor2_t *ctx, uint8_t reg, uint8_t *data_in, uint8_t len)
HW Monitor 2 I2C writing function.
hwmonitor2_config_t
HW Monitor 2 Click configuration object.
Definition: hwmonitor2.h:283
hwmonitor2_init
err_t hwmonitor2_init(hwmonitor2_t *ctx, hwmonitor2_cfg_t *cfg)
HW Monitor 2 initialization function.
hwmonitor2_t::i2c
i2c_master_t i2c
Definition: hwmonitor2.h:254
hwmonitor2_config_t::int_clear
uint8_t int_clear
Definition: hwmonitor2.h:287
hwmonitor2_cfg_t
HW Monitor 2 Click configuration object.
Definition: hwmonitor2.h:266
hwmonitor2_t::slave_address
uint8_t slave_address
Definition: hwmonitor2.h:257
hwmonitor2_config_t::int_enable
uint8_t int_enable
Definition: hwmonitor2.h:285
hwmonitor2_config_t::chas_clear
uint8_t chas_clear
Definition: hwmonitor2.h:288
hwmonitor2_set_config
err_t hwmonitor2_set_config(hwmonitor2_t *ctx, hwmonitor2_config_t config)
HW Monitor 2 set the configuration function.
hwmonitor2_return_value_t
hwmonitor2_return_value_t
HW Monitor 2 Click return value data.
Definition: hwmonitor2.h:299
hwmonitor2_set_ch_out
err_t hwmonitor2_set_ch_out(hwmonitor2_t *ctx, uint8_t ch_out)
HW Monitor 2 set voltage/temperature channel function.
HWMONITOR2_ERROR
@ HWMONITOR2_ERROR
Definition: hwmonitor2.h:301
hwmonitor2_config_t::init
uint8_t init
Definition: hwmonitor2.h:290
hwmonitor2_cfg_t::int_pin
pin_name_t int_pin
Definition: hwmonitor2.h:271
hwmonitor2_config_t::int_pol_sel
uint8_t int_pol_sel
Definition: hwmonitor2.h:286