Skip to content
Snippets Groups Projects
Commit fd842936 authored by Samuel Tardieu's avatar Samuel Tardieu
Browse files

Add low power detector

parent a412a7d3
No related branches found
No related tags found
No related merge requests found
......@@ -48,10 +48,11 @@ the TB6612FNG motor driver.
The led pattern is in Morse code.
| Code | Meaning | Pattern |
|------+------------------------------+---------|
| I | Regular reset | .. |
| WW | Reset due to window watchdog | .-- .-- |
| Code | Meaning | Pattern |
|------+------------------------------------------------------+-----------|
| I | Regular mode | .. |
| LP | Low power (Vdd is below 2.9V) | .-.. .--. |
| WW | Last reset was due to the window watchdog trigerring | .-- .-- |
* Command set
......
......@@ -17,6 +17,7 @@ use panic_probe as _;
pub mod blinker;
mod encoders;
mod logic;
mod power;
mod tb6612fng;
#[derive(Clone, Copy, Debug)]
......@@ -90,6 +91,8 @@ async fn main(spawner: Spawner) {
.spawn(blinker::blink(p.PB15, blink_pattern(reset_cause)))
.unwrap();
spawner.spawn(power::watch_power_level()).unwrap();
let motors = Tb6612fng::new(
p.PA4,
p.PA5,
......
use crate::blinker;
use embassy_stm32::pac;
use embassy_time::Timer;
#[embassy_executor::task]
pub async fn watch_power_level() {
// Activate PWR clock
pac::RCC.apb1enr().modify(|w| w.set_pwren(true));
// Configure PVD for 2.9V
pac::PWR.cr().modify(|w| {
w.set_pls(0b111); // 2.9V
w.set_pvde(true);
});
// Check power level every second, switch blinker to
// LP (low power) if power goes beyond this value.
loop {
Timer::after_secs(1).await;
if pac::PWR.csr().read().pvdo() {
defmt::warn!("low power (< 2.9V) detected");
blinker::set_blink_pattern(".-.. .--.");
break;
}
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment