loadcell3  2.0.0.0
loadcell3.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 LOADCELL3_H
29 #define LOADCELL3_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 
49 
70 #define LOADCELL3_REG_TEST_MICRO_INTERFACE_CONTROL 0x0C
71 #define LOADCELL3_REG_TEST_PADC_DATA_1 0x10
72 #define LOADCELL3_REG_TEST_PADC_DATA_2 0x11
73 #define LOADCELL3_REG_TEST_TADC_DATA_1 0x14
74 #define LOADCELL3_REG_TEST_TADC_DATA_2 0x15
75 
76 #define LOADCELL3_REG_CTRL_STATUS_PSMON_1 0x58
77 #define LOADCELL3_REG_CTRL_STATUS_AFEDIAG 0x5A
78 #define LOADCELL3_REG_CTRL_STATUS_P_GAIN_SELECT 0x47
79 #define LOADCELL3_REG_CTRL_STATUS_T_GAIN_SELECT 0x48
80 #define LOADCELL3_REG_CTRL_STATUS_TEMP_CTRL 0x4C
81 #define LOADCELL3_REG_CTRL_STATUS_OFFSET_CANCEL 0x4E
82 #define LOADCELL3_REG_CTRL_STATUS_DAC_REG0_1 0x30
83 #define LOADCELL3_REG_CTRL_STATUS_DAC_REG0_2 0x31
84 #define LOADCELL3_REG_CTRL_STATUS_OP_STAGE_CTRL 0x3B
85 
86 #define LOADCELL3_REG_EEPROM_ARRAY_START 0x00
87 #define LOADCELL3_REG_EEPROM_ARRAY_END 0x7F
88 #define LOADCELL3_REG_EEPROM_CACHE_BYTE_0 0x80
89 #define LOADCELL3_REG_EEPROM_CACHE_BYTE_1 0x81
90 #define LOADCELL3_REG_EEPROM_PAGE_ADDRESS 0x82
91 #define LOADCELL3_REG_EEPROM_CTRL 0x83
92 #define LOADCELL3_REG_EEPROM_CRC 0x84
93 #define LOADCELL3_REG_EEPROM_STATUS 0x85
94 #define LOADCELL3_REG_EEPROM_CRC_STATUS 0x86
95 #define LOADCELL3_REG_EEPROM_CRC_VALUE 0x87
96  // loadcell3_reg
98 
113 #define LOADCELL3_SET_IF_SEL_ACCESSES_CONTROLLER 0x00
114 #define LOADCELL3_SET_IF_SEL_ACCESSES_DIGITAL_INTERFACE 0x01
115 
116 #define LOADCELL3_SET_TSEM_MODE_SINGLE_ENDED 0x00
117 #define LOADCELL3_SET_TSEM_MODE_DIFFERENTIAL 0x01
118 
119 #define LOADCELL3_SET_T_MUX_CTRL_EXT_TEMPE 0x00
120 #define LOADCELL3_SET_T_MUX_CTRL_TEST 0x01
121 #define LOADCELL3_SET_T_MUX_CTRL_INT_TEMPE 0x02
122 #define LOADCELL3_SET_T_MUX_CTRL_BRIDGE_CURRENT 0x03
123 #define LOADCELL3_SET_T_MUX_CTRL_ITEMP 0x04
124 
125 #define LOADCELL3_SET_GAIN_1_33 0x00
126 #define LOADCELL3_SET_GAIN_2 0x01
127 #define LOADCELL3_SET_GAIN_4 0x02
128 #define LOADCELL3_SET_GAIN_10 0x03
129 #define LOADCELL3_SET_GAIN_20 0x04
130 #define LOADCELL3_SET_GAIN_40 0x05
131 #define LOADCELL3_SET_GAIN_100 0x06
132 #define LOADCELL3_SET_GAIN_200 0x07
133 
134 #define LOADCELL3_SET_ITEMP_CTRL_50_mA 0x00
135 #define LOADCELL3_SET_ITEMP_CTRL_100_mA 0x01
136 #define LOADCELL3_SET_ITEMP_CTRL_200_mA 0x02
137 #define LOADCELL3_SET_ITEMP_CTRL_1000_mA 0x03
138 #define LOADCELL3_SET_ITEMP_CTRL_OFF 0x04
139 
140 #define LOADCELL3_SET_OFFSET_CANCEL_0_mV 0x00
141 #define LOADCELL3_SET_OFFSET_CANCEL_3_65_mV 0x01
142 #define LOADCELL3_SET_OFFSET_CANCEL_7_3_mV 0x02
143 #define LOADCELL3_SET_OFFSET_CANCEL_10_95_mV 0x03
144 #define LOADCELL3_SET_OFFSET_CANCEL_14_6_mV 0x04
145 #define LOADCELL3_SET_OFFSET_CANCEL_18_28_mV 0x05
146 #define LOADCELL3_SET_OFFSET_CANCEL_21_9_mV 0x06
147 #define LOADCELL3_SET_OFFSET_CANCEL_25_55_mV 0x07
148 #define LOADCELL3_SET_OFFSET_CANCEL_29_2_mV 0x08
149 #define LOADCELL3_SET_OFFSET_CANCEL_32_85_mV 0x09
150 #define LOADCELL3_SET_OFFSET_CANCEL_36_5_mV 0x0A
151 #define LOADCELL3_SET_OFFSET_CANCEL_40_15_mV 0x0B
152 #define LOADCELL3_SET_OFFSET_CANCEL_43_8_mV 0x0C
153 #define LOADCELL3_SET_OFFSET_CANCEL_47_45_mV 0x0D
154 #define LOADCELL3_SET_OFFSET_CANCEL_51_1_mV 0x0E
155 #define LOADCELL3_SET_OFFSET_CANCEL_54_75_mV 0x0F
156 
157 #define LOADCELL3_SET_OFFSET_CURRENT_VINPN 0x00
158 #define LOADCELL3_SET_OFFSET_CURRENT_VINPP 0x01
159 
165 #define LOADCELL3_SET_DEV_ADDR 0x42
166 #define LOADCELL3_SET_MEMORY_PAGE_TEST_REG 0x40
167 #define LOADCELL3_SET_MEMORY_PAGE_CONTROL_AND_STATUS_REG 0x42
168 #define LOADCELL3_SET_MEMORY_PAGE_EEPROM_CACHE_CELLS 0x45
169 #define LOADCELL3_SET_MEMORY_PAGE_CTRL_AND_STATUS_REG 0x47
170  // loadcell3_set
172 
182 #define LOADCELL3_WEIGHT_ZERO 0
183 #define LOADCELL3_WEIGHT_100G 100
184 #define LOADCELL3_WEIGHT_500G 500
185 #define LOADCELL3_WEIGHT_1000G 1000
186 #define LOADCELL3_WEIGHT_5000G 5000
187 #define LOADCELL3_WEIGHT_10000G 10000
188  // weight
190 
200 #define LOADCELL3_DATA_NO_DATA 0
201 #define LOADCELL3_DATA_OK 1
202  // status
204 
219 #define LOADCELL3_MAP_MIKROBUS( cfg, mikrobus ) \
220  cfg.scl = MIKROBUS( mikrobus, MIKROBUS_SCL ); \
221  cfg.sda = MIKROBUS( mikrobus, MIKROBUS_SDA ); \
222  cfg.an = MIKROBUS( mikrobus, MIKROBUS_AN )
223  // loadcell3_map // loadcell3
226 
231 typedef struct
232 {
233  // Input pins
234 
235  digital_in_t an;
237  // Modules
238 
239  i2c_master_t i2c;
241  // I2C slave address
242 
243  uint8_t slave_address;
245 } loadcell3_t;
246 
251 typedef struct
252 {
253  pin_name_t scl;
254  pin_name_t sda;
255  pin_name_t an;
257  uint32_t i2c_speed;
258  uint8_t i2c_address;
261 
266 typedef enum
267 {
269  LOADCELL3_ERROR = -1
270 
272 
277 typedef struct
278 {
279  float tare;
280  uint8_t tare_ok;
291 }
293 
312 
330 
347 
365 err_t loadcell3_generic_write ( loadcell3_t *ctx, uint8_t reg, uint8_t *tx_buf, uint8_t tx_len );
366 
384 err_t loadcell3_generic_read ( loadcell3_t *ctx, uint8_t reg, uint8_t *rx_buf, uint8_t rx_len );
385 
403 err_t loadcell3_generic_eeprom_write ( loadcell3_t *ctx, uint8_t reg, uint8_t *tx_buf, uint8_t tx_len );
404 
422 err_t loadcell3_generic_eeprom_read ( loadcell3_t *ctx, uint8_t reg, uint8_t *rx_buf, uint8_t rx_len );
423 
441 err_t loadcell3_generic_test_page_write ( loadcell3_t *ctx, uint8_t reg, uint8_t *tx_buf, uint8_t tx_len );
442 
460 err_t loadcell3_generic_test_page_read ( loadcell3_t *ctx, uint8_t reg, uint8_t *rx_buf, uint8_t rx_len );
461 
477 err_t loadcell3_set_memory_page_slave_addr ( loadcell3_t *ctx, uint8_t memory_page );
478 
494 
510 
526 
542 err_t loadcell3_set_p_gain ( loadcell3_t *ctx, uint8_t p_gain );
543 
559 err_t loadcell3_set_t_gain ( loadcell3_t *ctx, uint8_t t_gain );
560 
576 err_t loadcell3_set_temp_mode ( loadcell3_t *ctx, uint8_t t_mode );
577 
593 err_t loadcell3_set_t_mux_ctrl ( loadcell3_t *ctx, uint8_t t_mux_ctrl );
594 
610 err_t loadcell3_itemp_ctrl ( loadcell3_t *ctx, uint8_t itemp_ctrl );
611 
628 err_t loadcell3_set_offset ( loadcell3_t *ctx, uint8_t offset_cancel_val, uint8_t offset_cancel_sel );
629 
644 
659 
673 void loadcell3_tare ( loadcell3_t *ctx, loadcell3_data_t *cell_data );
674 
696 err_t loadcell3_calibration ( loadcell3_t *ctx, uint16_t cal_val, loadcell3_data_t *cell_data );
697 
712 
713 #ifdef __cplusplus
714 }
715 #endif
716 #endif // LOADCELL3_H
717  // loadcell3
719 
720 // ------------------------------------------------------------------------ END
loadcell3_cfg_t
Load Cell 3 Click configuration object.
Definition: loadcell3.h:252
loadcell3_get_t_adc_data
int16_t loadcell3_get_t_adc_data(loadcell3_t *ctx)
Load Cell 3 get temperature ADC data function.
loadcell3_data_t::weight_data_100g_ok
uint8_t weight_data_100g_ok
Definition: loadcell3.h:282
loadcell3_generic_read
err_t loadcell3_generic_read(loadcell3_t *ctx, uint8_t reg, uint8_t *rx_buf, uint8_t rx_len)
Load Cell 3 I2C reading function.
loadcell3_t::i2c
i2c_master_t i2c
Definition: loadcell3.h:239
loadcell3_data_t
Load Cell 3 Click data structure definition.
Definition: loadcell3.h:278
loadcell3_tare
void loadcell3_tare(loadcell3_t *ctx, loadcell3_data_t *cell_data)
Load Cell 3 tare the scales function.
loadcell3_default_cfg
err_t loadcell3_default_cfg(loadcell3_t *ctx)
Load Cell 3 default configuration function.
loadcell3_cfg_t::i2c_address
uint8_t i2c_address
Definition: loadcell3.h:258
loadcell3_generic_eeprom_read
err_t loadcell3_generic_eeprom_read(loadcell3_t *ctx, uint8_t reg, uint8_t *rx_buf, uint8_t rx_len)
Load Cell 3 I2C EEPROM reading function.
loadcell3_data_t::tare
float tare
Definition: loadcell3.h:279
loadcell3_itemp_ctrl
err_t loadcell3_itemp_ctrl(loadcell3_t *ctx, uint8_t itemp_ctrl)
Load Cell 3 set ITEMP control function.
loadcell3_t
Load Cell 3 Click context object.
Definition: loadcell3.h:232
loadcell3_data_t::weight_data_10000g_ok
uint8_t weight_data_10000g_ok
Definition: loadcell3.h:290
loadcell3_data_t::weight_coeff_1000g
float weight_coeff_1000g
Definition: loadcell3.h:285
loadcell3_data_t::weight_data_500g_ok
uint8_t weight_data_500g_ok
Definition: loadcell3.h:284
loadcell3_get_weight
float loadcell3_get_weight(loadcell3_t *ctx, loadcell3_data_t *cell_data)
Load Cell 3 get weight function.
loadcell3_set_p_gain
err_t loadcell3_set_p_gain(loadcell3_t *ctx, uint8_t p_gain)
Load Cell 3 set pressure gain function.
loadcell3_cfg_t::an
pin_name_t an
Definition: loadcell3.h:255
loadcell3_data_t::weight_coeff_10000g
float weight_coeff_10000g
Definition: loadcell3.h:289
loadcell3_get_p_adc_data
int16_t loadcell3_get_p_adc_data(loadcell3_t *ctx)
Load Cell 3 get pressure ADC data function.
loadcell3_soft_reset
err_t loadcell3_soft_reset(loadcell3_t *ctx)
Load Cell 3 soft reset function.
loadcell3_set_temp_mode
err_t loadcell3_set_temp_mode(loadcell3_t *ctx, uint8_t t_mode)
Load Cell 3 set temperature mode function.
loadcell3_set_memory_page_slave_addr
err_t loadcell3_set_memory_page_slave_addr(loadcell3_t *ctx, uint8_t memory_page)
Load Cell 3 set memory page function.
LOADCELL3_ERROR
@ LOADCELL3_ERROR
Definition: loadcell3.h:269
loadcell3_init
err_t loadcell3_init(loadcell3_t *ctx, loadcell3_cfg_t *cfg)
Load Cell 3 initialization function.
loadcell3_set_t_gain
err_t loadcell3_set_t_gain(loadcell3_t *ctx, uint8_t t_gain)
Load Cell 3 set temperature gain function.
loadcell3_cfg_t::sda
pin_name_t sda
Definition: loadcell3.h:254
loadcell3_data_t::tare_ok
uint8_t tare_ok
Definition: loadcell3.h:280
loadcell3_data_t::weight_coeff_100g
float weight_coeff_100g
Definition: loadcell3.h:281
loadcell3_cfg_setup
void loadcell3_cfg_setup(loadcell3_cfg_t *cfg)
Load Cell 3 configuration object setup function.
loadcell3_generic_test_page_write
err_t loadcell3_generic_test_page_write(loadcell3_t *ctx, uint8_t reg, uint8_t *tx_buf, uint8_t tx_len)
Load Cell 3 test I2C writing function.
loadcell3_generic_test_page_read
err_t loadcell3_generic_test_page_read(loadcell3_t *ctx, uint8_t reg, uint8_t *rx_buf, uint8_t rx_len)
Load Cell 3 Control and Status I2C EEPROM reading function.
loadcell3_set_t_mux_ctrl
err_t loadcell3_set_t_mux_ctrl(loadcell3_t *ctx, uint8_t t_mux_ctrl)
Load Cell 3 set mux control function.
loadcell3_generic_eeprom_write
err_t loadcell3_generic_eeprom_write(loadcell3_t *ctx, uint8_t reg, uint8_t *tx_buf, uint8_t tx_len)
Load Cell 3 EEPROM I2C writing function.
loadcell3_data_t::weight_coeff_500g
float weight_coeff_500g
Definition: loadcell3.h:283
loadcell3_cfg_t::i2c_speed
uint32_t i2c_speed
Definition: loadcell3.h:257
loadcell3_t::slave_address
uint8_t slave_address
Definition: loadcell3.h:243
loadcell3_return_value_t
loadcell3_return_value_t
Load Cell 3 Click return value data.
Definition: loadcell3.h:267
loadcell3_set_offset
err_t loadcell3_set_offset(loadcell3_t *ctx, uint8_t offset_cancel_val, uint8_t offset_cancel_sel)
Load Cell 3 set offset function.
loadcell3_accesses_digital_interface_control
err_t loadcell3_accesses_digital_interface_control(loadcell3_t *ctx)
Load Cell 3 accesses digital interface control function.
loadcell3_cfg_t::scl
pin_name_t scl
Definition: loadcell3.h:253
loadcell3_calibration
err_t loadcell3_calibration(loadcell3_t *ctx, uint16_t cal_val, loadcell3_data_t *cell_data)
Load Cell 3 calibration function.
loadcell3_data_t::weight_data_1000g_ok
uint8_t weight_data_1000g_ok
Definition: loadcell3.h:286
loadcell3_generic_write
err_t loadcell3_generic_write(loadcell3_t *ctx, uint8_t reg, uint8_t *tx_buf, uint8_t tx_len)
Load Cell 3 I2C writing function.
loadcell3_accesses_controller
err_t loadcell3_accesses_controller(loadcell3_t *ctx)
Load Cell 3 accesses controller function.
loadcell3_data_t::weight_data_5000g_ok
uint8_t weight_data_5000g_ok
Definition: loadcell3.h:288
LOADCELL3_OK
@ LOADCELL3_OK
Definition: loadcell3.h:268
loadcell3_data_t::weight_coeff_5000g
float weight_coeff_5000g
Definition: loadcell3.h:287
loadcell3_t::an
digital_in_t an
Definition: loadcell3.h:235