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 "drv_digital_out.h"
36 #include "drv_digital_in.h"
37 #include "drv_spi_master.h"
38 
39 
66 #define LOADCELL5_MODE_POWER_DOWN 0x00
67 #define LOADCELL5_MODE_POWER_UP 0x01
68  // pwr_mode
70 
81 #define LOADCELL5_UPDATE_RATE_16_7_Hz 0x00
82 #define LOADCELL5_UPDATE_RATE_10_Hz 0x01
83  // fil_sel
85 
96 #define LOADCELL5_GAIN_1 1
97 #define LOADCELL5_GAIN_128 128
98  // gain
100 
101  // loadcell5_set
103 
124 #define LOADCELL5_NEW_DATA_IS_AVAILABLE 0
125 #define LOADCELL5_NO_DATA 1
126  // check_data_ready
128 
139 #define LOADCELL5_STATUS_PAT_ADC_PERFORMED_NOT_CORRECTLY 0x00
140 #define LOADCELL5_STATUS_PAT_ADC_PERFORMED_CORRECTLY 0x01
141 #define LOADCELL5_STATUS_GAIN_128 0x00
142 #define LOADCELL5_STATUS_GAIN_1 0x04
143 #define LOADCELL5_STATUS_BITS_ID_0 0x08
144 #define LOADCELL5_STATUS_BITS_ID_1 0x10
145 #define LOADCELL5_STATUS_ERROR 0x20
146 #define LOADCELL5_STATUS_FILTER_UPDATE_RATE_16_7_HZ 0x00
147 #define LOADCELL5_STATUS_FILTER_UPDATE_RATE_10_HZ 0x40
148 #define LOADCELL5_STATUS_CONVERSION_NOT_AVAILABLE 0x80
149 #define LOADCELL5_STATUS_CONVERSION_IS_AVAILABLE 0x00
150 #define LOADCELL5_STATUS_CONVERSION_NOT_AVAILABLE 0x80
151 
157 #define LOADCELL5_DATA_NO_DATA 0
158 #define LOADCELL5_DATA_OK 1
159  // status
161 
162  // loadcell5_get
164 
179 #define LOADCELL5_WEIGHT_ZERO 0
180 #define LOADCELL5_WEIGHT_100G 100
181 #define LOADCELL5_WEIGHT_500G 500
182 #define LOADCELL5_WEIGHT_1000G 1000
183 #define LOADCELL5_WEIGHT_5000G 5000
184 #define LOADCELL5_WEIGHT_10000G 10000
185  // weight
187 
198 #define LOADCELL5_STATUS_PAT_ADC_PERFORMED_NOT_CORRECTLY 0x00
199 #define LOADCELL5_STATUS_PAT_ADC_PERFORMED_CORRECTLY 0x01
200 #define LOADCELL5_STATUS_GAIN_128 0x00
201 #define LOADCELL5_STATUS_GAIN_1 0x04
202 #define LOADCELL5_STATUS_BITS_ID_0 0x08
203 #define LOADCELL5_STATUS_BITS_ID_1 0x10
204 #define LOADCELL5_STATUS_ERROR 0x20
205 #define LOADCELL5_STATUS_FILTER_UPDATE_RATE_16_7_HZ 0x00
206 #define LOADCELL5_STATUS_FILTER_UPDATE_RATE_10_HZ 0x40
207 #define LOADCELL5_STATUS_CONVERSION_NOT_AVAILABLE 0x80
208 #define LOADCELL5_STATUS_CONVERSION_IS_AVAILABLE 0x00
209 #define LOADCELL5_STATUS_CONVERSION_NOT_AVAILABLE 0x80
210  // status
212 
213  // loadcell5_cfg_data
215 
230 #define LOADCELL5_MAP_MIKROBUS( cfg, mikrobus ) \
231  cfg.miso = MIKROBUS( mikrobus, MIKROBUS_MISO ); \
232  cfg.mosi = MIKROBUS( mikrobus, MIKROBUS_MOSI ); \
233  cfg.sck = MIKROBUS( mikrobus, MIKROBUS_SCK ); \
234  cfg.cs = MIKROBUS( mikrobus, MIKROBUS_CS ); \
235  cfg.rst = MIKROBUS( mikrobus, MIKROBUS_RST ); \
236  cfg.gn = MIKROBUS( mikrobus, MIKROBUS_PWM ); \
237  cfg.rdy = MIKROBUS( mikrobus, MIKROBUS_INT );
238  // loadcell5_map // loadcell5
241 
246 typedef struct
247 {
248  // Output pins
249 
250  digital_out_t rst;
251  digital_out_t gn;
253  // Input pins
254 
255  digital_in_t rdy;
257  // Modules
258 
259  spi_master_t spi;
261  pin_name_t chip_select;
263 } loadcell5_t;
264 
269 typedef struct
270 {
271  // Communication gpio pins
272 
273  pin_name_t miso;
274  pin_name_t mosi;
275  pin_name_t sck;
276  pin_name_t cs;
278  // Additional gpio pins
279 
280  pin_name_t rst;
281  pin_name_t gn;
282  pin_name_t rdy;
284  // static variable
285 
286  uint32_t spi_speed;
287  spi_master_mode_t spi_mode;
288  spi_master_chip_select_polarity_t cs_polarity;
291 
296 typedef struct
297 {
298  float tare;
299  uint8_t tare_ok;
310 }
312 
317 typedef enum
318 {
320  LOADCELL5_ERROR = -1
321 
323 
340 
356 
371 
388 err_t loadcell5_set_power_mode ( loadcell5_t *ctx, uint8_t pwr_mode );
389 
401 
418 err_t loadcell5_filter_select ( loadcell5_t *ctx, uint8_t fil_sel );
419 
436 err_t loadcell5_set_gain ( loadcell5_t *ctx, uint8_t gain );
437 
453 err_t loadcell5_get_data ( loadcell5_t *ctx, uint8_t *status, uint32_t *adc_data );
454 
466 uint32_t loadcell5_read_adc ( loadcell5_t *ctx );
467 
480 void loadcell5_tare ( loadcell5_t *ctx, loadcell5_data_t *cell_data );
481 
503 err_t loadcell5_calibration ( loadcell5_t *ctx, uint16_t cal_val, loadcell5_data_t *cell_data );
504 
518 
531 
532 #ifdef __cplusplus
533 }
534 #endif
535 #endif // LOADCELL5_H
536  // loadcell5
538 
539 // ------------------------------------------------------------------------ END
loadcell5_data_t::weight_data_500g_ok
uint8_t weight_data_500g_ok
Definition: loadcell5.h:303
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:275
loadcell5_cfg_t::spi_speed
uint32_t spi_speed
Definition: loadcell5.h:286
loadcell5_data_t::weight_data_100g_ok
uint8_t weight_data_100g_ok
Definition: loadcell5.h:301
loadcell5_data_t::weight_coeff_1000g
float weight_coeff_1000g
Definition: loadcell5.h:304
loadcell5_t::gn
digital_out_t gn
Definition: loadcell5.h:251
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:255
loadcell5_data_t
Load Cell 5 Click data structure definition.
Definition: loadcell5.h:297
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:298
loadcell5_t
Load Cell 5 Click context object.
Definition: loadcell5.h:247
loadcell5_cfg_t::spi_mode
spi_master_mode_t spi_mode
Definition: loadcell5.h:287
loadcell5_t::rst
digital_out_t rst
Definition: loadcell5.h:250
loadcell5_data_t::tare_ok
uint8_t tare_ok
Definition: loadcell5.h:299
loadcell5_data_t::weight_data_10000g_ok
uint8_t weight_data_10000g_ok
Definition: loadcell5.h:309
loadcell5_cfg_t::mosi
pin_name_t mosi
Definition: loadcell5.h:274
loadcell5_cfg_t::miso
pin_name_t miso
Definition: loadcell5.h:273
loadcell5_t::spi
spi_master_t spi
Definition: loadcell5.h:259
loadcell5_t::chip_select
pin_name_t chip_select
Definition: loadcell5.h:261
LOADCELL5_ERROR
@ LOADCELL5_ERROR
Definition: loadcell5.h:320
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:280
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:318
loadcell5_cfg_t::cs
pin_name_t cs
Definition: loadcell5.h:276
loadcell5_data_t::weight_coeff_10000g
float weight_coeff_10000g
Definition: loadcell5.h:308
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:281
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:307
loadcell5_data_t::weight_coeff_5000g
float weight_coeff_5000g
Definition: loadcell5.h:306
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:288
loadcell5_data_t::weight_coeff_100g
float weight_coeff_100g
Definition: loadcell5.h:300
loadcell5_cfg_t::rdy
pin_name_t rdy
Definition: loadcell5.h:282
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:319
loadcell5_data_t::weight_data_1000g_ok
uint8_t weight_data_1000g_ok
Definition: loadcell5.h:305
loadcell5_data_t::weight_coeff_500g
float weight_coeff_500g
Definition: loadcell5.h:302
loadcell5_cfg_t
Load Cell 5 Click configuration object.
Definition: loadcell5.h:270