add usb power detection + check to ADC shutdown logic

This commit is contained in:
sigil-03 2025-11-14 14:34:29 -07:00
parent 8ea4b4401e
commit c43cc5599e
2 changed files with 25 additions and 6 deletions

View file

@ -310,6 +310,7 @@ pub struct Interfaces {
pub pwm_core: SimplePwmCore<'static, ch32_hal::peripherals::TIM1>,
pub adc_core: crate::AdcCore,
pub amp: crate::Amplifier,
pub usb: crate::Usb,
}
pub struct App {
@ -400,12 +401,14 @@ impl App {
}
if self.timers.batt_adc_timer.need_service() {
self.timers.batt_adc_timer.service();
let bv = self.interfaces.adc_core.get_battery_voltage();
let avg = self.interfaces.adc_core.get_average();
// #[cfg(feature = "enable_print")]
// println!("batt adc service: {bv}, {avg}");
if avg < 421 {
self.set_state(State::DeepSleep);
if !self.interfaces.usb.powered() {
let bv = self.interfaces.adc_core.get_battery_voltage();
let avg = self.interfaces.adc_core.get_average();
// #[cfg(feature = "enable_print")]
// println!("batt adc service: {bv}, {avg}");
if avg < 421 {
self.set_state(State::DeepSleep);
}
}
}
if self.timers.usb_adc_timer.need_service() {

View file

@ -44,6 +44,19 @@ use crate::app::sequencer::{DynamicSequence, SequenceEntry};
static LED0_SEQ: [u8; 8] = [0u8, 25u8, 50u8, 75u8, 100u8, 75u8, 50u8, 25u8];
pub struct Usb {
usb_pin: Input<'static>,
}
impl Usb {
pub fn new(usb_pin: Input<'static>) -> Self {
Self { usb_pin }
}
pub fn powered(&self) -> bool {
self.usb_pin.is_high()
}
}
pub struct Amplifier {
amp_en: Output<'static>,
}
@ -276,6 +289,8 @@ fn app_main(mut p: hal::Peripherals) -> ! {
// adc2
// let mut usb_detect_dc = hal::adc::Adc::new(p.ADC1, Default::default());
let mut usb_detect_pin = p.PD5;
let usb_detect_input = Input::new(usb_detect_pin, Pull::Down);
let usb = Usb::new(usb_detect_input);
// println!("ADC_PIN CHANNEL: {}", adc_pin.channel().channel());
@ -360,6 +375,7 @@ fn app_main(mut p: hal::Peripherals) -> ! {
pwm_core,
adc_core,
amp,
usb,
};
let mut app = App::new(app_config, app_services, app_sequences, app_interfaces);