LibDriver INA226  1.0.0
INA226 full-featured driver
All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Macros Modules Pages
driver_ina226.h
Go to the documentation of this file.
1 
37 #ifndef DRIVER_INA226_H
38 #define DRIVER_INA226_H
39 
40 #include <stdio.h>
41 #include <stdint.h>
42 #include <string.h>
43 
44 #ifdef __cplusplus
45 extern "C"{
46 #endif
47 
62 #ifndef INA226_READ_TIMEOUT
63  #define INA226_READ_TIMEOUT 1000
64 #endif
65 
69 typedef enum
70 {
71  INA226_ADDRESS_0 = (0x40 << 1),
72  INA226_ADDRESS_1 = (0x41 << 1),
73  INA226_ADDRESS_2 = (0x42 << 1),
74  INA226_ADDRESS_3 = (0x43 << 1),
75  INA226_ADDRESS_4 = (0x44 << 1),
76  INA226_ADDRESS_5 = (0x45 << 1),
77  INA226_ADDRESS_6 = (0x46 << 1),
78  INA226_ADDRESS_7 = (0x47 << 1),
79  INA226_ADDRESS_8 = (0x48 << 1),
80  INA226_ADDRESS_9 = (0x49 << 1),
81  INA226_ADDRESS_A = (0x4A << 1),
82  INA226_ADDRESS_B = (0x4B << 1),
83  INA226_ADDRESS_C = (0x4C << 1),
84  INA226_ADDRESS_D = (0x4D << 1),
85  INA226_ADDRESS_E = (0x4E << 1),
86  INA226_ADDRESS_F = (0x4F << 1)
88 
92 typedef enum
93 {
97 
101 typedef enum
102 {
111 } ina226_avg_t;
112 
113 typedef enum
114 {
124 
128 typedef enum
129 {
138 } ina226_mode_t;
139 
143 typedef enum
144 {
151 
155 typedef enum
156 {
162 } ina226_mask_t;
163 
167 typedef enum
168 {
172 
176 typedef struct ina226_handle_s
177 {
178  uint8_t iic_addr;
179  uint8_t (*iic_init)(void);
180  uint8_t (*iic_deinit)(void);
181  uint8_t (*iic_read)(uint8_t addr, uint8_t reg, uint8_t *buf, uint16_t len);
182  uint8_t (*iic_write)(uint8_t addr, uint8_t reg, uint8_t *buf, uint16_t len);
183  void (*delay_ms)(uint32_t ms);
184  void (*debug_print)(const char *const fmt, ...);
185  void (*receive_callback)(uint8_t type);
186  double r;
187  double current_lsb;
188  uint8_t inited;
189  uint8_t trigger;
191 
195 typedef struct ina226_info_s
196 {
197  char chip_name[32];
198  char manufacturer_name[32];
199  char interface[8];
205  uint32_t driver_version;
207 
225 #define DRIVER_INA226_LINK_INIT(HANDLE, STRUCTURE) memset(HANDLE, 0, sizeof(STRUCTURE))
226 
233 #define DRIVER_INA226_LINK_IIC_INIT(HANDLE, FUC) (HANDLE)->iic_init = FUC
234 
241 #define DRIVER_INA226_LINK_IIC_DEINIT(HANDLE, FUC) (HANDLE)->iic_deinit = FUC
242 
249 #define DRIVER_INA226_LINK_IIC_READ(HANDLE, FUC) (HANDLE)->iic_read = FUC
250 
257 #define DRIVER_INA226_LINK_IIC_WRITE(HANDLE, FUC) (HANDLE)->iic_write = FUC
258 
265 #define DRIVER_INA226_LINK_DELAY_MS(HANDLE, FUC) (HANDLE)->delay_ms = FUC
266 
273 #define DRIVER_INA226_LINK_DEBUG_PRINT(HANDLE, FUC) (HANDLE)->debug_print = FUC
274 
281 #define DRIVER_INA226_LINK_RECEIVE_CALLBACK(HANDLE, FUC) (HANDLE)->receive_callback = FUC
282 
302 uint8_t ina226_info(ina226_info_t *info);
303 
313 uint8_t ina226_set_addr_pin(ina226_handle_t *handle, ina226_address_t addr_pin);
314 
324 uint8_t ina226_get_addr_pin(ina226_handle_t *handle, ina226_address_t *addr_pin);
325 
335 uint8_t ina226_set_resistance(ina226_handle_t *handle, double resistance);
336 
346 uint8_t ina226_get_resistance(ina226_handle_t *handle, double *resistance);
347 
358 uint8_t ina226_irq_handler(ina226_handle_t *handle);
359 
372 uint8_t ina226_init(ina226_handle_t *handle);
373 
385 uint8_t ina226_deinit(ina226_handle_t *handle);
386 
397 uint8_t ina226_soft_reset(ina226_handle_t *handle);
398 
411 
424 
437 
450 
463 
476 
488 uint8_t ina226_set_mode(ina226_handle_t *handle, ina226_mode_t mode);
489 
501 uint8_t ina226_get_mode(ina226_handle_t *handle, ina226_mode_t *mode);
502 
517 uint8_t ina226_read_shunt_voltage(ina226_handle_t *handle, int16_t *raw, float *mV);
518 
533 uint8_t ina226_read_bus_voltage(ina226_handle_t *handle, uint16_t *raw, float *mV);
534 
549 uint8_t ina226_read_power(ina226_handle_t *handle, uint16_t *raw, float *mW);
550 
565 uint8_t ina226_read_current(ina226_handle_t *handle, int16_t *raw, float *mA);
566 
578 uint8_t ina226_set_calibration(ina226_handle_t *handle, uint16_t data);
579 
591 uint8_t ina226_get_calibration(ina226_handle_t *handle, uint16_t *data);
592 
605 uint8_t ina226_calculate_calibration(ina226_handle_t *handle, uint16_t *calibration);
606 
619 uint8_t ina226_set_mask(ina226_handle_t *handle, ina226_mask_t mask, ina226_bool_t enable);
620 
633 uint8_t ina226_get_mask(ina226_handle_t *handle, ina226_mask_t mask, ina226_bool_t *enable);
634 
647 
660 
673 
686 
698 uint8_t ina226_set_alert_latch(ina226_handle_t *handle, ina226_bool_t enable);
699 
711 uint8_t ina226_get_alert_latch(ina226_handle_t *handle, ina226_bool_t *enable);
712 
724 uint8_t ina226_set_alert_limit(ina226_handle_t *handle, uint16_t reg);
725 
737 uint8_t ina226_get_alert_limit(ina226_handle_t *handle, uint16_t *reg);
738 
750 uint8_t ina226_shunt_voltage_convert_to_register(ina226_handle_t *handle, float mV, uint16_t *reg);
751 
763 uint8_t ina226_shunt_voltage_convert_to_data(ina226_handle_t *handle, uint16_t reg, float *mV);
764 
776 uint8_t ina226_bus_voltage_convert_to_register(ina226_handle_t *handle, float mV, uint16_t *reg);
777 
789 uint8_t ina226_bus_voltage_convert_to_data(ina226_handle_t *handle, uint16_t reg, float *mV);
790 
802 uint8_t ina226_power_convert_to_register(ina226_handle_t *handle, float mW, uint16_t *reg);
803 
815 uint8_t ina226_power_convert_to_data(ina226_handle_t *handle, uint16_t reg, float *mW);
816 
829 uint8_t ina226_get_die_id(ina226_handle_t *handle, uint16_t *device_id, uint8_t *die_revision_id);
830 
854 uint8_t ina226_set_reg(ina226_handle_t *handle, uint8_t reg, uint16_t data);
855 
868 uint8_t ina226_get_reg(ina226_handle_t *handle, uint8_t reg, uint16_t *data);
869 
878 #ifdef __cplusplus
879 }
880 #endif
881 
882 #endif
uint8_t ina226_calculate_calibration(ina226_handle_t *handle, uint16_t *calibration)
calculate the calibration
uint8_t ina226_get_addr_pin(ina226_handle_t *handle, ina226_address_t *addr_pin)
get the iic address pin
uint8_t ina226_set_bus_voltage_conversion_time(ina226_handle_t *handle, ina226_conversion_time_t t)
set bus voltage conversion time
uint8_t ina226_info(ina226_info_t *info)
get chip's information
uint8_t ina226_bus_voltage_convert_to_data(ina226_handle_t *handle, uint16_t reg, float *mV)
convert the register raw data to the bus voltage
uint8_t ina226_power_convert_to_data(ina226_handle_t *handle, uint16_t reg, float *mW)
convert the register raw data to the power
ina226_mask_t
ina226 mask enumeration definition
uint8_t ina226_bus_voltage_convert_to_register(ina226_handle_t *handle, float mV, uint16_t *reg)
convert the bus voltage to the register raw data
uint8_t ina226_read_current(ina226_handle_t *handle, int16_t *raw, float *mA)
read the current
uint8_t ina226_deinit(ina226_handle_t *handle)
close the chip
uint8_t ina226_set_conversion_ready_alert_pin(ina226_handle_t *handle, ina226_bool_t enable)
enable or disable conversion ready alert pin
uint8_t ina226_get_alert_latch(ina226_handle_t *handle, ina226_bool_t *enable)
get alert latch status
uint8_t ina226_get_bus_voltage_conversion_time(ina226_handle_t *handle, ina226_conversion_time_t *t)
get bus voltage conversion time
uint8_t ina226_set_mode(ina226_handle_t *handle, ina226_mode_t mode)
set the mode
uint8_t ina226_set_alert_polarity_pin(ina226_handle_t *handle, ina226_alert_polarity_t pin)
set alert polarity pin
uint8_t ina226_shunt_voltage_convert_to_register(ina226_handle_t *handle, float mV, uint16_t *reg)
convert the shunt voltage to the register raw data
uint8_t ina226_set_mask(ina226_handle_t *handle, ina226_mask_t mask, ina226_bool_t enable)
enable or disable mask
uint8_t ina226_get_conversion_ready_alert_pin(ina226_handle_t *handle, ina226_bool_t *enable)
get conversion ready alert pin status
uint8_t ina226_get_alert_limit(ina226_handle_t *handle, uint16_t *reg)
get alert limit
uint8_t ina226_set_addr_pin(ina226_handle_t *handle, ina226_address_t addr_pin)
set the iic address pin
uint8_t ina226_set_alert_latch(ina226_handle_t *handle, ina226_bool_t enable)
enable or disable alert latch
uint8_t ina226_read_power(ina226_handle_t *handle, uint16_t *raw, float *mW)
read the power
uint8_t ina226_set_average_mode(ina226_handle_t *handle, ina226_avg_t mode)
set average mode
uint8_t ina226_get_shunt_voltage_conversion_time(ina226_handle_t *handle, ina226_conversion_time_t *t)
get shunt voltage conversion time
uint8_t ina226_get_calibration(ina226_handle_t *handle, uint16_t *data)
get the calibration
uint8_t ina226_get_mode(ina226_handle_t *handle, ina226_mode_t *mode)
get the mode
ina226_address_t
ina226 address enumeration definition
Definition: driver_ina226.h:70
ina226_status_t
ina226 status enumeration definition
struct ina226_handle_s ina226_handle_t
ina226 handle structure definition
uint8_t ina226_soft_reset(ina226_handle_t *handle)
soft reset the chip
uint8_t ina226_get_mask(ina226_handle_t *handle, ina226_mask_t mask, ina226_bool_t *enable)
get mask
uint8_t ina226_irq_handler(ina226_handle_t *handle)
irq handler
uint8_t ina226_get_alert_polarity_pin(ina226_handle_t *handle, ina226_alert_polarity_t *pin)
get alert polarity pin
ina226_mode_t
ina226 mode enumeration definition
uint8_t ina226_read_shunt_voltage(ina226_handle_t *handle, int16_t *raw, float *mV)
read the shunt voltage
uint8_t ina226_get_average_mode(ina226_handle_t *handle, ina226_avg_t *mode)
get average mode
uint8_t ina226_init(ina226_handle_t *handle)
initialize the chip
uint8_t ina226_get_resistance(ina226_handle_t *handle, double *resistance)
get the resistance
ina226_bool_t
ina226 bool enumeration definition
Definition: driver_ina226.h:93
uint8_t ina226_set_shunt_voltage_conversion_time(ina226_handle_t *handle, ina226_conversion_time_t t)
set shunt voltage conversion time
uint8_t ina226_set_alert_limit(ina226_handle_t *handle, uint16_t reg)
set alert limit
ina226_conversion_time_t
uint8_t ina226_set_calibration(ina226_handle_t *handle, uint16_t data)
set the calibration
uint8_t ina226_shunt_voltage_convert_to_data(ina226_handle_t *handle, uint16_t reg, float *mV)
convert the register raw data to the shunt voltage
uint8_t ina226_set_resistance(ina226_handle_t *handle, double resistance)
set the resistance
uint8_t ina226_power_convert_to_register(ina226_handle_t *handle, float mW, uint16_t *reg)
convert the power to the register raw data
ina226_avg_t
ina226 average enumeration definition
ina226_alert_polarity_t
ina226 alert polarity enumeration definition
uint8_t ina226_get_die_id(ina226_handle_t *handle, uint16_t *device_id, uint8_t *die_revision_id)
get the die id
struct ina226_info_s ina226_info_t
ina226 information structure definition
uint8_t ina226_read_bus_voltage(ina226_handle_t *handle, uint16_t *raw, float *mV)
read the bus voltage
@ INA226_MASK_POWER_OVER_LIMIT
@ INA226_MASK_SHUNT_VOLTAGE_UNDER_VOLTAGE
@ INA226_MASK_SHUNT_VOLTAGE_OVER_VOLTAGE
@ INA226_MASK_BUS_VOLTAGE_OVER_VOLTAGE
@ INA226_MASK_BUS_VOLTAGE_UNDER_VOLTAGE
@ INA226_ADDRESS_3
Definition: driver_ina226.h:74
@ INA226_ADDRESS_F
Definition: driver_ina226.h:86
@ INA226_ADDRESS_4
Definition: driver_ina226.h:75
@ INA226_ADDRESS_6
Definition: driver_ina226.h:77
@ INA226_ADDRESS_0
Definition: driver_ina226.h:71
@ INA226_ADDRESS_9
Definition: driver_ina226.h:80
@ INA226_ADDRESS_7
Definition: driver_ina226.h:78
@ INA226_ADDRESS_1
Definition: driver_ina226.h:72
@ INA226_ADDRESS_8
Definition: driver_ina226.h:79
@ INA226_ADDRESS_A
Definition: driver_ina226.h:81
@ INA226_ADDRESS_B
Definition: driver_ina226.h:82
@ INA226_ADDRESS_2
Definition: driver_ina226.h:73
@ INA226_ADDRESS_E
Definition: driver_ina226.h:85
@ INA226_ADDRESS_5
Definition: driver_ina226.h:76
@ INA226_ADDRESS_D
Definition: driver_ina226.h:84
@ INA226_ADDRESS_C
Definition: driver_ina226.h:83
@ INA226_STATUS_BUS_VOLTAGE_OVER_VOLTAGE
@ INA226_STATUS_POWER_OVER_LIMIT
@ INA226_STATUS_SHUNT_VOLTAGE_UNDER_VOLTAGE
@ INA226_STATUS_BUS_VOLTAGE_UNDER_VOLTAGE
@ INA226_STATUS_SHUNT_VOLTAGE_OVER_VOLTAGE
@ INA226_MODE_BUS_VOLTAGE_CONTINUOUS
@ INA226_MODE_SHUNT_VOLTAGE_CONTINUOUS
@ INA226_MODE_BUS_VOLTAGE_TRIGGERED
@ INA226_MODE_SHUNT_BUS_VOLTAGE_TRIGGERED
@ INA226_MODE_POWER_DOWN
@ INA226_MODE_SHUNT_BUS_VOLTAGE_CONTINUOUS
@ INA226_MODE_SHUNT_VOLTAGE_TRIGGERED
@ INA226_MODE_SHUTDOWN
@ INA226_BOOL_TRUE
Definition: driver_ina226.h:95
@ INA226_BOOL_FALSE
Definition: driver_ina226.h:94
@ INA226_CONVERSION_TIME_4P156_MS
@ INA226_CONVERSION_TIME_588_US
@ INA226_CONVERSION_TIME_1P1_MS
@ INA226_CONVERSION_TIME_332_US
@ INA226_CONVERSION_TIME_140_US
@ INA226_CONVERSION_TIME_204_US
@ INA226_CONVERSION_TIME_8P244_MS
@ INA226_CONVERSION_TIME_2P116_MS
@ INA226_AVG_64
@ INA226_AVG_1024
@ INA226_AVG_512
@ INA226_AVG_4
@ INA226_AVG_128
@ INA226_AVG_16
@ INA226_AVG_1
@ INA226_AVG_256
@ INA226_ALERT_POLARITY_NORMAL
@ INA226_ALERT_POLARITY_INVERTED
uint8_t ina226_set_reg(ina226_handle_t *handle, uint8_t reg, uint16_t data)
set the chip register
uint8_t ina226_get_reg(ina226_handle_t *handle, uint8_t reg, uint16_t *data)
get the chip register
ina226 handle structure definition
void(* delay_ms)(uint32_t ms)
void(* receive_callback)(uint8_t type)
void(* debug_print)(const char *const fmt,...)
uint8_t(* iic_init)(void)
uint8_t(* iic_write)(uint8_t addr, uint8_t reg, uint8_t *buf, uint16_t len)
uint8_t(* iic_read)(uint8_t addr, uint8_t reg, uint8_t *buf, uint16_t len)
uint8_t(* iic_deinit)(void)
ina226 information structure definition
float temperature_max
float supply_voltage_max_v
uint32_t driver_version
float temperature_min
float max_current_ma
char manufacturer_name[32]
float supply_voltage_min_v
char interface[8]
char chip_name[32]