10#ifndef M5_UNIT_METER_UNIT_INA226_HPP
11#define M5_UNIT_METER_UNIT_INA226_HPP
13#include <M5UnitComponent.hpp>
86 std::array<uint16_t, 4>
raw{};
90 inline float shuntVoltage()
const
92 return raw[0] * 0.0025f;
95 inline float voltage()
const
97 return raw[1] * 1.25f;
100 inline float power()
const
105 inline float current()
const
117class UnitINA226 :
public Component,
public PeriodicMeasurementAdapter<UnitINA226, ina226::Data> {
118 M5_UNIT_COMPONENT_HPP_BUILDER(
UnitINA226, 0x00);
149 UnitINA226(
const float shuntRes,
const float maxCurA,
const float curLSB,
const uint8_t addr = DEFAULT_ADDRESS);
156 virtual bool begin()
override;
157 virtual void update(
const bool force =
false)
override;
197 return !empty() ? oldest().shuntVoltage() : std::numeric_limits<float>::quiet_NaN();
202 return !empty() ? oldest().voltage() : std::numeric_limits<float>::quiet_NaN();
207 return !empty() ? oldest().power() : std::numeric_limits<float>::quiet_NaN();
212 return !empty() ? oldest().current() : std::numeric_limits<float>::quiet_NaN();
227 return PeriodicMeasurementAdapter<UnitINA226, ina226::Data>::startPeriodicMeasurement(
current,
voltage,
power);
243 return PeriodicMeasurementAdapter<UnitINA226, ina226::Data>::startPeriodicMeasurement(rate, sct, bct,
current,
252 return PeriodicMeasurementAdapter<UnitINA226, ina226::Data>::stopPeriodicMeasurement();
270 const bool power =
true);
287 const bool power =
true);
413 bool stop_periodic_measurement();
416 bool read_configuration(uint16_t& v);
417 bool write_configuration(
const uint16_t v);
418 bool read_mask(uint16_t& m);
419 bool write_mask(
const uint16_t m);
421 bool is_data_ready();
427 std::unique_ptr<m5::container::CircularBuffer<ina226::Data>> _data{};
429 float _shuntRes{}, _maxCurrentA{}, _currentLSB{};
430 uint8_t _measureBits{};
445 :
UnitINA226(0.005f , 10.0f , curLSB, DEFAULT_ADDRESS)
465 :
UnitINA226(0.080f , 1.0f , curLSB, DEFAULT_ADDRESS)
476constexpr uint8_t CONFIGURATION_REG{0x00};
478constexpr uint8_t SHUNT_VOLTAGE_REG{0x01};
479constexpr uint8_t BUS_VOLTAGE_REG{0x02};
480constexpr uint8_t POWER_REG{0x03};
481constexpr uint8_t CURRENT_REG{0x04};
483constexpr uint8_t CALIBRATION_REG{0X05};
484constexpr uint8_t MASK_REG{0x06};
485constexpr uint8_t ALERT_LIMIT_REG{0x07};
487constexpr uint8_t MANUFACTURER_ID_REG{0xFE};
488constexpr uint8_t DIE_ID_REG{0XFF};
UnitINA226_10A unit.
Definition unit_INA226.hpp:437
UnitINA226_10A(const float curLSB=0.0f)
Definition unit_INA226.hpp:444
UnitINA226_1A unit.
Definition unit_INA226.hpp:457
UnitINA226_1A(const float curLSB=0.0f)
Definition unit_INA226.hpp:464
Base class for INA226 unit.
Definition unit_INA226.hpp:117
bool writeShuntVoltageConversionTime(const ina226::ConversionTime ct)
Write the convsrsion time of Shunt voltage @paramct Conversion time.
Definition unit_INA226.cpp:537
bool writeCalibration(const uint16_t cal)
Write the calibration value.
Definition unit_INA226.cpp:579
float power() const
Oldest power (mW)
Definition unit_INA226.hpp:205
bool writeBusVoltageConversionTime(const ina226::ConversionTime ct)
Write the convsrsion time of Bus voltage @paramct Conversion time.
Definition unit_INA226.cpp:511
float shuntVoltage() const
Oldest shunt voltage (mV)
Definition unit_INA226.hpp:195
void config(const config_t &cfg)
Set the configration.
Definition unit_INA226.hpp:167
float maximumCurrent() const
Gets the maximum current (A)
Definition unit_INA226.hpp:181
float shuntResistor() const
Gets the maximum current (A)
Definition unit_INA226.hpp:176
bool readAlertOccurred(bool &alert)
Read the alert occurred?
Definition unit_INA226.cpp:626
float current() const
Oldest current (mA)
Definition unit_INA226.hpp:210
bool powerDown()
Power down.
Definition unit_INA226.cpp:584
config_t config()
Gets the configration.
Definition unit_INA226.hpp:162
bool readBusVoltageConversionTime(ina226::ConversionTime &ct)
Read the convsrsion time of Bus voltage.
Definition unit_INA226.cpp:500
bool writeAlert(const ina226::Alert type, const uint16_t limit, const bool latch=true)
Write the alert type and limit value.
Definition unit_INA226.cpp:670
bool measureSingleshot(ina226::Data &data, const bool current=true, const bool voltage=true, const bool power=true)
Measurement single shot.
Definition unit_INA226.cpp:408
bool readAlertLimit(uint16_t &limit)
Read the alerm limit value.
Definition unit_INA226.cpp:612
bool readCalibration(uint16_t &cal)
Read the calibration value.
Definition unit_INA226.cpp:573
float voltage() const
Oldest Bus voltage (mV)
Definition unit_INA226.hpp:200
bool writeAlertLimit(const uint16_t limit)
Write the alerm limit value.
Definition unit_INA226.cpp:617
bool softReset(const bool all=false)
Software reset.
Definition unit_INA226.cpp:593
bool startPeriodicMeasurement(const bool current=true, const bool voltage=true, const bool power=true)
Start periodic measurement in the current settings.
Definition unit_INA226.hpp:225
bool readSamplingRate(ina226::Sampling &rate)
Read the sampling rate.
Definition unit_INA226.cpp:474
float currentLSB() const
Gets the current LSB.
Definition unit_INA226.hpp:186
bool startPeriodicMeasurement(const ina226::Sampling rate, const ina226::ConversionTime sct, const ina226::ConversionTime bct, const bool current=true, const bool voltage=true, const bool power=true)
Start periodic measurement.
Definition unit_INA226.hpp:239
bool writeSamplingRate(const ina226::Sampling rate)
Write the sampling rate.
Definition unit_INA226.cpp:485
bool readMode(ina226::Mode &mode)
Read the operation mode.
Definition unit_INA226.cpp:453
bool readAlert(ina226::Alert &type)
Read the alert type.
Definition unit_INA226.cpp:638
UnitINA226(const float shuntRes, const float maxCurA, const float curLSB, const uint8_t addr=DEFAULT_ADDRESS)
Constructor.
Definition unit_INA226.cpp:276
bool readShuntVoltageConversionTime(ina226::ConversionTime &ct)
Read the convsrsion time of Shunt voltage.
Definition unit_INA226.cpp:526
bool stopPeriodicMeasurement()
Stop periodic measurement.
Definition unit_INA226.hpp:250
Top level namespace of M5stack.
Settings for begin.
Definition unit_INA226.hpp:125
bool current
Measure current?
Definition unit_INA226.hpp:129
bool voltage
Measure bus voltage?
Definition unit_INA226.hpp:131
ina226::Sampling sampling_rate
Sampling rate.
Definition unit_INA226.hpp:135
ina226::ConversionTime bus_conversion_time
Bus conversion time.
Definition unit_INA226.hpp:139
ina226::ConversionTime shunt_conversion_time
Shunt conversion time.
Definition unit_INA226.hpp:137
bool start_periodic
Start periodic measurement on begin?
Definition unit_INA226.hpp:127
bool power
Measure power?
Definition unit_INA226.hpp:133
Measurement data group.
Definition unit_INA226.hpp:85
std::array< uint16_t, 4 > raw
Raw data 0:Shunt 1:Bus 2:Power 3:Current.
Definition unit_INA226.hpp:86
float currentLSB
currentLSB
Definition unit_INA226.hpp:87
@ Rate128
128 sps as default
Mode
Operation mode.
Definition unit_INA226.hpp:55
@ BusVoltageSingle
Bus Voltage, Triggered.
@ BusVoltage
Bus Voltage, Continuous.
@ ShuntAndBusSingle
Shunt and Bus, Triggered.
@ ShuntAndBus
Shunt and Bus, Continuous (as default)
@ ShuntVoltage
Shunt Voltage, Continuous.
@ PowerDown
Power-Down (or Shutdown)
@ ShuntVoltageSingle
Shunt Voltage, Triggered.
Sampling
The number of samples that are collected and averaged.
Definition unit_INA226.hpp:25
@ Rate1
1 sps (as default)
ConversionTime
The conversion time for the bus voltage measurement.
Definition unit_INA226.hpp:40
@ US_1100
1.1 ms (as default)
Alert
Alert type.
Definition unit_INA226.hpp:70
@ ShuntOver
Shunt Voltage Over-Voltage.
@ ShuntUnder
Shunt Voltage Under-Voltage.
@ PowerOver
Power Over-limit.
@ ConversionReady
Conversion Ready.
@ BusOver
Bus Voltage Over-Voltage.
@ BusUnder
Bus Voltage Under-Voltage.