SensorLib 0.5.0
Multi-platform sensor driver library for Arduino, PlatformIO, and ESP-IDF
Loading...
Searching...
No Matches
pmic_probe.ino
Go to the documentation of this file.
1
45#include <Arduino.h>
46#include <Wire.h>
47#include <PmicDrv.hpp>
48
49#ifndef PMIC_SDA
50#define PMIC_SDA 5
51#endif
52
53#ifndef PMIC_SCL
54#define PMIC_SCL 6
55#endif
56
57// Instantiate all supported PMIC drivers
61
62// Base-class pointer to the detected PMIC
63PmicBase *pmic = nullptr;
64
65static void printCapabilities(PmicCapability::Capability caps)
66{
67 Serial.print("Capabilities:");
68 if (caps & PmicCapability::Capability::PmicSupportCharger) Serial.print(" CHARGER");
69 if (caps & PmicCapability::Capability::PmicSupportPower) Serial.print(" POWER");
70 if (caps & PmicCapability::Capability::PmicSupportAdc) Serial.print(" ADC");
71 if (caps & PmicCapability::Capability::PmicSupportLed) Serial.print(" LED");
72 if (caps & PmicCapability::Capability::PmicSupportGpio) Serial.print(" GPIO");
73 if (caps & PmicCapability::Capability::PmicSupportIrq) Serial.print(" IRQ");
74 if (caps & PmicCapability::Capability::PmicSupportBc12) Serial.print(" BC12");
75 if (caps & PmicCapability::Capability::PmicSupportPowerBtn) Serial.print(" PWR_BTN");
76 Serial.println();
77}
78
79void setup()
80{
81 Serial.begin(115200);
82 while (!Serial) delay(10);
83
84 Serial.println("\n=== PMIC Auto-Probe Example ===");
85
86 // Probe each PMIC at its known address.
87 // begin() internally reads the device-revision register; only a
88 // matching chip revision will return true.
89 if (sy6970.begin(Wire, SY6970_SLAVE_ADDRESS, PMIC_SDA, PMIC_SCL)) {
90 pmic = &sy6970;
91 Serial.println(" -> SY6970 detected at 0x6A");
92 } else if (bq25896.begin(Wire, BQ25896_SLAVE_ADDRESS, PMIC_SDA, PMIC_SCL)) {
93 pmic = &bq25896;
94 Serial.println(" -> BQ25896 detected at 0x6B");
95 } else if (axp517.begin(Wire, AXP517_SLAVE_ADDRESS, PMIC_SDA, PMIC_SCL)) {
96 pmic = &axp517;
97 Serial.println(" -> AXP517 detected at 0x34");
98 }
99
100 if (!pmic) {
101 Serial.println("ERROR: No PMIC detected! Check wiring.");
102 while (1) delay(1000);
103 }
104
105 Serial.print("\nChip: ");
106 Serial.println(pmic->getChipName());
107
109 printCapabilities(caps);
110
111 // --- Charger configuration (base-class pointer) ---
113 if (chg) {
114 chg->setPreChargeCurrent(256);
115 chg->setFastChargeCurrent(1024);
116 chg->setTerminationCurrent(64);
117 chg->setChargeVoltage(4288);
118
119 Serial.print("Pre-Charge Current: ");
120 Serial.print(chg->getPreChargeCurrent());
121 Serial.println(" mA");
122 Serial.print("Fast-Charge Current: ");
123 Serial.print(chg->getFastChargeCurrent());
124 Serial.println(" mA");
125 Serial.print("Termination Current: ");
126 Serial.print(chg->getTerminationCurrent());
127 Serial.println(" mA");
128 Serial.print("Charge Voltage: ");
129 Serial.print(chg->getChargeVoltage());
130 Serial.println(" mV");
131 }
132
133 // --- Power configuration (base-class reference) ---
137
138 Serial.print("Input Current Limit: ");
139 Serial.print(pmic->getPower().getInputCurrentLimit());
140 Serial.println(" mA");
141 Serial.print("Input Voltage Limit: ");
142 Serial.print(pmic->getPower().getInputVoltageLimit());
143 Serial.println(" mV");
144 Serial.print("Min System Voltage: ");
145 Serial.print(pmic->getPower().getMinimumSystemVoltage());
146 Serial.println(" mV");
147
148 // --- LED configuration (base-class reference) ---
151 }
152
153 Serial.println("\nSetup complete! Printing status every 3s...\n");
154}
155
156void loop()
157{
158 static uint32_t interval = 0;
159
160 if (millis() > interval) {
161 interval = millis() + 3000;
162
163 Serial.print("========== ");
164 Serial.print(pmic->getChipName());
165 Serial.println(" Status ==========");
166
167 // --- Charger status ---
169 if (chg) {
171 Serial.print("Online: ");
172 Serial.println(s.online ? "Yes" : "No");
173 Serial.print("VBUS: ");
174 Serial.println(s.vbusPresent ? "Present" : "Absent");
175 Serial.print("Battery: ");
176 Serial.println(s.batteryPresent ? "Present" : "Absent");
177 Serial.print("Charging: ");
178 Serial.println(s.charging ? "Yes" : "No");
179 Serial.print("Charge Done: ");
180 Serial.println(s.chargeDone ? "Yes" : "No");
181 Serial.print("Fault: ");
182 Serial.println(s.fault ? "Yes" : "No");
183 }
184
185 // --- ADC readings ---
186 float val;
188 Serial.print("VBUS Voltage: ");
189 Serial.print(val);
190 Serial.println(" mV");
191 }
193 Serial.print("BAT Voltage: ");
194 Serial.print(val);
195 Serial.println(" mV");
196 }
198 Serial.print("VSYS Voltage: ");
199 Serial.print(val);
200 Serial.println(" mV");
201 }
203 Serial.print("BAT Current: ");
204 Serial.print(val);
205 Serial.println(" mA");
206 }
207
208 // --- Power status ---
209 Serial.print("Boost: ");
210 Serial.println(pmic->getPower().isBoostEnabled() ? "Enabled" : "Disabled");
211 Serial.print("Boost Voltage: ");
212 Serial.print(pmic->getPower().getBoostVoltage());
213 Serial.println(" mV");
214
215 Serial.println("===================================\n");
216 }
217}
@license MIT License
uint32_t interval
High-level driver facade for the X-Powers AXP517 PMIC.
virtual bool read(Channel ch, float &out)=0
Read a single ADC channel value.
@ BAT_VOLTAGE
Battery voltage.
@ BAT_CURRENT
Battery current.
@ VBUS_VOLTAGE
VBUS voltage.
@ VSYS_VOLTAGE
VSYS voltage.
bool begin(SensorCommCustom::CustomCallback callback, SensorCommCustomHal::CustomHalCallback hal_cb, uint8_t addr)
Initialize using custom I2C callback.
PMIC Base Abstract Class.
Definition PmicBase.hpp:130
virtual PmicCapability::Capability getCapabilities() const =0
Get PMIC capabilities.
virtual PmicLedBase & getLed()=0
Get LED interface.
virtual const char * getChipName() const =0
Get PMIC device name.
virtual PmicChargerBase * getCharger()
Get charger interface.
Definition PmicBase.hpp:211
virtual PmicAdcBase & getAdc()=0
Get ADC interface.
virtual PmicPowerBase & getPower()=0
Get power management interface.
PMIC charger capability interface.
virtual uint16_t getPreChargeCurrent()=0
Get pre-charge current setting.
virtual bool setChargeVoltage(uint16_t mV)=0
Set charge voltage (CV mode voltage)
virtual Status getStatus()=0
Get current charger status.
virtual bool setFastChargeCurrent(uint16_t mA)=0
Set fast charge (constant-current) current.
virtual uint16_t getChargeVoltage()=0
Get charge voltage setting.
virtual uint16_t getFastChargeCurrent()=0
Get fast charge current setting.
virtual bool setTerminationCurrent(uint16_t mA)=0
Set termination current.
virtual uint16_t getTerminationCurrent()=0
Get termination current setting.
virtual bool setPreChargeCurrent(uint16_t mA)=0
Set pre-charge current.
virtual bool setMode(Mode mode)=0
Set LED operating mode.
@ DISABLE
LED is disabled (if supported).
virtual bool setInputCurrentLimit(uint32_t ma)=0
Set the input current limit.
virtual bool setInputVoltageLimit(uint32_t mv)=0
Set the input voltage limit.
virtual bool isBoostEnabled() const
Check if boost functionality is enabled.
virtual uint32_t getInputCurrentLimit() const =0
Get the input current limit.
virtual uint32_t getMinimumSystemVoltage() const =0
Get the minimum system voltage.
virtual uint16_t getBoostVoltage() const
Get the boost voltage.
virtual bool setMinimumSystemVoltage(uint32_t mv)=0
Set the minimum system voltage.
virtual uint32_t getInputVoltageLimit() const =0
Get the input voltage limit.
bool begin(SensorCommCustom::CustomCallback callback, SensorCommCustomHal::CustomHalCallback hal_cb, uint8_t addr)
Initialize using custom I2C callback.
@ PmicSupportCharger
Battery charger support.
@ PmicSupportGpio
General purpose I/O support.
@ PmicSupportIrq
Interrupt handling support.
@ PmicSupportPower
Power management (input limits, boost, etc.)
@ PmicSupportAdc
Analog-to-Digital converter for monitoring.
@ PmicSupportLed
LED driver support.
@ PmicSupportPowerBtn
Power-on/Power-off control support.
@ PmicSupportBc12
BC1.2 (USB Battery Charging) support.
#define PMIC_SDA
#define PMIC_SCL
void setup()
PmicAXP517 axp517
PmicSY6970 sy6970
PmicBase * pmic
PmicBQ25896 bq25896
void loop()
Charger status structure.
bool vbusPresent
VBUS detected / good (USB power present)
bool chargeDone
Charge termination/done (battery full)
bool fault
Any fault latched/active.
bool charging
Charging state (coarse: true if in precharge/fastcharge)
bool batteryPresent
Battery present and detected.
bool online
PMIC reachable / initialized.