irgrid4  2.1.0.0
irgrid4.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 IRGRID4_H
29 #define IRGRID4_H
30 
31 #ifdef __cplusplus
32 extern "C"{
33 #endif
34 
39 #ifdef PREINIT_SUPPORTED
40 #include "preinit.h"
41 #endif
42 
43 #ifdef MikroCCoreVersion
44  #if MikroCCoreVersion >= 1
45  #include "delays.h"
46  #endif
47 #endif
48 
49 #include "drv_digital_out.h"
50 #include "drv_digital_in.h"
51 #include "drv_i2c_master.h"
52 
73 #define IRGRID4_ADDR_RAM_START 0x0400
74 #define IRGRID4_ADDR_RAM_END 0x05BF
75 #define IRGRID4_ADDR_EEPROM_START 0x2400
76 #define IRGRID4_ADDR_EEPROM_END 0x273F
77 #define IRGRID4_ADDR_REG_STATUS 0x8000
78 #define IRGRID4_ADDR_REG_CONTROL 0x800D
79 #define IRGRID4_ADDR_REG_I2C_CONFIG 0x800F
80  // irgrid4_reg
82 
97 #define IRGRID4_STATUS_SUBPAGE 0x0001
98 #define IRGRID4_STATUS_DATA_READY 0x0008
99 #define IRGRID4_STATUS_OVERWRITE_EN 0x0010
100 
105 #define IRGRID4_CONTROL_SUBPAGE_EN 0x0001
106 #define IRGRID4_CONTROL_DATA_HOLD_EN 0x0004
107 #define IRGRID4_CONTROL_SUBPAGE_REP_EN 0x0008
108 #define IRGRID4_CONTROL_SUBPAGE_1_SEL 0x0010
109 #define IRGRID4_CONTROL_REFRESH_RATE_0_5_HZ 0x0000
110 #define IRGRID4_CONTROL_REFRESH_RATE_1_HZ 0x0080
111 #define IRGRID4_CONTROL_REFRESH_RATE_2_HZ 0x0100
112 #define IRGRID4_CONTROL_REFRESH_RATE_4_HZ 0x0180
113 #define IRGRID4_CONTROL_REFRESH_RATE_8_HZ 0x0200
114 #define IRGRID4_CONTROL_REFRESH_RATE_16_HZ 0x0280
115 #define IRGRID4_CONTROL_REFRESH_RATE_32_HZ 0x0300
116 #define IRGRID4_CONTROL_REFRESH_RATE_64_HZ 0x0380
117 #define IRGRID4_CONTROL_REFRESH_RATE_MASK 0x0380
118 #define IRGRID4_CONTROL_RESOLUTION_16_BIT 0x0000
119 #define IRGRID4_CONTROL_RESOLUTION_17_BIT 0x0400
120 #define IRGRID4_CONTROL_RESOLUTION_18_BIT 0x0800
121 #define IRGRID4_CONTROL_RESOLUTION_19_BIT 0x0C00
122 #define IRGRID4_CONTROL_RESOLUTION_MASK 0x0C00
123 #define IRGRID4_CONTROL_PATTERN_CHESS 0x1000
124 
129 #define IRGRID4_RESOLUTION_16_BIT 0
130 #define IRGRID4_RESOLUTION_17_BIT 1
131 #define IRGRID4_RESOLUTION_18_BIT 2
132 #define IRGRID4_RESOLUTION_19_BIT 3
133 
138 #define IRGRID4_REFRESH_RATE_0_5_HZ 0
139 #define IRGRID4_REFRESH_RATE_1_HZ 1
140 #define IRGRID4_REFRESH_RATE_2_HZ 2
141 #define IRGRID4_REFRESH_RATE_4_HZ 3
142 #define IRGRID4_REFRESH_RATE_8_HZ 4
143 #define IRGRID4_REFRESH_RATE_16_HZ 5
144 #define IRGRID4_REFRESH_RATE_32_HZ 6
145 #define IRGRID4_REFRESH_RATE_64_HZ 7
146 
151 #define IRGRID4_SCALE_ALPHA 0.000001
152 #define IRGRID4_EMISSIVITY 0.95
153 #define IRGRID4_TA_SHIFT 5
154 #define IRGRID4_ABS_ZERO_K 273.15
155 
161 #define IRGRID4_DEVICE_ADDRESS 0x33
162  // irgrid4_set
164 
179 #define IRGRID4_MAP_MIKROBUS( cfg, mikrobus ) \
180  cfg.scl = MIKROBUS( mikrobus, MIKROBUS_SCL ); \
181  cfg.sda = MIKROBUS( mikrobus, MIKROBUS_SDA ); \
182  cfg.led2 = MIKROBUS( mikrobus, MIKROBUS_RST ); \
183  cfg.led1 = MIKROBUS( mikrobus, MIKROBUS_PWM );
184  // irgrid4_map // irgrid4
187 
192 typedef struct
193 {
194  int16_t k_vdd;
195  int16_t vdd_25;
196  float kv_ptat;
197  float kt_ptat;
198  uint16_t v_ptat_25;
199  float alpha_ptat;
200  int16_t gain_ee;
201  float tgc;
202  float cp_kv;
203  float cp_kta;
204  uint8_t resolution_ee;
206  float ks_ta;
207  float ks_to[ 8 ];
208  int16_t ct[ 8 ];
209  uint16_t alpha[ 192 ];
210  uint8_t alpha_scale;
211  int16_t offset[ 2 ][ 192 ];
212  int8_t kta[ 192 ];
213  uint8_t kta_scale;
214  int8_t kv[ 192 ];
215  uint8_t kv_scale;
216  float cp_alpha;
217  int16_t cp_offset;
219  uint16_t broken_pixel;
220 
222 
227 typedef struct
228 {
229  // Output pins
230  digital_out_t led2;
231  digital_out_t led1;
233  // Modules
234  i2c_master_t i2c;
236  // I2C slave address
237  uint8_t slave_address;
239  uint16_t eeprom[ 832 ];
243 } irgrid4_t;
244 
249 typedef struct
250 {
251  pin_name_t scl;
252  pin_name_t sda;
254  pin_name_t led2;
255  pin_name_t led1;
257  uint32_t i2c_speed;
258  uint8_t i2c_address;
260 } irgrid4_cfg_t;
261 
266 typedef enum
267 {
269  IRGRID4_ERROR = -1
270 
272 
289 
303 err_t irgrid4_init ( irgrid4_t *ctx, irgrid4_cfg_t *cfg );
304 
318 
332 err_t irgrid4_write_data ( irgrid4_t *ctx, uint16_t addr, uint16_t data_in );
333 
348 err_t irgrid4_read_data ( irgrid4_t *ctx, uint16_t addr, uint16_t *data_out, uint8_t len );
349 
361 
371 
381 
391 
401 
413 
425 
437 
449 err_t irgrid4_get_frame_data ( irgrid4_t *ctx, uint16_t *frame_data );
450 
462 
472 float irgrid4_get_vdd ( irgrid4_t *ctx, uint16_t *frame_data );
473 
483 float irgrid4_get_ta ( irgrid4_t *ctx, uint16_t *frame_data );
484 
496 void irgrid4_get_to ( irgrid4_t *ctx, uint16_t *frame_data, float tr_val, float *result );
497 
512 err_t irgrid4_set_resolution ( irgrid4_t *ctx, uint8_t resolution );
513 
528 err_t irgrid4_get_resolution ( irgrid4_t *ctx, uint8_t *resolution );
529 
548 err_t irgrid4_set_refresh_rate ( irgrid4_t *ctx, uint8_t refresh_rate );
549 
568 err_t irgrid4_get_refresh_rate ( irgrid4_t *ctx, uint8_t *refresh_rate );
569 
583 err_t irgrid4_get_measurement ( irgrid4_t *ctx, float *t_amb, float *t_obj );
584 
585 #ifdef __cplusplus
586 }
587 #endif
588 #endif // IRGRID4_H
589  // irgrid4
591 
592 // ------------------------------------------------------------------------ END
irgrid4_t::slave_address
uint8_t slave_address
Definition: irgrid4.h:237
irgrid4_cfg_t::sda
pin_name_t sda
Definition: irgrid4.h:252
irgrid4_params_t::resolution_ee
uint8_t resolution_ee
Definition: irgrid4.h:204
irgrid4_get_vdd
float irgrid4_get_vdd(irgrid4_t *ctx, uint16_t *frame_data)
IR Grid 4 get VDD function.
irgrid4_disable_led2
void irgrid4_disable_led2(irgrid4_t *ctx)
IR Grid 4 disable LED2 function.
irgrid4_params_t::tgc
float tgc
Definition: irgrid4.h:201
irgrid4_params_t::cp_kv
float cp_kv
Definition: irgrid4.h:202
irgrid4_get_refresh_rate
err_t irgrid4_get_refresh_rate(irgrid4_t *ctx, uint8_t *refresh_rate)
IR Grid 4 get refresh rate function.
irgrid4_params_t::kta_scale
uint8_t kta_scale
Definition: irgrid4.h:213
irgrid4_enable_led2
void irgrid4_enable_led2(irgrid4_t *ctx)
IR Grid 4 enable LED2 function.
irgrid4_t::led1
digital_out_t led1
Definition: irgrid4.h:231
irgrid4_read_data
err_t irgrid4_read_data(irgrid4_t *ctx, uint16_t addr, uint16_t *data_out, uint8_t len)
IR Grid 4 read data function.
irgrid4_params_t::kv_scale
uint8_t kv_scale
Definition: irgrid4.h:215
irgrid4_trigger_measurement
err_t irgrid4_trigger_measurement(irgrid4_t *ctx)
IR Grid 4 trigger measurement function.
irgrid4_return_value_t
irgrid4_return_value_t
IR Grid 4 Click return value data.
Definition: irgrid4.h:267
irgrid4_cfg_t::led1
pin_name_t led1
Definition: irgrid4.h:255
irgrid4_params_t::alpha_scale
uint8_t alpha_scale
Definition: irgrid4.h:210
irgrid4_params_t::v_ptat_25
uint16_t v_ptat_25
Definition: irgrid4.h:198
irgrid4_write_data
err_t irgrid4_write_data(irgrid4_t *ctx, uint16_t addr, uint16_t data_in)
IR Grid 4 write data function.
irgrid4_default_cfg
err_t irgrid4_default_cfg(irgrid4_t *ctx)
IR Grid 4 default configuration function.
irgrid4_get_measurement
err_t irgrid4_get_measurement(irgrid4_t *ctx, float *t_amb, float *t_obj)
IR Grid 4 get measurement function.
irgrid4_t
IR Grid 4 Click context object.
Definition: irgrid4.h:228
irgrid4_enable_led1
void irgrid4_enable_led1(irgrid4_t *ctx)
IR Grid 4 enable LED1 function.
IRGRID4_OK
@ IRGRID4_OK
Definition: irgrid4.h:268
irgrid4_params_t::gain_ee
int16_t gain_ee
Definition: irgrid4.h:200
irgrid4_init
err_t irgrid4_init(irgrid4_t *ctx, irgrid4_cfg_t *cfg)
IR Grid 4 initialization function.
irgrid4_cfg_t
IR Grid 4 Click configuration object.
Definition: irgrid4.h:250
irgrid4_params_t::cp_kta
float cp_kta
Definition: irgrid4.h:203
irgrid4_params_t::emissivity_ee
float emissivity_ee
Definition: irgrid4.h:218
irgrid4_params_t::cp_offset
int16_t cp_offset
Definition: irgrid4.h:217
irgrid4_params_t::ks_ta
float ks_ta
Definition: irgrid4.h:206
irgrid4_sync_frame
err_t irgrid4_sync_frame(irgrid4_t *ctx)
IR Grid 4 sync frame function.
irgrid4_t::i2c
i2c_master_t i2c
Definition: irgrid4.h:234
irgrid4_cfg_t::scl
pin_name_t scl
Definition: irgrid4.h:251
IRGRID4_ERROR
@ IRGRID4_ERROR
Definition: irgrid4.h:269
irgrid4_cfg_t::i2c_speed
uint32_t i2c_speed
Definition: irgrid4.h:257
irgrid4_set_resolution
err_t irgrid4_set_resolution(irgrid4_t *ctx, uint8_t resolution)
IR Grid 4 set resolution function.
irgrid4_params_t::kt_ptat
float kt_ptat
Definition: irgrid4.h:197
irgrid4_cfg_t::i2c_address
uint8_t i2c_address
Definition: irgrid4.h:258
irgrid4_general_reset
err_t irgrid4_general_reset(irgrid4_t *ctx)
IR Grid 4 general reset function.
irgrid4_params_t
IR Grid 4 Click parameters object.
Definition: irgrid4.h:193
irgrid4_t::led2
digital_out_t led2
Definition: irgrid4.h:230
irgrid4_cfg_setup
void irgrid4_cfg_setup(irgrid4_cfg_t *cfg)
IR Grid 4 configuration object setup function.
irgrid4_get_ta
float irgrid4_get_ta(irgrid4_t *ctx, uint16_t *frame_data)
IR Grid 4 get TA function.
irgrid4_get_resolution
err_t irgrid4_get_resolution(irgrid4_t *ctx, uint8_t *resolution)
IR Grid 4 get resolution function.
irgrid4_params_t::broken_pixel
uint16_t broken_pixel
Definition: irgrid4.h:219
irgrid4_params_t::alpha_ptat
float alpha_ptat
Definition: irgrid4.h:199
irgrid4_params_t::calibration_mode_ee
uint8_t calibration_mode_ee
Definition: irgrid4.h:205
irgrid4_dump_eeprom
err_t irgrid4_dump_eeprom(irgrid4_t *ctx)
IR Grid 4 dump EEPROM function.
irgrid4_params_t::k_vdd
int16_t k_vdd
Definition: irgrid4.h:194
irgrid4_get_parameters
err_t irgrid4_get_parameters(irgrid4_t *ctx)
IR Grid 4 get parameters function.
irgrid4_params_t::cp_alpha
float cp_alpha
Definition: irgrid4.h:216
irgrid4_set_refresh_rate
err_t irgrid4_set_refresh_rate(irgrid4_t *ctx, uint8_t refresh_rate)
IR Grid 4 set refresh rate function.
irgrid4_disable_led1
void irgrid4_disable_led1(irgrid4_t *ctx)
IR Grid 4 disable LED1 function.
irgrid4_get_to
void irgrid4_get_to(irgrid4_t *ctx, uint16_t *frame_data, float tr_val, float *result)
IR Grid 4 get TO function.
irgrid4_params_t::vdd_25
int16_t vdd_25
Definition: irgrid4.h:195
irgrid4_cfg_t::led2
pin_name_t led2
Definition: irgrid4.h:254
irgrid4_t::calib
irgrid4_params_t calib
Definition: irgrid4.h:241
irgrid4_get_frame_data
err_t irgrid4_get_frame_data(irgrid4_t *ctx, uint16_t *frame_data)
IR Grid 4 get frame data function.
irgrid4_params_t::kv_ptat
float kv_ptat
Definition: irgrid4.h:196