From 1718eff54adefc7cc95851f28df0c7e02eae3a36 Mon Sep 17 00:00:00 2001 From: Scott Lahteine Date: Thu, 13 Sep 2018 01:35:55 -0500 Subject: [PATCH] Code changes supporting up to 6 extruders --- Marlin/src/HAL/HAL_AVR/SanityCheck.h | 2 + Marlin/src/HAL/HAL_STM32F7/SanityCheck.h | 2 + Marlin/src/Marlin.cpp | 13 +- Marlin/src/Marlin.h | 15 +- Marlin/src/core/drivers.h | 3 +- Marlin/src/core/language.h | 5 + Marlin/src/feature/I2CPositionEncoder.cpp | 31 ++ Marlin/src/feature/controllerfan.cpp | 9 +- Marlin/src/feature/power.cpp | 9 +- Marlin/src/feature/runout.cpp | 3 + Marlin/src/feature/runout.h | 3 + Marlin/src/feature/solenoid.cpp | 8 + Marlin/src/feature/tmc_util.cpp | 23 ++ Marlin/src/feature/tmc_util.h | 31 +- Marlin/src/gcode/bedlevel/abl/G29.cpp | 4 +- Marlin/src/gcode/feature/trinamic/M906.cpp | 6 + .../src/gcode/feature/trinamic/M911-M915.cpp | 12 + Marlin/src/inc/Conditionals_post.h | 36 ++- Marlin/src/inc/SanityCheck.h | 86 ++++-- Marlin/src/lcd/language/language_an.h | 1 + Marlin/src/lcd/language/language_bg.h | 1 + Marlin/src/lcd/language/language_ca.h | 1 + Marlin/src/lcd/language/language_cz.h | 1 + Marlin/src/lcd/language/language_da.h | 1 + Marlin/src/lcd/language/language_de.h | 1 + Marlin/src/lcd/language/language_en.h | 6 + Marlin/src/lcd/language/language_es.h | 1 + Marlin/src/lcd/language/language_eu.h | 1 + Marlin/src/lcd/language/language_fi.h | 1 + Marlin/src/lcd/language/language_fr.h | 1 + Marlin/src/lcd/language/language_gl.h | 1 + Marlin/src/lcd/language/language_hr.h | 1 + Marlin/src/lcd/language/language_it.h | 1 + Marlin/src/lcd/language/language_nl.h | 1 + Marlin/src/lcd/language/language_pl.h | 1 + Marlin/src/lcd/language/language_pt-br.h | 1 + Marlin/src/lcd/language/language_pt.h | 1 + Marlin/src/lcd/language/language_ru.h | 1 + Marlin/src/lcd/language/language_sk.h | 1 + Marlin/src/lcd/language/language_tr.h | 3 +- Marlin/src/lcd/language/language_uk.h | 1 + Marlin/src/lcd/language/language_zh_CN.h | 1 + Marlin/src/lcd/language/language_zh_TW.h | 1 + Marlin/src/lcd/ultralcd.cpp | 153 +++++++++- Marlin/src/module/configuration_store.cpp | 276 +++++++++++------- Marlin/src/module/planner.cpp | 27 ++ Marlin/src/module/stepper.cpp | 25 ++ Marlin/src/module/stepper_indirection.h | 43 ++- Marlin/src/module/temperature.cpp | 85 +++++- Marlin/src/module/temperature.h | 2 +- Marlin/src/pins/pins.h | 60 +++- Marlin/src/pins/pinsDebug_list.h | 36 +++ 52 files changed, 848 insertions(+), 191 deletions(-) diff --git a/Marlin/src/HAL/HAL_AVR/SanityCheck.h b/Marlin/src/HAL/HAL_AVR/SanityCheck.h index 58c6bf7c3f..a61472cc44 100644 --- a/Marlin/src/HAL/HAL_AVR/SanityCheck.h +++ b/Marlin/src/HAL/HAL_AVR/SanityCheck.h @@ -78,6 +78,8 @@ #error "SPINDLE_LASER_PWM_PIN is used by E3_AUTO_FAN_PIN." #elif PIN_EXISTS(E4_AUTO_FAN) && SPINDLE_LASER_PWM_PIN == E4_AUTO_FAN_PIN #error "SPINDLE_LASER_PWM_PIN is used by E4_AUTO_FAN_PIN." + #elif PIN_EXISTS(E5_AUTO_FAN) && SPINDLE_LASER_PWM_PIN == E5_AUTO_FAN_PIN + #error "SPINDLE_LASER_PWM_PIN is used by E5_AUTO_FAN_PIN." #elif PIN_EXISTS(FAN) && SPINDLE_LASER_PWM_PIN == FAN_PIN #error "SPINDLE_LASER_PWM_PIN is used FAN_PIN." #elif PIN_EXISTS(FAN1) && SPINDLE_LASER_PWM_PIN == FAN1_PIN diff --git a/Marlin/src/HAL/HAL_STM32F7/SanityCheck.h b/Marlin/src/HAL/HAL_STM32F7/SanityCheck.h index 5bd0793a4d..880f5dfed6 100644 --- a/Marlin/src/HAL/HAL_STM32F7/SanityCheck.h +++ b/Marlin/src/HAL/HAL_STM32F7/SanityCheck.h @@ -53,6 +53,8 @@ #error "SPINDLE_LASER_PWM_PIN is used by E3_AUTO_FAN_PIN." #elif PIN_EXISTS(E4_AUTO_FAN) && SPINDLE_LASER_PWM_PIN == E4_AUTO_FAN_PIN #error "SPINDLE_LASER_PWM_PIN is used by E4_AUTO_FAN_PIN." + #elif PIN_EXISTS(E5_AUTO_FAN) && SPINDLE_LASER_PWM_PIN == E5_AUTO_FAN_PIN + #error "SPINDLE_LASER_PWM_PIN is used by E5_AUTO_FAN_PIN." #elif PIN_EXISTS(FAN) && SPINDLE_LASER_PWM_PIN == FAN_PIN #error "SPINDLE_LASER_PWM_PIN is used FAN_PIN." #elif PIN_EXISTS(FAN1) && SPINDLE_LASER_PWM_PIN == FAN1_PIN diff --git a/Marlin/src/Marlin.cpp b/Marlin/src/Marlin.cpp index 99502c6557..ba9a0862da 100644 --- a/Marlin/src/Marlin.cpp +++ b/Marlin/src/Marlin.cpp @@ -290,6 +290,7 @@ void enable_all_steppers() { enable_E2(); enable_E3(); enable_E4(); + enable_E5(); } void disable_e_steppers() { @@ -298,6 +299,7 @@ void disable_e_steppers() { disable_E2(); disable_E3(); disable_E4(); + disable_E5(); } void disable_e_stepper(const uint8_t e) { @@ -307,6 +309,7 @@ void disable_e_stepper(const uint8_t e) { case 2: disable_E2(); break; case 3: disable_E3(); break; case 4: disable_E4(); break; + case 5: disable_E5(); break; } } @@ -440,7 +443,7 @@ void manage_inactivity(const bool ignore_stepper_queue/*=false*/) { #if E_STEPPERS > 1 case 2: case 3: oldstatus = E1_ENABLE_READ; enable_E1(); break; #if E_STEPPERS > 2 - case 4: oldstatus = E2_ENABLE_READ; enable_E2(); break; + case 4: case 5: oldstatus = E2_ENABLE_READ; enable_E2(); break; #endif // E_STEPPERS > 2 #endif // E_STEPPERS > 1 } @@ -456,6 +459,9 @@ void manage_inactivity(const bool ignore_stepper_queue/*=false*/) { case 3: oldstatus = E3_ENABLE_READ; enable_E3(); break; #if E_STEPPERS > 4 case 4: oldstatus = E4_ENABLE_READ; enable_E4(); break; + #if E_STEPPERS > 5 + case 5: oldstatus = E5_ENABLE_READ; enable_E5(); break; + #endif // E_STEPPERS > 5 #endif // E_STEPPERS > 4 #endif // E_STEPPERS > 3 #endif // E_STEPPERS > 2 @@ -476,7 +482,7 @@ void manage_inactivity(const bool ignore_stepper_queue/*=false*/) { #if E_STEPPERS > 1 case 2: case 3: oldstatus = E1_ENABLE_WRITE(oldstatus); break; #if E_STEPPERS > 2 - case 4: oldstatus = E2_ENABLE_WRITE(oldstatus); break; + case 4: case 5: oldstatus = E2_ENABLE_WRITE(oldstatus); break; #endif // E_STEPPERS > 2 #endif // E_STEPPERS > 1 } @@ -491,6 +497,9 @@ void manage_inactivity(const bool ignore_stepper_queue/*=false*/) { case 3: E3_ENABLE_WRITE(oldstatus); break; #if E_STEPPERS > 4 case 4: E4_ENABLE_WRITE(oldstatus); break; + #if E_STEPPERS > 5 + case 5: E5_ENABLE_WRITE(oldstatus); break; + #endif // E_STEPPERS > 5 #endif // E_STEPPERS > 4 #endif // E_STEPPERS > 3 #endif // E_STEPPERS > 2 diff --git a/Marlin/src/Marlin.h b/Marlin/src/Marlin.h index 37c98b40fa..a233b44a30 100644 --- a/Marlin/src/Marlin.h +++ b/Marlin/src/Marlin.h @@ -83,7 +83,10 @@ void manage_inactivity(const bool ignore_stepper_queue=false); /** * Mixing steppers synchronize their enable (and direction) together */ - #if MIXING_STEPPERS > 4 + #if MIXING_STEPPERS > 5 + #define enable_E0() { E0_ENABLE_WRITE( E_ENABLE_ON); E1_ENABLE_WRITE( E_ENABLE_ON); E2_ENABLE_WRITE( E_ENABLE_ON); E3_ENABLE_WRITE( E_ENABLE_ON); E4_ENABLE_WRITE( E_ENABLE_ON); E5_ENABLE_WRITE( E_ENABLE_ON); } + #define disable_E0() { E0_ENABLE_WRITE(!E_ENABLE_ON); E1_ENABLE_WRITE(!E_ENABLE_ON); E2_ENABLE_WRITE(!E_ENABLE_ON); E3_ENABLE_WRITE(!E_ENABLE_ON); E4_ENABLE_WRITE(!E_ENABLE_ON); E5_ENABLE_WRITE(!E_ENABLE_ON); } + #elif MIXING_STEPPERS > 4 #define enable_E0() { E0_ENABLE_WRITE( E_ENABLE_ON); E1_ENABLE_WRITE( E_ENABLE_ON); E2_ENABLE_WRITE( E_ENABLE_ON); E3_ENABLE_WRITE( E_ENABLE_ON); E4_ENABLE_WRITE( E_ENABLE_ON); } #define disable_E0() { E0_ENABLE_WRITE(!E_ENABLE_ON); E1_ENABLE_WRITE(!E_ENABLE_ON); E2_ENABLE_WRITE(!E_ENABLE_ON); E3_ENABLE_WRITE(!E_ENABLE_ON); E4_ENABLE_WRITE(!E_ENABLE_ON); } #elif MIXING_STEPPERS > 3 @@ -104,6 +107,8 @@ void manage_inactivity(const bool ignore_stepper_queue=false); #define disable_E3() NOOP #define enable_E4() NOOP #define disable_E4() NOOP + #define enable_E5() NOOP + #define disable_E5() NOOP #else // !MIXING_EXTRUDER @@ -147,6 +152,14 @@ void manage_inactivity(const bool ignore_stepper_queue=false); #define disable_E4() NOOP #endif + #if E_STEPPERS > 5 && HAS_E5_ENABLE + #define enable_E5() E5_ENABLE_WRITE( E_ENABLE_ON) + #define disable_E5() E5_ENABLE_WRITE(!E_ENABLE_ON) + #else + #define enable_E5() NOOP + #define disable_E5() NOOP + #endif + #endif // !MIXING_EXTRUDER #if ENABLED(EXPERIMENTAL_I2CBUS) diff --git a/Marlin/src/core/drivers.h b/Marlin/src/core/drivers.h index a0f48a145c..e775c58b5c 100644 --- a/Marlin/src/core/drivers.h +++ b/Marlin/src/core/drivers.h @@ -54,6 +54,7 @@ #define AXIS_DRIVER_TYPE_E2(T) (E_STEPPERS > 2 && _AXIS_DRIVER_TYPE(E2,T)) #define AXIS_DRIVER_TYPE_E3(T) (E_STEPPERS > 3 && _AXIS_DRIVER_TYPE(E3,T)) #define AXIS_DRIVER_TYPE_E4(T) (E_STEPPERS > 4 && _AXIS_DRIVER_TYPE(E4,T)) +#define AXIS_DRIVER_TYPE_E5(T) (E_STEPPERS > 5 && _AXIS_DRIVER_TYPE(E5,T)) #define AXIS_DRIVER_TYPE(A,T) AXIS_DRIVER_TYPE_##A(T) @@ -62,7 +63,7 @@ AXIS_DRIVER_TYPE_Z(T) || AXIS_DRIVER_TYPE_Z2(T) || AXIS_DRIVER_TYPE_Z3(T) || \ AXIS_DRIVER_TYPE_E0(T) || AXIS_DRIVER_TYPE_E1(T) || \ AXIS_DRIVER_TYPE_E2(T) || AXIS_DRIVER_TYPE_E3(T) || \ - AXIS_DRIVER_TYPE_E4(T) ) + AXIS_DRIVER_TYPE_E4(T) || AXIS_DRIVER_TYPE_E5(T) ) // Test for supported TMC drivers that require advanced configuration // Does not match standalone configurations diff --git a/Marlin/src/core/language.h b/Marlin/src/core/language.h index f1c9a9063d..67f28c598d 100644 --- a/Marlin/src/core/language.h +++ b/Marlin/src/core/language.h @@ -289,26 +289,31 @@ #define MSG_H3 "3" #define MSG_H4 "4" #define MSG_H5 "5" +#define MSG_H6 "6" #define MSG_N1 " 1" #define MSG_N2 " 2" #define MSG_N3 " 3" #define MSG_N4 " 4" #define MSG_N5 " 5" +#define MSG_N6 " 6" #define MSG_E1 "E1" #define MSG_E2 "E2" #define MSG_E3 "E3" #define MSG_E4 "E4" #define MSG_E5 "E5" +#define MSG_E6 "E6" #define MSG_MOVE_E1 "1" #define MSG_MOVE_E2 "2" #define MSG_MOVE_E3 "3" #define MSG_MOVE_E4 "4" #define MSG_MOVE_E5 "5" +#define MSG_MOVE_E6 "6" #define MSG_DIAM_E1 " 1" #define MSG_DIAM_E2 " 2" #define MSG_DIAM_E3 " 3" #define MSG_DIAM_E4 " 4" #define MSG_DIAM_E5 " 5" +#define MSG_DIAM_E6 " 6" #include INCLUDE_LANGUAGE diff --git a/Marlin/src/feature/I2CPositionEncoder.cpp b/Marlin/src/feature/I2CPositionEncoder.cpp index f5bec8885c..55c607ca4f 100644 --- a/Marlin/src/feature/I2CPositionEncoder.cpp +++ b/Marlin/src/feature/I2CPositionEncoder.cpp @@ -646,6 +646,37 @@ void I2CPositionEncodersMgr::init() { encoders[i].set_homed(); #endif #endif + + #if I2CPE_ENCODER_CNT > 5 + i++; + + encoders[i].init(I2CPE_ENC_6_ADDR, I2CPE_ENC_6_AXIS); + + #ifdef I2CPE_ENC_6_TYPE + encoders[i].set_type(I2CPE_ENC_6_TYPE); + #endif + #ifdef I2CPE_ENC_6_TICKS_UNIT + encoders[i].set_ticks_unit(I2CPE_ENC_6_TICKS_UNIT); + #endif + #ifdef I2CPE_ENC_6_TICKS_REV + encoders[i].set_stepper_ticks(I2CPE_ENC_6_TICKS_REV); + #endif + #ifdef I2CPE_ENC_6_INVERT + encoders[i].set_inverted(I2CPE_ENC_6_INVERT); + #endif + #ifdef I2CPE_ENC_6_EC_METHOD + encoders[i].set_ec_method(I2CPE_ENC_6_EC_METHOD); + #endif + #ifdef I2CPE_ENC_6_EC_THRESH + encoders[i].set_ec_threshold(I2CPE_ENC_6_EC_THRESH); + #endif + + encoders[i].set_active(encoders[i].passes_test(true)); + + #if I2CPE_ENC_6_AXIS == E_AXIS + encoders[i].set_homed(); + #endif + #endif } void I2CPositionEncodersMgr::report_position(const int8_t idx, const bool units, const bool noOffset) { diff --git a/Marlin/src/feature/controllerfan.cpp b/Marlin/src/feature/controllerfan.cpp index d0f645af69..1dec32647e 100644 --- a/Marlin/src/feature/controllerfan.cpp +++ b/Marlin/src/feature/controllerfan.cpp @@ -57,11 +57,14 @@ void controllerfan_update() { #if E_STEPPERS > 1 || E1_ENABLE_READ == E_ENABLE_ON #if E_STEPPERS > 2 - || E2_ENABLE_READ == E_ENABLE_ON + || E2_ENABLE_READ == E_ENABLE_ON #if E_STEPPERS > 3 - || E3_ENABLE_READ == E_ENABLE_ON + || E3_ENABLE_READ == E_ENABLE_ON #if E_STEPPERS > 4 - || E4_ENABLE_READ == E_ENABLE_ON + || E4_ENABLE_READ == E_ENABLE_ON + #if E_STEPPERS > 5 + || E5_ENABLE_READ == E_ENABLE_ON + #endif #endif #endif #endif diff --git a/Marlin/src/feature/power.cpp b/Marlin/src/feature/power.cpp index 53fcd142bb..6c196fd6f3 100644 --- a/Marlin/src/feature/power.cpp +++ b/Marlin/src/feature/power.cpp @@ -68,11 +68,14 @@ bool Power::is_power_needed() { #if E_STEPPERS > 1 || E1_ENABLE_READ == E_ENABLE_ON #if E_STEPPERS > 2 - || E2_ENABLE_READ == E_ENABLE_ON + || E2_ENABLE_READ == E_ENABLE_ON #if E_STEPPERS > 3 - || E3_ENABLE_READ == E_ENABLE_ON + || E3_ENABLE_READ == E_ENABLE_ON #if E_STEPPERS > 4 - || E4_ENABLE_READ == E_ENABLE_ON + || E4_ENABLE_READ == E_ENABLE_ON + #if E_STEPPERS > 5 + || E5_ENABLE_READ == E_ENABLE_ON + #endif #endif #endif #endif diff --git a/Marlin/src/feature/runout.cpp b/Marlin/src/feature/runout.cpp index fde93e7f7a..00eb97195d 100644 --- a/Marlin/src/feature/runout.cpp +++ b/Marlin/src/feature/runout.cpp @@ -54,6 +54,9 @@ void FilamentRunoutSensor::setup() { INIT_RUNOUT_PIN(FIL_RUNOUT4_PIN); #if NUM_RUNOUT_SENSORS > 4 INIT_RUNOUT_PIN(FIL_RUNOUT5_PIN); + #if NUM_RUNOUT_SENSORS > 5 + INIT_RUNOUT_PIN(FIL_RUNOUT6_PIN); + #endif #endif #endif #endif diff --git a/Marlin/src/feature/runout.h b/Marlin/src/feature/runout.h index 47bd2cf7b8..85e9384fa6 100644 --- a/Marlin/src/feature/runout.h +++ b/Marlin/src/feature/runout.h @@ -71,6 +71,9 @@ class FilamentRunoutSensor { case 3: is_out = READ(FIL_RUNOUT4_PIN) == FIL_RUNOUT_INVERTING; break; #if NUM_RUNOUT_SENSORS > 4 case 4: is_out = READ(FIL_RUNOUT5_PIN) == FIL_RUNOUT_INVERTING; break; + #if NUM_RUNOUT_SENSORS > 5 + case 5: is_out = READ(FIL_RUNOUT6_PIN) == FIL_RUNOUT_INVERTING; break; + #endif #endif #endif #endif diff --git a/Marlin/src/feature/solenoid.cpp b/Marlin/src/feature/solenoid.cpp index dcb63cd866..b0efa88270 100644 --- a/Marlin/src/feature/solenoid.cpp +++ b/Marlin/src/feature/solenoid.cpp @@ -53,6 +53,11 @@ inline void enable_solenoid(const uint8_t num) { OUT_WRITE(SOL4_PIN, HIGH); break; #endif + #if HAS_SOLENOID_5 && EXTRUDERS > 5 + case 5: + OUT_WRITE(SOL5_PIN, HIGH); + break; + #endif default: SERIAL_ECHO_START(); SERIAL_ECHOLNPGM(MSG_INVALID_SOLENOID); @@ -76,6 +81,9 @@ void disable_all_solenoids() { #if HAS_SOLENOID_4 && EXTRUDERS > 4 OUT_WRITE(SOL4_PIN, LOW); #endif + #if HAS_SOLENOID_5 && EXTRUDERS > 5 + OUT_WRITE(SOL5_PIN, LOW); + #endif } #endif // EXT_SOLENOID diff --git a/Marlin/src/feature/tmc_util.cpp b/Marlin/src/feature/tmc_util.cpp index 01418bfd98..c005650b6d 100644 --- a/Marlin/src/feature/tmc_util.cpp +++ b/Marlin/src/feature/tmc_util.cpp @@ -213,6 +213,10 @@ bool report_tmc_status = false; static uint8_t e4_otpw_cnt = 0; monitor_tmc_driver(stepperE4, TMC_E4, e4_otpw_cnt); #endif + #if HAS_HW_COMMS(E5) + static uint8_t e5_otpw_cnt = 0; + monitor_tmc_driver(stepperE5, TMC_E5, e5_otpw_cnt); + #endif if (report_tmc_status) SERIAL_EOL(); } @@ -244,6 +248,9 @@ void _tmc_say_axis(const TMC_AxisEnum axis) { , ext_E3[] PROGMEM = "E3" #if E_STEPPERS > 4 , ext_E4[] PROGMEM = "E4" + #if E_STEPPERS > 5 + , ext_E5[] PROGMEM = "E5" + #endif #endif #endif #endif @@ -274,6 +281,9 @@ void _tmc_say_axis(const TMC_AxisEnum axis) { , ext_E3 #if E_STEPPERS > 4 , ext_E4 + #if E_STEPPERS > 5 + , ext_E5 + #endif #endif #endif #endif @@ -532,6 +542,13 @@ void _tmc_say_sgt(const TMC_AxisEnum axis, const int8_t sgt) { #endif ]); #endif + #if AXIS_IS_TMC(E5) + tmc_status(stepperE5, TMC_E5, i, planner.axis_steps_per_mm[E_AXIS + #if ENABLED(DISTINCT_E_FACTORS) + + 5 + #endif + ]); + #endif SERIAL_EOL(); } @@ -576,6 +593,9 @@ void _tmc_say_sgt(const TMC_AxisEnum axis, const int8_t sgt) { #if AXIS_IS_TMC(E4) tmc_parse_drv_status(stepperE4, TMC_E4, i); #endif + #if AXIS_IS_TMC(E5) + tmc_parse_drv_status(stepperE5, TMC_E5, i); + #endif SERIAL_EOL(); } @@ -693,6 +713,9 @@ void _tmc_say_sgt(const TMC_AxisEnum axis, const int8_t sgt) { #if AXIS_DRIVER_TYPE(E4, TMC2130) SET_CS_PIN(E4); #endif + #if AXIS_DRIVER_TYPE(E5, TMC2130) + SET_CS_PIN(E5); + #endif } #endif // TMC2130 diff --git a/Marlin/src/feature/tmc_util.h b/Marlin/src/feature/tmc_util.h index f50919b3c9..514f603f18 100644 --- a/Marlin/src/feature/tmc_util.h +++ b/Marlin/src/feature/tmc_util.h @@ -49,19 +49,24 @@ enum TMC_AxisEnum : char { #if ENABLED(Z_TRIPLE_STEPPER_DRIVERS) , TMC_Z3 #endif - , TMC_E0 - #if E_STEPPERS > 1 - , TMC_E1 - #if E_STEPPERS > 2 - , TMC_E2 - #if E_STEPPERS > 3 - , TMC_E3 - #if E_STEPPERS > 4 - , TMC_E4 - #endif - #endif - #endif - #endif + #if E_STEPPERS + , TMC_E0 + #if E_STEPPERS > 1 + , TMC_E1 + #if E_STEPPERS > 2 + , TMC_E2 + #if E_STEPPERS > 3 + , TMC_E3 + #if E_STEPPERS > 4 + , TMC_E4 + #if E_STEPPERS > 5 + , TMC_E5 + #endif // E_STEPPERS > 5 + #endif // E_STEPPERS > 4 + #endif // E_STEPPERS > 3 + #endif // E_STEPPERS > 2 + #endif // E_STEPPERS > 1 + #endif // E_STEPPERS }; constexpr uint32_t _tmc_thrs(const uint16_t msteps, const int32_t thrs, const uint32_t spmm) { diff --git a/Marlin/src/gcode/bedlevel/abl/G29.cpp b/Marlin/src/gcode/bedlevel/abl/G29.cpp index f6965f18e4..6f4a2a5635 100644 --- a/Marlin/src/gcode/bedlevel/abl/G29.cpp +++ b/Marlin/src/gcode/bedlevel/abl/G29.cpp @@ -677,8 +677,8 @@ G29_TYPE GcodeSuite::G29() { // Inner loop is Y with PROBE_Y_FIRST enabled for (int8_t PR_INNER_VAR = inStart; PR_INNER_VAR != inStop; PR_INNER_VAR += inInc) { - float xBase = left_probe_bed_position + xGridSpacing * xCount, - yBase = front_probe_bed_position + yGridSpacing * yCount; + const float xBase = left_probe_bed_position + xGridSpacing * xCount, + yBase = front_probe_bed_position + yGridSpacing * yCount; xProbe = FLOOR(xBase + (xBase < 0 ? 0 : 0.5)); yProbe = FLOOR(yBase + (yBase < 0 ? 0 : 0.5)); diff --git a/Marlin/src/gcode/feature/trinamic/M906.cpp b/Marlin/src/gcode/feature/trinamic/M906.cpp index 8d90f8b95a..e727d3e30a 100644 --- a/Marlin/src/gcode/feature/trinamic/M906.cpp +++ b/Marlin/src/gcode/feature/trinamic/M906.cpp @@ -86,6 +86,9 @@ void GcodeSuite::M906() { #if AXIS_IS_TMC(E4) case 4: TMC_SET_CURRENT(E4); break; #endif + #if AXIS_IS_TMC(E5) + case 5: TMC_SET_CURRENT(E5); break; + #endif } } break; } @@ -128,6 +131,9 @@ void GcodeSuite::M906() { #if AXIS_IS_TMC(E4) TMC_SAY_CURRENT(E4); #endif + #if AXIS_IS_TMC(E5) + TMC_SAY_CURRENT(E5); + #endif } } diff --git a/Marlin/src/gcode/feature/trinamic/M911-M915.cpp b/Marlin/src/gcode/feature/trinamic/M911-M915.cpp index e0748a506d..c156cef2b8 100644 --- a/Marlin/src/gcode/feature/trinamic/M911-M915.cpp +++ b/Marlin/src/gcode/feature/trinamic/M911-M915.cpp @@ -74,6 +74,9 @@ void GcodeSuite::M911() { #if M91x_USE_E(4) tmc_report_otpw(stepperE4, TMC_E4); #endif + #if M91x_USE_E(5) + tmc_report_otpw(stepperE5, TMC_E5); + #endif } /** @@ -145,6 +148,9 @@ void GcodeSuite::M912() { #if M91x_USE_E(4) if (hasNone || eval == 4 || (hasE && eval < 0)) tmc_clear_otpw(stepperE4, TMC_E4); #endif + #if M91x_USE_E(5) + if (hasNone || eval == 5 || (hasE && eval == 10)) tmc_clear_otpw(stepperE5, TMC_E5); + #endif #endif } @@ -208,6 +214,9 @@ void GcodeSuite::M912() { #if E_STEPPERS > 4 && AXIS_HAS_STEALTHCHOP(E4) case 4: TMC_SET_PWMTHRS_E(4); break; #endif + #if E_STEPPERS > 5 && AXIS_HAS_STEALTHCHOP(E5) + case 5: TMC_SET_PWMTHRS_E(5); break; + #endif } } break; } @@ -250,6 +259,9 @@ void GcodeSuite::M912() { #if E_STEPPERS > 4 && AXIS_HAS_STEALTHCHOP(E4) TMC_SAY_PWMTHRS_E(4); #endif + #if E_STEPPERS > 5 && AXIS_HAS_STEALTHCHOP(E5) + TMC_SAY_PWMTHRS_E(5); + #endif } } #endif // HYBRID_THRESHOLD diff --git a/Marlin/src/inc/Conditionals_post.h b/Marlin/src/inc/Conditionals_post.h index 8e37f38ba8..bd6f7aa0e8 100644 --- a/Marlin/src/inc/Conditionals_post.h +++ b/Marlin/src/inc/Conditionals_post.h @@ -381,6 +381,22 @@ #define HEATER_4_USES_THERMISTOR #endif +#if TEMP_SENSOR_5 == -4 + #define HEATER_5_USES_AD8495 +#elif TEMP_SENSOR_5 == -3 + #error "MAX31855 Thermocouples (-3) not supported for TEMP_SENSOR_5." +#elif TEMP_SENSOR_5 == -2 + #error "MAX6675 Thermocouples (-2) not supported for TEMP_SENSOR_5." +#elif TEMP_SENSOR_5 == -1 + #define HEATER_5_USES_AD595 +#elif TEMP_SENSOR_5 == 0 + #undef HEATER_5_MINTEMP + #undef HEATER_5_MAXTEMP +#elif TEMP_SENSOR_5 > 0 + #define THERMISTORHEATER_5 TEMP_SENSOR_5 + #define HEATER_5_USES_THERMISTOR +#endif + #if TEMP_SENSOR_BED == -4 #define HEATER_BED_USES_AD8495 #elif TEMP_SENSOR_BED == -3 @@ -841,6 +857,12 @@ #define HAS_E4_MICROSTEPS (PIN_EXISTS(E4_MS1)) #define HAS_SOLENOID_4 (PIN_EXISTS(SOL4)) +#define HAS_E5_ENABLE (PIN_EXISTS(E5_ENABLE)) +#define HAS_E5_DIR (PIN_EXISTS(E5_DIR)) +#define HAS_E5_STEP (PIN_EXISTS(E5_STEP)) +#define HAS_E5_MICROSTEPS (PIN_EXISTS(E5_MS1)) +#define HAS_SOLENOID_5 (PIN_EXISTS(SOL5)) + // Trinamic Stepper Drivers #define HAS_STEALTHCHOP (HAS_DRIVER(TMC2130) || HAS_DRIVER(TMC2208)) #define HAS_STALLGUARD HAS_DRIVER(TMC2130) @@ -919,8 +941,9 @@ #define HAS_AUTO_FAN_2 (HOTENDS > 2 && PIN_EXISTS(E2_AUTO_FAN)) #define HAS_AUTO_FAN_3 (HOTENDS > 3 && PIN_EXISTS(E3_AUTO_FAN)) #define HAS_AUTO_FAN_4 (HOTENDS > 4 && PIN_EXISTS(E4_AUTO_FAN)) +#define HAS_AUTO_FAN_5 (HOTENDS > 5 && PIN_EXISTS(E5_AUTO_FAN)) #define HAS_AUTO_CHAMBER_FAN (PIN_EXISTS(CHAMBER_AUTO_FAN)) -#define HAS_AUTO_FAN (HAS_AUTO_FAN_0 || HAS_AUTO_FAN_1 || HAS_AUTO_FAN_2 || HAS_AUTO_FAN_3 || HAS_AUTO_CHAMBER_FAN) +#define HAS_AUTO_FAN (HAS_AUTO_FAN_0 || HAS_AUTO_FAN_1 || HAS_AUTO_FAN_2 || HAS_AUTO_FAN_3 || HAS_AUTO_FAN_4 || HAS_AUTO_FAN_5 || HAS_AUTO_CHAMBER_FAN) #define AUTO_1_IS_0 (E1_AUTO_FAN_PIN == E0_AUTO_FAN_PIN) #define AUTO_2_IS_0 (E2_AUTO_FAN_PIN == E0_AUTO_FAN_PIN) #define AUTO_2_IS_1 (E2_AUTO_FAN_PIN == E1_AUTO_FAN_PIN) @@ -931,11 +954,17 @@ #define AUTO_4_IS_1 (E4_AUTO_FAN_PIN == E1_AUTO_FAN_PIN) #define AUTO_4_IS_2 (E4_AUTO_FAN_PIN == E2_AUTO_FAN_PIN) #define AUTO_4_IS_3 (E4_AUTO_FAN_PIN == E3_AUTO_FAN_PIN) +#define AUTO_5_IS_0 (E5_AUTO_FAN_PIN == E0_AUTO_FAN_PIN) +#define AUTO_5_IS_1 (E5_AUTO_FAN_PIN == E1_AUTO_FAN_PIN) +#define AUTO_5_IS_2 (E5_AUTO_FAN_PIN == E2_AUTO_FAN_PIN) +#define AUTO_5_IS_3 (E5_AUTO_FAN_PIN == E3_AUTO_FAN_PIN) +#define AUTO_5_IS_4 (E5_AUTO_FAN_PIN == E4_AUTO_FAN_PIN) #define AUTO_CHAMBER_IS_0 (CHAMBER_AUTO_FAN_PIN == E0_AUTO_FAN_PIN) #define AUTO_CHAMBER_IS_1 (CHAMBER_AUTO_FAN_PIN == E1_AUTO_FAN_PIN) #define AUTO_CHAMBER_IS_2 (CHAMBER_AUTO_FAN_PIN == E2_AUTO_FAN_PIN) #define AUTO_CHAMBER_IS_3 (CHAMBER_AUTO_FAN_PIN == E3_AUTO_FAN_PIN) #define AUTO_CHAMBER_IS_4 (CHAMBER_AUTO_FAN_PIN == E4_AUTO_FAN_PIN) +#define AUTO_CHAMBER_IS_5 (CHAMBER_AUTO_FAN_PIN == E5_AUTO_FAN_PIN) // Other fans #define HAS_FAN0 (PIN_EXISTS(FAN)) @@ -966,7 +995,7 @@ #define HAS_CASE_LIGHT (PIN_EXISTS(CASE_LIGHT) && ENABLED(CASE_LIGHT_ENABLE)) // Digital control -#define HAS_MICROSTEPS (HAS_X_MICROSTEPS || HAS_Y_MICROSTEPS || HAS_Z_MICROSTEPS || HAS_E0_MICROSTEPS || HAS_E1_MICROSTEPS || HAS_E2_MICROSTEPS || HAS_E3_MICROSTEPS || HAS_E4_MICROSTEPS) +#define HAS_MICROSTEPS (HAS_X_MICROSTEPS || HAS_Y_MICROSTEPS || HAS_Z_MICROSTEPS || HAS_E0_MICROSTEPS || HAS_E1_MICROSTEPS || HAS_E2_MICROSTEPS || HAS_E3_MICROSTEPS || HAS_E4_MICROSTEPS || HAS_E5_MICROSTEPS) #define HAS_STEPPER_RESET (PIN_EXISTS(STEPPER_RESET)) #define HAS_DIGIPOTSS (PIN_EXISTS(DIGIPOTSS)) #define HAS_MOTOR_CURRENT_PWM (PIN_EXISTS(MOTOR_CURRENT_PWM_XY) || PIN_EXISTS(MOTOR_CURRENT_PWM_Z) || PIN_EXISTS(MOTOR_CURRENT_PWM_E)) @@ -1022,6 +1051,9 @@ #define WRITE_HEATER_3(v) WRITE(HEATER_3_PIN, (v) ^ HEATER_3_INVERTING) #if HOTENDS > 4 #define WRITE_HEATER_4(v) WRITE(HEATER_4_PIN, (v) ^ HEATER_4_INVERTING) + #if HOTENDS > 5 + #define WRITE_HEATER_5(v) WRITE(HEATER_5_PIN, (v) ^ HEATER_5_INVERTING) + #endif // HOTENDS > 5 #endif // HOTENDS > 4 #endif // HOTENDS > 3 #endif // HOTENDS > 2 diff --git a/Marlin/src/inc/SanityCheck.h b/Marlin/src/inc/SanityCheck.h index b13952ec1d..49505543ec 100644 --- a/Marlin/src/inc/SanityCheck.h +++ b/Marlin/src/inc/SanityCheck.h @@ -273,19 +273,19 @@ #elif defined(HAVE_L6470DRIVER) #error "HAVE_L6470DRIVER is now [AXIS]_DRIVER_TYPE L6470. Please update your Configuration.h." #elif defined(X_IS_TMC) || defined(X2_IS_TMC) || defined(Y_IS_TMC) || defined(Y2_IS_TMC) || defined(Z_IS_TMC) || defined(Z2_IS_TMC) || defined(Z3_IS_TMC) \ - || defined(E0_IS_TMC) || defined(E1_IS_TMC) || defined(E2_IS_TMC) || defined(E3_IS_TMC) || defined(E4_IS_TMC) + || defined(E0_IS_TMC) || defined(E1_IS_TMC) || defined(E2_IS_TMC) || defined(E3_IS_TMC) || defined(E4_IS_TMC) || defined(E5_IS_TMC) #error "[AXIS]_IS_TMC is now [AXIS]_DRIVER_TYPE TMC26X. Please update your Configuration.h." #elif defined(X_IS_TMC26X) || defined(X2_IS_TMC26X) || defined(Y_IS_TMC26X) || defined(Y2_IS_TMC26X) || defined(Z_IS_TMC26X) || defined(Z2_IS_TMC26X) || defined(Z3_IS_TMC26X) \ - || defined(E0_IS_TMC26X) || defined(E1_IS_TMC26X) || defined(E2_IS_TMC26X) || defined(E3_IS_TMC26X) || defined(E4_IS_TMC26X) + || defined(E0_IS_TMC26X) || defined(E1_IS_TMC26X) || defined(E2_IS_TMC26X) || defined(E3_IS_TMC26X) || defined(E4_IS_TMC26X) || defined(E5_IS_TMC26X) #error "[AXIS]_IS_TMC26X is now [AXIS]_DRIVER_TYPE TMC26X. Please update your Configuration.h." #elif defined(X_IS_TMC2130) || defined(X2_IS_TMC2130) || defined(Y_IS_TMC2130) || defined(Y2_IS_TMC2130) || defined(Z_IS_TMC2130) || defined(Z2_IS_TMC2130) || defined(Z3_IS_TMC2130) \ - || defined(E0_IS_TMC2130) || defined(E1_IS_TMC2130) || defined(E2_IS_TMC2130) || defined(E3_IS_TMC2130) || defined(E4_IS_TMC2130) + || defined(E0_IS_TMC2130) || defined(E1_IS_TMC2130) || defined(E2_IS_TMC2130) || defined(E3_IS_TMC2130) || defined(E4_IS_TMC2130) || defined(E5_IS_TMC2130) #error "[AXIS]_IS_TMC2130 is now [AXIS]_DRIVER_TYPE TMC2130. Please update your Configuration.h." #elif defined(X_IS_TMC2208) || defined(X2_IS_TMC2208) || defined(Y_IS_TMC2208) || defined(Y2_IS_TMC2208) || defined(Z_IS_TMC2208) || defined(Z2_IS_TMC2208) || defined(Z3_IS_TMC2208) \ - || defined(E0_IS_TMC2208) || defined(E1_IS_TMC2208) || defined(E2_IS_TMC2208) || defined(E3_IS_TMC2208) || defined(E4_IS_TMC2208) + || defined(E0_IS_TMC2208) || defined(E1_IS_TMC2208) || defined(E2_IS_TMC2208) || defined(E3_IS_TMC2208) || defined(E4_IS_TMC2208) || defined(E5_IS_TMC2208) #error "[AXIS]_IS_TMC2208 is now [AXIS]_DRIVER_TYPE TMC2208. Please update your Configuration.h." #elif defined(X_IS_L6470) || defined(X2_IS_L6470) || defined(Y_IS_L6470) || defined(Y2_IS_L6470) || defined(Z_IS_L6470) || defined(Z2_IS_L6470) || defined(Z3_IS_L6470) \ - || defined(E0_IS_L6470) || defined(E1_IS_L6470) || defined(E2_IS_L6470) || defined(E3_IS_L6470) || defined(E4_IS_L6470) + || defined(E0_IS_L6470) || defined(E1_IS_L6470) || defined(E2_IS_L6470) || defined(E3_IS_L6470) || defined(E4_IS_L6470) || defined(E5_IS_L6470) #error "[AXIS]_IS_L6470 is now [AXIS]_DRIVER_TYPE L6470. Please update your Configuration.h." #elif defined(AUTOMATIC_CURRENT_CONTROL) #error "AUTOMATIC_CURRENT_CONTROL is now MONITOR_DRIVER_STATUS. Please update your configuration." @@ -534,6 +534,8 @@ static_assert(X_MAX_LENGTH >= X_BED_SIZE && Y_MAX_LENGTH >= Y_BED_SIZE, #error "FILAMENT_RUNOUT_SENSOR with NUM_RUNOUT_SENSORS > 3 requires FIL_RUNOUT4_PIN." #elif NUM_RUNOUT_SENSORS > 4 && !PIN_EXISTS(FIL_RUNOUT5) #error "FILAMENT_RUNOUT_SENSOR with NUM_RUNOUT_SENSORS > 4 requires FIL_RUNOUT5_PIN." + #elif NUM_RUNOUT_SENSORS > 5 && !PIN_EXISTS(FIL_RUNOUT6) + #error "FILAMENT_RUNOUT_SENSOR with NUM_RUNOUT_SENSORS > 5 requires FIL_RUNOUT6_PIN." #elif DISABLED(SDSUPPORT) && DISABLED(PRINTJOB_TIMER_AUTOSTART) #error "FILAMENT_RUNOUT_SENSOR requires SDSUPPORT or PRINTJOB_TIMER_AUTOSTART." #elif DISABLED(ADVANCED_PAUSE_FEATURE) @@ -1242,13 +1244,28 @@ static_assert(X_MAX_LENGTH >= X_BED_SIZE && Y_MAX_LENGTH >= Y_BED_SIZE, #elif !PIN_EXISTS(TEMP_4) #error "TEMP_4_PIN not defined for this board." #endif + #if HOTENDS > 5 + #if TEMP_SENSOR_5 == 0 + #error "TEMP_SENSOR_5 is required with 5 HOTENDS." + #elif !HAS_HEATER_5 + #error "HEATER_5_PIN not defined for this board." + #elif !PIN_EXISTS(TEMP_5) + #error "TEMP_5_PIN not defined for this board." + #endif + #elif TEMP_SENSOR_5 != 0 + #error "TEMP_SENSOR_5 shouldn't be set with only 5 HOTENDS." + #endif #elif TEMP_SENSOR_4 != 0 #error "TEMP_SENSOR_4 shouldn't be set with only 4 HOTENDS." + #elif TEMP_SENSOR_5 != 0 + #error "TEMP_SENSOR_5 shouldn't be set with only 5 HOTENDS." #endif #elif TEMP_SENSOR_3 != 0 #error "TEMP_SENSOR_3 shouldn't be set with only 3 HOTENDS." #elif TEMP_SENSOR_4 != 0 #error "TEMP_SENSOR_4 shouldn't be set with only 3 HOTENDS." + #elif TEMP_SENSOR_5 != 0 + #error "TEMP_SENSOR_5 shouldn't be set with only 4 HOTENDS." #endif #elif TEMP_SENSOR_2 != 0 #error "TEMP_SENSOR_2 shouldn't be set with only 2 HOTENDS." @@ -1256,6 +1273,8 @@ static_assert(X_MAX_LENGTH >= X_BED_SIZE && Y_MAX_LENGTH >= Y_BED_SIZE, #error "TEMP_SENSOR_3 shouldn't be set with only 2 HOTENDS." #elif TEMP_SENSOR_4 != 0 #error "TEMP_SENSOR_4 shouldn't be set with only 2 HOTENDS." + #elif TEMP_SENSOR_5 != 0 + #error "TEMP_SENSOR_5 shouldn't be set with only 2 HOTENDS." #endif #elif TEMP_SENSOR_1 != 0 && DISABLED(TEMP_SENSOR_1_AS_REDUNDANT) #error "TEMP_SENSOR_1 shouldn't be set with only 1 HOTEND." @@ -1265,6 +1284,8 @@ static_assert(X_MAX_LENGTH >= X_BED_SIZE && Y_MAX_LENGTH >= Y_BED_SIZE, #error "TEMP_SENSOR_3 shouldn't be set with only 1 HOTEND." #elif TEMP_SENSOR_4 != 0 #error "TEMP_SENSOR_4 shouldn't be set with only 1 HOTEND." +#elif TEMP_SENSOR_5 != 0 + #error "TEMP_SENSOR_5 shouldn't be set with only 1 HOTEND." #endif #if ENABLED(TEMP_SENSOR_1_AS_REDUNDANT) && TEMP_SENSOR_1 == 0 @@ -1306,23 +1327,36 @@ static_assert(X_MAX_LENGTH >= X_BED_SIZE && Y_MAX_LENGTH >= Y_BED_SIZE, * Test Extruder Stepper Pins */ #if DISABLED(MK2_MULTIPLEXER) // MK2_MULTIPLEXER uses E0 stepper only - #if E_STEPPERS > 4 - #if !(PIN_EXISTS(E4_STEP) && PIN_EXISTS(E4_DIR) && PIN_EXISTS(E4_ENABLE)) - #error "E4_STEP_PIN, E4_DIR_PIN, or E4_ENABLE_PIN not defined for this board." + #if E_STEPPERS + #if !(PIN_EXISTS(E0_STEP) && PIN_EXISTS(E0_DIR) && PIN_EXISTS(E0_ENABLE)) + #error "E0_STEP_PIN, E0_DIR_PIN, or E0_ENABLE_PIN not defined for this board." #endif - #elif E_STEPPERS > 3 - #if !(PIN_EXISTS(E3_STEP) && PIN_EXISTS(E3_DIR) && PIN_EXISTS(E3_ENABLE)) - #error "E3_STEP_PIN, E3_DIR_PIN, or E3_ENABLE_PIN not defined for this board." - #endif - #elif E_STEPPERS > 2 - #if !(PIN_EXISTS(E2_STEP) && PIN_EXISTS(E2_DIR) && PIN_EXISTS(E2_ENABLE)) - #error "E2_STEP_PIN, E2_DIR_PIN, or E2_ENABLE_PIN not defined for this board." - #endif - #elif E_STEPPERS > 1 - #if !(PIN_EXISTS(E1_STEP) && PIN_EXISTS(E1_DIR) && PIN_EXISTS(E1_ENABLE)) - #error "E1_STEP_PIN, E1_DIR_PIN, or E1_ENABLE_PIN not defined for this board." - #endif - #endif + #if E_STEPPERS > 1 + #if !(PIN_EXISTS(E1_STEP) && PIN_EXISTS(E1_DIR) && PIN_EXISTS(E1_ENABLE)) + #error "E1_STEP_PIN, E1_DIR_PIN, or E1_ENABLE_PIN not defined for this board." + #endif + #if E_STEPPERS > 2 + #if !(PIN_EXISTS(E2_STEP) && PIN_EXISTS(E2_DIR) && PIN_EXISTS(E2_ENABLE)) + #error "E2_STEP_PIN, E2_DIR_PIN, or E2_ENABLE_PIN not defined for this board." + #endif + #if E_STEPPERS > 3 + #if !(PIN_EXISTS(E3_STEP) && PIN_EXISTS(E3_DIR) && PIN_EXISTS(E3_ENABLE)) + #error "E3_STEP_PIN, E3_DIR_PIN, or E3_ENABLE_PIN not defined for this board." + #endif + #if E_STEPPERS > 4 + #if !(PIN_EXISTS(E4_STEP) && PIN_EXISTS(E4_DIR) && PIN_EXISTS(E4_ENABLE)) + #error "E4_STEP_PIN, E4_DIR_PIN, or E4_ENABLE_PIN not defined for this board." + #endif + #if E_STEPPERS > 5 + #if !(PIN_EXISTS(E5_STEP) && PIN_EXISTS(E5_DIR) && PIN_EXISTS(E5_ENABLE)) + #error "E5_STEP_PIN, E5_DIR_PIN, or E5_ENABLE_PIN not defined for this board." + #endif + #endif // E_STEPPERS > 5 + #endif // E_STEPPERS > 4 + #endif // E_STEPPERS > 3 + #endif // E_STEPPERS > 2 + #endif // E_STEPPERS > 1 + #endif // E_STEPPERS #endif /** @@ -1625,6 +1659,8 @@ static_assert(X_MAX_LENGTH >= X_BED_SIZE && Y_MAX_LENGTH >= Y_BED_SIZE, #error "E3_CS_PIN is required for TMC2130. Define E3_CS_PIN in Configuration_adv.h." #elif AXIS_DRIVER_TYPE(E4, TMC2130) && !PIN_EXISTS(E4_CS) #error "E4_CS_PIN is required for TMC2130. Define E4_CS_PIN in Configuration_adv.h." +#elif AXIS_DRIVER_TYPE(E5, TMC2130) && !PIN_EXISTS(E5_CS) + #error "E5_CS_PIN is required for TMC2130. Define E5_CS_PIN in Configuration_adv.h." #endif /** @@ -1642,8 +1678,9 @@ static_assert(X_MAX_LENGTH >= X_BED_SIZE && Y_MAX_LENGTH >= Y_BED_SIZE, || defined(E1_HARDWARE_SERIAL) \ || defined(E2_HARDWARE_SERIAL) \ || defined(E3_HARDWARE_SERIAL) \ - || defined(E4_HARDWARE_SERIAL) ) - #error "select hardware UART for TMC2208 to use both TMC2208 and ENDSTOP_INTERRUPTS_FEATURE." + || defined(E4_HARDWARE_SERIAL) \ + || defined(E5_HARDWARE_SERIAL) ) + #error "Select hardware UART for TMC2208 to use both TMC2208 and ENDSTOP_INTERRUPTS_FEATURE." #endif /** @@ -1660,7 +1697,8 @@ static_assert(X_MAX_LENGTH >= X_BED_SIZE && Y_MAX_LENGTH >= Y_BED_SIZE, || defined(E1_HARDWARE_SERIAL) \ || defined(E2_HARDWARE_SERIAL) \ || defined(E3_HARDWARE_SERIAL) \ - || defined(E4_HARDWARE_SERIAL) ) + || defined(E4_HARDWARE_SERIAL) \ + || defined(E5_HARDWARE_SERIAL) ) #error "TMC2208 Software Serial is supported only on AVR and LPC1768 platforms." #endif diff --git a/Marlin/src/lcd/language/language_an.h b/Marlin/src/lcd/language/language_an.h index 679ed1cf3f..41bd272510 100644 --- a/Marlin/src/lcd/language/language_an.h +++ b/Marlin/src/lcd/language/language_an.h @@ -130,6 +130,7 @@ #define MSG_E3STEPS _UxGT("E3 trangos/mm") #define MSG_E4STEPS _UxGT("E4 trangos/mm") #define MSG_E5STEPS _UxGT("E5 trangos/mm") +#define MSG_E6STEPS _UxGT("E6 trangos/mm") #define MSG_TEMPERATURE _UxGT("Temperatura") #define MSG_MOTION _UxGT("Movimiento") #define MSG_FILAMENT _UxGT("Filamento") diff --git a/Marlin/src/lcd/language/language_bg.h b/Marlin/src/lcd/language/language_bg.h index cd86dbe6b2..558a98e351 100644 --- a/Marlin/src/lcd/language/language_bg.h +++ b/Marlin/src/lcd/language/language_bg.h @@ -99,6 +99,7 @@ #define MSG_E3STEPS _UxGT("E3 стъпки/mm") #define MSG_E4STEPS _UxGT("E4 стъпки/mm") #define MSG_E5STEPS _UxGT("E5 стъпки/mm") +#define MSG_E6STEPS _UxGT("E6 стъпки/mm") #define MSG_TEMPERATURE _UxGT("Температура") #define MSG_MOTION _UxGT("Движение") #define MSG_FILAMENT _UxGT("Нишка") diff --git a/Marlin/src/lcd/language/language_ca.h b/Marlin/src/lcd/language/language_ca.h index 31007b7352..8ff6bbf3cf 100644 --- a/Marlin/src/lcd/language/language_ca.h +++ b/Marlin/src/lcd/language/language_ca.h @@ -132,6 +132,7 @@ #define MSG_E3STEPS _UxGT("E3passos/mm") #define MSG_E4STEPS _UxGT("E4passos/mm") #define MSG_E5STEPS _UxGT("E5passos/mm") +#define MSG_E6STEPS _UxGT("E6passos/mm") #define MSG_TEMPERATURE _UxGT("Temperatura") #define MSG_MOTION _UxGT("Moviment") #define MSG_FILAMENT _UxGT("Filament") diff --git a/Marlin/src/lcd/language/language_cz.h b/Marlin/src/lcd/language/language_cz.h index bd57e30813..1a42aa44da 100644 --- a/Marlin/src/lcd/language/language_cz.h +++ b/Marlin/src/lcd/language/language_cz.h @@ -233,6 +233,7 @@ #define MSG_E3STEPS _UxGT("E3kroků/mm") #define MSG_E4STEPS _UxGT("E4kroků/mm") #define MSG_E5STEPS _UxGT("E5kroků/mm") +#define MSG_E6STEPS _UxGT("E6kroků/mm") #define MSG_TEMPERATURE _UxGT("Teplota") #define MSG_MOTION _UxGT("Pohyb") #define MSG_FILAMENT _UxGT("Filament") diff --git a/Marlin/src/lcd/language/language_da.h b/Marlin/src/lcd/language/language_da.h index 0782b96531..1bd78c332c 100644 --- a/Marlin/src/lcd/language/language_da.h +++ b/Marlin/src/lcd/language/language_da.h @@ -130,6 +130,7 @@ #define MSG_E3STEPS _UxGT("E3steps/mm") #define MSG_E4STEPS _UxGT("E4steps/mm") #define MSG_E5STEPS _UxGT("E5steps/mm") +#define MSG_E6STEPS _UxGT("E6steps/mm") #define MSG_TEMPERATURE _UxGT("Temperatur") #define MSG_MOTION _UxGT("Bevægelse") #define MSG_FILAMENT _UxGT("Filament") diff --git a/Marlin/src/lcd/language/language_de.h b/Marlin/src/lcd/language/language_de.h index 75d1d7aa2a..d5f9981284 100644 --- a/Marlin/src/lcd/language/language_de.h +++ b/Marlin/src/lcd/language/language_de.h @@ -145,6 +145,7 @@ #define MSG_E3STEPS _UxGT("E3 Steps/mm") #define MSG_E4STEPS _UxGT("E4 Steps/mm") #define MSG_E5STEPS _UxGT("E5 Steps/mm") +#define MSG_E6STEPS _UxGT("E6 Steps/mm") #define MSG_TEMPERATURE _UxGT("Temperatur") #define MSG_MOTION _UxGT("Bewegung") #define MSG_FILAMENT _UxGT("Filament") diff --git a/Marlin/src/lcd/language/language_en.h b/Marlin/src/lcd/language/language_en.h index 6638a96d60..78280b8977 100644 --- a/Marlin/src/lcd/language/language_en.h +++ b/Marlin/src/lcd/language/language_en.h @@ -630,6 +630,12 @@ #ifndef MSG_E5STEPS #define MSG_E5STEPS _UxGT("E5steps/mm") #endif +#ifndef MSG_E6STEPS + #define MSG_E6STEPS _UxGT("E6steps/mm") +#endif +#ifndef MSG_E6STEPS + #define MSG_E6STEPS _UxGT("E6steps/mm") +#endif #ifndef MSG_TEMPERATURE #define MSG_TEMPERATURE _UxGT("Temperature") #endif diff --git a/Marlin/src/lcd/language/language_es.h b/Marlin/src/lcd/language/language_es.h index 101f38220b..84125f96b8 100644 --- a/Marlin/src/lcd/language/language_es.h +++ b/Marlin/src/lcd/language/language_es.h @@ -125,6 +125,7 @@ #define MSG_E3STEPS _UxGT("E3 pasos/mm") #define MSG_E4STEPS _UxGT("E4 pasos/mm") #define MSG_E5STEPS _UxGT("E5 pasos/mm") +#define MSG_E6STEPS _UxGT("E6 pasos/mm") #define MSG_TEMPERATURE _UxGT("Temperatura") #define MSG_MOTION _UxGT("Movimiento") #define MSG_FILAMENT _UxGT("Filamento") diff --git a/Marlin/src/lcd/language/language_eu.h b/Marlin/src/lcd/language/language_eu.h index 999855ef37..b0b6605575 100644 --- a/Marlin/src/lcd/language/language_eu.h +++ b/Marlin/src/lcd/language/language_eu.h @@ -224,6 +224,7 @@ #define MSG_E3STEPS _UxGT("E3 pausoak/mm") #define MSG_E4STEPS _UxGT("E4 pausoak/mm") #define MSG_E5STEPS _UxGT("E5 pausoak/mm") +#define MSG_E6STEPS _UxGT("E6 pausoak/mm") #define MSG_TEMPERATURE _UxGT("Tenperatura") #define MSG_MOTION _UxGT("Mugimendua") #define MSG_FILAMENT _UxGT("Harizpia") diff --git a/Marlin/src/lcd/language/language_fi.h b/Marlin/src/lcd/language/language_fi.h index 4a79946f94..318d310459 100644 --- a/Marlin/src/lcd/language/language_fi.h +++ b/Marlin/src/lcd/language/language_fi.h @@ -120,6 +120,7 @@ #define MSG_E3STEPS _UxGT("E3steps/mm") #define MSG_E4STEPS _UxGT("E4steps/mm") #define MSG_E5STEPS _UxGT("E5steps/mm") +#define MSG_E6STEPS _UxGT("E6steps/mm") #define MSG_TEMPERATURE _UxGT("Lämpötila") #define MSG_MOTION _UxGT("Liike") #define MSG_FILAMENT _UxGT("Filament") diff --git a/Marlin/src/lcd/language/language_fr.h b/Marlin/src/lcd/language/language_fr.h index 0973f64132..cf6d85e504 100644 --- a/Marlin/src/lcd/language/language_fr.h +++ b/Marlin/src/lcd/language/language_fr.h @@ -228,6 +228,7 @@ #define MSG_E3STEPS _UxGT("E3 pas/mm") #define MSG_E4STEPS _UxGT("E4 pas/mm") #define MSG_E5STEPS _UxGT("E5 pas/mm") +#define MSG_E6STEPS _UxGT("E6 pas/mm") #define MSG_TEMPERATURE _UxGT("Température") #define MSG_MOTION _UxGT("Mouvement") #define MSG_FILAMENT _UxGT("Filament") diff --git a/Marlin/src/lcd/language/language_gl.h b/Marlin/src/lcd/language/language_gl.h index 960cc8cace..892f8b4a98 100644 --- a/Marlin/src/lcd/language/language_gl.h +++ b/Marlin/src/lcd/language/language_gl.h @@ -129,6 +129,7 @@ #define MSG_E3STEPS _UxGT("E3 pasos/mm") #define MSG_E4STEPS _UxGT("E4 pasos/mm") #define MSG_E5STEPS _UxGT("E5 pasos/mm") +#define MSG_E6STEPS _UxGT("E6 pasos/mm") #define MSG_TEMPERATURE _UxGT("Temperatura") #define MSG_MOTION _UxGT("Movemento") #define MSG_FILAMENT _UxGT("Filamento") diff --git a/Marlin/src/lcd/language/language_hr.h b/Marlin/src/lcd/language/language_hr.h index efdeae8b5b..1e972778de 100644 --- a/Marlin/src/lcd/language/language_hr.h +++ b/Marlin/src/lcd/language/language_hr.h @@ -129,6 +129,7 @@ #define MSG_E3STEPS _UxGT("E3steps/mm") #define MSG_E4STEPS _UxGT("E4steps/mm") #define MSG_E5STEPS _UxGT("E5steps/mm") +#define MSG_E6STEPS _UxGT("E6steps/mm") #define MSG_TEMPERATURE _UxGT("Temperature") #define MSG_MOTION _UxGT("Gibanje") #define MSG_FILAMENT _UxGT("Filament") diff --git a/Marlin/src/lcd/language/language_it.h b/Marlin/src/lcd/language/language_it.h index 8609c25acd..65edf237ce 100644 --- a/Marlin/src/lcd/language/language_it.h +++ b/Marlin/src/lcd/language/language_it.h @@ -232,6 +232,7 @@ #define MSG_E3STEPS _UxGT("E3passi/mm") #define MSG_E4STEPS _UxGT("E4passi/mm") #define MSG_E5STEPS _UxGT("E5passi/mm") +#define MSG_E6STEPS _UxGT("E6passi/mm") #define MSG_TEMPERATURE _UxGT("Temperatura") #define MSG_MOTION _UxGT("Movimento") #define MSG_FILAMENT _UxGT("Filamento") diff --git a/Marlin/src/lcd/language/language_nl.h b/Marlin/src/lcd/language/language_nl.h index 128bceaf41..44ac63e3ab 100644 --- a/Marlin/src/lcd/language/language_nl.h +++ b/Marlin/src/lcd/language/language_nl.h @@ -136,6 +136,7 @@ #define MSG_E3STEPS _UxGT("E3steps/mm") #define MSG_E4STEPS _UxGT("E4steps/mm") #define MSG_E5STEPS _UxGT("E5steps/mm") +#define MSG_E6STEPS _UxGT("E6steps/mm") #define MSG_TEMPERATURE _UxGT("Temperatuur") #define MSG_MOTION _UxGT("Beweging") #define MSG_FILAMENT _UxGT("Filament") diff --git a/Marlin/src/lcd/language/language_pl.h b/Marlin/src/lcd/language/language_pl.h index 6ac55ff47e..07fbc11954 100644 --- a/Marlin/src/lcd/language/language_pl.h +++ b/Marlin/src/lcd/language/language_pl.h @@ -129,6 +129,7 @@ #define MSG_E3STEPS _UxGT("krokiE3/mm") #define MSG_E4STEPS _UxGT("krokiE4/mm") #define MSG_E5STEPS _UxGT("krokiE5/mm") +#define MSG_E6STEPS _UxGT("krokiE6/mm") #define MSG_TEMPERATURE _UxGT("Temperatura") #define MSG_MOTION _UxGT("Ruch") #define MSG_FILAMENT _UxGT("Filament") diff --git a/Marlin/src/lcd/language/language_pt-br.h b/Marlin/src/lcd/language/language_pt-br.h index 0d7ffe84c4..0763127345 100644 --- a/Marlin/src/lcd/language/language_pt-br.h +++ b/Marlin/src/lcd/language/language_pt-br.h @@ -237,6 +237,7 @@ #define MSG_E3STEPS _UxGT("E3/mm") #define MSG_E4STEPS _UxGT("E4/mm") #define MSG_E5STEPS _UxGT("E5/mm") +#define MSG_E6STEPS _UxGT("E6/mm") #define MSG_TEMPERATURE _UxGT("Temperatura") #define MSG_MOTION _UxGT("Movimento") #define MSG_FILAMENT _UxGT("Filamento") diff --git a/Marlin/src/lcd/language/language_pt.h b/Marlin/src/lcd/language/language_pt.h index a3e1256f6a..67500a087f 100644 --- a/Marlin/src/lcd/language/language_pt.h +++ b/Marlin/src/lcd/language/language_pt.h @@ -126,6 +126,7 @@ #define MSG_E3STEPS _UxGT("E3 passo/mm") #define MSG_E4STEPS _UxGT("E4 passo/mm") #define MSG_E5STEPS _UxGT("E5 passo/mm") +#define MSG_E6STEPS _UxGT("E6 passo/mm") #define MSG_TEMPERATURE _UxGT("Temperatura") #define MSG_MOTION _UxGT("Movimento") #define MSG_FILAMENT _UxGT("Filamento") diff --git a/Marlin/src/lcd/language/language_ru.h b/Marlin/src/lcd/language/language_ru.h index 1f419607bd..e0135a884b 100644 --- a/Marlin/src/lcd/language/language_ru.h +++ b/Marlin/src/lcd/language/language_ru.h @@ -227,6 +227,7 @@ #define MSG_E3STEPS _UxGT("E3шаг/мм") #define MSG_E4STEPS _UxGT("E4шаг/мм") #define MSG_E5STEPS _UxGT("E5шаг/мм") +#define MSG_E6STEPS _UxGT("E6шаг/мм") #define MSG_TEMPERATURE _UxGT("Температура") #define MSG_MOTION _UxGT("Движение") #define MSG_FILAMENT _UxGT("Филамент") diff --git a/Marlin/src/lcd/language/language_sk.h b/Marlin/src/lcd/language/language_sk.h index 271830087c..5e18b09d1e 100644 --- a/Marlin/src/lcd/language/language_sk.h +++ b/Marlin/src/lcd/language/language_sk.h @@ -246,6 +246,7 @@ #define MSG_E3STEPS _UxGT("E3krokov/mm") #define MSG_E4STEPS _UxGT("E4krokov/mm") #define MSG_E5STEPS _UxGT("E5krokov/mm") +#define MSG_E6STEPS _UxGT("E6krokov/mm") #define MSG_TEMPERATURE _UxGT("Teplota") #define MSG_MOTION _UxGT("Pohyb") #define MSG_FILAMENT _UxGT("Filament") diff --git a/Marlin/src/lcd/language/language_tr.h b/Marlin/src/lcd/language/language_tr.h index 7b15a57000..6134b868ac 100644 --- a/Marlin/src/lcd/language/language_tr.h +++ b/Marlin/src/lcd/language/language_tr.h @@ -135,7 +135,8 @@ #define MSG_E2STEPS _UxGT("E2steps/mm") // E2steps/mm #define MSG_E3STEPS _UxGT("E3steps/mm") // E3steps/mm #define MSG_E4STEPS _UxGT("E4steps/mm") // E4steps/mm -#define MSG_E5STEPS _UxGT("E5steps/mm") // E4steps/mm +#define MSG_E5STEPS _UxGT("E5steps/mm") // E5steps/mm +#define MSG_E6STEPS _UxGT("E6steps/mm") // E6steps/mm #define MSG_TEMPERATURE _UxGT("Sıcaklık") // Sıcaklık #define MSG_MOTION _UxGT("Hareket") // Hareket #define MSG_FILAMENT _UxGT("Filaman") // Filaman diff --git a/Marlin/src/lcd/language/language_uk.h b/Marlin/src/lcd/language/language_uk.h index 384a90c669..6236320589 100644 --- a/Marlin/src/lcd/language/language_uk.h +++ b/Marlin/src/lcd/language/language_uk.h @@ -129,6 +129,7 @@ #define MSG_E3STEPS _UxGT("E3кроків/мм") #define MSG_E4STEPS _UxGT("E4кроків/мм") #define MSG_E5STEPS _UxGT("E5кроків/мм") +#define MSG_E6STEPS _UxGT("E6кроків/мм") #define MSG_TEMPERATURE _UxGT("Температура") #define MSG_MOTION _UxGT("Рух") #define MSG_FILAMENT _UxGT("Волокно") diff --git a/Marlin/src/lcd/language/language_zh_CN.h b/Marlin/src/lcd/language/language_zh_CN.h index 6cf63f6e1d..020073ddd0 100644 --- a/Marlin/src/lcd/language/language_zh_CN.h +++ b/Marlin/src/lcd/language/language_zh_CN.h @@ -226,6 +226,7 @@ #define MSG_E3STEPS _UxGT("挤出机3步数/mm") //"E3steps/mm" #define MSG_E4STEPS _UxGT("挤出机4步数/mm") //"E4steps/mm" #define MSG_E5STEPS _UxGT("挤出机5步数/mm") //"E5steps/mm" +#define MSG_E6STEPS _UxGT("挤出机6步数/mm") //"E6steps/mm" #define MSG_TEMPERATURE _UxGT("温度") //"Temperature" #define MSG_MOTION _UxGT("运动") //"Motion" #define MSG_FILAMENT _UxGT("丝料测容") //"Filament" lcd_control_volumetric_menu diff --git a/Marlin/src/lcd/language/language_zh_TW.h b/Marlin/src/lcd/language/language_zh_TW.h index 8455843773..8500a4f9a8 100644 --- a/Marlin/src/lcd/language/language_zh_TW.h +++ b/Marlin/src/lcd/language/language_zh_TW.h @@ -226,6 +226,7 @@ #define MSG_E3STEPS _UxGT("擠出機3步數/mm") //"E3steps/mm" #define MSG_E4STEPS _UxGT("擠出機4步數/mm") //"E4steps/mm" #define MSG_E5STEPS _UxGT("擠出機5步數/mm") //"E5steps/mm" +#define MSG_E6STEPS _UxGT("擠出機6步數/mm") //"E6steps/mm" #define MSG_TEMPERATURE _UxGT("溫度") //"Temperature" #define MSG_MOTION _UxGT("運作") //"Motion" #define MSG_FILAMENT _UxGT("絲料測容") //"Filament" lcd_control_volumetric_menu diff --git a/Marlin/src/lcd/ultralcd.cpp b/Marlin/src/lcd/ultralcd.cpp index 943edc153e..070d127850 100644 --- a/Marlin/src/lcd/ultralcd.cpp +++ b/Marlin/src/lcd/ultralcd.cpp @@ -1402,6 +1402,9 @@ void lcd_quick_feedback(const bool clear_buttons) { void watch_temp_callback_E3() { _WATCH_FUNC(3); } #if HOTENDS > 4 void watch_temp_callback_E4() { _WATCH_FUNC(4); } + #if HOTENDS > 5 + void watch_temp_callback_E5() { _WATCH_FUNC(5); } + #endif // HOTENDS > 5 #endif // HOTENDS > 4 #endif // HOTENDS > 3 #endif // HOTENDS > 2 @@ -1434,6 +1437,9 @@ void lcd_quick_feedback(const bool clear_buttons) { inline void _lcd_refresh_e_factor_3() { planner.refresh_e_factor(3); } #if EXTRUDERS > 4 inline void _lcd_refresh_e_factor_4() { planner.refresh_e_factor(4); } + #if EXTRUDERS > 5 + inline void _lcd_refresh_e_factor_5() { planner.refresh_e_factor(5); } + #endif // EXTRUDERS > 5 #endif // EXTRUDERS > 4 #endif // EXTRUDERS > 3 #endif // EXTRUDERS > 2 @@ -1486,6 +1492,9 @@ void lcd_quick_feedback(const bool clear_buttons) { MENU_MULTIPLIER_ITEM_EDIT_CALLBACK(int3, MSG_NOZZLE MSG_N4, &thermalManager.target_temperature[3], 0, HEATER_3_MAXTEMP - 15, watch_temp_callback_E3); #if HOTENDS > 4 MENU_MULTIPLIER_ITEM_EDIT_CALLBACK(int3, MSG_NOZZLE MSG_N5, &thermalManager.target_temperature[4], 0, HEATER_4_MAXTEMP - 15, watch_temp_callback_E4); + #if HOTENDS > 5 + MENU_MULTIPLIER_ITEM_EDIT_CALLBACK(int3, MSG_NOZZLE MSG_N6, &thermalManager.target_temperature[5], 0, HEATER_5_MAXTEMP - 15, watch_temp_callback_E5); + #endif // HOTENDS > 5 #endif // HOTENDS > 4 #endif // HOTENDS > 3 #endif // HOTENDS > 2 @@ -1538,6 +1547,9 @@ void lcd_quick_feedback(const bool clear_buttons) { MENU_ITEM_EDIT_CALLBACK(int3, MSG_FLOW MSG_N4, &planner.flow_percentage[3], 10, 999, _lcd_refresh_e_factor_3); #if EXTRUDERS > 4 MENU_ITEM_EDIT_CALLBACK(int3, MSG_FLOW MSG_N5, &planner.flow_percentage[4], 10, 999, _lcd_refresh_e_factor_4); + #if EXTRUDERS > 5 + MENU_ITEM_EDIT_CALLBACK(int3, MSG_FLOW MSG_N6, &planner.flow_percentage[5], 10, 999, _lcd_refresh_e_factor_5); + #endif // EXTRUDERS > 5 #endif // EXTRUDERS > 4 #endif // EXTRUDERS > 3 #endif // EXTRUDERS > 2 @@ -1672,6 +1684,14 @@ void lcd_quick_feedback(const bool clear_buttons) { void lcd_preheat_m1_e4() { _lcd_preheat(4, lcd_preheat_hotend_temp[0], lcd_preheat_bed_temp[0], lcd_preheat_fan_speed[0]); } void lcd_preheat_m2_e4() { _lcd_preheat(4, lcd_preheat_hotend_temp[1], lcd_preheat_bed_temp[1], lcd_preheat_fan_speed[1]); } #endif + #if HOTENDS > 5 + void lcd_preheat_m1_e5_only() { _lcd_preheat(5, lcd_preheat_hotend_temp[0], -1, lcd_preheat_fan_speed[0]); } + void lcd_preheat_m2_e5_only() { _lcd_preheat(5, lcd_preheat_hotend_temp[1], -1, lcd_preheat_fan_speed[1]); } + #if HAS_HEATED_BED + void lcd_preheat_m1_e5() { _lcd_preheat(5, lcd_preheat_hotend_temp[0], lcd_preheat_bed_temp[0], lcd_preheat_fan_speed[0]); } + void lcd_preheat_m2_e5() { _lcd_preheat(5, lcd_preheat_hotend_temp[1], lcd_preheat_bed_temp[1], lcd_preheat_fan_speed[1]); } + #endif + #endif // HOTENDS > 5 #endif // HOTENDS > 4 #endif // HOTENDS > 3 #endif // HOTENDS > 2 @@ -1685,6 +1705,9 @@ void lcd_quick_feedback(const bool clear_buttons) { thermalManager.setTargetHotend(lcd_preheat_hotend_temp[0], 3); #if HOTENDS > 4 thermalManager.setTargetHotend(lcd_preheat_hotend_temp[0], 4); + #if HOTENDS > 5 + thermalManager.setTargetHotend(lcd_preheat_hotend_temp[0], 5); + #endif // HOTENDS > 5 #endif // HOTENDS > 4 #endif // HOTENDS > 3 #endif // HOTENDS > 2 @@ -1704,6 +1727,9 @@ void lcd_quick_feedback(const bool clear_buttons) { thermalManager.setTargetHotend(lcd_preheat_hotend_temp[1], 3); #if HOTENDS > 4 thermalManager.setTargetHotend(lcd_preheat_hotend_temp[1], 4); + #if HOTENDS > 5 + thermalManager.setTargetHotend(lcd_preheat_hotend_temp[1], 5); + #endif // HOTENDS > 5 #endif // HOTENDS > 4 #endif // HOTENDS > 3 #endif // HOTENDS > 2 @@ -1765,6 +1791,14 @@ void lcd_quick_feedback(const bool clear_buttons) { #else MENU_ITEM(function, MSG_PREHEAT_1_N MSG_H5, lcd_preheat_m1_e4_only); #endif + #if HOTENDS > 5 + #if HAS_HEATED_BED + MENU_ITEM(function, MSG_PREHEAT_1_N MSG_H6, lcd_preheat_m1_e5); + MENU_ITEM(function, MSG_PREHEAT_1_END " " MSG_E6, lcd_preheat_m1_e5_only); + #else + MENU_ITEM(function, MSG_PREHEAT_1_N MSG_H6, lcd_preheat_m1_e5_only); + #endif + #endif // HOTENDS > 5 #endif // HOTENDS > 4 #endif // HOTENDS > 3 #endif // HOTENDS > 2 @@ -1817,6 +1851,14 @@ void lcd_quick_feedback(const bool clear_buttons) { #else MENU_ITEM(function, MSG_PREHEAT_2_N MSG_H5, lcd_preheat_m2_e4_only); #endif + #if HOTENDS > 5 + #if HAS_HEATED_BED + MENU_ITEM(function, MSG_PREHEAT_2_N MSG_H6, lcd_preheat_m2_e5); + MENU_ITEM(function, MSG_PREHEAT_2_END " " MSG_E6, lcd_preheat_m2_e5_only); + #else + MENU_ITEM(function, MSG_PREHEAT_2_N MSG_H6, lcd_preheat_m2_e5_only); + #endif + #endif // HOTENDS > 5 #endif // HOTENDS > 4 #endif // HOTENDS > 3 #endif // HOTENDS > 2 @@ -3061,6 +3103,9 @@ void lcd_quick_feedback(const bool clear_buttons) { case 3: pos_label = PSTR(MSG_MOVE_E MSG_MOVE_E4); break; #if E_MANUAL > 4 case 4: pos_label = PSTR(MSG_MOVE_E MSG_MOVE_E5); break; + #if E_MANUAL > 5 + case 5: pos_label = PSTR(MSG_MOVE_E MSG_MOVE_E6); break; + #endif // E_MANUAL > 5 #endif // E_MANUAL > 4 #endif // E_MANUAL > 3 #endif // E_MANUAL > 2 @@ -3087,6 +3132,9 @@ void lcd_quick_feedback(const bool clear_buttons) { void lcd_move_e3() { _lcd_move_e(3); } #if E_MANUAL > 4 void lcd_move_e4() { _lcd_move_e(4); } + #if E_MANUAL > 5 + void lcd_move_e5() { _lcd_move_e(5); } + #endif // E_MANUAL > 5 #endif // E_MANUAL > 4 #endif // E_MANUAL > 3 #endif // E_MANUAL > 2 @@ -3147,6 +3195,9 @@ void lcd_quick_feedback(const bool clear_buttons) { void lcd_move_get_e3_amount() { _lcd_move_distance_menu(E_AXIS, lcd_move_e3); } #if E_MANUAL > 4 void lcd_move_get_e4_amount() { _lcd_move_distance_menu(E_AXIS, lcd_move_e4); } + #if E_MANUAL > 5 + void lcd_move_get_e5_amount() { _lcd_move_distance_menu(E_AXIS, lcd_move_e5); } + #endif // E_MANUAL > 5 #endif // E_MANUAL > 4 #endif // E_MANUAL > 3 #endif // E_MANUAL > 2 @@ -3199,7 +3250,16 @@ void lcd_quick_feedback(const bool clear_buttons) { #if ENABLED(SWITCHING_EXTRUDER) || ENABLED(SWITCHING_NOZZLE) - #if EXTRUDERS == 4 + #if EXTRUDERS == 6 + switch (active_extruder) { + case 0: MENU_ITEM(gcode, MSG_SELECT " " MSG_E2, PSTR("T1")); break; + case 1: MENU_ITEM(gcode, MSG_SELECT " " MSG_E1, PSTR("T0")); break; + case 2: MENU_ITEM(gcode, MSG_SELECT " " MSG_E4, PSTR("T3")); break; + case 3: MENU_ITEM(gcode, MSG_SELECT " " MSG_E3, PSTR("T2")); break; + case 4: MENU_ITEM(gcode, MSG_SELECT " " MSG_E6, PSTR("T5")); break; + case 5: MENU_ITEM(gcode, MSG_SELECT " " MSG_E5, PSTR("T4")); break; + } + #elif EXTRUDERS == 5 || EXTRUDERS == 4 switch (active_extruder) { case 0: MENU_ITEM(gcode, MSG_SELECT " " MSG_E2, PSTR("T1")); break; case 1: MENU_ITEM(gcode, MSG_SELECT " " MSG_E1, PSTR("T0")); break; @@ -3253,6 +3313,9 @@ void lcd_quick_feedback(const bool clear_buttons) { MENU_ITEM(submenu, MSG_MOVE_E MSG_MOVE_E4, lcd_move_get_e3_amount); #if E_MANUAL > 4 MENU_ITEM(submenu, MSG_MOVE_E MSG_MOVE_E5, lcd_move_get_e4_amount); + #if E_MANUAL > 5 + MENU_ITEM(submenu, MSG_MOVE_E MSG_MOVE_E6, lcd_move_get_e5_amount); + #endif // E_MANUAL > 5 #endif // E_MANUAL > 4 #endif // E_MANUAL > 3 #endif // E_MANUAL > 2 @@ -3412,6 +3475,9 @@ void lcd_quick_feedback(const bool clear_buttons) { DEFINE_PIDTEMP_FUNCS(3); #if HOTENDS > 4 DEFINE_PIDTEMP_FUNCS(4); + #if HOTENDS > 5 + DEFINE_PIDTEMP_FUNCS(5); + #endif // HOTENDS > 5 #endif // HOTENDS > 4 #endif // HOTENDS > 3 #endif // HOTENDS > 2 @@ -3444,6 +3510,9 @@ void lcd_quick_feedback(const bool clear_buttons) { MENU_MULTIPLIER_ITEM_EDIT_CALLBACK(int3, MSG_NOZZLE MSG_N4, &thermalManager.target_temperature[3], 0, HEATER_3_MAXTEMP - 15, watch_temp_callback_E3); #if HOTENDS > 4 MENU_MULTIPLIER_ITEM_EDIT_CALLBACK(int3, MSG_NOZZLE MSG_N5, &thermalManager.target_temperature[4], 0, HEATER_4_MAXTEMP - 15, watch_temp_callback_E4); + #if HOTENDS > 5 + MENU_MULTIPLIER_ITEM_EDIT_CALLBACK(int3, MSG_NOZZLE MSG_N6, &thermalManager.target_temperature[5], 0, HEATER_5_MAXTEMP - 15, watch_temp_callback_E5); + #endif // HOTENDS > 5 #endif // HOTENDS > 4 #endif // HOTENDS > 3 #endif // HOTENDS > 2 @@ -3568,6 +3637,9 @@ void lcd_quick_feedback(const bool clear_buttons) { PID_MENU_ITEMS(" " MSG_E4, 3); #if HOTENDS > 4 PID_MENU_ITEMS(" " MSG_E5, 4); + #if HOTENDS > 5 + PID_MENU_ITEMS(" " MSG_E6, 5); + #endif // HOTENDS > 5 #endif // HOTENDS > 4 #endif // HOTENDS > 3 #endif // HOTENDS > 2 @@ -3583,7 +3655,10 @@ void lcd_quick_feedback(const bool clear_buttons) { #if DISABLED(SLIM_LCD_MENUS) void _lcd_configuration_temperature_preheat_settings_menu(const uint8_t material) { - #if HOTENDS > 4 + #if HOTENDS > 5 + #define MINTEMP_ALL MIN5(HEATER_0_MINTEMP, HEATER_1_MINTEMP, HEATER_2_MINTEMP, HEATER_3_MINTEMP, HEATER_4_MINTEMP, HEATER_5_MINTEMP) + #define MAXTEMP_ALL MAX5(HEATER_0_MAXTEMP, HEATER_1_MAXTEMP, HEATER_2_MAXTEMP, HEATER_3_MAXTEMP, HEATER_4_MAXTEMP, HEATER_5_MAXTEMP) + #elif HOTENDS > 4 #define MINTEMP_ALL MIN5(HEATER_0_MINTEMP, HEATER_1_MINTEMP, HEATER_2_MINTEMP, HEATER_3_MINTEMP, HEATER_4_MINTEMP) #define MAXTEMP_ALL MAX5(HEATER_0_MAXTEMP, HEATER_1_MAXTEMP, HEATER_2_MAXTEMP, HEATER_3_MAXTEMP, HEATER_4_MAXTEMP) #elif HOTENDS > 3 @@ -3639,6 +3714,9 @@ void lcd_quick_feedback(const bool clear_buttons) { void _reset_e3_acceleration_rate() { _reset_e_acceleration_rate(3); } #if E_STEPPERS > 4 void _reset_e4_acceleration_rate() { _reset_e_acceleration_rate(4); } + #if E_STEPPERS > 5 + void _reset_e5_acceleration_rate() { _reset_e_acceleration_rate(5); } + #endif // E_STEPPERS > 5 #endif // E_STEPPERS > 4 #endif // E_STEPPERS > 3 #endif // E_STEPPERS > 2 @@ -3660,6 +3738,9 @@ void lcd_quick_feedback(const bool clear_buttons) { void _planner_refresh_e3_positioning() { _planner_refresh_e_positioning(3); } #if E_STEPPERS > 4 void _planner_refresh_e4_positioning() { _planner_refresh_e_positioning(4); } + #if E_STEPPERS > 5 + void _planner_refresh_e5_positioning() { _planner_refresh_e_positioning(5); } + #endif // E_STEPPERS > 5 #endif // E_STEPPERS > 4 #endif // E_STEPPERS > 3 #endif // E_STEPPERS > 2 @@ -3685,6 +3766,9 @@ void lcd_quick_feedback(const bool clear_buttons) { MENU_MULTIPLIER_ITEM_EDIT(float3, MSG_VMAX MSG_E4, &planner.max_feedrate_mm_s[E_AXIS + 3], 1, 999); #if E_STEPPERS > 4 MENU_MULTIPLIER_ITEM_EDIT(float3, MSG_VMAX MSG_E5, &planner.max_feedrate_mm_s[E_AXIS + 4], 1, 999); + #if E_STEPPERS > 5 + MENU_MULTIPLIER_ITEM_EDIT(float3, MSG_VMAX MSG_E6, &planner.max_feedrate_mm_s[E_AXIS + 5], 1, 999); + #endif // E_STEPPERS > 5 #endif // E_STEPPERS > 4 #endif // E_STEPPERS > 3 #endif // E_STEPPERS > 2 @@ -3730,6 +3814,9 @@ void lcd_quick_feedback(const bool clear_buttons) { MENU_MULTIPLIER_ITEM_EDIT_CALLBACK(long5, MSG_AMAX MSG_E4, &planner.max_acceleration_mm_per_s2[E_AXIS + 3], 100, 99000, _reset_e3_acceleration_rate); #if E_STEPPERS > 4 MENU_MULTIPLIER_ITEM_EDIT_CALLBACK(long5, MSG_AMAX MSG_E5, &planner.max_acceleration_mm_per_s2[E_AXIS + 4], 100, 99000, _reset_e4_acceleration_rate); + #if E_STEPPERS > 5 + MENU_MULTIPLIER_ITEM_EDIT_CALLBACK(long5, MSG_AMAX MSG_E6, &planner.max_acceleration_mm_per_s2[E_AXIS + 5], 100, 99000, _reset_e5_acceleration_rate); + #endif // E_STEPPERS > 5 #endif // E_STEPPERS > 4 #endif // E_STEPPERS > 3 #endif // E_STEPPERS > 2 @@ -3787,6 +3874,9 @@ void lcd_quick_feedback(const bool clear_buttons) { MENU_MULTIPLIER_ITEM_EDIT_CALLBACK(float62, MSG_E4STEPS, &planner.axis_steps_per_mm[E_AXIS + 3], 5, 9999, _planner_refresh_e3_positioning); #if E_STEPPERS > 4 MENU_MULTIPLIER_ITEM_EDIT_CALLBACK(float62, MSG_E5STEPS, &planner.axis_steps_per_mm[E_AXIS + 4], 5, 9999, _planner_refresh_e4_positioning); + #if E_STEPPERS > 5 + MENU_MULTIPLIER_ITEM_EDIT_CALLBACK(float62, MSG_E6STEPS, &planner.axis_steps_per_mm[E_AXIS + 5], 5, 9999, _planner_refresh_e5_positioning); + #endif // E_STEPPERS > 5 #endif // E_STEPPERS > 4 #endif // E_STEPPERS > 3 #endif // E_STEPPERS > 2 @@ -3865,6 +3955,9 @@ void lcd_quick_feedback(const bool clear_buttons) { MENU_ITEM_EDIT(float52, MSG_ADVANCE_K MSG_E4, &planner.extruder_advance_K[3], 0, 999); #if EXTRUDERS > 4 MENU_ITEM_EDIT(float52, MSG_ADVANCE_K MSG_E5, &planner.extruder_advance_K[4], 0, 999); + #if EXTRUDERS > 5 + MENU_ITEM_EDIT(float52, MSG_ADVANCE_K MSG_E6, &planner.extruder_advance_K[5], 0, 999); + #endif // EXTRUDERS > 5 #endif // EXTRUDERS > 4 #endif // EXTRUDERS > 3 #endif // EXTRUDERS > 2 @@ -3914,6 +4007,9 @@ void lcd_quick_feedback(const bool clear_buttons) { MENU_ITEM_EDIT(float52, MSG_ADVANCE_K MSG_E4, &planner.extruder_advance_K[3], 0, 999); #if EXTRUDERS > 4 MENU_ITEM_EDIT(float52, MSG_ADVANCE_K MSG_E5, &planner.extruder_advance_K[4], 0, 999); + #if EXTRUDERS > 5 + MENU_ITEM_EDIT(float52, MSG_ADVANCE_K MSG_E6, &planner.extruder_advance_K[5], 0, 999); + #endif // EXTRUDERS > 5 #endif // EXTRUDERS > 4 #endif // EXTRUDERS > 3 #endif // EXTRUDERS > 2 @@ -3932,10 +4028,13 @@ void lcd_quick_feedback(const bool clear_buttons) { MENU_MULTIPLIER_ITEM_EDIT_CALLBACK(float43, MSG_FILAMENT_DIAM MSG_DIAM_E2, &planner.filament_size[1], 1.5f, 3.25f, planner.calculate_volumetric_multipliers); #if EXTRUDERS > 2 MENU_MULTIPLIER_ITEM_EDIT_CALLBACK(float43, MSG_FILAMENT_DIAM MSG_DIAM_E3, &planner.filament_size[2], 1.5f, 3.25f, planner.calculate_volumetric_multipliers); - #if EXTRUDERS > 3 - MENU_MULTIPLIER_ITEM_EDIT_CALLBACK(float43, MSG_FILAMENT_DIAM MSG_DIAM_E4, &planner.filament_size[3], 1.5f, 3.25f, planner.calculate_volumetric_multipliers); - #if EXTRUDERS > 4 + #if EXTRUDERS > 3 + MENU_MULTIPLIER_ITEM_EDIT_CALLBACK(float43, MSG_FILAMENT_DIAM MSG_DIAM_E4, &planner.filament_size[3], 1.5f, 3.25f, planner.calculate_volumetric_multipliers); + #if EXTRUDERS > 4 MENU_MULTIPLIER_ITEM_EDIT_CALLBACK(float43, MSG_FILAMENT_DIAM MSG_DIAM_E5, &planner.filament_size[4], 1.5f, 3.25f, planner.calculate_volumetric_multipliers); + #if EXTRUDERS > 5 + MENU_MULTIPLIER_ITEM_EDIT_CALLBACK(float43, MSG_FILAMENT_DIAM MSG_DIAM_E6, &planner.filament_size[5], 1.5f, 3.25f, planner.calculate_volumetric_multipliers); + #endif // EXTRUDERS > 5 #endif // EXTRUDERS > 4 #endif // EXTRUDERS > 3 #endif // EXTRUDERS > 2 @@ -3960,10 +4059,13 @@ void lcd_quick_feedback(const bool clear_buttons) { MENU_MULTIPLIER_ITEM_EDIT(float3, MSG_FILAMENT_UNLOAD MSG_DIAM_E2, &filament_change_unload_length[1], 0, extrude_maxlength); #if EXTRUDERS > 2 MENU_MULTIPLIER_ITEM_EDIT(float3, MSG_FILAMENT_UNLOAD MSG_DIAM_E3, &filament_change_unload_length[2], 0, extrude_maxlength); - #if EXTRUDERS > 3 - MENU_MULTIPLIER_ITEM_EDIT(float3, MSG_FILAMENT_UNLOAD MSG_DIAM_E4, &filament_change_unload_length[3], 0, extrude_maxlength); - #if EXTRUDERS > 4 + #if EXTRUDERS > 3 + MENU_MULTIPLIER_ITEM_EDIT(float3, MSG_FILAMENT_UNLOAD MSG_DIAM_E4, &filament_change_unload_length[3], 0, extrude_maxlength); + #if EXTRUDERS > 4 MENU_MULTIPLIER_ITEM_EDIT(float3, MSG_FILAMENT_UNLOAD MSG_DIAM_E5, &filament_change_unload_length[4], 0, extrude_maxlength); + #if EXTRUDERS > 5 + MENU_MULTIPLIER_ITEM_EDIT(float3, MSG_FILAMENT_UNLOAD MSG_DIAM_E6, &filament_change_unload_length[5], 0, extrude_maxlength); + #endif // EXTRUDERS > 5 #endif // EXTRUDERS > 4 #endif // EXTRUDERS > 3 #endif // EXTRUDERS > 2 @@ -3977,10 +4079,13 @@ void lcd_quick_feedback(const bool clear_buttons) { MENU_MULTIPLIER_ITEM_EDIT(float3, MSG_FILAMENT_LOAD MSG_DIAM_E2, &filament_change_load_length[1], 0, extrude_maxlength); #if EXTRUDERS > 2 MENU_MULTIPLIER_ITEM_EDIT(float3, MSG_FILAMENT_LOAD MSG_DIAM_E3, &filament_change_load_length[2], 0, extrude_maxlength); - #if EXTRUDERS > 3 - MENU_MULTIPLIER_ITEM_EDIT(float3, MSG_FILAMENT_LOAD MSG_DIAM_E4, &filament_change_load_length[3], 0, extrude_maxlength); - #if EXTRUDERS > 4 + #if EXTRUDERS > 3 + MENU_MULTIPLIER_ITEM_EDIT(float3, MSG_FILAMENT_LOAD MSG_DIAM_E4, &filament_change_load_length[3], 0, extrude_maxlength); + #if EXTRUDERS > 4 MENU_MULTIPLIER_ITEM_EDIT(float3, MSG_FILAMENT_LOAD MSG_DIAM_E5, &filament_change_load_length[4], 0, extrude_maxlength); + #if EXTRUDERS > 5 + MENU_MULTIPLIER_ITEM_EDIT(float3, MSG_FILAMENT_LOAD MSG_DIAM_E6, &filament_change_load_length[5], 0, extrude_maxlength); + #endif // EXTRUDERS > 5 #endif // EXTRUDERS > 4 #endif // EXTRUDERS > 3 #endif // EXTRUDERS > 2 @@ -4405,6 +4510,9 @@ void lcd_quick_feedback(const bool clear_buttons) { case 3: max_temp = HEATER_3_MAXTEMP; break; #if HOTENDS > 4 case 4: max_temp = HEATER_4_MAXTEMP; break; + #if HOTENDS > 5 + case 5: max_temp = HEATER_5_MAXTEMP; break; + #endif #endif #endif #endif @@ -4486,6 +4594,13 @@ void lcd_quick_feedback(const bool clear_buttons) { MENU_ITEM_P(submenu, msg4, lcd_temp_menu_e4_filament_change); else MENU_ITEM_P(gcode, msg4, PSTR("M600 B0 T4")); + #if E_STEPPERS > 5 + PGM_P msg5 = PSTR(MSG_FILAMENTCHANGE " " MSG_E6); + if (thermalManager.targetTooColdToExtrude(5)) + MENU_ITEM_P(submenu, msg5, lcd_temp_menu_e5_filament_change); + else + MENU_ITEM_P(gcode, msg5, PSTR("M600 B0 T5")); + #endif // E_STEPPERS > 5 #endif // E_STEPPERS > 4 #endif // E_STEPPERS > 3 #endif // E_STEPPERS > 2 @@ -4529,6 +4644,13 @@ void lcd_quick_feedback(const bool clear_buttons) { MENU_ITEM_P(submenu, msg4, lcd_temp_menu_e4_filament_load); else MENU_ITEM_P(gcode, msg4, PSTR("M701 T4")); + #if E_STEPPERS > 5 + PGM_P msg5 = PSTR(MSG_FILAMENTLOAD " " MSG_E6); + if (thermalManager.targetTooColdToExtrude(5)) + MENU_ITEM_P(submenu, msg5, lcd_temp_menu_e5_filament_load); + else + MENU_ITEM_P(gcode, msg5, PSTR("M701 T5")); + #endif // E_STEPPERS > 5 #endif // E_STEPPERS > 4 #endif // E_STEPPERS > 3 #endif // E_STEPPERS > 2 @@ -4551,6 +4673,9 @@ void lcd_quick_feedback(const bool clear_buttons) { && thermalManager.targetHotEnoughToExtrude(3) #if E_STEPPERS > 4 && thermalManager.targetHotEnoughToExtrude(4) + #if E_STEPPERS > 5 + && thermalManager.targetHotEnoughToExtrude(5) + #endif // E_STEPPERS > 5 #endif // E_STEPPERS > 4 #endif // E_STEPPERS > 3 #endif // E_STEPPERS > 2 @@ -4583,6 +4708,12 @@ void lcd_quick_feedback(const bool clear_buttons) { MENU_ITEM(gcode, MSG_FILAMENTUNLOAD " " MSG_E5, PSTR("M702 T4")); else MENU_ITEM(submenu, MSG_FILAMENTUNLOAD " " MSG_E5, lcd_temp_menu_e4_filament_unload); + #if E_STEPPERS > 5 + if (thermalManager.targetHotEnoughToExtrude(5)) + MENU_ITEM(gcode, MSG_FILAMENTUNLOAD " " MSG_E6, PSTR("M702 T5")); + else + MENU_ITEM(submenu, MSG_FILAMENTUNLOAD " " MSG_E6, lcd_temp_menu_e5_filament_unload); + #endif // E_STEPPERS > 5 #endif // E_STEPPERS > 4 #endif // E_STEPPERS > 3 #endif // E_STEPPERS > 2 diff --git a/Marlin/src/module/configuration_store.cpp b/Marlin/src/module/configuration_store.cpp index 3703d27b37..031bb2830a 100644 --- a/Marlin/src/module/configuration_store.cpp +++ b/Marlin/src/module/configuration_store.cpp @@ -37,7 +37,7 @@ */ // Change EEPROM version if the structure changes -#define EEPROM_VERSION "V57" +#define EEPROM_VERSION "V58" #define EEPROM_OFFSET 100 // Check the integrity of data offsets. @@ -213,7 +213,7 @@ typedef struct SettingsDataStruct { // // PIDTEMP // - PIDC hotendPID[MAX_EXTRUDERS]; // M301 En PIDC / M303 En U + PIDC hotendPID[HOTENDS]; // M301 En PIDC / M303 En U int16_t lpq_len; // M301 L @@ -244,14 +244,14 @@ typedef struct SettingsDataStruct { // !NO_VOLUMETRIC // bool parser_volumetric_enabled; // M200 D parser.volumetric_enabled - float planner_filament_size[MAX_EXTRUDERS]; // M200 T D planner.filament_size[] + float planner_filament_size[EXTRUDERS]; // M200 T D planner.filament_size[] // // HAS_TRINAMIC // #define TMC_AXES (MAX_EXTRUDERS + 7) - uint16_t tmc_stepper_current[TMC_AXES]; // M906 X Y Z X2 Y2 Z2 Z3 E0 E1 E2 E3 E4 - uint32_t tmc_hybrid_threshold[TMC_AXES]; // M913 X Y Z X2 Y2 Z2 Z3 E0 E1 E2 E3 E4 + uint16_t tmc_stepper_current[TMC_AXES]; // M906 X Y Z X2 Y2 Z2 Z3 E0 E1 E2 E3 E4 E5 + uint32_t tmc_hybrid_threshold[TMC_AXES]; // M913 X Y Z X2 Y2 Z2 Z3 E0 E1 E2 E3 E4 E5 int16_t tmc_sgt[XYZ]; // M914 X Y Z // @@ -279,8 +279,8 @@ typedef struct SettingsDataStruct { // // ADVANCED_PAUSE_FEATURE // - float filament_change_unload_length[MAX_EXTRUDERS], // M603 T U - filament_change_load_length[MAX_EXTRUDERS]; // M603 T L + float filament_change_unload_length[EXTRUDERS], // M603 T U + filament_change_load_length[EXTRUDERS]; // M603 T L } SettingsData; @@ -629,29 +629,23 @@ void MarlinSettings::postprocess() { EEPROM_WRITE(lcd_preheat_bed_temp); EEPROM_WRITE(lcd_preheat_fan_speed); - for (uint8_t e = 0; e < MAX_EXTRUDERS; e++) { - + for (uint8_t e = 0; e < HOTENDS; e++) { #if ENABLED(PIDTEMP) - if (e < HOTENDS) { - EEPROM_WRITE(PID_PARAM(Kp, e)); - EEPROM_WRITE(PID_PARAM(Ki, e)); - EEPROM_WRITE(PID_PARAM(Kd, e)); - #if ENABLED(PID_EXTRUSION_SCALING) - EEPROM_WRITE(PID_PARAM(Kc, e)); - #else - dummy = 1.0f; // 1.0 = default kc - EEPROM_WRITE(dummy); - #endif - } - else - #endif // !PIDTEMP - { - dummy = DUMMY_PID_VALUE; // When read, will not change the existing value - EEPROM_WRITE(dummy); // Kp - dummy = 0; - for (uint8_t q = 3; q--;) EEPROM_WRITE(dummy); // Ki, Kd, Kc - } - + EEPROM_WRITE(PID_PARAM(Kp, e)); + EEPROM_WRITE(PID_PARAM(Ki, e)); + EEPROM_WRITE(PID_PARAM(Kd, e)); + #if ENABLED(PID_EXTRUSION_SCALING) + EEPROM_WRITE(PID_PARAM(Kc, e)); + #else + dummy = 1.0f; // 1.0 = default kc + EEPROM_WRITE(dummy); + #endif + #else + dummy = DUMMY_PID_VALUE; // When read, will not change the existing value + EEPROM_WRITE(dummy); // Kp + dummy = 0; + for (uint8_t q = 3; q--;) EEPROM_WRITE(dummy); // Ki, Kd, Kc + #endif } // Hotends Loop _FIELD_TEST(lpq_len); @@ -705,17 +699,15 @@ void MarlinSettings::postprocess() { EEPROM_WRITE(parser.volumetric_enabled); // Save filament sizes - for (uint8_t q = 0; q < MAX_EXTRUDERS; q++) { - if (q < COUNT(planner.filament_size)) dummy = planner.filament_size[q]; - EEPROM_WRITE(dummy); - } + for (uint8_t q = 0; q < COUNT(planner.filament_size); q++) + EEPROM_WRITE(planner.filament_size[q]); #else const bool volumetric_enabled = false; dummy = DEFAULT_NOMINAL_FILAMENT_DIA; EEPROM_WRITE(volumetric_enabled); - for (uint8_t q = MAX_EXTRUDERS; q--;) EEPROM_WRITE(dummy); + for (uint8_t q = EXTRUDERS; q--;) EEPROM_WRITE(dummy); #endif @@ -762,31 +754,48 @@ void MarlinSettings::postprocess() { #else 0, #endif - #if AXIS_IS_TMC(E0) - stepperE0.getCurrent(), - #else - 0, - #endif - #if AXIS_IS_TMC(E1) - stepperE1.getCurrent(), - #else - 0, - #endif - #if AXIS_IS_TMC(E2) - stepperE2.getCurrent(), - #else - 0, - #endif - #if AXIS_IS_TMC(E3) - stepperE3.getCurrent(), - #else - 0, - #endif - #if AXIS_IS_TMC(E4) - stepperE4.getCurrent() - #else - 0 - #endif + #if MAX_EXTRUDERS + #if AXIS_IS_TMC(E0) + stepperE0.getCurrent(), + #else + 0, + #endif + #if MAX_EXTRUDERS > 1 + #if AXIS_IS_TMC(E1) + stepperE1.getCurrent(), + #else + 0, + #endif + #if MAX_EXTRUDERS > 2 + #if AXIS_IS_TMC(E2) + stepperE2.getCurrent(), + #else + 0, + #endif + #if MAX_EXTRUDERS > 3 + #if AXIS_IS_TMC(E3) + stepperE3.getCurrent(), + #else + 0, + #endif + #if MAX_EXTRUDERS > 4 + #if AXIS_IS_TMC(E4) + stepperE4.getCurrent() + #else + 0 + #endif + #if MAX_EXTRUDERS > 5 + #if AXIS_IS_TMC(E5) + stepperE5.getCurrent() + #else + 0 + #endif + #endif // MAX_EXTRUDERS > 5 + #endif // MAX_EXTRUDERS > 4 + #endif // MAX_EXTRUDERS > 3 + #endif // MAX_EXTRUDERS > 2 + #endif // MAX_EXTRUDERS > 1 + #endif // MAX_EXTRUDERS #else 0 #endif @@ -836,35 +845,69 @@ void MarlinSettings::postprocess() { #else Z3_HYBRID_THRESHOLD, #endif - #if AXIS_HAS_STEALTHCHOP(E0) - TMC_GET_PWMTHRS(E, E0), - #else - E0_HYBRID_THRESHOLD, - #endif - #if AXIS_HAS_STEALTHCHOP(E1) - TMC_GET_PWMTHRS(E, E1), - #else - E1_HYBRID_THRESHOLD, - #endif - #if AXIS_HAS_STEALTHCHOP(E2) - TMC_GET_PWMTHRS(E, E2), - #else - E2_HYBRID_THRESHOLD, - #endif - #if AXIS_HAS_STEALTHCHOP(E3) - TMC_GET_PWMTHRS(E, E3), - #else - E3_HYBRID_THRESHOLD, - #endif - #if AXIS_HAS_STEALTHCHOP(E4) - TMC_GET_PWMTHRS(E, E4) - #else - E4_HYBRID_THRESHOLD - #endif + #if MAX_EXTRUDERS + #if AXIS_HAS_STEALTHCHOP(E0) + TMC_GET_PWMTHRS(E, E0), + #else + E0_HYBRID_THRESHOLD, + #endif + #if MAX_EXTRUDERS > 1 + #if AXIS_HAS_STEALTHCHOP(E1) + TMC_GET_PWMTHRS(E, E1), + #else + E1_HYBRID_THRESHOLD, + #endif + #if MAX_EXTRUDERS > 2 + #if AXIS_HAS_STEALTHCHOP(E2) + TMC_GET_PWMTHRS(E, E2), + #else + E2_HYBRID_THRESHOLD, + #endif + #if MAX_EXTRUDERS > 3 + #if AXIS_HAS_STEALTHCHOP(E3) + TMC_GET_PWMTHRS(E, E3), + #else + E3_HYBRID_THRESHOLD, + #endif + #if MAX_EXTRUDERS > 4 + #if AXIS_HAS_STEALTHCHOP(E4) + TMC_GET_PWMTHRS(E, E4) + #else + E4_HYBRID_THRESHOLD + #endif + #if MAX_EXTRUDERS > 5 + #if AXIS_HAS_STEALTHCHOP(E5) + TMC_GET_PWMTHRS(E, E5) + #else + E5_HYBRID_THRESHOLD + #endif + #endif // MAX_EXTRUDERS > 5 + #endif // MAX_EXTRUDERS > 4 + #endif // MAX_EXTRUDERS > 3 + #endif // MAX_EXTRUDERS > 2 + #endif // MAX_EXTRUDERS > 1 + #endif // MAX_EXTRUDERS #else - 100, 100, 3, // X, Y, Z - 100, 100, 3, 3, // X2, Y2, Z2, Z3 - 30, 30, 30, 30, 30 // E0, E1, E2, E3, E4 + 100, 100, 3, // X, Y, Z + 100, 100, 3, 3 // X2, Y2, Z2, Z3 + #if MAX_EXTRUDERS + , 30 // E0 + #if MAX_EXTRUDERS > 1 + , 30 // E1 + #if MAX_EXTRUDERS > 2 + , 30 // E2 + #if MAX_EXTRUDERS > 3 + , 30 // E3 + #if MAX_EXTRUDERS > 4 + , 30 // E4 + #if MAX_EXTRUDERS > 5 + , 30 // E5 + #endif + #endif + #endif + #endif + #endif + #endif #endif }; EEPROM_WRITE(tmc_hybrid_threshold); @@ -951,17 +994,13 @@ void MarlinSettings::postprocess() { _FIELD_TEST(filament_change_unload_length); #if ENABLED(ADVANCED_PAUSE_FEATURE) - for (uint8_t q = 0; q < MAX_EXTRUDERS; q++) { - if (q < COUNT(filament_change_unload_length)) dummy = filament_change_unload_length[q]; - EEPROM_WRITE(dummy); - } - for (uint8_t q = 0; q < MAX_EXTRUDERS; q++) { - if (q < COUNT(filament_change_load_length)) dummy = filament_change_load_length[q]; - EEPROM_WRITE(dummy); + for (uint8_t q = 0; q < COUNT(filament_change_unload_length); q++) { + EEPROM_WRITE(filament_change_unload_length[q]); + EEPROM_WRITE(filament_change_load_length[q]); } #else dummy = 0; - for (uint8_t q = MAX_EXTRUDERS * 2; q--;) EEPROM_WRITE(dummy); + for (uint8_t q = EXTRUDERS * 2; q--;) EEPROM_WRITE(dummy); #endif // @@ -1271,9 +1310,9 @@ void MarlinSettings::postprocess() { // #if ENABLED(PIDTEMP) - for (uint8_t e = 0; e < MAX_EXTRUDERS; e++) { + for (uint8_t e = 0; e < HOTENDS; e++) { EEPROM_READ(dummy); // Kp - if (e < HOTENDS && dummy != DUMMY_PID_VALUE) { + if (dummy != DUMMY_PID_VALUE) { // do not need to scale PID values as the values in EEPROM are already scaled if (!validating) PID_PARAM(Kp, e) = dummy; EEPROM_READ(PID_PARAM(Ki, e)); @@ -1284,13 +1323,12 @@ void MarlinSettings::postprocess() { EEPROM_READ(dummy); #endif } - else { + else for (uint8_t q=3; q--;) EEPROM_READ(dummy); // Ki, Kd, Kc - } } #else // !PIDTEMP // 4 x 4 = 16 slots for PID parameters - for (uint8_t q = MAX_EXTRUDERS * 4; q--;) EEPROM_READ(dummy); // Kp, Ki, Kd, Kc + for (uint8_t q = HOTENDS * 4; q--;) EEPROM_READ(dummy); // Kp, Ki, Kd, Kc #endif // !PIDTEMP // @@ -1359,16 +1397,15 @@ void MarlinSettings::postprocess() { EEPROM_READ(parser.volumetric_enabled); - for (uint8_t q = 0; q < MAX_EXTRUDERS; q++) { + for (uint8_t q = 0; q < COUNT(planner.filament_size); q++) { EEPROM_READ(dummy); - if (!validating && q < COUNT(planner.filament_size)) - planner.filament_size[q] = dummy; + if (!validating) planner.filament_size[q] = dummy; } #else EEPROM_READ(dummyb); - for (uint8_t q=MAX_EXTRUDERS; q--;) EEPROM_READ(dummy); + for (uint8_t q=EXTRUDERS; q--;) EEPROM_READ(dummy); #endif @@ -1422,6 +1459,9 @@ void MarlinSettings::postprocess() { #if AXIS_IS_TMC(E4) SET_CURR(E4); #endif + #if AXIS_IS_TMC(E5) + SET_CURR(E5); + #endif } #else uint16_t val; @@ -1469,6 +1509,9 @@ void MarlinSettings::postprocess() { #if AXIS_HAS_STEALTHCHOP(E4) TMC_SET_PWMTHRS(E, E4); #endif + #if AXIS_HAS_STEALTHCHOP(E5) + TMC_SET_PWMTHRS(E, E5); + #endif } #else uint32_t thrs_val; @@ -1580,16 +1623,14 @@ void MarlinSettings::postprocess() { _FIELD_TEST(filament_change_unload_length); #if ENABLED(ADVANCED_PAUSE_FEATURE) - for (uint8_t q = 0; q < MAX_EXTRUDERS; q++) { + for (uint8_t q = 0; q < COUNT(filament_change_unload_length); q++) { EEPROM_READ(dummy); if (!validating && q < COUNT(filament_change_unload_length)) filament_change_unload_length[q] = dummy; - } - for (uint8_t q = 0; q < MAX_EXTRUDERS; q++) { EEPROM_READ(dummy); if (!validating && q < COUNT(filament_change_load_length)) filament_change_load_length[q] = dummy; } #else - for (uint8_t q = MAX_EXTRUDERS * 2; q--;) EEPROM_READ(dummy); + for (uint8_t q = EXTRUDERS * 2; q--;) EEPROM_READ(dummy); #endif eeprom_error = size_error(eeprom_index - (EEPROM_OFFSET)); @@ -2176,6 +2217,11 @@ void MarlinSettings::reset(PORTARG_SOLO) { CONFIG_ECHO_START; SERIAL_ECHOPAIR_P(port, " M200 T4 D", LINEAR_UNIT(planner.filament_size[4])); SERIAL_EOL_P(port); + #if EXTRUDERS > 5 + CONFIG_ECHO_START; + SERIAL_ECHOPAIR_P(port, " M200 T5 D", LINEAR_UNIT(planner.filament_size[5])); + SERIAL_EOL_P(port); + #endif // EXTRUDERS > 5 #endif // EXTRUDERS > 4 #endif // EXTRUDERS > 3 #endif // EXTRUDERS > 2 @@ -2681,6 +2727,10 @@ void MarlinSettings::reset(PORTARG_SOLO) { say_M906(PORTVAR_SOLO); SERIAL_ECHOLNPAIR_P(port, " T4 E", stepperE4.getCurrent()); #endif + #if E_STEPPERS > 5 && AXIS_IS_TMC(E5) + say_M906(PORTVAR_SOLO); + SERIAL_ECHOLNPAIR_P(port, " T5 E", stepperE5.getCurrent()); + #endif SERIAL_EOL_P(port); /** @@ -2748,6 +2798,10 @@ void MarlinSettings::reset(PORTARG_SOLO) { say_M913(PORTVAR_SOLO); SERIAL_ECHOLNPAIR_P(port, " T4 E", TMC_GET_PWMTHRS(E, E4)); #endif + #if E_STEPPERS > 5 && AXIS_IS_TMC(E5) + say_M913(PORTVAR_SOLO); + SERIAL_ECHOLNPAIR_P(port, " T5 E", TMC_GET_PWMTHRS(E, E5)); + #endif SERIAL_EOL_P(port); #endif // HYBRID_THRESHOLD @@ -2871,6 +2925,12 @@ void MarlinSettings::reset(PORTARG_SOLO) { say_M603(PORTVAR_SOLO); SERIAL_ECHOPAIR_P(port, "T4 L", LINEAR_UNIT(filament_change_load_length[4])); SERIAL_ECHOLNPAIR_P(port, " U", LINEAR_UNIT(filament_change_unload_length[4])); + #if EXTRUDERS > 5 + CONFIG_ECHO_START; + say_M603(PORTVAR_SOLO); + SERIAL_ECHOPAIR_P(port, "T5 L", LINEAR_UNIT(filament_change_load_length[5])); + SERIAL_ECHOLNPAIR_P(port, " U", LINEAR_UNIT(filament_change_unload_length[5])); + #endif // EXTRUDERS > 5 #endif // EXTRUDERS > 4 #endif // EXTRUDERS > 3 #endif // EXTRUDERS > 2 diff --git a/Marlin/src/module/planner.cpp b/Marlin/src/module/planner.cpp index 98a40fcca1..190e2f75cc 100644 --- a/Marlin/src/module/planner.cpp +++ b/Marlin/src/module/planner.cpp @@ -1849,6 +1849,9 @@ bool Planner::_populate_block(block_t * const block, bool split_move, DISABLE_IDLE_E(3); #if EXTRUDERS > 4 DISABLE_IDLE_E(4); + #if EXTRUDERS > 5 + DISABLE_IDLE_E(5); + #endif // EXTRUDERS > 5 #endif // EXTRUDERS > 4 #endif // EXTRUDERS > 3 #endif // EXTRUDERS > 2 @@ -1871,6 +1874,9 @@ bool Planner::_populate_block(block_t * const block, bool split_move, DISABLE_IDLE_E(3); #if EXTRUDERS > 4 DISABLE_IDLE_E(4); + #if EXTRUDERS > 5 + DISABLE_IDLE_E(5); + #endif // EXTRUDERS > 5 #endif // EXTRUDERS > 4 #endif // EXTRUDERS > 3 #endif // EXTRUDERS > 2 @@ -1885,6 +1891,9 @@ bool Planner::_populate_block(block_t * const block, bool split_move, DISABLE_IDLE_E(3); #if EXTRUDERS > 4 DISABLE_IDLE_E(4); + #if EXTRUDERS > 5 + DISABLE_IDLE_E(5); + #endif #endif #endif enable_E2(); @@ -1897,6 +1906,9 @@ bool Planner::_populate_block(block_t * const block, bool split_move, DISABLE_IDLE_E(2); #if EXTRUDERS > 4 DISABLE_IDLE_E(4); + #if EXTRUDERS > 5 + DISABLE_IDLE_E(5); + #endif #endif enable_E3(); g_uc_extruder_last_move[3] = (BLOCK_BUFFER_SIZE) * 2; @@ -1907,9 +1919,23 @@ bool Planner::_populate_block(block_t * const block, bool split_move, DISABLE_IDLE_E(1); DISABLE_IDLE_E(2); DISABLE_IDLE_E(3); + #if EXTRUDERS > 5 + DISABLE_IDLE_E(5); + #endif enable_E4(); g_uc_extruder_last_move[4] = (BLOCK_BUFFER_SIZE) * 2; break; + #if EXTRUDERS > 5 + case 5: + DISABLE_IDLE_E(0); + DISABLE_IDLE_E(1); + DISABLE_IDLE_E(2); + DISABLE_IDLE_E(3); + DISABLE_IDLE_E(4); + enable_E5(); + g_uc_extruder_last_move[5] = (BLOCK_BUFFER_SIZE) * 2; + break; + #endif // EXTRUDERS > 5 #endif // EXTRUDERS > 4 #endif // EXTRUDERS > 3 #endif // EXTRUDERS > 2 @@ -1921,6 +1947,7 @@ bool Planner::_populate_block(block_t * const block, bool split_move, enable_E2(); enable_E3(); enable_E4(); + enable_E5(); #endif } diff --git a/Marlin/src/module/stepper.cpp b/Marlin/src/module/stepper.cpp index 9bcf62501c..a83fbd85b0 100644 --- a/Marlin/src/module/stepper.cpp +++ b/Marlin/src/module/stepper.cpp @@ -1982,6 +1982,9 @@ void Stepper::init() { #if HAS_E4_DIR E4_DIR_INIT; #endif + #if HAS_E5_DIR + E5_DIR_INIT; + #endif // Init Enable Pins - steppers default to disabled. #if HAS_X_ENABLE @@ -2032,6 +2035,10 @@ void Stepper::init() { E4_ENABLE_INIT; if (!E_ENABLE_ON) E4_ENABLE_WRITE(HIGH); #endif + #if HAS_E5_ENABLE + E5_ENABLE_INIT; + if (!E_ENABLE_ON) E5_ENABLE_WRITE(HIGH); + #endif #define _STEP_INIT(AXIS) AXIS ##_STEP_INIT #define _WRITE_STEP(AXIS, HIGHLOW) AXIS ##_STEP_WRITE(HIGHLOW) @@ -2088,6 +2095,9 @@ void Stepper::init() { #if E_STEPPERS > 4 && HAS_E4_STEP E_AXIS_INIT(4); #endif + #if E_STEPPERS > 5 && HAS_E5_STEP + E_AXIS_INIT(5); + #endif // Init Stepper ISR to 122 Hz for quick starting HAL_timer_start(STEP_TIMER_NUM, 122); @@ -2524,6 +2534,10 @@ void Stepper::report_positions() { SET_OUTPUT(E4_MS1_PIN); SET_OUTPUT(E4_MS2_PIN); #endif + #if HAS_E5_MICROSTEPS + SET_OUTPUT(E5_MS1_PIN); + SET_OUTPUT(E5_MS2_PIN); + #endif static const uint8_t microstep_modes[] = MICROSTEP_MODES; for (uint16_t i = 0; i < COUNT(microstep_modes); i++) microstep_mode(i, microstep_modes[i]); @@ -2553,6 +2567,9 @@ void Stepper::report_positions() { #if HAS_E4_MICROSTEPS case 7: WRITE(E4_MS1_PIN, ms1); break; #endif + #if HAS_E5_MICROSTEPS + case 8: WRITE(E5_MS1_PIN, ms1); break; + #endif } if (ms2 >= 0) switch (driver) { case 0: WRITE(X_MS2_PIN, ms2); break; @@ -2577,6 +2594,9 @@ void Stepper::report_positions() { #if HAS_E4_MICROSTEPS case 7: WRITE(E4_MS2_PIN, ms2); break; #endif + #if HAS_E5_MICROSTEPS + case 8: WRITE(E5_MS2_PIN, ms2); break; + #endif } } @@ -2638,6 +2658,11 @@ void Stepper::report_positions() { SERIAL_PROTOCOL(READ(E4_MS1_PIN)); SERIAL_PROTOCOLLN(READ(E4_MS2_PIN)); #endif + #if HAS_E5_MICROSTEPS + SERIAL_PROTOCOLPGM("E5: "); + SERIAL_PROTOCOL(READ(E5_MS1_PIN)); + SERIAL_PROTOCOLLN(READ(E5_MS2_PIN)); + #endif } #endif // HAS_MICROSTEPS diff --git a/Marlin/src/module/stepper_indirection.h b/Marlin/src/module/stepper_indirection.h index c56ccd4b30..28a1e54069 100644 --- a/Marlin/src/module/stepper_indirection.h +++ b/Marlin/src/module/stepper_indirection.h @@ -482,11 +482,48 @@ void reset_stepper_drivers(); // Called by settings.load / settings.reset #define E4_STEP_WRITE(STATE) WRITE(E4_STEP_PIN,STATE) #define E4_STEP_READ READ(E4_STEP_PIN) +// E5 Stepper +#if AXIS_DRIVER_TYPE(E5, L6470) + extern L6470 stepperE5; + #define E5_ENABLE_INIT NOOP + #define E5_ENABLE_WRITE(STATE) do{ if (STATE) stepperE5.Step_Clock(stepperE5.getStatus() & STATUS_HIZ); else stepperE5.softFree(); }while(0) + #define E5_ENABLE_READ (stepperE5.getStatus() & STATUS_HIZ) + #define E5_DIR_INIT NOOP + #define E5_DIR_WRITE(STATE) stepperE5.Step_Clock(STATE) + #define E5_DIR_READ (stepperE5.getStatus() & STATUS_DIR) +#else + #if AXIS_DRIVER_TYPE(E5, TMC26X) + extern TMC26XStepper stepperE5; + #define E5_ENABLE_INIT NOOP + #define E5_ENABLE_WRITE(STATE) stepperE5.setEnabled(STATE) + #define E5_ENABLE_READ stepperE5.isEnabled() + #else + #if AXIS_DRIVER_TYPE(E5, TMC2130) + extern TMC2130Stepper stepperE5; + #elif AXIS_DRIVER_TYPE(E5, TMC2208) + extern TMC2208Stepper stepperE5; + #endif + #define E5_ENABLE_INIT SET_OUTPUT(E5_ENABLE_PIN) + #define E5_ENABLE_WRITE(STATE) WRITE(E5_ENABLE_PIN,STATE) + #define E5_ENABLE_READ READ(E5_ENABLE_PIN) + #endif + #define E5_DIR_INIT SET_OUTPUT(E5_DIR_PIN) + #define E5_DIR_WRITE(STATE) WRITE(E5_DIR_PIN,STATE) + #define E5_DIR_READ READ(E5_DIR_PIN) +#endif +#define E5_STEP_INIT SET_OUTPUT(E5_STEP_PIN) +#define E5_STEP_WRITE(STATE) WRITE(E5_STEP_PIN,STATE) +#define E5_STEP_READ READ(E5_STEP_PIN) + /** * Extruder indirection for the single E axis */ #if ENABLED(SWITCHING_EXTRUDER) // One stepper driver per two extruders, reversed on odd index - #if EXTRUDERS > 4 + #if EXTRUDERS > 5 + #define E_STEP_WRITE(E,V) do{ if (E < 2) { E0_STEP_WRITE(V); } else if (E < 4) { E1_STEP_WRITE(V); } else { E2_STEP_WRITE(V); } }while(0) + #define NORM_E_DIR(E) do{ switch (E) { case 0: E0_DIR_WRITE(!INVERT_E0_DIR); break; case 1: E0_DIR_WRITE( INVERT_E0_DIR); break; case 2: E1_DIR_WRITE(!INVERT_E1_DIR); break; case 3: E1_DIR_WRITE( INVERT_E1_DIR); break; case 4: E2_DIR_WRITE(!INVERT_E2_DIR); case 5: E2_DIR_WRITE( INVERT_E2_DIR); } }while(0) + #define REV_E_DIR(E) do{ switch (E) { case 0: E0_DIR_WRITE( INVERT_E0_DIR); break; case 1: E0_DIR_WRITE(!INVERT_E0_DIR); break; case 2: E1_DIR_WRITE( INVERT_E1_DIR); break; case 3: E1_DIR_WRITE(!INVERT_E1_DIR); break; case 4: E2_DIR_WRITE( INVERT_E2_DIR); case 5: E2_DIR_WRITE(!INVERT_E2_DIR); } }while(0) + #elif EXTRUDERS > 4 #define E_STEP_WRITE(E,V) do{ if (E < 2) { E0_STEP_WRITE(V); } else if (E < 4) { E1_STEP_WRITE(V); } else { E2_STEP_WRITE(V); } }while(0) #define NORM_E_DIR(E) do{ switch (E) { case 0: E0_DIR_WRITE(!INVERT_E0_DIR); break; case 1: E0_DIR_WRITE( INVERT_E0_DIR); break; case 2: E1_DIR_WRITE(!INVERT_E1_DIR); break; case 3: E1_DIR_WRITE( INVERT_E1_DIR); break; case 4: E2_DIR_WRITE(!INVERT_E2_DIR); } }while(0) #define REV_E_DIR(E) do{ switch (E) { case 0: E0_DIR_WRITE( INVERT_E0_DIR); break; case 1: E0_DIR_WRITE(!INVERT_E0_DIR); break; case 2: E1_DIR_WRITE( INVERT_E1_DIR); break; case 3: E1_DIR_WRITE(!INVERT_E1_DIR); break; case 4: E2_DIR_WRITE( INVERT_E2_DIR); } }while(0) @@ -507,6 +544,10 @@ void reset_stepper_drivers(); // Called by settings.load / settings.reset #define E_STEP_WRITE(E,V) E0_STEP_WRITE(V) #define NORM_E_DIR(E) do{ E0_DIR_WRITE(TEST(E, 0) ? !INVERT_E0_DIR: INVERT_E0_DIR); }while(0) #define REV_E_DIR(E) do{ E0_DIR_WRITE(TEST(E, 0) ? INVERT_E0_DIR: !INVERT_E0_DIR); }while(0) +#elif E_STEPPERS > 5 + #define E_STEP_WRITE(E,V) do{ switch (E) { case 0: E0_STEP_WRITE(V); break; case 1: E1_STEP_WRITE(V); break; case 2: E2_STEP_WRITE(V); break; case 3: E3_STEP_WRITE(V); break; case 4: E4_STEP_WRITE(V); case 5: E5_STEP_WRITE(V); } }while(0) + #define NORM_E_DIR(E) do{ switch (E) { case 0: E0_DIR_WRITE(!INVERT_E0_DIR); break; case 1: E1_DIR_WRITE(!INVERT_E1_DIR); break; case 2: E2_DIR_WRITE(!INVERT_E2_DIR); break; case 3: E3_DIR_WRITE(!INVERT_E3_DIR); break; case 4: E4_DIR_WRITE(!INVERT_E4_DIR); case 5: E5_DIR_WRITE(!INVERT_E5_DIR); } }while(0) + #define REV_E_DIR(E) do{ switch (E) { case 0: E0_DIR_WRITE( INVERT_E0_DIR); break; case 1: E1_DIR_WRITE( INVERT_E1_DIR); break; case 2: E2_DIR_WRITE( INVERT_E2_DIR); break; case 3: E3_DIR_WRITE( INVERT_E3_DIR); break; case 4: E4_DIR_WRITE( INVERT_E4_DIR); case 5: E5_DIR_WRITE( INVERT_E5_DIR); } }while(0) #elif E_STEPPERS > 4 #define E_STEP_WRITE(E,V) do{ switch (E) { case 0: E0_STEP_WRITE(V); break; case 1: E1_STEP_WRITE(V); break; case 2: E2_STEP_WRITE(V); break; case 3: E3_STEP_WRITE(V); break; case 4: E4_STEP_WRITE(V); } }while(0) #define NORM_E_DIR(E) do{ switch (E) { case 0: E0_DIR_WRITE(!INVERT_E0_DIR); break; case 1: E1_DIR_WRITE(!INVERT_E1_DIR); break; case 2: E2_DIR_WRITE(!INVERT_E2_DIR); break; case 3: E3_DIR_WRITE(!INVERT_E3_DIR); break; case 4: E4_DIR_WRITE(!INVERT_E4_DIR); } }while(0) diff --git a/Marlin/src/module/temperature.cpp b/Marlin/src/module/temperature.cpp index 67c30d0c05..6a91f8a1b9 100644 --- a/Marlin/src/module/temperature.cpp +++ b/Marlin/src/module/temperature.cpp @@ -74,6 +74,7 @@ Temperature thermalManager; (HOTENDS > 2 && (E) == 2) ? PSTR(MSG_E3 " " MSG) : \ (HOTENDS > 3 && (E) == 3) ? PSTR(MSG_E4 " " MSG) : \ (HOTENDS > 4 && (E) == 4) ? PSTR(MSG_E5 " " MSG) : \ + (HOTENDS > 5 && (E) == 5) ? PSTR(MSG_E6 " " MSG) : \ PSTR(MSG_E1 " " MSG) #else #define TEMP_ERR_PSTR(MSG, E) \ @@ -81,6 +82,7 @@ Temperature thermalManager; (HOTENDS > 2 && (E) == 2) ? PSTR(MSG_E3 " " MSG) : \ (HOTENDS > 3 && (E) == 3) ? PSTR(MSG_E4 " " MSG) : \ (HOTENDS > 4 && (E) == 4) ? PSTR(MSG_E5 " " MSG) : \ + (HOTENDS > 5 && (E) == 5) ? PSTR(MSG_E6 " " MSG) : \ PSTR(MSG_E1 " " MSG) #endif @@ -149,7 +151,7 @@ int16_t Temperature::current_temperature_raw[HOTENDS] = { 0 }, #endif #if ENABLED(BABYSTEPPING) - volatile int Temperature::babystepsTodo[XYZ] = { 0 }; + volatile int16_t Temperature::babystepsTodo[XYZ] = { 0 }; #endif #if WATCH_HOTENDS @@ -527,13 +529,14 @@ int Temperature::getHeaterPower(const int heater) { #if HAS_AUTO_FAN void Temperature::checkExtruderAutoFans() { - static const pin_t fanPin[] PROGMEM = { E0_AUTO_FAN_PIN, E1_AUTO_FAN_PIN, E2_AUTO_FAN_PIN, E3_AUTO_FAN_PIN, E4_AUTO_FAN_PIN, CHAMBER_AUTO_FAN_PIN }; + static const pin_t fanPin[] PROGMEM = { E0_AUTO_FAN_PIN, E1_AUTO_FAN_PIN, E2_AUTO_FAN_PIN, E3_AUTO_FAN_PIN, E4_AUTO_FAN_PIN, E5_AUTO_FAN_PIN, CHAMBER_AUTO_FAN_PIN }; static const uint8_t fanBit[] PROGMEM = { 0, AUTO_1_IS_0 ? 0 : 1, AUTO_2_IS_0 ? 0 : AUTO_2_IS_1 ? 1 : 2, AUTO_3_IS_0 ? 0 : AUTO_3_IS_1 ? 1 : AUTO_3_IS_2 ? 2 : 3, - AUTO_4_IS_0 ? 0 : AUTO_4_IS_1 ? 1 : AUTO_4_IS_2 ? 2 : AUTO_4_IS_3 ? 3 : 4, + AUTO_4_IS_0 ? 0 : AUTO_4_IS_1 ? 1 : AUTO_4_IS_2 ? 2 : AUTO_4_IS_3 ? 3 : 4, + AUTO_5_IS_0 ? 0 : AUTO_5_IS_1 ? 1 : AUTO_5_IS_2 ? 2 : AUTO_5_IS_3 ? 3 : AUTO_5_IS_4 ? 4 : 5, AUTO_CHAMBER_IS_0 ? 0 : AUTO_CHAMBER_IS_1 ? 1 : AUTO_CHAMBER_IS_2 ? 2 : AUTO_CHAMBER_IS_3 ? 3 : AUTO_CHAMBER_IS_4 ? 4 : 5 }; uint8_t fanState = 0; @@ -1193,6 +1196,9 @@ void Temperature::init() { #if HAS_TEMP_ADC_4 HAL_ANALOG_SELECT(TEMP_4_PIN); #endif + #if HAS_TEMP_ADC_5 + HAL_ANALOG_SELECT(TEMP_5_PIN); + #endif #if HAS_HEATED_BED HAL_ANALOG_SELECT(TEMP_BED_PIN); #endif @@ -1226,7 +1232,7 @@ void Temperature::init() { SET_OUTPUT(E1_AUTO_FAN_PIN); #endif #endif - #if HAS_AUTO_FAN_2 && !AUTO_2_IS_0 && !AUTO_2_IS_1 + #if HAS_AUTO_FAN_2 && !(AUTO_2_IS_0 || AUTO_2_IS_1) #if E2_AUTO_FAN_PIN == FAN1_PIN SET_OUTPUT(E2_AUTO_FAN_PIN); #if ENABLED(FAST_PWM_FAN) @@ -1236,7 +1242,7 @@ void Temperature::init() { SET_OUTPUT(E2_AUTO_FAN_PIN); #endif #endif - #if HAS_AUTO_FAN_3 && !AUTO_3_IS_0 && !AUTO_3_IS_1 && !AUTO_3_IS_2 + #if HAS_AUTO_FAN_3 && !(AUTO_3_IS_0 || AUTO_3_IS_1 || AUTO_3_IS_2) #if E3_AUTO_FAN_PIN == FAN1_PIN SET_OUTPUT(E3_AUTO_FAN_PIN); #if ENABLED(FAST_PWM_FAN) @@ -1246,7 +1252,7 @@ void Temperature::init() { SET_OUTPUT(E3_AUTO_FAN_PIN); #endif #endif - #if HAS_AUTO_FAN_4 && !AUTO_4_IS_0 && !AUTO_4_IS_1 && !AUTO_4_IS_2 && !AUTO_4_IS_3 + #if HAS_AUTO_FAN_4 && !(AUTO_4_IS_0 || AUTO_4_IS_1 || AUTO_4_IS_2 || AUTO_4_IS_3) #if E4_AUTO_FAN_PIN == FAN1_PIN SET_OUTPUT(E4_AUTO_FAN_PIN); #if ENABLED(FAST_PWM_FAN) @@ -1256,7 +1262,17 @@ void Temperature::init() { SET_OUTPUT(E4_AUTO_FAN_PIN); #endif #endif - #if HAS_AUTO_CHAMBER_FAN && !AUTO_CHAMBER_IS_0 && !AUTO_CHAMBER_IS_1 && !AUTO_CHAMBER_IS_2 && !AUTO_CHAMBER_IS_3 && ! AUTO_CHAMBER_IS_4 + #if HAS_AUTO_FAN_5 && !(AUTO_5_IS_0 || AUTO_5_IS_1 || AUTO_5_IS_2 || AUTO_5_IS_3 || AUTO_5_IS_4) + #if E5_AUTO_FAN_PIN == FAN1_PIN + SET_OUTPUT(E5_AUTO_FAN_PIN); + #if ENABLED(FAST_PWM_FAN) + setPwmFrequency(E5_AUTO_FAN_PIN, 1); // No prescaling. Pwm frequency = F_CPU/256/8 + #endif + #else + SET_OUTPUT(E5_AUTO_FAN_PIN); + #endif + #endif + #if HAS_AUTO_CHAMBER_FAN && !(AUTO_CHAMBER_IS_0 || AUTO_CHAMBER_IS_1 || AUTO_CHAMBER_IS_2 || AUTO_CHAMBER_IS_3 || AUTO_CHAMBER_IS_4 || AUTO_CHAMBER_IS_5) #if CHAMBER_AUTO_FAN_PIN == FAN1_PIN SET_OUTPUT(CHAMBER_AUTO_FAN_PIN); #if ENABLED(FAST_PWM_FAN) @@ -1321,6 +1337,14 @@ void Temperature::init() { #ifdef HEATER_4_MAXTEMP TEMP_MAX_ROUTINE(4); #endif + #if HOTENDS > 5 + #ifdef HEATER_5_MINTEMP + TEMP_MIN_ROUTINE(5); + #endif + #ifdef HEATER_5_MAXTEMP + TEMP_MAX_ROUTINE(5); + #endif + #endif // HOTENDS > 5 #endif // HOTENDS > 4 #endif // HOTENDS > 3 #endif // HOTENDS > 2 @@ -1539,6 +1563,9 @@ void Temperature::disable_all_heaters() { DISABLE_HEATER(3); #if HOTENDS > 4 DISABLE_HEATER(4); + #if HOTENDS > 5 + DISABLE_HEATER(5); + #endif // HOTENDS > 5 #endif // HOTENDS > 4 #endif // HOTENDS > 3 #endif // HOTENDS > 2 @@ -1665,10 +1692,13 @@ void Temperature::set_current_temp_raw() { current_temperature_raw[3] = raw_temp_value[3]; #if HAS_TEMP_ADC_4 current_temperature_raw[4] = raw_temp_value[4]; - #endif - #endif - #endif - #endif + #if HAS_TEMP_ADC_5 + current_temperature_raw[5] = raw_temp_value[5]; + #endif // HAS_TEMP_ADC_5 + #endif // HAS_TEMP_ADC_4 + #endif // HAS_TEMP_ADC_3 + #endif // HAS_TEMP_ADC_2 + #endif // HAS_TEMP_ADC_1 #if HAS_HEATED_BED current_temperature_bed_raw = raw_temp_bed_value; @@ -1718,6 +1748,9 @@ void Temperature::readings_ready() { , TEMPDIR(3) #if HOTENDS > 4 , TEMPDIR(4) + #if HOTENDS > 5 + , TEMPDIR(5) + #endif // HOTENDS > 5 #endif // HOTENDS > 4 #endif // HOTENDS > 3 #endif // HOTENDS > 2 @@ -1815,6 +1848,9 @@ void Temperature::isr() { ISR_STATICS(3); #if HOTENDS > 4 ISR_STATICS(4); + #if HOTENDS > 5 + ISR_STATICS(5); + #endif // HOTENDS > 5 #endif // HOTENDS > 4 #endif // HOTENDS > 3 #endif // HOTENDS > 2 @@ -1851,6 +1887,10 @@ void Temperature::isr() { #if HOTENDS > 4 soft_pwm_count_4 = (soft_pwm_count_4 & pwm_mask) + soft_pwm_amount[4]; WRITE_HEATER_4(soft_pwm_count_4 > pwm_mask ? HIGH : LOW); + #if HOTENDS > 5 + soft_pwm_count_5 = (soft_pwm_count_5 & pwm_mask) + soft_pwm_amount[5]; + WRITE_HEATER_5(soft_pwm_count_5 > pwm_mask ? HIGH : LOW); + #endif // HOTENDS > 5 #endif // HOTENDS > 4 #endif // HOTENDS > 3 #endif // HOTENDS > 2 @@ -1886,6 +1926,9 @@ void Temperature::isr() { if (soft_pwm_count_3 <= pwm_count_tmp) WRITE_HEATER_3(LOW); #if HOTENDS > 4 if (soft_pwm_count_4 <= pwm_count_tmp) WRITE_HEATER_4(LOW); + #if HOTENDS > 5 + if (soft_pwm_count_5 <= pwm_count_tmp) WRITE_HEATER_5(LOW); + #endif // HOTENDS > 5 #endif // HOTENDS > 4 #endif // HOTENDS > 3 #endif // HOTENDS > 2 @@ -1968,6 +2011,9 @@ void Temperature::isr() { SLOW_PWM_ROUTINE(3); #if HOTENDS > 4 SLOW_PWM_ROUTINE(4); + #if HOTENDS > 5 + SLOW_PWM_ROUTINE(5); + #endif // HOTENDS > 5 #endif // HOTENDS > 4 #endif // HOTENDS > 3 #endif // HOTENDS > 2 @@ -1987,6 +2033,9 @@ void Temperature::isr() { PWM_OFF_ROUTINE(3); #if HOTENDS > 4 PWM_OFF_ROUTINE(4); + #if HOTENDS > 5 + PWM_OFF_ROUTINE(5); + #endif // HOTENDS > 5 #endif // HOTENDS > 4 #endif // HOTENDS > 3 #endif // HOTENDS > 2 @@ -2047,6 +2096,9 @@ void Temperature::isr() { if (state_timer_heater_3 > 0) state_timer_heater_3--; #if HOTENDS > 4 if (state_timer_heater_4 > 0) state_timer_heater_4--; + #if HOTENDS > 5 + if (state_timer_heater_5 > 0) state_timer_heater_5--; + #endif // HOTENDS > 5 #endif // HOTENDS > 4 #endif // HOTENDS > 3 #endif // HOTENDS > 2 @@ -2169,6 +2221,15 @@ void Temperature::isr() { break; #endif + #if HAS_TEMP_ADC_5 + case PrepareTemp_5: + HAL_START_ADC(TEMP_5_PIN); + break; + case MeasureTemp_5: + ACCUMULATE_ADC(raw_temp_value[5]); + break; + #endif + #if ENABLED(FILAMENT_WIDTH_SENSOR) case Prepare_FILWIDTH: HAL_START_ADC(FILWIDTH_PIN); @@ -2218,7 +2279,7 @@ void Temperature::isr() { #if ENABLED(BABYSTEPPING) LOOP_XYZ(axis) { - const int curTodo = babystepsTodo[axis]; // get rid of volatile for performance + const int16_t curTodo = babystepsTodo[axis]; // get rid of volatile for performance if (curTodo) { stepper.babystep((AxisEnum)axis, curTodo > 0); if (curTodo > 0) babystepsTodo[axis]--; diff --git a/Marlin/src/module/temperature.h b/Marlin/src/module/temperature.h index e8b80f97b5..f91de03b57 100644 --- a/Marlin/src/module/temperature.h +++ b/Marlin/src/module/temperature.h @@ -163,7 +163,7 @@ class Temperature { #endif #if ENABLED(BABYSTEPPING) - static volatile int babystepsTodo[3]; + static volatile int16_t babystepsTodo[3]; #endif #if ENABLED(PREVENT_COLD_EXTRUSION) diff --git a/Marlin/src/pins/pins.h b/Marlin/src/pins/pins.h index 279c13a130..03d336baa5 100644 --- a/Marlin/src/pins/pins.h +++ b/Marlin/src/pins/pins.h @@ -468,6 +468,15 @@ #ifndef E4_MS3_PIN #define E4_MS3_PIN -1 #endif +#ifndef E5_MS1_PIN + #define E5_MS1_PIN -1 +#endif +#ifndef E5_MS2_PIN + #define E5_MS2_PIN -1 +#endif +#ifndef E5_MS3_PIN + #define E5_MS3_PIN -1 +#endif #ifndef E0_STEP_PIN #define E0_STEP_PIN -1 @@ -514,6 +523,15 @@ #ifndef E4_ENABLE_PIN #define E4_ENABLE_PIN -1 #endif +#ifndef E5_STEP_PIN + #define E5_STEP_PIN -1 +#endif +#ifndef E5_DIR_PIN + #define E5_DIR_PIN -1 +#endif +#ifndef E5_ENABLE_PIN + #define E5_ENABLE_PIN -1 +#endif #ifndef X_CS_PIN #define X_CS_PIN -1 @@ -539,6 +557,9 @@ #ifndef E4_CS_PIN #define E4_CS_PIN -1 #endif +#ifndef E5_CS_PIN + #define E5_CS_PIN -1 +#endif #ifndef FAN_PIN #define FAN_PIN -1 @@ -578,6 +599,9 @@ #ifndef HEATER_4_PIN #define HEATER_4_PIN -1 #endif +#ifndef HEATER_5_PIN + #define HEATER_5_PIN -1 +#endif #ifndef HEATER_BED_PIN #define HEATER_BED_PIN -1 #endif @@ -597,6 +621,9 @@ #ifndef TEMP_4_PIN #define TEMP_4_PIN -1 #endif +#ifndef TEMP_5_PIN + #define TEMP_5_PIN -1 +#endif #ifndef TEMP_BED_PIN #define TEMP_BED_PIN -1 #endif @@ -669,6 +696,13 @@ #define E4_AUTO_FAN_PIN -1 #endif #endif +#ifndef E5_AUTO_FAN_PIN + #ifdef ORIG_E5_AUTO_FAN_PIN + #define E5_AUTO_FAN_PIN ORIG_E5_AUTO_FAN_PIN + #else + #define E5_AUTO_FAN_PIN -1 + #endif +#endif #ifndef CHAMBER_AUTO_FAN_PIN #ifdef ORIG_CHAMBER_AUTO_FAN_PIN #define CHAMBER_AUTO_FAN_PIN ORIG_CHAMBER_AUTO_FAN_PIN @@ -683,6 +717,7 @@ #define _E2_PINS #define _E3_PINS #define _E4_PINS +#define _E5_PINS #if ENABLED(SWITCHING_EXTRUDER) // Tools 0 and 1 use E0 @@ -706,6 +741,10 @@ #if EXTRUDERS > 4 #undef _E4_PINS #define _E4_PINS E4_STEP_PIN, E4_DIR_PIN, E4_ENABLE_PIN, E4_MS1_PIN, E4_MS2_PIN, E4_MS3_PIN, E4_CS_PIN, + #if EXTRUDERS > 5 + #undef _E5_PINS + #define _E5_PINS E5_STEP_PIN, E5_DIR_PIN, E5_ENABLE_PIN, E5_MS1_PIN, E5_MS2_PIN, E5_MS3_PIN, E5_CS_PIN, + #endif // EXTRUDERS > 5 #endif // EXTRUDERS > 4 #endif // EXTRUDERS > 3 #endif // EXTRUDERS > 2 @@ -716,6 +755,7 @@ #define _H2_PINS #define _H3_PINS #define _H4_PINS +#define _H5_PINS #if HOTENDS > 1 #undef _H1_PINS @@ -728,7 +768,11 @@ #define _H3_PINS HEATER_3_PIN, E3_AUTO_FAN_PIN, analogInputToDigitalPin(TEMP_3_PIN), #if HOTENDS > 4 #undef _H4_PINS - #define _H4_PINS HEATER_4_PIN, analogInputToDigitalPin(TEMP_4_PIN), + #define _H4_PINS HEATER_4_PIN, E4_AUTO_FAN_PIN, analogInputToDigitalPin(TEMP_4_PIN), + #if HOTENDS > 5 + #undef _H5_PINS + #define _H5_PINS HEATER_5_PIN, E5_AUTO_FAN_PIN, analogInputToDigitalPin(TEMP_5_PIN), + #endif // HOTENDS > 5 #endif // HOTENDS > 4 #endif // HOTENDS > 3 #endif // HOTENDS > 2 @@ -744,6 +788,10 @@ #if MIXING_STEPPERS > 4 #undef _E4_PINS #define _E4_PINS E4_STEP_PIN, E4_DIR_PIN, E4_ENABLE_PIN, E4_MS1_PIN, E4_MS2_PIN, E4_CS_PIN, + #if MIXING_STEPPERS > 5 + #undef _E5_PINS + #define _E5_PINS E5_STEP_PIN, E5_DIR_PIN, E5_ENABLE_PIN, E5_MS1_PIN, E5_MS2_PIN, E5_CS_PIN, + #endif // MIXING_STEPPERS > 5 #endif // MIXING_STEPPERS > 4 #endif // MIXING_STEPPERS > 3 #endif // MIXING_STEPPERS > 2 @@ -856,7 +904,7 @@ #ifndef X2_CS_PIN #define X2_CS_PIN _EPIN(E_STEPPERS, CS) #endif - #if E_STEPPERS > 4 || !PIN_EXISTS(X2_ENABLE) + #if E_STEPPERS > MAX_EXTRUDERS || !PIN_EXISTS(X2_ENABLE) #error "No E stepper plug left for X2!" #endif #endif @@ -881,7 +929,7 @@ #ifndef Y2_CS_PIN #define Y2_CS_PIN _EPIN(Y2_E_INDEX, CS) #endif - #if Y2_E_INDEX > 4 || !PIN_EXISTS(Y2_ENABLE) + #if Y2_E_INDEX > MAX_EXTRUDERS || !PIN_EXISTS(Y2_ENABLE) #error "No E stepper plug left for Y2!" #endif #endif @@ -906,7 +954,7 @@ #ifndef Z2_CS_PIN #define Z2_CS_PIN _EPIN(Z2_E_INDEX, CS) #endif - #if Z2_E_INDEX > 4 || !PIN_EXISTS(Z2_ENABLE) + #if Z2_E_INDEX > MAX_EXTRUDERS || !PIN_EXISTS(Z2_ENABLE) #error "No E stepper plug left for Z2!" #endif #endif @@ -952,8 +1000,8 @@ Y_STEP_PIN, Y_DIR_PIN, Y_ENABLE_PIN, Y_MIN_PIN, Y_MAX_PIN, Y_MS1_PIN, Y_MS2_PIN, Y_CS_PIN, \ Z_STEP_PIN, Z_DIR_PIN, Z_ENABLE_PIN, Z_MIN_PIN, Z_MAX_PIN, Z_MS1_PIN, Z_MS2_PIN, Z_MS3_PIN, Z_CS_PIN, Z_MIN_PROBE_PIN, \ PS_ON_PIN, HEATER_BED_PIN, FAN_PIN, FAN1_PIN, FAN2_PIN, CONTROLLER_FAN_PIN, \ - _E0_PINS _E1_PINS _E2_PINS _E3_PINS _E4_PINS BED_PINS \ - _H0_PINS _H1_PINS _H2_PINS _H3_PINS _H4_PINS \ + _E0_PINS _E1_PINS _E2_PINS _E3_PINS _E4_PINS _E5_PINS BED_PINS \ + _H0_PINS _H1_PINS _H2_PINS _H3_PINS _H4_PINS _H5_PINS \ _X2_PINS _Y2_PINS _Z2_PINS _Z3_PINS \ HAL_SENSITIVE_PINS \ } diff --git a/Marlin/src/pins/pinsDebug_list.h b/Marlin/src/pins/pinsDebug_list.h index a2eb5ac436..ab18338616 100644 --- a/Marlin/src/pins/pinsDebug_list.h +++ b/Marlin/src/pins/pinsDebug_list.h @@ -361,6 +361,30 @@ #if PIN_EXISTS(E4_STEP) REPORT_NAME_DIGITAL(__LINE__, E4_STEP_PIN) #endif +#if PIN_EXISTS(E5_AUTO_FAN) + REPORT_NAME_DIGITAL(__LINE__, E5_AUTO_FAN_PIN) +#endif +#if PIN_EXISTS(E5_CS) + REPORT_NAME_DIGITAL(__LINE__, E5_CS_PIN) +#endif +#if PIN_EXISTS(E5_DIR) + REPORT_NAME_DIGITAL(__LINE__, E5_DIR_PIN) +#endif +#if PIN_EXISTS(E5_ENABLE) + REPORT_NAME_DIGITAL(__LINE__, E5_ENABLE_PIN) +#endif +#if PIN_EXISTS(E5_MS1) + REPORT_NAME_DIGITAL(__LINE__, E5_MS1_PIN) +#endif +#if PIN_EXISTS(E5_MS2) + REPORT_NAME_DIGITAL(__LINE__, E5_MS2_PIN) +#endif +#if PIN_EXISTS(E5_MS3) + REPORT_NAME_DIGITAL(__LINE__, E5_MS3_PIN) +#endif +#if PIN_EXISTS(E5_STEP) + REPORT_NAME_DIGITAL(__LINE__, E5_STEP_PIN) +#endif #if defined(ENET_CRS) && ENET_CRS >= 0 REPORT_NAME_DIGITAL(__LINE__, ENET_CRS) #endif @@ -578,6 +602,9 @@ #if PIN_EXISTS(ORIG_E4_AUTO_FAN) REPORT_NAME_DIGITAL(__LINE__, ORIG_E4_AUTO_FAN_PIN) #endif +#if PIN_EXISTS(ORIG_E5_AUTO_FAN) + REPORT_NAME_DIGITAL(__LINE__, ORIG_E5_AUTO_FAN_PIN) +#endif #if PIN_EXISTS(PHOTOGRAPH) REPORT_NAME_DIGITAL(__LINE__, PHOTOGRAPH_PIN) #endif @@ -689,6 +716,9 @@ #if PIN_EXISTS(SOL4) REPORT_NAME_DIGITAL(__LINE__, SOL4_PIN) #endif +#if PIN_EXISTS(SOL5) + REPORT_NAME_DIGITAL(__LINE__, SOL5_PIN) +#endif #if defined(SPARE_IO) && SPARE_IO >= 0 REPORT_NAME_DIGITAL(__LINE__, SPARE_IO) #endif @@ -1043,3 +1073,9 @@ #if PIN_EXISTS(E4_SERIAL_RX) REPORT_NAME_DIGITAL(__LINE__, E4_SERIAL_RX_PIN) #endif +#if PIN_EXISTS(E5_SERIAL_TX) + REPORT_NAME_DIGITAL(__LINE__, E5_SERIAL_TX_PIN) +#endif +#if PIN_EXISTS(E5_SERIAL_RX) + REPORT_NAME_DIGITAL(__LINE__, E5_SERIAL_RX_PIN) +#endif