loadcell5  2.0.0.0
loadcell5.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 LOADCELL5_H
29 #define LOADCELL5_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_spi_master.h"
48 
49 
76 #define LOADCELL5_MODE_POWER_DOWN 0x00
77 #define LOADCELL5_MODE_POWER_UP 0x01
78  // pwr_mode
80 
91 #define LOADCELL5_UPDATE_RATE_16_7_Hz 0x00
92 #define LOADCELL5_UPDATE_RATE_10_Hz 0x01
93  // fil_sel
95 
106 #define LOADCELL5_GAIN_1 1
107 #define LOADCELL5_GAIN_128 128
108  // gain
110 
111  // loadcell5_set
113 
134 #define LOADCELL5_NEW_DATA_IS_AVAILABLE 0
135 #define LOADCELL5_NO_DATA 1
136  // check_data_ready
138 
149 #define LOADCELL5_STATUS_PAT_ADC_PERFORMED_NOT_CORRECTLY 0x00
150 #define LOADCELL5_STATUS_PAT_ADC_PERFORMED_CORRECTLY 0x01
151 #define LOADCELL5_STATUS_GAIN_128 0x00
152 #define LOADCELL5_STATUS_GAIN_1 0x04
153 #define LOADCELL5_STATUS_BITS_ID_0 0x08
154 #define LOADCELL5_STATUS_BITS_ID_1 0x10
155 #define LOADCELL5_STATUS_ERROR 0x20
156 #define LOADCELL5_STATUS_FILTER_UPDATE_RATE_16_7_HZ 0x00
157 #define LOADCELL5_STATUS_FILTER_UPDATE_RATE_10_HZ 0x40
158 #define LOADCELL5_STATUS_CONVERSION_NOT_AVAILABLE 0x80
159 #define LOADCELL5_STATUS_CONVERSION_IS_AVAILABLE 0x00
160 #define LOADCELL5_STATUS_CONVERSION_NOT_AVAILABLE 0x80
161 
167 #define LOADCELL5_DATA_NO_DATA 0
168 #define LOADCELL5_DATA_OK 1
169  // status
171 
172  // loadcell5_get
174 
189 #define LOADCELL5_WEIGHT_ZERO 0
190 #define LOADCELL5_WEIGHT_100G 100
191 #define LOADCELL5_WEIGHT_500G 500
192 #define LOADCELL5_WEIGHT_1000G 1000
193 #define LOADCELL5_WEIGHT_5000G 5000
194 #define LOADCELL5_WEIGHT_10000G 10000
195  // weight
197 
208 #define LOADCELL5_STATUS_PAT_ADC_PERFORMED_NOT_CORRECTLY 0x00
209 #define LOADCELL5_STATUS_PAT_ADC_PERFORMED_CORRECTLY 0x01
210 #define LOADCELL5_STATUS_GAIN_128 0x00
211 #define LOADCELL5_STATUS_GAIN_1 0x04
212 #define LOADCELL5_STATUS_BITS_ID_0 0x08
213 #define LOADCELL5_STATUS_BITS_ID_1 0x10
214 #define LOADCELL5_STATUS_ERROR 0x20
215 #define LOADCELL5_STATUS_FILTER_UPDATE_RATE_16_7_HZ 0x00
216 #define LOADCELL5_STATUS_FILTER_UPDATE_RATE_10_HZ 0x40
217 #define LOADCELL5_STATUS_CONVERSION_NOT_AVAILABLE 0x80
218 #define LOADCELL5_STATUS_CONVERSION_IS_AVAILABLE 0x00
219 #define LOADCELL5_STATUS_CONVERSION_NOT_AVAILABLE 0x80
220  // status
222 
223  // loadcell5_cfg_data
225 
240 #define LOADCELL5_MAP_MIKROBUS( cfg, mikrobus ) \
241  cfg.miso = MIKROBUS( mikrobus, MIKROBUS_MISO ); \
242  cfg.mosi = MIKROBUS( mikrobus, MIKROBUS_MOSI ); \
243  cfg.sck = MIKROBUS( mikrobus, MIKROBUS_SCK ); \
244  cfg.cs = MIKROBUS( mikrobus, MIKROBUS_CS ); \
245  cfg.rst = MIKROBUS( mikrobus, MIKROBUS_RST ); \
246  cfg.gn = MIKROBUS( mikrobus, MIKROBUS_PWM ); \
247  cfg.rdy = MIKROBUS( mikrobus, MIKROBUS_INT );
248  // loadcell5_map // loadcell5
251 
256 typedef struct
257 {
258  // Output pins
259 
260  digital_out_t rst;
261  digital_out_t gn;
263  // Input pins
264 
265  digital_in_t rdy;
267  // Modules
268 
269  spi_master_t spi;
271  pin_name_t chip_select;
273 } loadcell5_t;
274 
279 typedef struct
280 {
281  // Communication gpio pins
282 
283  pin_name_t miso;
284  pin_name_t mosi;
285  pin_name_t sck;
286  pin_name_t cs;
288  // Additional gpio pins
289 
290  pin_name_t rst;
291  pin_name_t gn;
292  pin_name_t rdy;
294  // static variable
295 
296  uint32_t spi_speed;
297  spi_master_mode_t spi_mode;
298  spi_master_chip_select_polarity_t cs_polarity;
301 
306 typedef struct
307 {
308  float tare;
309  uint8_t tare_ok;
320 }
322 
327 typedef enum
328 {
330  LOADCELL5_ERROR = -1
331 
333 
350 
366 
381 
398 err_t loadcell5_set_power_mode ( loadcell5_t *ctx, uint8_t pwr_mode );
399 
411 
428 err_t loadcell5_filter_select ( loadcell5_t *ctx, uint8_t fil_sel );
429 
446 err_t loadcell5_set_gain ( loadcell5_t *ctx, uint8_t gain );
447 
463 err_t loadcell5_get_data ( loadcell5_t *ctx, uint8_t *status, uint32_t *adc_data );
464 
476 uint32_t loadcell5_read_adc ( loadcell5_t *ctx );
477 
490 void loadcell5_tare ( loadcell5_t *ctx, loadcell5_data_t *cell_data );
491 
513 err_t loadcell5_calibration ( loadcell5_t *ctx, uint16_t cal_val, loadcell5_data_t *cell_data );
514 
528 
541 
542 #ifdef __cplusplus
543 }
544 #endif
545 #endif // LOADCELL5_H
546  // loadcell5
548 
549 // ------------------------------------------------------------------------ END
loadcell5_data_t::weight_data_500g_ok
uint8_t weight_data_500g_ok
Definition: loadcell5.h:313
loadcell5_get_weight
float loadcell5_get_weight(loadcell5_t *ctx, loadcell5_data_t *cell_data)
Load Cell 5 get weight function.
loadcell5_cfg_t::sck
pin_name_t sck
Definition: loadcell5.h:285
loadcell5_cfg_t::spi_speed
uint32_t spi_speed
Definition: loadcell5.h:296
loadcell5_data_t::weight_data_100g_ok
uint8_t weight_data_100g_ok
Definition: loadcell5.h:311
loadcell5_data_t::weight_coeff_1000g
float weight_coeff_1000g
Definition: loadcell5.h:314
loadcell5_t::gn
digital_out_t gn
Definition: loadcell5.h:261
loadcell5_check_data_ready
uint8_t loadcell5_check_data_ready(loadcell5_t *ctx)
Load Cell 5 get error function.
loadcell5_t::rdy
digital_in_t rdy
Definition: loadcell5.h:265
loadcell5_data_t
Load Cell 5 Click data structure definition.
Definition: loadcell5.h:307
loadcell5_calibration
err_t loadcell5_calibration(loadcell5_t *ctx, uint16_t cal_val, loadcell5_data_t *cell_data)
Load Cell 5 calibration function.
loadcell5_data_t::tare
float tare
Definition: loadcell5.h:308
loadcell5_t
Load Cell 5 Click context object.
Definition: loadcell5.h:257
loadcell5_cfg_t::spi_mode
spi_master_mode_t spi_mode
Definition: loadcell5.h:297
loadcell5_t::rst
digital_out_t rst
Definition: loadcell5.h:260
loadcell5_data_t::tare_ok
uint8_t tare_ok
Definition: loadcell5.h:309
loadcell5_data_t::weight_data_10000g_ok
uint8_t weight_data_10000g_ok
Definition: loadcell5.h:319
loadcell5_cfg_t::mosi
pin_name_t mosi
Definition: loadcell5.h:284
loadcell5_cfg_t::miso
pin_name_t miso
Definition: loadcell5.h:283
loadcell5_t::spi
spi_master_t spi
Definition: loadcell5.h:269
loadcell5_t::chip_select
pin_name_t chip_select
Definition: loadcell5.h:271
LOADCELL5_ERROR
@ LOADCELL5_ERROR
Definition: loadcell5.h:330
loadcell5_set_power_mode
err_t loadcell5_set_power_mode(loadcell5_t *ctx, uint8_t pwr_mode)
Load Cell 5 set power mode function.
loadcell5_cfg_t::rst
pin_name_t rst
Definition: loadcell5.h:290
loadcell5_filter_select
err_t loadcell5_filter_select(loadcell5_t *ctx, uint8_t fil_sel)
Load Cell 5 filter select function.
loadcell5_return_value_t
loadcell5_return_value_t
Load Cell 5 Click return value data.
Definition: loadcell5.h:328
loadcell5_cfg_t::cs
pin_name_t cs
Definition: loadcell5.h:286
loadcell5_data_t::weight_coeff_10000g
float weight_coeff_10000g
Definition: loadcell5.h:318
loadcell5_tare
void loadcell5_tare(loadcell5_t *ctx, loadcell5_data_t *cell_data)
Load Cell 5 tare the scales function.
loadcell5_cfg_t::gn
pin_name_t gn
Definition: loadcell5.h:291
loadcell5_get_data
err_t loadcell5_get_data(loadcell5_t *ctx, uint8_t *status, uint32_t *adc_data)
Load Cell 5 data reading function.
loadcell5_default_cfg
err_t loadcell5_default_cfg(loadcell5_t *ctx)
Load Cell 5 default configuration function.
loadcell5_hw_reset
void loadcell5_hw_reset(loadcell5_t *ctx)
Load Cell 5 set hardware reset function.
loadcell5_read_adc
uint32_t loadcell5_read_adc(loadcell5_t *ctx)
Load Cell 5 reading ADC data function.
loadcell5_init
err_t loadcell5_init(loadcell5_t *ctx, loadcell5_cfg_t *cfg)
Load Cell 5 initialization function.
loadcell5_data_t::weight_data_5000g_ok
uint8_t weight_data_5000g_ok
Definition: loadcell5.h:317
loadcell5_data_t::weight_coeff_5000g
float weight_coeff_5000g
Definition: loadcell5.h:316
loadcell5_cfg_setup
void loadcell5_cfg_setup(loadcell5_cfg_t *cfg)
Load Cell 5 configuration object setup function.
loadcell5_cfg_t::cs_polarity
spi_master_chip_select_polarity_t cs_polarity
Definition: loadcell5.h:298
loadcell5_data_t::weight_coeff_100g
float weight_coeff_100g
Definition: loadcell5.h:310
loadcell5_cfg_t::rdy
pin_name_t rdy
Definition: loadcell5.h:292
loadcell5_set_gain
err_t loadcell5_set_gain(loadcell5_t *ctx, uint8_t gain)
Load Cell 5 set gain function.
LOADCELL5_OK
@ LOADCELL5_OK
Definition: loadcell5.h:329
loadcell5_data_t::weight_data_1000g_ok
uint8_t weight_data_1000g_ok
Definition: loadcell5.h:315
loadcell5_data_t::weight_coeff_500g
float weight_coeff_500g
Definition: loadcell5.h:312
loadcell5_cfg_t
Load Cell 5 Click configuration object.
Definition: loadcell5.h:280