🧑‍💻 Omit unused ADC pins (#28007)
Some checks failed
CI - Build Tests / Build Test (push) Waiting to run
CI - Unit Tests / Unit Test (push) Waiting to run
CI - Validate boards.h / Validate boards.h (push) Has been cancelled
CI - Validate Pins Files / Validate Pins Files (push) Has been cancelled

Co-authored-by: Scott Lahteine <thinkyhead@users.noreply.github.com>
This commit is contained in:
Andrew 2025-08-16 21:41:37 -04:00 committed by GitHub
parent 93783e993b
commit 7086ca632f
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
7 changed files with 159 additions and 86 deletions

View file

@ -242,12 +242,13 @@ void MarlinHAL::adc_init() {
TERN_(HAS_TEMP_ADC_5, adc1_set_attenuation(get_channel(TEMP_5_PIN), ADC_ATTEN_11db));
TERN_(HAS_TEMP_ADC_6, adc2_set_attenuation(get_channel(TEMP_6_PIN), ADC_ATTEN_11db));
TERN_(HAS_TEMP_ADC_7, adc3_set_attenuation(get_channel(TEMP_7_PIN), ADC_ATTEN_11db));
TERN_(HAS_HEATED_BED, adc1_set_attenuation(get_channel(TEMP_BED_PIN), ADC_ATTEN_11db));
TERN_(HAS_TEMP_CHAMBER, adc1_set_attenuation(get_channel(TEMP_CHAMBER_PIN), ADC_ATTEN_11db));
TERN_(HAS_TEMP_PROBE, adc1_set_attenuation(get_channel(TEMP_PROBE_PIN), ADC_ATTEN_11db));
TERN_(HAS_TEMP_COOLER, adc1_set_attenuation(get_channel(TEMP_COOLER_PIN), ADC_ATTEN_11db));
TERN_(HAS_TEMP_BOARD, adc1_set_attenuation(get_channel(TEMP_BOARD_PIN), ADC_ATTEN_11db));
TERN_(FILAMENT_WIDTH_SENSOR, adc1_set_attenuation(get_channel(FILWIDTH_PIN), ADC_ATTEN_11db));
TERN_(HAS_TEMP_ADC_BED, adc1_set_attenuation(get_channel(TEMP_BED_PIN), ADC_ATTEN_11db));
TERN_(HAS_TEMP_ADC_CHAMBER, adc1_set_attenuation(get_channel(TEMP_CHAMBER_PIN), ADC_ATTEN_11db));
TERN_(HAS_TEMP_ADC_PROBE, adc1_set_attenuation(get_channel(TEMP_PROBE_PIN), ADC_ATTEN_11db));
TERN_(HAS_TEMP_ADC_COOLER, adc1_set_attenuation(get_channel(TEMP_COOLER_PIN), ADC_ATTEN_11db));
TERN_(HAS_TEMP_ADC_BOARD, adc1_set_attenuation(get_channel(TEMP_BOARD_PIN), ADC_ATTEN_11db));
TERN_(HAS_FILWIDTH_ADC, adc1_set_attenuation(get_channel(FILWIDTH_PIN), ADC_ATTEN_11db));
TERN_(HAS_FILWIDTH2_ADC, adc1_set_attenuation(get_channel(FILWIDTH2_PIN), ADC_ATTEN_11db));
// Note that adc2 is shared with the WiFi module, which has higher priority, so the conversion may fail.
// That's why we're not setting it up here.

View file

@ -61,7 +61,8 @@
#define GET_COOLER_ADC() TERN(HAS_TEMP_ADC_COOLER, PIN_TO_ADC(TEMP_COOLER_PIN), -1)
#define GET_BOARD_ADC() TERN(HAS_TEMP_ADC_BOARD, PIN_TO_ADC(TEMP_BOARD_PIN), -1)
#define GET_SOC_ADC() TERN(HAS_TEMP_ADC_BOARD, PIN_TO_ADC(TEMP_BOARD_PIN), -1)
#define GET_FILAMENT_WIDTH_ADC() TERN(FILAMENT_WIDTH_SENSOR, PIN_TO_ADC(FILWIDTH_PIN), -1)
#define GET_FILAMENT_WIDTH_ADC() TERN(HAS_FILWIDTH_ADC, PIN_TO_ADC(FILWIDTH_PIN), -1)
#define GET_FILAMENT2_WIDTH_ADC() TERN(HAS_FILWIDTH2_ADC, PIN_TO_ADC(FILWIDTH2_PIN), -1)
#define GET_BUTTONS_ADC() TERN(HAS_ADC_BUTTONS, PIN_TO_ADC(ADC_KEYPAD_PIN), -1)
#define GET_JOY_ADC_X() TERN(HAS_JOY_ADC_X, PIN_TO_ADC(JOY_X_PIN), -1)
#define GET_JOY_ADC_Y() TERN(HAS_JOY_ADC_Y, PIN_TO_ADC(JOY_Y_PIN), -1)
@ -77,7 +78,7 @@
|| GET_PROBE_ADC() == n \
|| GET_COOLER_ADC() == n \
|| GET_BOARD_ADC() == n || GET_SOC_ADC() == n \
|| GET_FILAMENT_WIDTH_ADC() == n \
|| GET_FILAMENT_WIDTH_ADC() == n || GET_FILAMENT2_WIDTH_ADC() == n \
|| GET_BUTTONS_ADC() == n \
|| GET_JOY_ADC_X() == n || GET_JOY_ADC_Y() == n || GET_JOY_ADC_Z() == n \
|| GET_POWERMON_ADC_CURRENT() == n || GET_POWERMON_ADC_VOLTS() == n \
@ -146,6 +147,9 @@ enum ADCIndex {
#if GET_FILAMENT_WIDTH_ADC() == 0
FILWIDTH,
#endif
#if GET_FILAMENT2_WIDTH_ADC() == 0
FILWIDTH2,
#endif
#if GET_BUTTONS_ADC() == 0
ADC_KEY,
#endif
@ -212,6 +216,9 @@ enum ADCIndex {
#if GET_FILAMENT_WIDTH_ADC() == 1
FILWIDTH,
#endif
#if GET_FILAMENT2_WIDTH_ADC() == 1
FILWIDTH2,
#endif
#if GET_BUTTONS_ADC() == 1
ADC_KEY,
#endif
@ -334,6 +341,9 @@ enum ADCIndex {
#if GET_FILAMENT_WIDTH_ADC() == 0
FILWIDTH_PIN,
#endif
#if GET_FILAMENT2_WIDTH_ADC() == 0
FILWIDTH2_PIN,
#endif
#if GET_BUTTONS_ADC() == 0
ADC_KEYPAD_PIN,
#endif
@ -400,6 +410,9 @@ enum ADCIndex {
#if GET_FILAMENT_WIDTH_ADC() == 1
FILWIDTH_PIN,
#endif
#if GET_FILAMENT2_WIDTH_ADC() == 1
FILWIDTH2_PIN,
#endif
#if GET_BUTTONS_ADC() == 1
ADC_KEYPAD_PIN,
#endif
@ -471,6 +484,9 @@ enum ADCIndex {
#if GET_FILAMENT_WIDTH_ADC() == 0
{ PIN_TO_INPUTCTRL(FILWIDTH_PIN) },
#endif
#if GET_FILAMENT2_WIDTH_ADC() == 0
{ PIN_TO_INPUTCTRL(FILWIDTH2_PIN) },
#endif
#if GET_BUTTONS_ADC() == 0
{ PIN_TO_INPUTCTRL(ADC_KEYPAD_PIN) },
#endif
@ -543,6 +559,9 @@ enum ADCIndex {
#if GET_FILAMENT_WIDTH_ADC() == 1
{ PIN_TO_INPUTCTRL(FILWIDTH_PIN) },
#endif
#if GET_FILAMENT2_WIDTH_ADC() == 1
{ PIN_TO_INPUTCTRL(FILWIDTH2_PIN) },
#endif
#if GET_BUTTONS_ADC() == 1
{ PIN_TO_INPUTCTRL(ADC_KEYPAD_PIN) },
#endif

View file

@ -134,27 +134,28 @@ uint16_t MarlinHAL::adc_result;
// Init the AD in continuous capture mode
void MarlinHAL::adc_init() {
static const uint8_t adc_pins[] = {
OPTITEM(HAS_TEMP_ADC_0, TEMP_0_PIN)
OPTITEM(HAS_TEMP_ADC_1, TEMP_1_PIN)
OPTITEM(HAS_TEMP_ADC_2, TEMP_2_PIN)
OPTITEM(HAS_TEMP_ADC_3, TEMP_3_PIN)
OPTITEM(HAS_TEMP_ADC_4, TEMP_4_PIN)
OPTITEM(HAS_TEMP_ADC_5, TEMP_5_PIN)
OPTITEM(HAS_TEMP_ADC_6, TEMP_6_PIN)
OPTITEM(HAS_TEMP_ADC_7, TEMP_7_PIN)
OPTITEM(HAS_HEATED_BED, TEMP_BED_PIN)
OPTITEM(HAS_TEMP_CHAMBER, TEMP_CHAMBER_PIN)
OPTITEM(HAS_TEMP_ADC_PROBE, TEMP_PROBE_PIN)
OPTITEM(HAS_TEMP_COOLER, TEMP_COOLER_PIN)
OPTITEM(HAS_TEMP_BOARD, TEMP_BOARD_PIN)
OPTITEM(HAS_TEMP_SOC, TEMP_SOC_PIN)
OPTITEM(FILAMENT_WIDTH_SENSOR, FILWIDTH_PIN)
OPTITEM(HAS_ADC_BUTTONS, ADC_KEYPAD_PIN)
OPTITEM(HAS_JOY_ADC_X, JOY_X_PIN)
OPTITEM(HAS_JOY_ADC_Y, JOY_Y_PIN)
OPTITEM(HAS_JOY_ADC_Z, JOY_Z_PIN)
OPTITEM(POWER_MONITOR_CURRENT, POWER_MONITOR_CURRENT_PIN)
OPTITEM(POWER_MONITOR_VOLTAGE, POWER_MONITOR_VOLTAGE_PIN)
OPTITEM(HAS_TEMP_ADC_0, TEMP_0_PIN )
OPTITEM(HAS_TEMP_ADC_1, TEMP_1_PIN )
OPTITEM(HAS_TEMP_ADC_2, TEMP_2_PIN )
OPTITEM(HAS_TEMP_ADC_3, TEMP_3_PIN )
OPTITEM(HAS_TEMP_ADC_4, TEMP_4_PIN )
OPTITEM(HAS_TEMP_ADC_5, TEMP_5_PIN )
OPTITEM(HAS_TEMP_ADC_6, TEMP_6_PIN )
OPTITEM(HAS_TEMP_ADC_7, TEMP_7_PIN )
OPTITEM(HAS_TEMP_ADC_BED, TEMP_BED_PIN )
OPTITEM(HAS_TEMP_ADC_CHAMBER, TEMP_CHAMBER_PIN )
OPTITEM(HAS_TEMP_ADC_PROBE, TEMP_PROBE_PIN )
OPTITEM(HAS_TEMP_ADC_COOLER, TEMP_COOLER_PIN )
OPTITEM(HAS_TEMP_ADC_BOARD, TEMP_BOARD_PIN )
OPTITEM(HAS_TEMP_ADC_SOC, TEMP_SOC_PIN )
OPTITEM(HAS_FILWIDTH_ADC, FILWIDTH_PIN )
OPTITEM(HAS_FILWIDTH2_ADC, FILWIDTH2_PIN )
OPTITEM(HAS_ADC_BUTTONS, ADC_KEYPAD_PIN )
OPTITEM(HAS_JOY_ADC_X, JOY_X_PIN )
OPTITEM(HAS_JOY_ADC_Y, JOY_Y_PIN )
OPTITEM(HAS_JOY_ADC_Z, JOY_Z_PIN )
OPTITEM(POWER_MONITOR_CURRENT, POWER_MONITOR_CURRENT_PIN)
OPTITEM(POWER_MONITOR_VOLTAGE, POWER_MONITOR_VOLTAGE_PIN)
};
static STM32ADC adc(ADC1);
// Configure the ADC
@ -175,27 +176,28 @@ void MarlinHAL::adc_start(const pin_t pin) {
ADCIndex pin_index;
switch (pin) {
default: return;
_TCASE(HAS_TEMP_ADC_0, TEMP_0_PIN, TEMP_0)
_TCASE(HAS_TEMP_ADC_1, TEMP_1_PIN, TEMP_1)
_TCASE(HAS_TEMP_ADC_2, TEMP_2_PIN, TEMP_2)
_TCASE(HAS_TEMP_ADC_3, TEMP_3_PIN, TEMP_3)
_TCASE(HAS_TEMP_ADC_4, TEMP_4_PIN, TEMP_4)
_TCASE(HAS_TEMP_ADC_5, TEMP_5_PIN, TEMP_5)
_TCASE(HAS_TEMP_ADC_6, TEMP_6_PIN, TEMP_6)
_TCASE(HAS_TEMP_ADC_7, TEMP_7_PIN, TEMP_7)
_TCASE(HAS_HEATED_BED, TEMP_BED_PIN, TEMP_BED)
_TCASE(HAS_TEMP_CHAMBER, TEMP_CHAMBER_PIN, TEMP_CHAMBER)
_TCASE(HAS_TEMP_ADC_PROBE, TEMP_PROBE_PIN, TEMP_PROBE)
_TCASE(HAS_TEMP_COOLER, TEMP_COOLER_PIN, TEMP_COOLER)
_TCASE(HAS_TEMP_BOARD, TEMP_BOARD_PIN, TEMP_BOARD)
_TCASE(HAS_TEMP_SOC, TEMP_SOC_PIN, TEMP_SOC)
_TCASE(HAS_JOY_ADC_X, JOY_X_PIN, JOY_X)
_TCASE(HAS_JOY_ADC_Y, JOY_Y_PIN, JOY_Y)
_TCASE(HAS_JOY_ADC_Z, JOY_Z_PIN, JOY_Z)
_TCASE(FILAMENT_WIDTH_SENSOR, FILWIDTH_PIN, FILWIDTH)
_TCASE(HAS_ADC_BUTTONS, ADC_KEYPAD_PIN, ADC_KEY)
_TCASE(POWER_MONITOR_CURRENT, POWER_MONITOR_CURRENT_PIN, POWERMON_CURRENT)
_TCASE(POWER_MONITOR_VOLTAGE, POWER_MONITOR_VOLTAGE_PIN, POWERMON_VOLTAGE)
_TCASE(HAS_TEMP_ADC_0, TEMP_0_PIN, TEMP_0 )
_TCASE(HAS_TEMP_ADC_1, TEMP_1_PIN, TEMP_1 )
_TCASE(HAS_TEMP_ADC_2, TEMP_2_PIN, TEMP_2 )
_TCASE(HAS_TEMP_ADC_3, TEMP_3_PIN, TEMP_3 )
_TCASE(HAS_TEMP_ADC_4, TEMP_4_PIN, TEMP_4 )
_TCASE(HAS_TEMP_ADC_5, TEMP_5_PIN, TEMP_5 )
_TCASE(HAS_TEMP_ADC_6, TEMP_6_PIN, TEMP_6 )
_TCASE(HAS_TEMP_ADC_7, TEMP_7_PIN, TEMP_7 )
_TCASE(HAS_TEMP_ADC_BED, TEMP_BED_PIN, TEMP_BED )
_TCASE(HAS_TEMP_ADC_CHAMBER, TEMP_CHAMBER_PIN, TEMP_CHAMBER )
_TCASE(HAS_TEMP_ADC_PROBE, TEMP_PROBE_PIN, TEMP_PROBE )
_TCASE(HAS_TEMP_ADC_COOLER, TEMP_COOLER_PIN, TEMP_COOLER )
_TCASE(HAS_TEMP_ADC_BOARD, TEMP_BOARD_PIN, TEMP_BOARD )
_TCASE(HAS_TEMP_ADC_SOC, TEMP_SOC_PIN, TEMP_SOC )
_TCASE(HAS_FILWIDTH_ADC, FILWIDTH_PIN, FILWIDTH )
_TCASE(HAS_FILWIDTH2_ADC, FILWIDTH2_PIN, FILWIDTH2 )
_TCASE(HAS_ADC_BUTTONS, ADC_KEYPAD_PIN, ADC_KEY )
_TCASE(HAS_JOY_ADC_X, JOY_X_PIN, JOY_X )
_TCASE(HAS_JOY_ADC_Y, JOY_Y_PIN, JOY_Y )
_TCASE(HAS_JOY_ADC_Z, JOY_Z_PIN, JOY_Z )
_TCASE(POWER_MONITOR_CURRENT, POWER_MONITOR_CURRENT_PIN, POWERMON_CURRENT)
_TCASE(POWER_MONITOR_VOLTAGE, POWER_MONITOR_VOLTAGE_PIN, POWERMON_VOLTAGE)
}
adc_result = (adc_results[(int)pin_index] & 0xFFF) >> (12 - HAL_ADC_RESOLUTION); // shift out unused bits
}

View file

@ -44,7 +44,8 @@ enum ADCIndex : uint8_t {
OPTITEM(HAS_TEMP_ADC_COOLER, TEMP_COOLER )
OPTITEM(HAS_TEMP_ADC_BOARD, TEMP_BOARD )
OPTITEM(HAS_TEMP_ADC_SOC, TEMP_SOC )
OPTITEM(FILAMENT_WIDTH_SENSOR, FILWIDTH )
OPTITEM(HAS_FILWIDTH_ADC, FILWIDTH )
OPTITEM(HAS_FILWIDTH2_ADC, FILWIDTH2 )
OPTITEM(HAS_ADC_BUTTONS, ADC_KEY )
OPTITEM(HAS_JOY_ADC_X, JOY_X )
OPTITEM(HAS_JOY_ADC_Y, JOY_Y )

View file

@ -2490,6 +2490,59 @@
//
// ADC Temp Sensors (Thermistor or Thermocouple with amplifier ADC interface)
//
#if TEMP_SENSOR(0)
#define HAS_TEMP_HOTEND 1
#endif
#if TEMP_SENSOR(BED)
#define HAS_HEATED_BED 1
#define HAS_TEMP_BED 1
#endif
#if TEMP_SENSOR(CHAMBER)
#define HAS_TEMP_CHAMBER 1
#endif
#if TEMP_SENSOR(PROBE)
#define HAS_TEMP_PROBE 1
#endif
#if TEMP_SENSOR(COOLER)
#define HAS_TEMP_COOLER 1
#endif
#if TEMP_SENSOR(BOARD)
#define HAS_TEMP_BOARD 1
#endif
#if TEMP_SENSOR(SOC)
#define HAS_TEMP_SOC 1
#endif
#if TEMP_SENSOR(REDUNDANT)
#define HAS_TEMP_REDUNDANT 1
#endif
// Unused ADC pins can be omitted
#if ANY(KEEP_ADC_PINS_AROUND, PINS_DEBUGGING, MARLIN_DEV_MODE)
#if !HAS_TEMP_HOTEND
#undef TEMP_0_PIN
#endif
#if !HAS_HEATED_BED
#undef TEMP_BED_PIN
#endif
#if !HAS_TEMP_CHAMBER
#undef TEMP_CHAMBER_PIN
#endif
#if !HAS_TEMP_PROBE
#undef TEMP_PROBE_PIN
#endif
#if !HAS_TEMP_COOLER
#undef TEMP_COOLER_PIN
#endif
#if !HAS_TEMP_BOARD
#undef TEMP_BOARD_PIN
#endif
#if DISABLED(FILAMENT_WIDTH_SENSOR)
#undef FILWIDTH_PIN
#undef FILWIDTH2_PIN
#endif
#endif
#define HAS_ADC_TEST(P) (TEMP_SENSOR(P) && PIN_EXISTS(TEMP_##P) && !TEMP_SENSOR_IS_MAX_TC(P) && !TEMP_SENSOR_##P##_IS_DUMMY)
#if HOTENDS > 0 && HAS_ADC_TEST(0)
#define HAS_TEMP_ADC_0 1
@ -2515,11 +2568,8 @@
#if HOTENDS > 7 && HAS_ADC_TEST(7)
#define HAS_TEMP_ADC_7 1
#endif
#if TEMP_SENSOR_BED
#define HAS_HEATED_BED 1
#if HAS_ADC_TEST(BED)
#define HAS_TEMP_ADC_BED 1
#endif
#if HAS_HEATED_BED && HAS_ADC_TEST(BED)
#define HAS_TEMP_ADC_BED 1
#endif
#if HAS_ADC_TEST(PROBE)
#define HAS_TEMP_ADC_PROBE 1
@ -2539,31 +2589,11 @@
#if HAS_ADC_TEST(REDUNDANT)
#define HAS_TEMP_ADC_REDUNDANT 1
#endif
#define HAS_TEMP(N) (TEMP_SENSOR_IS_MAX_TC(N) || HAS_TEMP_ADC_##N || TEMP_SENSOR_##N##_IS_DUMMY)
#if HAS_HOTEND && HAS_TEMP(0)
#define HAS_TEMP_HOTEND 1
#if PIN_EXISTS(FILWIDTH_PIN)
#define HAS_FILWIDTH_ADC 1
#endif
#if HAS_TEMP(BED)
#define HAS_TEMP_BED 1
#endif
#if HAS_TEMP(CHAMBER)
#define HAS_TEMP_CHAMBER 1
#endif
#if HAS_TEMP(PROBE)
#define HAS_TEMP_PROBE 1
#endif
#if HAS_TEMP(COOLER)
#define HAS_TEMP_COOLER 1
#endif
#if HAS_TEMP(BOARD)
#define HAS_TEMP_BOARD 1
#endif
#if HAS_TEMP(SOC)
#define HAS_TEMP_SOC 1
#endif
#if HAS_TEMP(REDUNDANT)
#define HAS_TEMP_REDUNDANT 1
#if PIN_EXISTS(FILWIDTH2_PIN)
#define HAS_FILWIDTH2_ADC 1
#endif
#if ENABLED(JOYSTICK)
@ -2581,7 +2611,9 @@
#endif
#endif
// Heaters
//
// Heater Outputs
//
#if PIN_EXISTS(HEATER_0)
#define HAS_HEATER_0 1
#endif

View file

@ -3220,7 +3220,8 @@ void Temperature::init() {
TERN_(HAS_TEMP_ADC_BOARD, hal.adc_enable(TEMP_BOARD_PIN));
TERN_(HAS_TEMP_ADC_SOC, hal.adc_enable(TEMP_SOC_PIN));
TERN_(HAS_TEMP_ADC_REDUNDANT, hal.adc_enable(TEMP_REDUNDANT_PIN));
TERN_(FILAMENT_WIDTH_SENSOR, hal.adc_enable(FILWIDTH_PIN));
TERN_(HAS_FILWIDTH_ADC, hal.adc_enable(FILWIDTH_PIN));
TERN_(HAS_FILWIDTH2_ADC, hal.adc_enable(FILWIDTH2_PIN));
TERN_(HAS_ADC_BUTTONS, hal.adc_enable(ADC_KEYPAD_PIN));
TERN_(POWER_MONITOR_CURRENT, hal.adc_enable(POWER_MONITOR_CURRENT_PIN));
TERN_(POWER_MONITOR_VOLTAGE, hal.adc_enable(POWER_MONITOR_VOLTAGE_PIN));
@ -4517,11 +4518,25 @@ void Temperature::isr() {
case MeasureTemp_7: ACCUMULATE_ADC(temp_hotend[7]); break;
#endif
#if ENABLED(FILAMENT_WIDTH_SENSOR)
#if HAS_FILWIDTH_ADC
case Prepare_FILWIDTH: hal.adc_start(FILWIDTH_PIN); break;
case Measure_FILWIDTH:
if (!hal.adc_ready()) next_sensor_state = adc_sensor_state; // Redo this state
else filwidth.accumulate(hal.adc_value());
if (!hal.adc_ready())
next_sensor_state = adc_sensor_state; // Redo this state
else {
TERN_(FILAMENT_WIDTH_SENSOR, filwidth.accumulate(hal.adc_value()));
}
break;
#endif
#if HAS_FILWIDTH2_ADC
case Prepare_FILWIDTH2: hal.adc_start(FILWIDTH2_PIN); break;
case Measure_FILWIDTH2:
if (!hal.adc_ready())
next_sensor_state = adc_sensor_state; // Redo this state
else {
TERN_(FILAMENT_WIDTH_SENSOR, filwidth.accumulate(hal.adc_value()));
}
break;
#endif

View file

@ -118,9 +118,12 @@ enum ADCSensorState : char {
#if HAS_JOY_ADC_Z
PrepareJoy_Z, MeasureJoy_Z,
#endif
#if ENABLED(FILAMENT_WIDTH_SENSOR)
#if HAS_FILWIDTH_ADC
Prepare_FILWIDTH, Measure_FILWIDTH,
#endif
#if HAS_FILWIDTH2_ADC
Prepare_FILWIDTH2, Measure_FILWIDTH2,
#endif
#if ENABLED(POWER_MONITOR_CURRENT)
Prepare_POWER_MONITOR_CURRENT,
Measure_POWER_MONITOR_CURRENT,