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{};
93 return (
measureBits & 0x01) ?
static_cast<int16_t
>(
raw[0]) * 0.0025f : std::numeric_limits<float>::quiet_NaN();
98 return (
measureBits & 0x02) ?
raw[1] * 1.25f : std::numeric_limits<float>::quiet_NaN();
109 : std::numeric_limits<float>::quiet_NaN();
119class UnitINA226 :
public Component,
public PeriodicMeasurementAdapter<UnitINA226, ina226::Data> {
120 M5_UNIT_COMPONENT_HPP_BUILDER(
UnitINA226, 0x00);
151 UnitINA226(
const float shuntRes,
const float maxCurA,
const float curLSB,
const uint8_t addr = DEFAULT_ADDRESS);
158 virtual bool begin()
override;
159 virtual void update(
const bool force =
false)
override;
199 return !empty() ? oldest().shuntVoltage() : std::numeric_limits<float>::quiet_NaN();
204 return !empty() ? oldest().voltage() : std::numeric_limits<float>::quiet_NaN();
209 return !empty() ? oldest().power() : std::numeric_limits<float>::quiet_NaN();
214 return !empty() ? oldest().current() : std::numeric_limits<float>::quiet_NaN();
229 return PeriodicMeasurementAdapter<UnitINA226, ina226::Data>::startPeriodicMeasurement(
current,
voltage,
power);
245 return PeriodicMeasurementAdapter<UnitINA226, ina226::Data>::startPeriodicMeasurement(rate, sct, bct,
current,
254 return PeriodicMeasurementAdapter<UnitINA226, ina226::Data>::stopPeriodicMeasurement();
272 const bool power =
true);
289 const bool power =
true);
393#if defined(__M5UNIFIED_HPP__)
400 inline float getBusVoltage()
405 inline float getShuntVoltage()
410 inline float getShuntCurrent()
415 inline float getPower()
417 return power() / 1000.0f;
444 bool start_periodic_measurement(
const ina226::Sampling rate,
const ina226::ConversionTime sct,
445 const ina226::ConversionTime bct,
const bool current,
const bool voltage,
447 bool stop_periodic_measurement();
449 bool write_mode(
const ina226::Mode mode);
450 bool read_configuration(uint16_t& v);
451 bool write_configuration(
const uint16_t v);
452 bool read_mask(uint16_t& m);
453 bool write_mask(
const uint16_t m);
455 bool is_data_ready();
456 bool read_measurement(ina226::Data& d);
458 M5_UNIT_COMPONENT_PERIODIC_MEASUREMENT_ADAPTER_HPP_BUILDER(
UnitINA226, ina226::Data);
461 std::unique_ptr<m5::container::CircularBuffer<ina226::Data>> _data{};
463 float _shuntRes{}, _maxCurrentA{}, _currentLSB{};
464 uint8_t _measureBits{};
480 :
UnitINA226(0.005f , 10.0f , curLSB, DEFAULT_ADDRESS)
501 :
UnitINA226(0.080f , 1.0f , curLSB, DEFAULT_ADDRESS)
512constexpr uint8_t CONFIGURATION_REG{0x00};
514constexpr uint8_t SHUNT_VOLTAGE_REG{0x01};
515constexpr uint8_t BUS_VOLTAGE_REG{0x02};
516constexpr uint8_t POWER_REG{0x03};
517constexpr uint8_t CURRENT_REG{0x04};
519constexpr uint8_t CALIBRATION_REG{0x05};
520constexpr uint8_t MASK_REG{0x06};
521constexpr uint8_t ALERT_LIMIT_REG{0x07};
523constexpr uint8_t MANUFACTURER_ID_REG{0xFE};
524constexpr uint8_t DIE_ID_REG{0xff};
UnitINA226_10A unit.
Definition unit_INA226.hpp:471
UnitINA226_10A(const float curLSB=0.0f)
Constructor for UnitINA226_10A.
Definition unit_INA226.hpp:479
UnitINA226_1A unit.
Definition unit_INA226.hpp:492
UnitINA226_1A(const float curLSB=0.0f)
Constructor for UnitINA226_1A.
Definition unit_INA226.hpp:500
Base class for INA226 unit.
Definition unit_INA226.hpp:119
bool writeShuntVoltageConversionTime(const ina226::ConversionTime ct)
Write the conversion time of Shunt voltage.
Definition unit_INA226.cpp:536
bool writeCalibration(const uint16_t cal)
Write the calibration value.
Definition unit_INA226.cpp:578
float power() const
Oldest power (mW)
Definition unit_INA226.hpp:207
bool writeBusVoltageConversionTime(const ina226::ConversionTime ct)
Write the conversion time of Bus voltage.
Definition unit_INA226.cpp:510
float shuntVoltage() const
Oldest shunt voltage (mV)
Definition unit_INA226.hpp:197
void config(const config_t &cfg)
Set the configuration.
Definition unit_INA226.hpp:169
float maximumCurrent() const
Gets the maximum current (A)
Definition unit_INA226.hpp:183
float shuntResistor() const
Gets the shunt Resistor (Ohm)
Definition unit_INA226.hpp:178
bool readAlertOccurred(bool &alert)
Read the alert occurred?
Definition unit_INA226.cpp:626
float current() const
Oldest current (mA)
Definition unit_INA226.hpp:212
bool powerDown()
Power down.
Definition unit_INA226.cpp:583
config_t config()
Gets the configuration.
Definition unit_INA226.hpp:164
bool readBusVoltageConversionTime(ina226::ConversionTime &ct)
Read the conversion time of Bus voltage.
Definition unit_INA226.cpp:499
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:407
bool readAlertLimit(uint16_t &limit)
Read the alert limit value.
Definition unit_INA226.cpp:612
bool readCalibration(uint16_t &cal)
Read the calibration value.
Definition unit_INA226.cpp:572
float voltage() const
Oldest Bus voltage (mV)
Definition unit_INA226.hpp:202
bool writeAlertLimit(const uint16_t limit)
Write the alert limit value.
Definition unit_INA226.cpp:617
bool softReset(const bool all=false)
Software reset.
Definition unit_INA226.cpp:592
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:227
bool readSamplingRate(ina226::Sampling &rate)
Read the sampling rate.
Definition unit_INA226.cpp:473
float currentLSB() const
Gets the current LSB.
Definition unit_INA226.hpp:188
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:241
bool writeSamplingRate(const ina226::Sampling rate)
Write the sampling rate.
Definition unit_INA226.cpp:484
bool readMode(ina226::Mode &mode)
Read the operation mode.
Definition unit_INA226.cpp:452
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:275
bool readShuntVoltageConversionTime(ina226::ConversionTime &ct)
Read the conversion time of Shunt voltage.
Definition unit_INA226.cpp:525
bool stopPeriodicMeasurement()
Stop periodic measurement.
Definition unit_INA226.hpp:252
Top level namespace of M5stack.
Settings for begin.
Definition unit_INA226.hpp:127
bool current
Measure current?
Definition unit_INA226.hpp:131
bool voltage
Measure bus voltage?
Definition unit_INA226.hpp:133
ina226::Sampling sampling_rate
Sampling rate.
Definition unit_INA226.hpp:137
ina226::ConversionTime bus_conversion_time
Bus conversion time.
Definition unit_INA226.hpp:141
ina226::ConversionTime shunt_conversion_time
Shunt conversion time.
Definition unit_INA226.hpp:139
bool start_periodic
Start periodic measurement on begin?
Definition unit_INA226.hpp:129
bool power
Measure power?
Definition unit_INA226.hpp:135
Measurement data group.
Definition unit_INA226.hpp:85
uint8_t measureBits
Measured channels bitmask (0:Shunt 1:Bus 2:Power 3:Current)
Definition unit_INA226.hpp:88
std::array< uint16_t, 4 > raw
Raw data 0:Shunt 1:Bus 2:Power 3:Current.
Definition unit_INA226.hpp:86
float current() const
Current (mA) Returns NaN if not measured.
Definition unit_INA226.hpp:106
float power() const
Power (mW) Returns NaN if not measured.
Definition unit_INA226.hpp:101
float currentLSB
currentLSB
Definition unit_INA226.hpp:87
float shuntVoltage() const
Shunt voltage (mV) Returns NaN if not measured.
Definition unit_INA226.hpp:91
float voltage() const
Bus voltage (mV) Returns NaN if not measured.
Definition unit_INA226.hpp:96
@ 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.