moisture  2.0.0.0
moisture.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 MOISTURE_H
36 #define MOISTURE_H
37 
38 #include "mikrosdk_version.h"
39 
40 #ifdef __GNUC__
41 #if mikroSDK_GET_VERSION < 20800ul
42 #include "rcu_delays.h"
43 #else
44 #include "delays.h"
45 #endif
46 #endif
47 
48 #include "drv_digital_out.h"
49 #include "drv_digital_in.h"
50 #include "drv_i2c_master.h"
51 
52 // -------------------------------------------------------------- PUBLIC MACROS
62 #define MOISTURE_MAP_MIKROBUS( cfg, mikrobus ) \
63  cfg.scl = MIKROBUS( mikrobus, MIKROBUS_SCL ); \
64  cfg.sda = MIKROBUS( mikrobus, MIKROBUS_SDA ); \
65  cfg.int_pin = MIKROBUS( mikrobus, MIKROBUS_INT )
66 
72 #define MOISTURE_RETVAL uint8_t
73 
74 #define MOISTURE_OK 0x00
75 #define MOISTURE_INIT_ERROR 0xFF
76 
82 #define MOISTURE_DEV_ADR_GND 0x2A
83 #define MOISTURE_DEV_ADR_VCC 0x2B
84 
90 #define MOISTURE_DEFAULT_OFFSET 0x00AA
91 
97 #define MOISTURE_REG_DATA 0x00
98 #define MOISTURE_REG_RCNT 0x08
99 #define MOISTURE_REG_OFFSET 0x0C
100 #define MOISTURE_REG_SETTLE_CNT 0x10
101 #define MOISTURE_REG_CLOCK_DIVIDERS 0x14
102 #define MOISTURE_REG_STATUS 0x18
103 #define MOISTURE_REG_ERR_CFG 0x19
104 #define MOISTURE_REG_CFG 0x1A
105 #define MOISTURE_REG_MUX_CFG 0x1B
106 #define MOISTURE_REG_RESET_DEV 0x1C
107 #define MOISTURE_REG_DRIVE_CURR 0x1E
108 #define MOISTURE_REG_DEVICE_ID 0x7F
109 #define MOISTURE_REG_MFC_ID 0x7E
110 
116 #define MOISTURE_DRIVE_CURR_0_016mA 0x0000
117 #define MOISTURE_DRIVE_CURR_0_018mA 0x0800
118 #define MOISTURE_DRIVE_CURR_0_021mA 0x1000
119 #define MOISTURE_DRIVE_CURR_0_025mA 0x1800
120 #define MOISTURE_DRIVE_CURR_0_028mA 0x2000
121 #define MOISTURE_DRIVE_CURR_0_033mA 0x2800
122 #define MOISTURE_DRIVE_CURR_0_038mA 0x3000
123 #define MOISTURE_DRIVE_CURR_0_044mA 0x3800
124 #define MOISTURE_DRIVE_CURR_0_052mA 0x4000
125 #define MOISTURE_DRIVE_CURR_0_060mA 0x4800
126 #define MOISTURE_DRIVE_CURR_0_069mA 0x5000
127 #define MOISTURE_DRIVE_CURR_0_081mA 0x5800
128 #define MOISTURE_DRIVE_CURR_0_093mA 0x6000
129 #define MOISTURE_DRIVE_CURR_0_108mA 0x6800
130 #define MOISTURE_DRIVE_CURR_0_126mA 0x7000
131 #define MOISTURE_DRIVE_CURR_0_146mA 0x7800
132 #define MOISTURE_DRIVE_CURR_0_169mA 0x8000
133 #define MOISTURE_DRIVE_CURR_0_196mA 0x8800
134 #define MOISTURE_DRIVE_CURR_0_228mA 0x9000
135 #define MOISTURE_DRIVE_CURR_0_264mA 0x9800
136 #define MOISTURE_DRIVE_CURR_0_307mA 0xA000
137 #define MOISTURE_DRIVE_CURR_0_356mA 0xA800
138 #define MOISTURE_DRIVE_CURR_0_413mA 0xB000
139 #define MOISTURE_DRIVE_CURR_0_479mA 0xB800
140 #define MOISTURE_DRIVE_CURR_0_555mA 0xC000
141 #define MOISTURE_DRIVE_CURR_0_644mA 0xC800
142 #define MOISTURE_DRIVE_CURR_0_747mA 0xD000
143 #define MOISTURE_DRIVE_CURR_0_867mA 0xD800
144 #define MOISTURE_DRIVE_CURR_1_006mA 0xE000
145 #define MOISTURE_DRIVE_CURR_1_167mA 0xE800
146 #define MOISTURE_DRIVE_CURR_1_354mA 0xF000
147 #define MOISTURE_DRIVE_CURR_1_571mA 0xF800
148 
154 #define MOISTURE_RESET_DEVICE 0x8000
155 #define MOISTURE_OUTPUT_GAIN_x1 0x0000
156 #define MOISTURE_OUTPUT_GAIN_x4 0x0200
157 #define MOISTURE_OUTPUT_GAIN_x8 0x0400
158 #define MOISTURE_OUTPUT_GAIN_x16 0x0600
159 
165 #define MOISTURE_MUX_CFG_AUTOSCAN_MODE 0x8000
166 #define MOISTURE_MUX_CFG_CONTINUOUS_MODE 0x0000
167 #define MOISTURE_MUX_CFG_RR_SEQUENCE_CH_01 0x0000
168 #define MOISTURE_MUX_CFG_DEGLITCH_1MHz 0x0001
169 #define MOISTURE_MUX_CFG_DEGLITCH_3_3MHz 0x0004
170 #define MOISTURE_MUX_CFG_DEGLITCH_10MHz 0x0005
171 #define MOISTURE_MUX_CFG_DEGLITCH_33MHz 0x0007
172 
178 #define MOISTURE_CFG_ACTIVE_CHAN_CH0 0x0000
179 #define MOISTURE_CFG_DEVICE_ACTIVE 0x0000
180 #define MOISTURE_CFG_DEVICE_IN_SLEEP_MODE 0x2000
181 #define MOISTURE_CFG_FULL_CURRENT_MODE 0x0000
182 #define MOISTURE_CFG_LOW_POWER_MODE 0x0800
183 #define MOISTURE_CFG_INT_PIN_ENABLE 0x0000
184 #define MOISTURE_CFG_INT_PIN_DISABLE 0x0080
185 
191 #define MOISTURE_ERR_CFG_WATCHDOG_TIMEOUT 0x2000
192 #define MOISTURE_ERR_CFG_AMPLITUDE_HIGH 0x1000
193 #define MOISTURE_ERR_CFG_AMPLITUDE_LOW 0x0800
194 #define MOISTURE_ERR_CFG_DATA_RDY_IN_PIN 0x0001
195 
201 #define MOISTURE_STATUS_ERR_CHAN_0 0x0000
202 #define MOISTURE_STATUS_ERR_WD 0x0800
203 #define MOISTURE_STATUS_ERR_AHW 0x0400
204 #define MOISTURE_STATUS_ERR_AHL 0x0200
205 #define MOISTURE_STATUS_DATA_RDY 0x0040
206 #define MOISTURE_STATUS_CH0_UNREADCONV 0x0008
207 
213 #define MOISTURE_CLOCK_DIVIDERS_x1 0x00001
214 #define MOISTURE_CLOCK_DIVIDERS_x2 0x00002
215 #define MOISTURE_CLOCK_DIVIDERS_x3 0x00003
216 #define MOISTURE_CLOCK_DIVIDERS_x4 0x00004
217 #define MOISTURE_CLOCK_DIVIDERS_x5 0x00005
218 #define MOISTURE_CLOCK_DIVIDERS_x6 0x00006
219 #define MOISTURE_CLOCK_DIVIDERS_x7 0x00007
220 #define MOISTURE_CLOCK_DIVIDERS_x8 0x00008
221 #define MOISTURE_CLOCK_DIVIDERS_x9 0x00009
222 #define MOISTURE_CLOCK_DIVIDERS_x10 0x0000A
223 #define MOISTURE_CLOCK_DIVIDERS_x11 0x0000B
224 #define MOISTURE_CLOCK_DIVIDERS_x12 0x0000C
225 #define MOISTURE_CLOCK_DIVIDERS_x13 0x0000D
226 #define MOISTURE_CLOCK_DIVIDERS_x14 0x0000E
227 #define MOISTURE_CLOCK_DIVIDERS_x15 0x0000F
228 
234 #define MOISTURE_FDC2112_ID 0x3054
235 #define MOISTURE_FDC2212_ID 0x3055
236 
242 #define MOISTURE_SETTLE_CNT_CFG_DEFAULT 0x0064
243 #define MOISTURE_RCNT_CFG_DEFAULT 0x010F
244 #define MOISTURE_COMBINED_VAL_CH0_DIV 0x2001
245 #define MOISTURE_DRIVE_CURR_CH0 0x7C00
246 #define MOISTURE_ALL_ERR_ENABLED 0xFFFF
247 #define MOISTURE_REG_CFG_DEFAULT_SETTINGS 0x0000
248 #define MOISTURE_INPUT_DEGLITCH_FILT_BWDTH_33MHZ 0x0007
249  // End group macro
252 // --------------------------------------------------------------- PUBLIC TYPES
261 typedef struct
262 {
263  // Input pins
264 
265  digital_in_t int_pin;
266 
267  // Modules
268 
269  i2c_master_t i2c;
270 
271  // ctx variable
272 
273  uint8_t slave_address;
274  uint16_t calib_air_data;
275 
276 } moisture_t;
277 
281 typedef struct
282 {
283  // Communication gpio pins
284 
285  pin_name_t scl;
286  pin_name_t sda;
287 
288  // Additional gpio pins
289 
290  pin_name_t int_pin;
291 
292  // static variable
293 
294  uint32_t i2c_speed;
295  uint8_t i2c_address;
296 
298  // End types group
300 // ----------------------------------------------- PUBLIC FUNCTION DECLARATIONS
301 
307 #ifdef __cplusplus
308 extern "C"{
309 #endif
310 
320 
330 
394 
405 void moisture_generic_write ( moisture_t *ctx, uint8_t reg, uint8_t *data_buf, uint8_t len );
406 
417 void moisture_generic_read ( moisture_t *ctx, uint8_t reg, uint8_t *data_buf, uint8_t len );
418 
428 void moisture_write_word ( moisture_t *ctx, uint8_t reg, uint16_t data_in );
429 
439 uint16_t moisture_read_word ( moisture_t *ctx, uint8_t reg );
440 
449 
514 void moisture_cfg( moisture_t *ctx, uint16_t gain, uint16_t offset, uint16_t clk_div );
515 
525 uint8_t moisture_get_data ( moisture_t *ctx );
526 
535 void moisture_cal ( moisture_t *ctx );
536 
546 
547 #ifdef __cplusplus
548 }
549 #endif
550 #endif // _MOISTURE_H_
551  // End public_function group
554 
555 // ------------------------------------------------------------------------ END
moisture_cal
void moisture_cal(moisture_t *ctx)
Chip calibration function.
moisture_t::calib_air_data
uint16_t calib_air_data
Definition: moisture.h:274
moisture_t::i2c
i2c_master_t i2c
Definition: moisture.h:269
moisture_check_interrupt
uint8_t moisture_check_interrupt(moisture_t *ctx)
Soft reset function.
MOISTURE_RETVAL
#define MOISTURE_RETVAL
Definition: moisture.h:72
moisture_cfg_setup
void moisture_cfg_setup(moisture_cfg_t *cfg)
Config Object Initialization function.
moisture_init
MOISTURE_RETVAL moisture_init(moisture_t *ctx, moisture_cfg_t *cfg)
Initialization function.
moisture_read_word
uint16_t moisture_read_word(moisture_t *ctx, uint8_t reg)
Read word function.
moisture_cfg_t::i2c_address
uint8_t i2c_address
Definition: moisture.h:295
moisture_cfg_t::int_pin
pin_name_t int_pin
Definition: moisture.h:290
moisture_default_cfg
void moisture_default_cfg(moisture_t *ctx)
Click Default Configuration function.
moisture_t::int_pin
digital_in_t int_pin
Definition: moisture.h:265
moisture_cfg_t
Click configuration structure definition.
Definition: moisture.h:282
moisture_t::slave_address
uint8_t slave_address
Definition: moisture.h:273
moisture_generic_read
void moisture_generic_read(moisture_t *ctx, uint8_t reg, uint8_t *data_buf, uint8_t len)
Generic read function.
moisture_get_data
uint8_t moisture_get_data(moisture_t *ctx)
Measurement data function.
moisture_t
Click ctx object definition.
Definition: moisture.h:262
moisture_cfg_t::scl
pin_name_t scl
Definition: moisture.h:285
moisture_generic_write
void moisture_generic_write(moisture_t *ctx, uint8_t reg, uint8_t *data_buf, uint8_t len)
Generic write function.
moisture_cfg_t::sda
pin_name_t sda
Definition: moisture.h:286
moisture_cfg_t::i2c_speed
uint32_t i2c_speed
Definition: moisture.h:294
moisture_soft_reset
void moisture_soft_reset(moisture_t *ctx)
Soft reset function.
moisture_write_word
void moisture_write_word(moisture_t *ctx, uint8_t reg, uint16_t data_in)
Write word function.
moisture_cfg
void moisture_cfg(moisture_t *ctx, uint16_t gain, uint16_t offset, uint16_t clk_div)
Configure device function.