LibDriver INA226
Loading...
Searching...
No Matches
driver_ina226.h
Go to the documentation of this file.
1
36
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
45extern "C"{
46#endif
47
53
58
62#ifndef INA226_READ_TIMEOUT
63 #define INA226_READ_TIMEOUT 1000
64#endif
65
69typedef 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
92typedef enum
93{
97
112
124
139
151
163
172
176typedef 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
207
211
218
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
286
293
302uint8_t ina226_info(ina226_info_t *info);
303
313uint8_t ina226_set_addr_pin(ina226_handle_t *handle, ina226_address_t addr_pin);
314
324uint8_t ina226_get_addr_pin(ina226_handle_t *handle, ina226_address_t *addr_pin);
325
335uint8_t ina226_set_resistance(ina226_handle_t *handle, double resistance);
336
346uint8_t ina226_get_resistance(ina226_handle_t *handle, double *resistance);
347
358uint8_t ina226_irq_handler(ina226_handle_t *handle);
359
372uint8_t ina226_init(ina226_handle_t *handle);
373
385uint8_t ina226_deinit(ina226_handle_t *handle);
386
397uint8_t ina226_soft_reset(ina226_handle_t *handle);
398
411
424
437
450
463
476
488uint8_t ina226_set_mode(ina226_handle_t *handle, ina226_mode_t mode);
489
501uint8_t ina226_get_mode(ina226_handle_t *handle, ina226_mode_t *mode);
502
517uint8_t ina226_read_shunt_voltage(ina226_handle_t *handle, int16_t *raw, float *mV);
518
533uint8_t ina226_read_bus_voltage(ina226_handle_t *handle, uint16_t *raw, float *mV);
534
549uint8_t ina226_read_power(ina226_handle_t *handle, uint16_t *raw, float *mW);
550
565uint8_t ina226_read_current(ina226_handle_t *handle, int16_t *raw, float *mA);
566
578uint8_t ina226_set_calibration(ina226_handle_t *handle, uint16_t data);
579
591uint8_t ina226_get_calibration(ina226_handle_t *handle, uint16_t *data);
592
605uint8_t ina226_calculate_calibration(ina226_handle_t *handle, uint16_t *calibration);
606
619uint8_t ina226_set_mask(ina226_handle_t *handle, ina226_mask_t mask, ina226_bool_t enable);
620
633uint8_t ina226_get_mask(ina226_handle_t *handle, ina226_mask_t mask, ina226_bool_t *enable);
634
647
660
673
686
699
712
724uint8_t ina226_set_alert_limit(ina226_handle_t *handle, uint16_t reg);
725
737uint8_t ina226_get_alert_limit(ina226_handle_t *handle, uint16_t *reg);
738
750uint8_t ina226_shunt_voltage_convert_to_register(ina226_handle_t *handle, float mV, uint16_t *reg);
751
763uint8_t ina226_shunt_voltage_convert_to_data(ina226_handle_t *handle, uint16_t reg, float *mV);
764
776uint8_t ina226_bus_voltage_convert_to_register(ina226_handle_t *handle, float mV, uint16_t *reg);
777
789uint8_t ina226_bus_voltage_convert_to_data(ina226_handle_t *handle, uint16_t reg, float *mV);
790
802uint8_t ina226_power_convert_to_register(ina226_handle_t *handle, float mW, uint16_t *reg);
803
815uint8_t ina226_power_convert_to_data(ina226_handle_t *handle, uint16_t reg, float *mW);
816
829uint8_t ina226_get_die_id(ina226_handle_t *handle, uint16_t *device_id, uint8_t *die_revision_id);
830
834
841
854uint8_t ina226_set_reg(ina226_handle_t *handle, uint8_t reg, uint16_t data);
855
868uint8_t ina226_get_reg(ina226_handle_t *handle, uint8_t reg, uint16_t *data);
869
873
877
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
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
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
@ INA226_ADDRESS_F
@ INA226_ADDRESS_4
@ INA226_ADDRESS_6
@ INA226_ADDRESS_0
@ INA226_ADDRESS_9
@ INA226_ADDRESS_7
@ INA226_ADDRESS_1
@ INA226_ADDRESS_8
@ INA226_ADDRESS_A
@ INA226_ADDRESS_B
@ INA226_ADDRESS_2
@ INA226_ADDRESS_E
@ INA226_ADDRESS_5
@ INA226_ADDRESS_D
@ INA226_ADDRESS_C
@ 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
@ INA226_BOOL_FALSE
@ 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 supply_voltage_max_v
uint32_t driver_version
char manufacturer_name[32]
float supply_voltage_min_v
char chip_name[32]