10#ifndef M5_UNIT_ANADIG_UNIT_ADS11XX_HPP
11#define M5_UNIT_ANADIG_UNIT_ADS11XX_HPP
12#include <M5UnitComponent.hpp>
13#include <m5_utility/stl/extension.hpp>
14#include <m5_utility/container/circular_buffer.hpp>
30enum class PGA : uint8_t {
42 std::array<uint8_t, 2>
raw{};
51 return static_cast<int16_t
>(m5::types::big_uint16_t(
raw[0],
raw[1]).get());
59 static const int32_t min_code_table[4];
68class UnitADS11XX :
public Component,
public PeriodicMeasurementAdapter<UnitADS11XX, ads11xx::Data> {
75 : Component(addr), _data{new
m5::container::CircularBuffer<
ads11xx::Data>(1)}
77 auto ccfg = component_config();
78 ccfg.clock = 400 * 1000U;
79 component_config(ccfg);
86 virtual bool begin()
override;
88 virtual void update(
const bool force =
false)
override;
95 return !empty() ? oldest().differentialValue() : 0;
100 return !empty() ? oldest().differentialVoltage() : std::numeric_limits<float>::quiet_NaN();
132 bool start_periodic_measurement(
const uint8_t cfg_value);
133 bool start_periodic_measurement();
134 bool stop_periodic_measurement();
136 bool measure_singleshot(
ads11xx::Data& data,
const uint8_t cfg_value);
139 bool read_config(uint8_t& v);
140 bool write_config(
const uint8_t v);
141 bool read_measurement(uint8_t v[2]);
142 bool is_data_ready();
144 virtual bool read_if_ready_in_periodic(uint8_t v[2]);
145 virtual uint32_t get_interval(
const uint8_t )
150 M5_UNIT_COMPONENT_PERIODIC_MEASUREMENT_ADAPTER_HPP_BUILDER(
UnitADS11XX, ads11xx::Data);
153 std::unique_ptr<m5::container::CircularBuffer<ads11xx::Data>> _data{};
160 inline uint8_t rate()
const
162 return (value >> 2) & 0x03;
168 inline bool continuous()
const
170 return !(value & (1U << 4));
172 inline bool single()
const
174 return !continuous();
176 inline bool st()
const
180 return (value & 0x80);
183 inline void rate(
const uint8_t rate)
185 value = (value & ~(0x03 << 2)) | ((rate & 0x03) << 2);
189 value = (value & ~0x03) | m5::stl::to_underlying(pga);
191 inline void continuous(
bool enable)
193 value = (value & ~(1U << 4)) | ((enable ? 0 : 1) << 4);
195 inline void single(
bool enable)
199 inline void st(
const bool b)
201 value = (value & ~0x80) | (b ? 0x80 : 0x00);
Base class of ADS1100,ADS1110.
Definition unit_ADS11xx.hpp:68
bool writePGA(const ads11xx::PGA pga)
Write the PGA.
Definition unit_ADS11xx.cpp:174
float differentialVoltage() const
Oldest measured differential voltage(mV)
Definition unit_ADS11xx.hpp:98
virtual bool generalReset()
General reset.
Definition unit_ADS11xx.cpp:189
UnitADS11XX(const uint8_t addr=DEFAULT_ADDRESS)
Constructor.
Definition unit_ADS11xx.hpp:74
virtual bool begin() override
Begin the unit.
Definition unit_ADS11xx.cpp:33
virtual void update(const bool force=false) override
Update the unit.
Definition unit_ADS11xx.cpp:72
int16_t differentialValue() const
Oldest measured differential value.
Definition unit_ADS11xx.hpp:93
bool readPGA(ads11xx::PGA &pga)
Read the PGA.
Definition unit_ADS11xx.cpp:164
Top level namespace of M5Stack.
Definition unit_ADS11xx.hpp:159
Measurement data group.
Definition unit_ADS11xx.hpp:41
std::array< uint8_t, 2 > raw
Raw.
Definition unit_ADS11xx.hpp:42
float differentialVoltage() const
Gets the differential voltage(mV)
Definition unit_ADS11xx.hpp:54
PGA pga
PGA.
Definition unit_ADS11xx.hpp:44
uint8_t rate
SPS (Value and content depend on derived class)
Definition unit_ADS11xx.hpp:43
float vdd
VDD(mV)
Definition unit_ADS11xx.hpp:45
int16_t differentialValue() const
Gets the differential value.
Definition unit_ADS11xx.hpp:49
float factor
Correction factor.
Definition unit_ADS11xx.hpp:46
PGA
Programmable Gain Amplifier.
Definition unit_ADS11xx.hpp:30