Преглед на файлове

Code changes supporting up to 6 extruders

Scott Lahteine преди 6 години
родител
ревизия
1718eff54a
променени са 52 файла, в които са добавени 848 реда и са изтрити 191 реда
  1. 2
    0
      Marlin/src/HAL/HAL_AVR/SanityCheck.h
  2. 2
    0
      Marlin/src/HAL/HAL_STM32F7/SanityCheck.h
  3. 11
    2
      Marlin/src/Marlin.cpp
  4. 14
    1
      Marlin/src/Marlin.h
  5. 2
    1
      Marlin/src/core/drivers.h
  6. 5
    0
      Marlin/src/core/language.h
  7. 31
    0
      Marlin/src/feature/I2CPositionEncoder.cpp
  8. 6
    3
      Marlin/src/feature/controllerfan.cpp
  9. 6
    3
      Marlin/src/feature/power.cpp
  10. 3
    0
      Marlin/src/feature/runout.cpp
  11. 3
    0
      Marlin/src/feature/runout.h
  12. 8
    0
      Marlin/src/feature/solenoid.cpp
  13. 23
    0
      Marlin/src/feature/tmc_util.cpp
  14. 18
    13
      Marlin/src/feature/tmc_util.h
  15. 2
    2
      Marlin/src/gcode/bedlevel/abl/G29.cpp
  16. 6
    0
      Marlin/src/gcode/feature/trinamic/M906.cpp
  17. 12
    0
      Marlin/src/gcode/feature/trinamic/M911-M915.cpp
  18. 34
    2
      Marlin/src/inc/Conditionals_post.h
  19. 62
    24
      Marlin/src/inc/SanityCheck.h
  20. 1
    0
      Marlin/src/lcd/language/language_an.h
  21. 1
    0
      Marlin/src/lcd/language/language_bg.h
  22. 1
    0
      Marlin/src/lcd/language/language_ca.h
  23. 1
    0
      Marlin/src/lcd/language/language_cz.h
  24. 1
    0
      Marlin/src/lcd/language/language_da.h
  25. 1
    0
      Marlin/src/lcd/language/language_de.h
  26. 6
    0
      Marlin/src/lcd/language/language_en.h
  27. 1
    0
      Marlin/src/lcd/language/language_es.h
  28. 1
    0
      Marlin/src/lcd/language/language_eu.h
  29. 1
    0
      Marlin/src/lcd/language/language_fi.h
  30. 1
    0
      Marlin/src/lcd/language/language_fr.h
  31. 1
    0
      Marlin/src/lcd/language/language_gl.h
  32. 1
    0
      Marlin/src/lcd/language/language_hr.h
  33. 1
    0
      Marlin/src/lcd/language/language_it.h
  34. 1
    0
      Marlin/src/lcd/language/language_nl.h
  35. 1
    0
      Marlin/src/lcd/language/language_pl.h
  36. 1
    0
      Marlin/src/lcd/language/language_pt-br.h
  37. 1
    0
      Marlin/src/lcd/language/language_pt.h
  38. 1
    0
      Marlin/src/lcd/language/language_ru.h
  39. 1
    0
      Marlin/src/lcd/language/language_sk.h
  40. 2
    1
      Marlin/src/lcd/language/language_tr.h
  41. 1
    0
      Marlin/src/lcd/language/language_uk.h
  42. 1
    0
      Marlin/src/lcd/language/language_zh_CN.h
  43. 1
    0
      Marlin/src/lcd/language/language_zh_TW.h
  44. 142
    11
      Marlin/src/lcd/ultralcd.cpp
  45. 168
    108
      Marlin/src/module/configuration_store.cpp
  46. 27
    0
      Marlin/src/module/planner.cpp
  47. 25
    0
      Marlin/src/module/stepper.cpp
  48. 42
    1
      Marlin/src/module/stepper_indirection.h
  49. 73
    12
      Marlin/src/module/temperature.cpp
  50. 1
    1
      Marlin/src/module/temperature.h
  51. 54
    6
      Marlin/src/pins/pins.h
  52. 36
    0
      Marlin/src/pins/pinsDebug_list.h

+ 2
- 0
Marlin/src/HAL/HAL_AVR/SanityCheck.h Целия файл

78
       #error "SPINDLE_LASER_PWM_PIN is used by E3_AUTO_FAN_PIN."
78
       #error "SPINDLE_LASER_PWM_PIN is used by E3_AUTO_FAN_PIN."
79
     #elif PIN_EXISTS(E4_AUTO_FAN) && SPINDLE_LASER_PWM_PIN == E4_AUTO_FAN_PIN
79
     #elif PIN_EXISTS(E4_AUTO_FAN) && SPINDLE_LASER_PWM_PIN == E4_AUTO_FAN_PIN
80
       #error "SPINDLE_LASER_PWM_PIN is used by E4_AUTO_FAN_PIN."
80
       #error "SPINDLE_LASER_PWM_PIN is used by E4_AUTO_FAN_PIN."
81
+    #elif PIN_EXISTS(E5_AUTO_FAN) && SPINDLE_LASER_PWM_PIN == E5_AUTO_FAN_PIN
82
+      #error "SPINDLE_LASER_PWM_PIN is used by E5_AUTO_FAN_PIN."
81
     #elif PIN_EXISTS(FAN) && SPINDLE_LASER_PWM_PIN == FAN_PIN
83
     #elif PIN_EXISTS(FAN) && SPINDLE_LASER_PWM_PIN == FAN_PIN
82
       #error "SPINDLE_LASER_PWM_PIN is used FAN_PIN."
84
       #error "SPINDLE_LASER_PWM_PIN is used FAN_PIN."
83
     #elif PIN_EXISTS(FAN1) && SPINDLE_LASER_PWM_PIN == FAN1_PIN
85
     #elif PIN_EXISTS(FAN1) && SPINDLE_LASER_PWM_PIN == FAN1_PIN

+ 2
- 0
Marlin/src/HAL/HAL_STM32F7/SanityCheck.h Целия файл

53
       #error "SPINDLE_LASER_PWM_PIN is used by E3_AUTO_FAN_PIN."
53
       #error "SPINDLE_LASER_PWM_PIN is used by E3_AUTO_FAN_PIN."
54
     #elif PIN_EXISTS(E4_AUTO_FAN) && SPINDLE_LASER_PWM_PIN == E4_AUTO_FAN_PIN
54
     #elif PIN_EXISTS(E4_AUTO_FAN) && SPINDLE_LASER_PWM_PIN == E4_AUTO_FAN_PIN
55
       #error "SPINDLE_LASER_PWM_PIN is used by E4_AUTO_FAN_PIN."
55
       #error "SPINDLE_LASER_PWM_PIN is used by E4_AUTO_FAN_PIN."
56
+    #elif PIN_EXISTS(E5_AUTO_FAN) && SPINDLE_LASER_PWM_PIN == E5_AUTO_FAN_PIN
57
+      #error "SPINDLE_LASER_PWM_PIN is used by E5_AUTO_FAN_PIN."
56
     #elif PIN_EXISTS(FAN) && SPINDLE_LASER_PWM_PIN == FAN_PIN
58
     #elif PIN_EXISTS(FAN) && SPINDLE_LASER_PWM_PIN == FAN_PIN
57
       #error "SPINDLE_LASER_PWM_PIN is used FAN_PIN."
59
       #error "SPINDLE_LASER_PWM_PIN is used FAN_PIN."
58
     #elif PIN_EXISTS(FAN1) && SPINDLE_LASER_PWM_PIN == FAN1_PIN
60
     #elif PIN_EXISTS(FAN1) && SPINDLE_LASER_PWM_PIN == FAN1_PIN

+ 11
- 2
Marlin/src/Marlin.cpp Целия файл

290
   enable_E2();
290
   enable_E2();
291
   enable_E3();
291
   enable_E3();
292
   enable_E4();
292
   enable_E4();
293
+  enable_E5();
293
 }
294
 }
294
 
295
 
295
 void disable_e_steppers() {
296
 void disable_e_steppers() {
298
   disable_E2();
299
   disable_E2();
299
   disable_E3();
300
   disable_E3();
300
   disable_E4();
301
   disable_E4();
302
+  disable_E5();
301
 }
303
 }
302
 
304
 
303
 void disable_e_stepper(const uint8_t e) {
305
 void disable_e_stepper(const uint8_t e) {
307
     case 2: disable_E2(); break;
309
     case 2: disable_E2(); break;
308
     case 3: disable_E3(); break;
310
     case 3: disable_E3(); break;
309
     case 4: disable_E4(); break;
311
     case 4: disable_E4(); break;
312
+    case 5: disable_E5(); break;
310
   }
313
   }
311
 }
314
 }
312
 
315
 
440
           #if E_STEPPERS > 1
443
           #if E_STEPPERS > 1
441
             case 2: case 3: oldstatus = E1_ENABLE_READ; enable_E1(); break;
444
             case 2: case 3: oldstatus = E1_ENABLE_READ; enable_E1(); break;
442
             #if E_STEPPERS > 2
445
             #if E_STEPPERS > 2
443
-              case 4: oldstatus = E2_ENABLE_READ; enable_E2(); break;
446
+              case 4: case 5: oldstatus = E2_ENABLE_READ; enable_E2(); break;
444
             #endif // E_STEPPERS > 2
447
             #endif // E_STEPPERS > 2
445
           #endif // E_STEPPERS > 1
448
           #endif // E_STEPPERS > 1
446
         }
449
         }
456
                 case 3: oldstatus = E3_ENABLE_READ; enable_E3(); break;
459
                 case 3: oldstatus = E3_ENABLE_READ; enable_E3(); break;
457
                 #if E_STEPPERS > 4
460
                 #if E_STEPPERS > 4
458
                   case 4: oldstatus = E4_ENABLE_READ; enable_E4(); break;
461
                   case 4: oldstatus = E4_ENABLE_READ; enable_E4(); break;
462
+                  #if E_STEPPERS > 5
463
+                    case 5: oldstatus = E5_ENABLE_READ; enable_E5(); break;
464
+                  #endif // E_STEPPERS > 5
459
                 #endif // E_STEPPERS > 4
465
                 #endif // E_STEPPERS > 4
460
               #endif // E_STEPPERS > 3
466
               #endif // E_STEPPERS > 3
461
             #endif // E_STEPPERS > 2
467
             #endif // E_STEPPERS > 2
476
           #if E_STEPPERS > 1
482
           #if E_STEPPERS > 1
477
             case 2: case 3: oldstatus = E1_ENABLE_WRITE(oldstatus); break;
483
             case 2: case 3: oldstatus = E1_ENABLE_WRITE(oldstatus); break;
478
             #if E_STEPPERS > 2
484
             #if E_STEPPERS > 2
479
-              case 4: oldstatus = E2_ENABLE_WRITE(oldstatus); break;
485
+              case 4: case 5: oldstatus = E2_ENABLE_WRITE(oldstatus); break;
480
             #endif // E_STEPPERS > 2
486
             #endif // E_STEPPERS > 2
481
           #endif // E_STEPPERS > 1
487
           #endif // E_STEPPERS > 1
482
         }
488
         }
491
                 case 3: E3_ENABLE_WRITE(oldstatus); break;
497
                 case 3: E3_ENABLE_WRITE(oldstatus); break;
492
                 #if E_STEPPERS > 4
498
                 #if E_STEPPERS > 4
493
                   case 4: E4_ENABLE_WRITE(oldstatus); break;
499
                   case 4: E4_ENABLE_WRITE(oldstatus); break;
500
+                  #if E_STEPPERS > 5
501
+                    case 5: E5_ENABLE_WRITE(oldstatus); break;
502
+                  #endif // E_STEPPERS > 5
494
                 #endif // E_STEPPERS > 4
503
                 #endif // E_STEPPERS > 4
495
               #endif // E_STEPPERS > 3
504
               #endif // E_STEPPERS > 3
496
             #endif // E_STEPPERS > 2
505
             #endif // E_STEPPERS > 2

+ 14
- 1
Marlin/src/Marlin.h Целия файл

83
   /**
83
   /**
84
    * Mixing steppers synchronize their enable (and direction) together
84
    * Mixing steppers synchronize their enable (and direction) together
85
    */
85
    */
86
-  #if MIXING_STEPPERS > 4
86
+  #if MIXING_STEPPERS > 5
87
+    #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); }
88
+    #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); }
89
+  #elif MIXING_STEPPERS > 4
87
     #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); }
90
     #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); }
88
     #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); }
91
     #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); }
89
   #elif MIXING_STEPPERS > 3
92
   #elif MIXING_STEPPERS > 3
104
   #define disable_E3() NOOP
107
   #define disable_E3() NOOP
105
   #define  enable_E4() NOOP
108
   #define  enable_E4() NOOP
106
   #define disable_E4() NOOP
109
   #define disable_E4() NOOP
110
+  #define  enable_E5() NOOP
111
+  #define disable_E5() NOOP
107
 
112
 
108
 #else // !MIXING_EXTRUDER
113
 #else // !MIXING_EXTRUDER
109
 
114
 
147
     #define disable_E4() NOOP
152
     #define disable_E4() NOOP
148
   #endif
153
   #endif
149
 
154
 
155
+  #if E_STEPPERS > 5 && HAS_E5_ENABLE
156
+    #define  enable_E5() E5_ENABLE_WRITE( E_ENABLE_ON)
157
+    #define disable_E5() E5_ENABLE_WRITE(!E_ENABLE_ON)
158
+  #else
159
+    #define  enable_E5() NOOP
160
+    #define disable_E5() NOOP
161
+  #endif
162
+
150
 #endif // !MIXING_EXTRUDER
163
 #endif // !MIXING_EXTRUDER
151
 
164
 
152
 #if ENABLED(EXPERIMENTAL_I2CBUS)
165
 #if ENABLED(EXPERIMENTAL_I2CBUS)

+ 2
- 1
Marlin/src/core/drivers.h Целия файл

54
 #define AXIS_DRIVER_TYPE_E2(T) (E_STEPPERS > 2 && _AXIS_DRIVER_TYPE(E2,T))
54
 #define AXIS_DRIVER_TYPE_E2(T) (E_STEPPERS > 2 && _AXIS_DRIVER_TYPE(E2,T))
55
 #define AXIS_DRIVER_TYPE_E3(T) (E_STEPPERS > 3 && _AXIS_DRIVER_TYPE(E3,T))
55
 #define AXIS_DRIVER_TYPE_E3(T) (E_STEPPERS > 3 && _AXIS_DRIVER_TYPE(E3,T))
56
 #define AXIS_DRIVER_TYPE_E4(T) (E_STEPPERS > 4 && _AXIS_DRIVER_TYPE(E4,T))
56
 #define AXIS_DRIVER_TYPE_E4(T) (E_STEPPERS > 4 && _AXIS_DRIVER_TYPE(E4,T))
57
+#define AXIS_DRIVER_TYPE_E5(T) (E_STEPPERS > 5 && _AXIS_DRIVER_TYPE(E5,T))
57
 
58
 
58
 #define AXIS_DRIVER_TYPE(A,T) AXIS_DRIVER_TYPE_##A(T)
59
 #define AXIS_DRIVER_TYPE(A,T) AXIS_DRIVER_TYPE_##A(T)
59
 
60
 
62
                         AXIS_DRIVER_TYPE_Z(T)  || AXIS_DRIVER_TYPE_Z2(T) || AXIS_DRIVER_TYPE_Z3(T) || \
63
                         AXIS_DRIVER_TYPE_Z(T)  || AXIS_DRIVER_TYPE_Z2(T) || AXIS_DRIVER_TYPE_Z3(T) || \
63
                         AXIS_DRIVER_TYPE_E0(T) || AXIS_DRIVER_TYPE_E1(T) || \
64
                         AXIS_DRIVER_TYPE_E0(T) || AXIS_DRIVER_TYPE_E1(T) || \
64
                         AXIS_DRIVER_TYPE_E2(T) || AXIS_DRIVER_TYPE_E3(T) || \
65
                         AXIS_DRIVER_TYPE_E2(T) || AXIS_DRIVER_TYPE_E3(T) || \
65
-                        AXIS_DRIVER_TYPE_E4(T) )
66
+                        AXIS_DRIVER_TYPE_E4(T) || AXIS_DRIVER_TYPE_E5(T) )
66
 
67
 
67
 // Test for supported TMC drivers that require advanced configuration
68
 // Test for supported TMC drivers that require advanced configuration
68
 // Does not match standalone configurations
69
 // Does not match standalone configurations

+ 5
- 0
Marlin/src/core/language.h Целия файл

289
 #define MSG_H3 "3"
289
 #define MSG_H3 "3"
290
 #define MSG_H4 "4"
290
 #define MSG_H4 "4"
291
 #define MSG_H5 "5"
291
 #define MSG_H5 "5"
292
+#define MSG_H6 "6"
292
 #define MSG_N1 " 1"
293
 #define MSG_N1 " 1"
293
 #define MSG_N2 " 2"
294
 #define MSG_N2 " 2"
294
 #define MSG_N3 " 3"
295
 #define MSG_N3 " 3"
295
 #define MSG_N4 " 4"
296
 #define MSG_N4 " 4"
296
 #define MSG_N5 " 5"
297
 #define MSG_N5 " 5"
298
+#define MSG_N6 " 6"
297
 #define MSG_E1 "E1"
299
 #define MSG_E1 "E1"
298
 #define MSG_E2 "E2"
300
 #define MSG_E2 "E2"
299
 #define MSG_E3 "E3"
301
 #define MSG_E3 "E3"
300
 #define MSG_E4 "E4"
302
 #define MSG_E4 "E4"
301
 #define MSG_E5 "E5"
303
 #define MSG_E5 "E5"
304
+#define MSG_E6 "E6"
302
 #define MSG_MOVE_E1 "1"
305
 #define MSG_MOVE_E1 "1"
303
 #define MSG_MOVE_E2 "2"
306
 #define MSG_MOVE_E2 "2"
304
 #define MSG_MOVE_E3 "3"
307
 #define MSG_MOVE_E3 "3"
305
 #define MSG_MOVE_E4 "4"
308
 #define MSG_MOVE_E4 "4"
306
 #define MSG_MOVE_E5 "5"
309
 #define MSG_MOVE_E5 "5"
310
+#define MSG_MOVE_E6 "6"
307
 #define MSG_DIAM_E1 " 1"
311
 #define MSG_DIAM_E1 " 1"
308
 #define MSG_DIAM_E2 " 2"
312
 #define MSG_DIAM_E2 " 2"
309
 #define MSG_DIAM_E3 " 3"
313
 #define MSG_DIAM_E3 " 3"
310
 #define MSG_DIAM_E4 " 4"
314
 #define MSG_DIAM_E4 " 4"
311
 #define MSG_DIAM_E5 " 5"
315
 #define MSG_DIAM_E5 " 5"
316
+#define MSG_DIAM_E6 " 6"
312
 
317
 
313
 #include INCLUDE_LANGUAGE
318
 #include INCLUDE_LANGUAGE
314
 
319
 

+ 31
- 0
Marlin/src/feature/I2CPositionEncoder.cpp Целия файл

646
       encoders[i].set_homed();
646
       encoders[i].set_homed();
647
     #endif
647
     #endif
648
   #endif
648
   #endif
649
+
650
+  #if I2CPE_ENCODER_CNT > 5
651
+    i++;
652
+
653
+    encoders[i].init(I2CPE_ENC_6_ADDR, I2CPE_ENC_6_AXIS);
654
+
655
+    #ifdef I2CPE_ENC_6_TYPE
656
+      encoders[i].set_type(I2CPE_ENC_6_TYPE);
657
+    #endif
658
+    #ifdef I2CPE_ENC_6_TICKS_UNIT
659
+      encoders[i].set_ticks_unit(I2CPE_ENC_6_TICKS_UNIT);
660
+    #endif
661
+    #ifdef I2CPE_ENC_6_TICKS_REV
662
+      encoders[i].set_stepper_ticks(I2CPE_ENC_6_TICKS_REV);
663
+    #endif
664
+    #ifdef I2CPE_ENC_6_INVERT
665
+      encoders[i].set_inverted(I2CPE_ENC_6_INVERT);
666
+    #endif
667
+    #ifdef I2CPE_ENC_6_EC_METHOD
668
+      encoders[i].set_ec_method(I2CPE_ENC_6_EC_METHOD);
669
+    #endif
670
+    #ifdef I2CPE_ENC_6_EC_THRESH
671
+      encoders[i].set_ec_threshold(I2CPE_ENC_6_EC_THRESH);
672
+    #endif
673
+
674
+    encoders[i].set_active(encoders[i].passes_test(true));
675
+
676
+    #if I2CPE_ENC_6_AXIS == E_AXIS
677
+      encoders[i].set_homed();
678
+    #endif
679
+  #endif
649
 }
680
 }
650
 
681
 
651
 void I2CPositionEncodersMgr::report_position(const int8_t idx, const bool units, const bool noOffset) {
682
 void I2CPositionEncodersMgr::report_position(const int8_t idx, const bool units, const bool noOffset) {

+ 6
- 3
Marlin/src/feature/controllerfan.cpp Целия файл

57
         #if E_STEPPERS > 1
57
         #if E_STEPPERS > 1
58
           || E1_ENABLE_READ == E_ENABLE_ON
58
           || E1_ENABLE_READ == E_ENABLE_ON
59
           #if E_STEPPERS > 2
59
           #if E_STEPPERS > 2
60
-              || E2_ENABLE_READ == E_ENABLE_ON
60
+            || E2_ENABLE_READ == E_ENABLE_ON
61
             #if E_STEPPERS > 3
61
             #if E_STEPPERS > 3
62
-                || E3_ENABLE_READ == E_ENABLE_ON
62
+              || E3_ENABLE_READ == E_ENABLE_ON
63
               #if E_STEPPERS > 4
63
               #if E_STEPPERS > 4
64
-                  || E4_ENABLE_READ == E_ENABLE_ON
64
+                || E4_ENABLE_READ == E_ENABLE_ON
65
+                #if E_STEPPERS > 5
66
+                  || E5_ENABLE_READ == E_ENABLE_ON
67
+                #endif
65
               #endif
68
               #endif
66
             #endif
69
             #endif
67
           #endif
70
           #endif

+ 6
- 3
Marlin/src/feature/power.cpp Целия файл

68
       #if E_STEPPERS > 1
68
       #if E_STEPPERS > 1
69
         || E1_ENABLE_READ == E_ENABLE_ON
69
         || E1_ENABLE_READ == E_ENABLE_ON
70
         #if E_STEPPERS > 2
70
         #if E_STEPPERS > 2
71
-            || E2_ENABLE_READ == E_ENABLE_ON
71
+          || E2_ENABLE_READ == E_ENABLE_ON
72
           #if E_STEPPERS > 3
72
           #if E_STEPPERS > 3
73
-              || E3_ENABLE_READ == E_ENABLE_ON
73
+            || E3_ENABLE_READ == E_ENABLE_ON
74
             #if E_STEPPERS > 4
74
             #if E_STEPPERS > 4
75
-                || E4_ENABLE_READ == E_ENABLE_ON
75
+              || E4_ENABLE_READ == E_ENABLE_ON
76
+              #if E_STEPPERS > 5
77
+                || E5_ENABLE_READ == E_ENABLE_ON
78
+              #endif
76
             #endif
79
             #endif
77
           #endif
80
           #endif
78
         #endif
81
         #endif

+ 3
- 0
Marlin/src/feature/runout.cpp Целия файл

54
         INIT_RUNOUT_PIN(FIL_RUNOUT4_PIN);
54
         INIT_RUNOUT_PIN(FIL_RUNOUT4_PIN);
55
         #if NUM_RUNOUT_SENSORS > 4
55
         #if NUM_RUNOUT_SENSORS > 4
56
           INIT_RUNOUT_PIN(FIL_RUNOUT5_PIN);
56
           INIT_RUNOUT_PIN(FIL_RUNOUT5_PIN);
57
+          #if NUM_RUNOUT_SENSORS > 5
58
+            INIT_RUNOUT_PIN(FIL_RUNOUT6_PIN);
59
+          #endif
57
         #endif
60
         #endif
58
       #endif
61
       #endif
59
     #endif
62
     #endif

+ 3
- 0
Marlin/src/feature/runout.h Целия файл

71
               case 3: is_out = READ(FIL_RUNOUT4_PIN) == FIL_RUNOUT_INVERTING; break;
71
               case 3: is_out = READ(FIL_RUNOUT4_PIN) == FIL_RUNOUT_INVERTING; break;
72
               #if NUM_RUNOUT_SENSORS > 4
72
               #if NUM_RUNOUT_SENSORS > 4
73
                 case 4: is_out = READ(FIL_RUNOUT5_PIN) == FIL_RUNOUT_INVERTING; break;
73
                 case 4: is_out = READ(FIL_RUNOUT5_PIN) == FIL_RUNOUT_INVERTING; break;
74
+                #if NUM_RUNOUT_SENSORS > 5
75
+                  case 5: is_out = READ(FIL_RUNOUT6_PIN) == FIL_RUNOUT_INVERTING; break;
76
+                #endif
74
               #endif
77
               #endif
75
             #endif
78
             #endif
76
           #endif
79
           #endif

+ 8
- 0
Marlin/src/feature/solenoid.cpp Целия файл

53
           OUT_WRITE(SOL4_PIN, HIGH);
53
           OUT_WRITE(SOL4_PIN, HIGH);
54
           break;
54
           break;
55
       #endif
55
       #endif
56
+      #if HAS_SOLENOID_5 && EXTRUDERS > 5
57
+        case 5:
58
+          OUT_WRITE(SOL5_PIN, HIGH);
59
+          break;
60
+      #endif
56
     default:
61
     default:
57
       SERIAL_ECHO_START();
62
       SERIAL_ECHO_START();
58
       SERIAL_ECHOLNPGM(MSG_INVALID_SOLENOID);
63
       SERIAL_ECHOLNPGM(MSG_INVALID_SOLENOID);
76
   #if HAS_SOLENOID_4 && EXTRUDERS > 4
81
   #if HAS_SOLENOID_4 && EXTRUDERS > 4
77
     OUT_WRITE(SOL4_PIN, LOW);
82
     OUT_WRITE(SOL4_PIN, LOW);
78
   #endif
83
   #endif
84
+  #if HAS_SOLENOID_5 && EXTRUDERS > 5
85
+    OUT_WRITE(SOL5_PIN, LOW);
86
+  #endif
79
 }
87
 }
80
 
88
 
81
 #endif // EXT_SOLENOID
89
 #endif // EXT_SOLENOID

+ 23
- 0
Marlin/src/feature/tmc_util.cpp Целия файл

213
         static uint8_t e4_otpw_cnt = 0;
213
         static uint8_t e4_otpw_cnt = 0;
214
         monitor_tmc_driver(stepperE4, TMC_E4, e4_otpw_cnt);
214
         monitor_tmc_driver(stepperE4, TMC_E4, e4_otpw_cnt);
215
       #endif
215
       #endif
216
+      #if HAS_HW_COMMS(E5)
217
+        static uint8_t e5_otpw_cnt = 0;
218
+        monitor_tmc_driver(stepperE5, TMC_E5, e5_otpw_cnt);
219
+      #endif
216
 
220
 
217
       if (report_tmc_status) SERIAL_EOL();
221
       if (report_tmc_status) SERIAL_EOL();
218
     }
222
     }
244
             , ext_E3[] PROGMEM = "E3"
248
             , ext_E3[] PROGMEM = "E3"
245
             #if E_STEPPERS > 4
249
             #if E_STEPPERS > 4
246
               , ext_E4[] PROGMEM = "E4"
250
               , ext_E4[] PROGMEM = "E4"
251
+              #if E_STEPPERS > 5
252
+                , ext_E5[] PROGMEM = "E5"
253
+              #endif
247
             #endif
254
             #endif
248
           #endif
255
           #endif
249
         #endif
256
         #endif
274
             , ext_E3
281
             , ext_E3
275
             #if E_STEPPERS > 4
282
             #if E_STEPPERS > 4
276
               , ext_E4
283
               , ext_E4
284
+              #if E_STEPPERS > 5
285
+                , ext_E5
286
+              #endif
277
             #endif
287
             #endif
278
           #endif
288
           #endif
279
         #endif
289
         #endif
532
         #endif
542
         #endif
533
       ]);
543
       ]);
534
     #endif
544
     #endif
545
+    #if AXIS_IS_TMC(E5)
546
+      tmc_status(stepperE5, TMC_E5, i, planner.axis_steps_per_mm[E_AXIS
547
+        #if ENABLED(DISTINCT_E_FACTORS)
548
+          + 5
549
+        #endif
550
+      ]);
551
+    #endif
535
 
552
 
536
     SERIAL_EOL();
553
     SERIAL_EOL();
537
   }
554
   }
576
     #if AXIS_IS_TMC(E4)
593
     #if AXIS_IS_TMC(E4)
577
       tmc_parse_drv_status(stepperE4, TMC_E4, i);
594
       tmc_parse_drv_status(stepperE4, TMC_E4, i);
578
     #endif
595
     #endif
596
+    #if AXIS_IS_TMC(E5)
597
+      tmc_parse_drv_status(stepperE5, TMC_E5, i);
598
+    #endif
579
 
599
 
580
     SERIAL_EOL();
600
     SERIAL_EOL();
581
   }
601
   }
693
     #if AXIS_DRIVER_TYPE(E4, TMC2130)
713
     #if AXIS_DRIVER_TYPE(E4, TMC2130)
694
       SET_CS_PIN(E4);
714
       SET_CS_PIN(E4);
695
     #endif
715
     #endif
716
+    #if AXIS_DRIVER_TYPE(E5, TMC2130)
717
+      SET_CS_PIN(E5);
718
+    #endif
696
   }
719
   }
697
 #endif // TMC2130
720
 #endif // TMC2130
698
 
721
 

+ 18
- 13
Marlin/src/feature/tmc_util.h Целия файл

49
   #if ENABLED(Z_TRIPLE_STEPPER_DRIVERS)
49
   #if ENABLED(Z_TRIPLE_STEPPER_DRIVERS)
50
     , TMC_Z3
50
     , TMC_Z3
51
   #endif
51
   #endif
52
-  , TMC_E0
53
-  #if E_STEPPERS > 1
54
-    , TMC_E1
55
-    #if E_STEPPERS > 2
56
-      , TMC_E2
57
-      #if E_STEPPERS > 3
58
-        , TMC_E3
59
-        #if E_STEPPERS > 4
60
-          , TMC_E4
61
-        #endif
62
-      #endif
63
-    #endif
64
-  #endif
52
+  #if E_STEPPERS
53
+    , TMC_E0
54
+    #if E_STEPPERS > 1
55
+      , TMC_E1
56
+      #if E_STEPPERS > 2
57
+        , TMC_E2
58
+        #if E_STEPPERS > 3
59
+          , TMC_E3
60
+          #if E_STEPPERS > 4
61
+            , TMC_E4
62
+            #if E_STEPPERS > 5
63
+              , TMC_E5
64
+            #endif // E_STEPPERS > 5
65
+          #endif // E_STEPPERS > 4
66
+        #endif // E_STEPPERS > 3
67
+      #endif // E_STEPPERS > 2
68
+    #endif // E_STEPPERS > 1
69
+  #endif // E_STEPPERS
65
 };
70
 };
66
 
71
 
67
 constexpr uint32_t _tmc_thrs(const uint16_t msteps, const int32_t thrs, const uint32_t spmm) {
72
 constexpr uint32_t _tmc_thrs(const uint16_t msteps, const int32_t thrs, const uint32_t spmm) {

+ 2
- 2
Marlin/src/gcode/bedlevel/abl/G29.cpp Целия файл

677
         // Inner loop is Y with PROBE_Y_FIRST enabled
677
         // Inner loop is Y with PROBE_Y_FIRST enabled
678
         for (int8_t PR_INNER_VAR = inStart; PR_INNER_VAR != inStop; PR_INNER_VAR += inInc) {
678
         for (int8_t PR_INNER_VAR = inStart; PR_INNER_VAR != inStop; PR_INNER_VAR += inInc) {
679
 
679
 
680
-          float xBase = left_probe_bed_position + xGridSpacing * xCount,
681
-                yBase = front_probe_bed_position + yGridSpacing * yCount;
680
+          const float xBase = left_probe_bed_position + xGridSpacing * xCount,
681
+                      yBase = front_probe_bed_position + yGridSpacing * yCount;
682
 
682
 
683
           xProbe = FLOOR(xBase + (xBase < 0 ? 0 : 0.5));
683
           xProbe = FLOOR(xBase + (xBase < 0 ? 0 : 0.5));
684
           yProbe = FLOOR(yBase + (yBase < 0 ? 0 : 0.5));
684
           yProbe = FLOOR(yBase + (yBase < 0 ? 0 : 0.5));

+ 6
- 0
Marlin/src/gcode/feature/trinamic/M906.cpp Целия файл

86
           #if AXIS_IS_TMC(E4)
86
           #if AXIS_IS_TMC(E4)
87
             case 4: TMC_SET_CURRENT(E4); break;
87
             case 4: TMC_SET_CURRENT(E4); break;
88
           #endif
88
           #endif
89
+          #if AXIS_IS_TMC(E5)
90
+            case 5: TMC_SET_CURRENT(E5); break;
91
+          #endif
89
         }
92
         }
90
       } break;
93
       } break;
91
     }
94
     }
128
     #if AXIS_IS_TMC(E4)
131
     #if AXIS_IS_TMC(E4)
129
       TMC_SAY_CURRENT(E4);
132
       TMC_SAY_CURRENT(E4);
130
     #endif
133
     #endif
134
+    #if AXIS_IS_TMC(E5)
135
+      TMC_SAY_CURRENT(E5);
136
+    #endif
131
   }
137
   }
132
 }
138
 }
133
 
139
 

+ 12
- 0
Marlin/src/gcode/feature/trinamic/M911-M915.cpp Целия файл

74
   #if M91x_USE_E(4)
74
   #if M91x_USE_E(4)
75
     tmc_report_otpw(stepperE4, TMC_E4);
75
     tmc_report_otpw(stepperE4, TMC_E4);
76
   #endif
76
   #endif
77
+  #if M91x_USE_E(5)
78
+    tmc_report_otpw(stepperE5, TMC_E5);
79
+  #endif
77
 }
80
 }
78
 
81
 
79
 /**
82
 /**
145
       #if M91x_USE_E(4)
148
       #if M91x_USE_E(4)
146
         if (hasNone || eval == 4 || (hasE && eval < 0)) tmc_clear_otpw(stepperE4, TMC_E4);
149
         if (hasNone || eval == 4 || (hasE && eval < 0)) tmc_clear_otpw(stepperE4, TMC_E4);
147
       #endif
150
       #endif
151
+      #if M91x_USE_E(5)
152
+        if (hasNone || eval == 5 || (hasE && eval == 10)) tmc_clear_otpw(stepperE5, TMC_E5);
153
+      #endif
148
     #endif
154
     #endif
149
 }
155
 }
150
 
156
 
208
             #if E_STEPPERS > 4 && AXIS_HAS_STEALTHCHOP(E4)
214
             #if E_STEPPERS > 4 && AXIS_HAS_STEALTHCHOP(E4)
209
               case 4: TMC_SET_PWMTHRS_E(4); break;
215
               case 4: TMC_SET_PWMTHRS_E(4); break;
210
             #endif
216
             #endif
217
+            #if E_STEPPERS > 5 && AXIS_HAS_STEALTHCHOP(E5)
218
+              case 5: TMC_SET_PWMTHRS_E(5); break;
219
+            #endif
211
           }
220
           }
212
         } break;
221
         } break;
213
       }
222
       }
250
       #if E_STEPPERS > 4 && AXIS_HAS_STEALTHCHOP(E4)
259
       #if E_STEPPERS > 4 && AXIS_HAS_STEALTHCHOP(E4)
251
         TMC_SAY_PWMTHRS_E(4);
260
         TMC_SAY_PWMTHRS_E(4);
252
       #endif
261
       #endif
262
+      #if E_STEPPERS > 5 && AXIS_HAS_STEALTHCHOP(E5)
263
+        TMC_SAY_PWMTHRS_E(5);
264
+      #endif
253
     }
265
     }
254
   }
266
   }
255
 #endif // HYBRID_THRESHOLD
267
 #endif // HYBRID_THRESHOLD

+ 34
- 2
Marlin/src/inc/Conditionals_post.h Целия файл

381
   #define HEATER_4_USES_THERMISTOR
381
   #define HEATER_4_USES_THERMISTOR
382
 #endif
382
 #endif
383
 
383
 
384
+#if TEMP_SENSOR_5 == -4
385
+  #define HEATER_5_USES_AD8495
386
+#elif TEMP_SENSOR_5 == -3
387
+  #error "MAX31855 Thermocouples (-3) not supported for TEMP_SENSOR_5."
388
+#elif TEMP_SENSOR_5 == -2
389
+  #error "MAX6675 Thermocouples (-2) not supported for TEMP_SENSOR_5."
390
+#elif TEMP_SENSOR_5 == -1
391
+  #define HEATER_5_USES_AD595
392
+#elif TEMP_SENSOR_5 == 0
393
+  #undef HEATER_5_MINTEMP
394
+  #undef HEATER_5_MAXTEMP
395
+#elif TEMP_SENSOR_5 > 0
396
+  #define THERMISTORHEATER_5 TEMP_SENSOR_5
397
+  #define HEATER_5_USES_THERMISTOR
398
+#endif
399
+
384
 #if TEMP_SENSOR_BED == -4
400
 #if TEMP_SENSOR_BED == -4
385
   #define HEATER_BED_USES_AD8495
401
   #define HEATER_BED_USES_AD8495
386
 #elif TEMP_SENSOR_BED == -3
402
 #elif TEMP_SENSOR_BED == -3
841
 #define HAS_E4_MICROSTEPS (PIN_EXISTS(E4_MS1))
857
 #define HAS_E4_MICROSTEPS (PIN_EXISTS(E4_MS1))
842
 #define HAS_SOLENOID_4    (PIN_EXISTS(SOL4))
858
 #define HAS_SOLENOID_4    (PIN_EXISTS(SOL4))
843
 
859
 
860
+#define HAS_E5_ENABLE     (PIN_EXISTS(E5_ENABLE))
861
+#define HAS_E5_DIR        (PIN_EXISTS(E5_DIR))
862
+#define HAS_E5_STEP       (PIN_EXISTS(E5_STEP))
863
+#define HAS_E5_MICROSTEPS (PIN_EXISTS(E5_MS1))
864
+#define HAS_SOLENOID_5    (PIN_EXISTS(SOL5))
865
+
844
 // Trinamic Stepper Drivers
866
 // Trinamic Stepper Drivers
845
 #define HAS_STEALTHCHOP (HAS_DRIVER(TMC2130) || HAS_DRIVER(TMC2208))
867
 #define HAS_STEALTHCHOP (HAS_DRIVER(TMC2130) || HAS_DRIVER(TMC2208))
846
 #define HAS_STALLGUARD  HAS_DRIVER(TMC2130)
868
 #define HAS_STALLGUARD  HAS_DRIVER(TMC2130)
919
 #define HAS_AUTO_FAN_2 (HOTENDS > 2 && PIN_EXISTS(E2_AUTO_FAN))
941
 #define HAS_AUTO_FAN_2 (HOTENDS > 2 && PIN_EXISTS(E2_AUTO_FAN))
920
 #define HAS_AUTO_FAN_3 (HOTENDS > 3 && PIN_EXISTS(E3_AUTO_FAN))
942
 #define HAS_AUTO_FAN_3 (HOTENDS > 3 && PIN_EXISTS(E3_AUTO_FAN))
921
 #define HAS_AUTO_FAN_4 (HOTENDS > 4 && PIN_EXISTS(E4_AUTO_FAN))
943
 #define HAS_AUTO_FAN_4 (HOTENDS > 4 && PIN_EXISTS(E4_AUTO_FAN))
944
+#define HAS_AUTO_FAN_5 (HOTENDS > 5 && PIN_EXISTS(E5_AUTO_FAN))
922
 #define HAS_AUTO_CHAMBER_FAN (PIN_EXISTS(CHAMBER_AUTO_FAN))
945
 #define HAS_AUTO_CHAMBER_FAN (PIN_EXISTS(CHAMBER_AUTO_FAN))
923
-#define HAS_AUTO_FAN (HAS_AUTO_FAN_0 || HAS_AUTO_FAN_1 || HAS_AUTO_FAN_2 || HAS_AUTO_FAN_3 || HAS_AUTO_CHAMBER_FAN)
946
+#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)
924
 #define AUTO_1_IS_0 (E1_AUTO_FAN_PIN == E0_AUTO_FAN_PIN)
947
 #define AUTO_1_IS_0 (E1_AUTO_FAN_PIN == E0_AUTO_FAN_PIN)
925
 #define AUTO_2_IS_0 (E2_AUTO_FAN_PIN == E0_AUTO_FAN_PIN)
948
 #define AUTO_2_IS_0 (E2_AUTO_FAN_PIN == E0_AUTO_FAN_PIN)
926
 #define AUTO_2_IS_1 (E2_AUTO_FAN_PIN == E1_AUTO_FAN_PIN)
949
 #define AUTO_2_IS_1 (E2_AUTO_FAN_PIN == E1_AUTO_FAN_PIN)
931
 #define AUTO_4_IS_1 (E4_AUTO_FAN_PIN == E1_AUTO_FAN_PIN)
954
 #define AUTO_4_IS_1 (E4_AUTO_FAN_PIN == E1_AUTO_FAN_PIN)
932
 #define AUTO_4_IS_2 (E4_AUTO_FAN_PIN == E2_AUTO_FAN_PIN)
955
 #define AUTO_4_IS_2 (E4_AUTO_FAN_PIN == E2_AUTO_FAN_PIN)
933
 #define AUTO_4_IS_3 (E4_AUTO_FAN_PIN == E3_AUTO_FAN_PIN)
956
 #define AUTO_4_IS_3 (E4_AUTO_FAN_PIN == E3_AUTO_FAN_PIN)
957
+#define AUTO_5_IS_0 (E5_AUTO_FAN_PIN == E0_AUTO_FAN_PIN)
958
+#define AUTO_5_IS_1 (E5_AUTO_FAN_PIN == E1_AUTO_FAN_PIN)
959
+#define AUTO_5_IS_2 (E5_AUTO_FAN_PIN == E2_AUTO_FAN_PIN)
960
+#define AUTO_5_IS_3 (E5_AUTO_FAN_PIN == E3_AUTO_FAN_PIN)
961
+#define AUTO_5_IS_4 (E5_AUTO_FAN_PIN == E4_AUTO_FAN_PIN)
934
 #define AUTO_CHAMBER_IS_0 (CHAMBER_AUTO_FAN_PIN == E0_AUTO_FAN_PIN)
962
 #define AUTO_CHAMBER_IS_0 (CHAMBER_AUTO_FAN_PIN == E0_AUTO_FAN_PIN)
935
 #define AUTO_CHAMBER_IS_1 (CHAMBER_AUTO_FAN_PIN == E1_AUTO_FAN_PIN)
963
 #define AUTO_CHAMBER_IS_1 (CHAMBER_AUTO_FAN_PIN == E1_AUTO_FAN_PIN)
936
 #define AUTO_CHAMBER_IS_2 (CHAMBER_AUTO_FAN_PIN == E2_AUTO_FAN_PIN)
964
 #define AUTO_CHAMBER_IS_2 (CHAMBER_AUTO_FAN_PIN == E2_AUTO_FAN_PIN)
937
 #define AUTO_CHAMBER_IS_3 (CHAMBER_AUTO_FAN_PIN == E3_AUTO_FAN_PIN)
965
 #define AUTO_CHAMBER_IS_3 (CHAMBER_AUTO_FAN_PIN == E3_AUTO_FAN_PIN)
938
 #define AUTO_CHAMBER_IS_4 (CHAMBER_AUTO_FAN_PIN == E4_AUTO_FAN_PIN)
966
 #define AUTO_CHAMBER_IS_4 (CHAMBER_AUTO_FAN_PIN == E4_AUTO_FAN_PIN)
967
+#define AUTO_CHAMBER_IS_5 (CHAMBER_AUTO_FAN_PIN == E5_AUTO_FAN_PIN)
939
 
968
 
940
 // Other fans
969
 // Other fans
941
 #define HAS_FAN0 (PIN_EXISTS(FAN))
970
 #define HAS_FAN0 (PIN_EXISTS(FAN))
966
 #define HAS_CASE_LIGHT (PIN_EXISTS(CASE_LIGHT) && ENABLED(CASE_LIGHT_ENABLE))
995
 #define HAS_CASE_LIGHT (PIN_EXISTS(CASE_LIGHT) && ENABLED(CASE_LIGHT_ENABLE))
967
 
996
 
968
 // Digital control
997
 // Digital control
969
-#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)
998
+#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)
970
 #define HAS_STEPPER_RESET (PIN_EXISTS(STEPPER_RESET))
999
 #define HAS_STEPPER_RESET (PIN_EXISTS(STEPPER_RESET))
971
 #define HAS_DIGIPOTSS (PIN_EXISTS(DIGIPOTSS))
1000
 #define HAS_DIGIPOTSS (PIN_EXISTS(DIGIPOTSS))
972
 #define HAS_MOTOR_CURRENT_PWM (PIN_EXISTS(MOTOR_CURRENT_PWM_XY) || PIN_EXISTS(MOTOR_CURRENT_PWM_Z) || PIN_EXISTS(MOTOR_CURRENT_PWM_E))
1001
 #define HAS_MOTOR_CURRENT_PWM (PIN_EXISTS(MOTOR_CURRENT_PWM_XY) || PIN_EXISTS(MOTOR_CURRENT_PWM_Z) || PIN_EXISTS(MOTOR_CURRENT_PWM_E))
1022
       #define WRITE_HEATER_3(v) WRITE(HEATER_3_PIN, (v) ^ HEATER_3_INVERTING)
1051
       #define WRITE_HEATER_3(v) WRITE(HEATER_3_PIN, (v) ^ HEATER_3_INVERTING)
1023
       #if HOTENDS > 4
1052
       #if HOTENDS > 4
1024
         #define WRITE_HEATER_4(v) WRITE(HEATER_4_PIN, (v) ^ HEATER_4_INVERTING)
1053
         #define WRITE_HEATER_4(v) WRITE(HEATER_4_PIN, (v) ^ HEATER_4_INVERTING)
1054
+        #if HOTENDS > 5
1055
+          #define WRITE_HEATER_5(v) WRITE(HEATER_5_PIN, (v) ^ HEATER_5_INVERTING)
1056
+        #endif // HOTENDS > 5
1025
       #endif // HOTENDS > 4
1057
       #endif // HOTENDS > 4
1026
     #endif // HOTENDS > 3
1058
     #endif // HOTENDS > 3
1027
   #endif // HOTENDS > 2
1059
   #endif // HOTENDS > 2

+ 62
- 24
Marlin/src/inc/SanityCheck.h Целия файл

273
 #elif defined(HAVE_L6470DRIVER)
273
 #elif defined(HAVE_L6470DRIVER)
274
   #error "HAVE_L6470DRIVER is now [AXIS]_DRIVER_TYPE L6470. Please update your Configuration.h."
274
   #error "HAVE_L6470DRIVER is now [AXIS]_DRIVER_TYPE L6470. Please update your Configuration.h."
275
 #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) \
275
 #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) \
276
-   || defined(E0_IS_TMC) || defined(E1_IS_TMC) || defined(E2_IS_TMC) || defined(E3_IS_TMC) || defined(E4_IS_TMC)
276
+   || defined(E0_IS_TMC) || defined(E1_IS_TMC) || defined(E2_IS_TMC) || defined(E3_IS_TMC) || defined(E4_IS_TMC) || defined(E5_IS_TMC)
277
   #error "[AXIS]_IS_TMC is now [AXIS]_DRIVER_TYPE TMC26X. Please update your Configuration.h."
277
   #error "[AXIS]_IS_TMC is now [AXIS]_DRIVER_TYPE TMC26X. Please update your Configuration.h."
278
 #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) \
278
 #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) \
279
-   || defined(E0_IS_TMC26X) || defined(E1_IS_TMC26X) || defined(E2_IS_TMC26X) || defined(E3_IS_TMC26X) || defined(E4_IS_TMC26X)
279
+   || defined(E0_IS_TMC26X) || defined(E1_IS_TMC26X) || defined(E2_IS_TMC26X) || defined(E3_IS_TMC26X) || defined(E4_IS_TMC26X) || defined(E5_IS_TMC26X)
280
   #error "[AXIS]_IS_TMC26X is now [AXIS]_DRIVER_TYPE TMC26X. Please update your Configuration.h."
280
   #error "[AXIS]_IS_TMC26X is now [AXIS]_DRIVER_TYPE TMC26X. Please update your Configuration.h."
281
 #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) \
281
 #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) \
282
-   || defined(E0_IS_TMC2130) || defined(E1_IS_TMC2130) || defined(E2_IS_TMC2130) || defined(E3_IS_TMC2130) || defined(E4_IS_TMC2130)
282
+   || defined(E0_IS_TMC2130) || defined(E1_IS_TMC2130) || defined(E2_IS_TMC2130) || defined(E3_IS_TMC2130) || defined(E4_IS_TMC2130) || defined(E5_IS_TMC2130)
283
   #error "[AXIS]_IS_TMC2130 is now [AXIS]_DRIVER_TYPE TMC2130. Please update your Configuration.h."
283
   #error "[AXIS]_IS_TMC2130 is now [AXIS]_DRIVER_TYPE TMC2130. Please update your Configuration.h."
284
 #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) \
284
 #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) \
285
-   || defined(E0_IS_TMC2208) || defined(E1_IS_TMC2208) || defined(E2_IS_TMC2208) || defined(E3_IS_TMC2208) || defined(E4_IS_TMC2208)
285
+   || defined(E0_IS_TMC2208) || defined(E1_IS_TMC2208) || defined(E2_IS_TMC2208) || defined(E3_IS_TMC2208) || defined(E4_IS_TMC2208) || defined(E5_IS_TMC2208)
286
   #error "[AXIS]_IS_TMC2208 is now [AXIS]_DRIVER_TYPE TMC2208. Please update your Configuration.h."
286
   #error "[AXIS]_IS_TMC2208 is now [AXIS]_DRIVER_TYPE TMC2208. Please update your Configuration.h."
287
 #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) \
287
 #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) \
288
-   || defined(E0_IS_L6470) || defined(E1_IS_L6470) || defined(E2_IS_L6470) || defined(E3_IS_L6470) || defined(E4_IS_L6470)
288
+   || defined(E0_IS_L6470) || defined(E1_IS_L6470) || defined(E2_IS_L6470) || defined(E3_IS_L6470) || defined(E4_IS_L6470) || defined(E5_IS_L6470)
289
   #error "[AXIS]_IS_L6470 is now [AXIS]_DRIVER_TYPE L6470. Please update your Configuration.h."
289
   #error "[AXIS]_IS_L6470 is now [AXIS]_DRIVER_TYPE L6470. Please update your Configuration.h."
290
 #elif defined(AUTOMATIC_CURRENT_CONTROL)
290
 #elif defined(AUTOMATIC_CURRENT_CONTROL)
291
   #error "AUTOMATIC_CURRENT_CONTROL is now MONITOR_DRIVER_STATUS. Please update your configuration."
291
   #error "AUTOMATIC_CURRENT_CONTROL is now MONITOR_DRIVER_STATUS. Please update your configuration."
534
     #error "FILAMENT_RUNOUT_SENSOR with NUM_RUNOUT_SENSORS > 3 requires FIL_RUNOUT4_PIN."
534
     #error "FILAMENT_RUNOUT_SENSOR with NUM_RUNOUT_SENSORS > 3 requires FIL_RUNOUT4_PIN."
535
   #elif NUM_RUNOUT_SENSORS > 4 && !PIN_EXISTS(FIL_RUNOUT5)
535
   #elif NUM_RUNOUT_SENSORS > 4 && !PIN_EXISTS(FIL_RUNOUT5)
536
     #error "FILAMENT_RUNOUT_SENSOR with NUM_RUNOUT_SENSORS > 4 requires FIL_RUNOUT5_PIN."
536
     #error "FILAMENT_RUNOUT_SENSOR with NUM_RUNOUT_SENSORS > 4 requires FIL_RUNOUT5_PIN."
537
+  #elif NUM_RUNOUT_SENSORS > 5 && !PIN_EXISTS(FIL_RUNOUT6)
538
+    #error "FILAMENT_RUNOUT_SENSOR with NUM_RUNOUT_SENSORS > 5 requires FIL_RUNOUT6_PIN."
537
   #elif DISABLED(SDSUPPORT) && DISABLED(PRINTJOB_TIMER_AUTOSTART)
539
   #elif DISABLED(SDSUPPORT) && DISABLED(PRINTJOB_TIMER_AUTOSTART)
538
     #error "FILAMENT_RUNOUT_SENSOR requires SDSUPPORT or PRINTJOB_TIMER_AUTOSTART."
540
     #error "FILAMENT_RUNOUT_SENSOR requires SDSUPPORT or PRINTJOB_TIMER_AUTOSTART."
539
   #elif DISABLED(ADVANCED_PAUSE_FEATURE)
541
   #elif DISABLED(ADVANCED_PAUSE_FEATURE)
1242
         #elif !PIN_EXISTS(TEMP_4)
1244
         #elif !PIN_EXISTS(TEMP_4)
1243
           #error "TEMP_4_PIN not defined for this board."
1245
           #error "TEMP_4_PIN not defined for this board."
1244
         #endif
1246
         #endif
1247
+        #if HOTENDS > 5
1248
+          #if TEMP_SENSOR_5 == 0
1249
+            #error "TEMP_SENSOR_5 is required with 5 HOTENDS."
1250
+          #elif !HAS_HEATER_5
1251
+            #error "HEATER_5_PIN not defined for this board."
1252
+          #elif !PIN_EXISTS(TEMP_5)
1253
+            #error "TEMP_5_PIN not defined for this board."
1254
+          #endif
1255
+        #elif TEMP_SENSOR_5 != 0
1256
+          #error "TEMP_SENSOR_5 shouldn't be set with only 5 HOTENDS."
1257
+        #endif
1245
       #elif TEMP_SENSOR_4 != 0
1258
       #elif TEMP_SENSOR_4 != 0
1246
         #error "TEMP_SENSOR_4 shouldn't be set with only 4 HOTENDS."
1259
         #error "TEMP_SENSOR_4 shouldn't be set with only 4 HOTENDS."
1260
+      #elif TEMP_SENSOR_5 != 0
1261
+        #error "TEMP_SENSOR_5 shouldn't be set with only 5 HOTENDS."
1247
       #endif
1262
       #endif
1248
     #elif TEMP_SENSOR_3 != 0
1263
     #elif TEMP_SENSOR_3 != 0
1249
       #error "TEMP_SENSOR_3 shouldn't be set with only 3 HOTENDS."
1264
       #error "TEMP_SENSOR_3 shouldn't be set with only 3 HOTENDS."
1250
     #elif TEMP_SENSOR_4 != 0
1265
     #elif TEMP_SENSOR_4 != 0
1251
       #error "TEMP_SENSOR_4 shouldn't be set with only 3 HOTENDS."
1266
       #error "TEMP_SENSOR_4 shouldn't be set with only 3 HOTENDS."
1267
+    #elif TEMP_SENSOR_5 != 0
1268
+      #error "TEMP_SENSOR_5 shouldn't be set with only 4 HOTENDS."
1252
     #endif
1269
     #endif
1253
   #elif TEMP_SENSOR_2 != 0
1270
   #elif TEMP_SENSOR_2 != 0
1254
     #error "TEMP_SENSOR_2 shouldn't be set with only 2 HOTENDS."
1271
     #error "TEMP_SENSOR_2 shouldn't be set with only 2 HOTENDS."
1256
     #error "TEMP_SENSOR_3 shouldn't be set with only 2 HOTENDS."
1273
     #error "TEMP_SENSOR_3 shouldn't be set with only 2 HOTENDS."
1257
   #elif TEMP_SENSOR_4 != 0
1274
   #elif TEMP_SENSOR_4 != 0
1258
     #error "TEMP_SENSOR_4 shouldn't be set with only 2 HOTENDS."
1275
     #error "TEMP_SENSOR_4 shouldn't be set with only 2 HOTENDS."
1276
+  #elif TEMP_SENSOR_5 != 0
1277
+    #error "TEMP_SENSOR_5 shouldn't be set with only 2 HOTENDS."
1259
   #endif
1278
   #endif
1260
 #elif TEMP_SENSOR_1 != 0 && DISABLED(TEMP_SENSOR_1_AS_REDUNDANT)
1279
 #elif TEMP_SENSOR_1 != 0 && DISABLED(TEMP_SENSOR_1_AS_REDUNDANT)
1261
   #error "TEMP_SENSOR_1 shouldn't be set with only 1 HOTEND."
1280
   #error "TEMP_SENSOR_1 shouldn't be set with only 1 HOTEND."
1265
   #error "TEMP_SENSOR_3 shouldn't be set with only 1 HOTEND."
1284
   #error "TEMP_SENSOR_3 shouldn't be set with only 1 HOTEND."
1266
 #elif TEMP_SENSOR_4 != 0
1285
 #elif TEMP_SENSOR_4 != 0
1267
   #error "TEMP_SENSOR_4 shouldn't be set with only 1 HOTEND."
1286
   #error "TEMP_SENSOR_4 shouldn't be set with only 1 HOTEND."
1287
+#elif TEMP_SENSOR_5 != 0
1288
+  #error "TEMP_SENSOR_5 shouldn't be set with only 1 HOTEND."
1268
 #endif
1289
 #endif
1269
 
1290
 
1270
 #if ENABLED(TEMP_SENSOR_1_AS_REDUNDANT) && TEMP_SENSOR_1 == 0
1291
 #if ENABLED(TEMP_SENSOR_1_AS_REDUNDANT) && TEMP_SENSOR_1 == 0
1306
  * Test Extruder Stepper Pins
1327
  * Test Extruder Stepper Pins
1307
  */
1328
  */
1308
 #if DISABLED(MK2_MULTIPLEXER) // MK2_MULTIPLEXER uses E0 stepper only
1329
 #if DISABLED(MK2_MULTIPLEXER) // MK2_MULTIPLEXER uses E0 stepper only
1309
-  #if E_STEPPERS > 4
1310
-    #if !(PIN_EXISTS(E4_STEP) && PIN_EXISTS(E4_DIR) && PIN_EXISTS(E4_ENABLE))
1311
-      #error "E4_STEP_PIN, E4_DIR_PIN, or E4_ENABLE_PIN not defined for this board."
1312
-    #endif
1313
-  #elif E_STEPPERS > 3
1314
-    #if !(PIN_EXISTS(E3_STEP) && PIN_EXISTS(E3_DIR) && PIN_EXISTS(E3_ENABLE))
1315
-      #error "E3_STEP_PIN, E3_DIR_PIN, or E3_ENABLE_PIN not defined for this board."
1316
-    #endif
1317
-  #elif E_STEPPERS > 2
1318
-    #if !(PIN_EXISTS(E2_STEP) && PIN_EXISTS(E2_DIR) && PIN_EXISTS(E2_ENABLE))
1319
-      #error "E2_STEP_PIN, E2_DIR_PIN, or E2_ENABLE_PIN not defined for this board."
1320
-    #endif
1321
-  #elif E_STEPPERS > 1
1322
-    #if !(PIN_EXISTS(E1_STEP) && PIN_EXISTS(E1_DIR) && PIN_EXISTS(E1_ENABLE))
1323
-      #error "E1_STEP_PIN, E1_DIR_PIN, or E1_ENABLE_PIN not defined for this board."
1330
+  #if E_STEPPERS
1331
+    #if !(PIN_EXISTS(E0_STEP) && PIN_EXISTS(E0_DIR) && PIN_EXISTS(E0_ENABLE))
1332
+      #error "E0_STEP_PIN, E0_DIR_PIN, or E0_ENABLE_PIN not defined for this board."
1324
     #endif
1333
     #endif
1325
-  #endif
1334
+    #if E_STEPPERS > 1
1335
+      #if !(PIN_EXISTS(E1_STEP) && PIN_EXISTS(E1_DIR) && PIN_EXISTS(E1_ENABLE))
1336
+        #error "E1_STEP_PIN, E1_DIR_PIN, or E1_ENABLE_PIN not defined for this board."
1337
+      #endif
1338
+      #if E_STEPPERS > 2
1339
+        #if !(PIN_EXISTS(E2_STEP) && PIN_EXISTS(E2_DIR) && PIN_EXISTS(E2_ENABLE))
1340
+          #error "E2_STEP_PIN, E2_DIR_PIN, or E2_ENABLE_PIN not defined for this board."
1341
+        #endif
1342
+        #if E_STEPPERS > 3
1343
+          #if !(PIN_EXISTS(E3_STEP) && PIN_EXISTS(E3_DIR) && PIN_EXISTS(E3_ENABLE))
1344
+            #error "E3_STEP_PIN, E3_DIR_PIN, or E3_ENABLE_PIN not defined for this board."
1345
+          #endif
1346
+          #if E_STEPPERS > 4
1347
+            #if !(PIN_EXISTS(E4_STEP) && PIN_EXISTS(E4_DIR) && PIN_EXISTS(E4_ENABLE))
1348
+              #error "E4_STEP_PIN, E4_DIR_PIN, or E4_ENABLE_PIN not defined for this board."
1349
+            #endif
1350
+            #if E_STEPPERS > 5
1351
+              #if !(PIN_EXISTS(E5_STEP) && PIN_EXISTS(E5_DIR) && PIN_EXISTS(E5_ENABLE))
1352
+                #error "E5_STEP_PIN, E5_DIR_PIN, or E5_ENABLE_PIN not defined for this board."
1353
+              #endif
1354
+            #endif // E_STEPPERS > 5
1355
+          #endif // E_STEPPERS > 4
1356
+        #endif // E_STEPPERS > 3
1357
+      #endif // E_STEPPERS > 2
1358
+    #endif // E_STEPPERS > 1
1359
+  #endif // E_STEPPERS
1326
 #endif
1360
 #endif
1327
 
1361
 
1328
 /**
1362
 /**
1625
   #error "E3_CS_PIN is required for TMC2130. Define E3_CS_PIN in Configuration_adv.h."
1659
   #error "E3_CS_PIN is required for TMC2130. Define E3_CS_PIN in Configuration_adv.h."
1626
 #elif AXIS_DRIVER_TYPE(E4, TMC2130) && !PIN_EXISTS(E4_CS)
1660
 #elif AXIS_DRIVER_TYPE(E4, TMC2130) && !PIN_EXISTS(E4_CS)
1627
   #error "E4_CS_PIN is required for TMC2130. Define E4_CS_PIN in Configuration_adv.h."
1661
   #error "E4_CS_PIN is required for TMC2130. Define E4_CS_PIN in Configuration_adv.h."
1662
+#elif AXIS_DRIVER_TYPE(E5, TMC2130) && !PIN_EXISTS(E5_CS)
1663
+  #error "E5_CS_PIN is required for TMC2130. Define E5_CS_PIN in Configuration_adv.h."
1628
 #endif
1664
 #endif
1629
 
1665
 
1630
 /**
1666
 /**
1642
     || defined(E1_HARDWARE_SERIAL) \
1678
     || defined(E1_HARDWARE_SERIAL) \
1643
     || defined(E2_HARDWARE_SERIAL) \
1679
     || defined(E2_HARDWARE_SERIAL) \
1644
     || defined(E3_HARDWARE_SERIAL) \
1680
     || defined(E3_HARDWARE_SERIAL) \
1645
-    || defined(E4_HARDWARE_SERIAL) )
1646
-  #error "select hardware UART for TMC2208 to use both TMC2208 and ENDSTOP_INTERRUPTS_FEATURE."
1681
+    || defined(E4_HARDWARE_SERIAL) \
1682
+    || defined(E5_HARDWARE_SERIAL) )
1683
+  #error "Select hardware UART for TMC2208 to use both TMC2208 and ENDSTOP_INTERRUPTS_FEATURE."
1647
 #endif
1684
 #endif
1648
 
1685
 
1649
 /**
1686
 /**
1660
     || defined(E1_HARDWARE_SERIAL) \
1697
     || defined(E1_HARDWARE_SERIAL) \
1661
     || defined(E2_HARDWARE_SERIAL) \
1698
     || defined(E2_HARDWARE_SERIAL) \
1662
     || defined(E3_HARDWARE_SERIAL) \
1699
     || defined(E3_HARDWARE_SERIAL) \
1663
-    || defined(E4_HARDWARE_SERIAL) )
1700
+    || defined(E4_HARDWARE_SERIAL) \
1701
+    || defined(E5_HARDWARE_SERIAL) )
1664
   #error "TMC2208 Software Serial is supported only on AVR and LPC1768 platforms."
1702
   #error "TMC2208 Software Serial is supported only on AVR and LPC1768 platforms."
1665
 #endif
1703
 #endif
1666
 
1704
 

+ 1
- 0
Marlin/src/lcd/language/language_an.h Целия файл

130
 #define MSG_E3STEPS                         _UxGT("E3 trangos/mm")
130
 #define MSG_E3STEPS                         _UxGT("E3 trangos/mm")
131
 #define MSG_E4STEPS                         _UxGT("E4 trangos/mm")
131
 #define MSG_E4STEPS                         _UxGT("E4 trangos/mm")
132
 #define MSG_E5STEPS                         _UxGT("E5 trangos/mm")
132
 #define MSG_E5STEPS                         _UxGT("E5 trangos/mm")
133
+#define MSG_E6STEPS                         _UxGT("E6 trangos/mm")
133
 #define MSG_TEMPERATURE                     _UxGT("Temperatura")
134
 #define MSG_TEMPERATURE                     _UxGT("Temperatura")
134
 #define MSG_MOTION                          _UxGT("Movimiento")
135
 #define MSG_MOTION                          _UxGT("Movimiento")
135
 #define MSG_FILAMENT                        _UxGT("Filamento")
136
 #define MSG_FILAMENT                        _UxGT("Filamento")

+ 1
- 0
Marlin/src/lcd/language/language_bg.h Целия файл

99
 #define MSG_E3STEPS                         _UxGT("E3 стъпки/mm")
99
 #define MSG_E3STEPS                         _UxGT("E3 стъпки/mm")
100
 #define MSG_E4STEPS                         _UxGT("E4 стъпки/mm")
100
 #define MSG_E4STEPS                         _UxGT("E4 стъпки/mm")
101
 #define MSG_E5STEPS                         _UxGT("E5 стъпки/mm")
101
 #define MSG_E5STEPS                         _UxGT("E5 стъпки/mm")
102
+#define MSG_E6STEPS                         _UxGT("E6 стъпки/mm")
102
 #define MSG_TEMPERATURE                     _UxGT("Температура")
103
 #define MSG_TEMPERATURE                     _UxGT("Температура")
103
 #define MSG_MOTION                          _UxGT("Движение")
104
 #define MSG_MOTION                          _UxGT("Движение")
104
 #define MSG_FILAMENT                        _UxGT("Нишка")
105
 #define MSG_FILAMENT                        _UxGT("Нишка")

+ 1
- 0
Marlin/src/lcd/language/language_ca.h Целия файл

132
 #define MSG_E3STEPS                         _UxGT("E3passos/mm")
132
 #define MSG_E3STEPS                         _UxGT("E3passos/mm")
133
 #define MSG_E4STEPS                         _UxGT("E4passos/mm")
133
 #define MSG_E4STEPS                         _UxGT("E4passos/mm")
134
 #define MSG_E5STEPS                         _UxGT("E5passos/mm")
134
 #define MSG_E5STEPS                         _UxGT("E5passos/mm")
135
+#define MSG_E6STEPS                         _UxGT("E6passos/mm")
135
 #define MSG_TEMPERATURE                     _UxGT("Temperatura")
136
 #define MSG_TEMPERATURE                     _UxGT("Temperatura")
136
 #define MSG_MOTION                          _UxGT("Moviment")
137
 #define MSG_MOTION                          _UxGT("Moviment")
137
 #define MSG_FILAMENT                        _UxGT("Filament")
138
 #define MSG_FILAMENT                        _UxGT("Filament")

+ 1
- 0
Marlin/src/lcd/language/language_cz.h Целия файл

233
 #define MSG_E3STEPS                         _UxGT("E3kroků/mm")
233
 #define MSG_E3STEPS                         _UxGT("E3kroků/mm")
234
 #define MSG_E4STEPS                         _UxGT("E4kroků/mm")
234
 #define MSG_E4STEPS                         _UxGT("E4kroků/mm")
235
 #define MSG_E5STEPS                         _UxGT("E5kroků/mm")
235
 #define MSG_E5STEPS                         _UxGT("E5kroků/mm")
236
+#define MSG_E6STEPS                         _UxGT("E6kroků/mm")
236
 #define MSG_TEMPERATURE                     _UxGT("Teplota")
237
 #define MSG_TEMPERATURE                     _UxGT("Teplota")
237
 #define MSG_MOTION                          _UxGT("Pohyb")
238
 #define MSG_MOTION                          _UxGT("Pohyb")
238
 #define MSG_FILAMENT                        _UxGT("Filament")
239
 #define MSG_FILAMENT                        _UxGT("Filament")

+ 1
- 0
Marlin/src/lcd/language/language_da.h Целия файл

130
 #define MSG_E3STEPS                         _UxGT("E3steps/mm")
130
 #define MSG_E3STEPS                         _UxGT("E3steps/mm")
131
 #define MSG_E4STEPS                         _UxGT("E4steps/mm")
131
 #define MSG_E4STEPS                         _UxGT("E4steps/mm")
132
 #define MSG_E5STEPS                         _UxGT("E5steps/mm")
132
 #define MSG_E5STEPS                         _UxGT("E5steps/mm")
133
+#define MSG_E6STEPS                         _UxGT("E6steps/mm")
133
 #define MSG_TEMPERATURE                     _UxGT("Temperatur")
134
 #define MSG_TEMPERATURE                     _UxGT("Temperatur")
134
 #define MSG_MOTION                          _UxGT("Bevægelse")
135
 #define MSG_MOTION                          _UxGT("Bevægelse")
135
 #define MSG_FILAMENT                        _UxGT("Filament")
136
 #define MSG_FILAMENT                        _UxGT("Filament")

+ 1
- 0
Marlin/src/lcd/language/language_de.h Целия файл

145
 #define MSG_E3STEPS                         _UxGT("E3 Steps/mm")
145
 #define MSG_E3STEPS                         _UxGT("E3 Steps/mm")
146
 #define MSG_E4STEPS                         _UxGT("E4 Steps/mm")
146
 #define MSG_E4STEPS                         _UxGT("E4 Steps/mm")
147
 #define MSG_E5STEPS                         _UxGT("E5 Steps/mm")
147
 #define MSG_E5STEPS                         _UxGT("E5 Steps/mm")
148
+#define MSG_E6STEPS                         _UxGT("E6 Steps/mm")
148
 #define MSG_TEMPERATURE                     _UxGT("Temperatur")
149
 #define MSG_TEMPERATURE                     _UxGT("Temperatur")
149
 #define MSG_MOTION                          _UxGT("Bewegung")
150
 #define MSG_MOTION                          _UxGT("Bewegung")
150
 #define MSG_FILAMENT                        _UxGT("Filament")
151
 #define MSG_FILAMENT                        _UxGT("Filament")

+ 6
- 0
Marlin/src/lcd/language/language_en.h Целия файл

630
 #ifndef MSG_E5STEPS
630
 #ifndef MSG_E5STEPS
631
   #define MSG_E5STEPS                         _UxGT("E5steps/mm")
631
   #define MSG_E5STEPS                         _UxGT("E5steps/mm")
632
 #endif
632
 #endif
633
+#ifndef MSG_E6STEPS
634
+  #define MSG_E6STEPS                         _UxGT("E6steps/mm")
635
+#endif
636
+#ifndef MSG_E6STEPS
637
+  #define MSG_E6STEPS                         _UxGT("E6steps/mm")
638
+#endif
633
 #ifndef MSG_TEMPERATURE
639
 #ifndef MSG_TEMPERATURE
634
   #define MSG_TEMPERATURE                     _UxGT("Temperature")
640
   #define MSG_TEMPERATURE                     _UxGT("Temperature")
635
 #endif
641
 #endif

+ 1
- 0
Marlin/src/lcd/language/language_es.h Целия файл

125
 #define MSG_E3STEPS                         _UxGT("E3 pasos/mm")
125
 #define MSG_E3STEPS                         _UxGT("E3 pasos/mm")
126
 #define MSG_E4STEPS                         _UxGT("E4 pasos/mm")
126
 #define MSG_E4STEPS                         _UxGT("E4 pasos/mm")
127
 #define MSG_E5STEPS                         _UxGT("E5 pasos/mm")
127
 #define MSG_E5STEPS                         _UxGT("E5 pasos/mm")
128
+#define MSG_E6STEPS                         _UxGT("E6 pasos/mm")
128
 #define MSG_TEMPERATURE                     _UxGT("Temperatura")
129
 #define MSG_TEMPERATURE                     _UxGT("Temperatura")
129
 #define MSG_MOTION                          _UxGT("Movimiento")
130
 #define MSG_MOTION                          _UxGT("Movimiento")
130
 #define MSG_FILAMENT                        _UxGT("Filamento")
131
 #define MSG_FILAMENT                        _UxGT("Filamento")

+ 1
- 0
Marlin/src/lcd/language/language_eu.h Целия файл

224
 #define MSG_E3STEPS                         _UxGT("E3 pausoak/mm")
224
 #define MSG_E3STEPS                         _UxGT("E3 pausoak/mm")
225
 #define MSG_E4STEPS                         _UxGT("E4 pausoak/mm")
225
 #define MSG_E4STEPS                         _UxGT("E4 pausoak/mm")
226
 #define MSG_E5STEPS                         _UxGT("E5 pausoak/mm")
226
 #define MSG_E5STEPS                         _UxGT("E5 pausoak/mm")
227
+#define MSG_E6STEPS                         _UxGT("E6 pausoak/mm")
227
 #define MSG_TEMPERATURE                     _UxGT("Tenperatura")
228
 #define MSG_TEMPERATURE                     _UxGT("Tenperatura")
228
 #define MSG_MOTION                          _UxGT("Mugimendua")
229
 #define MSG_MOTION                          _UxGT("Mugimendua")
229
 #define MSG_FILAMENT                        _UxGT("Harizpia")
230
 #define MSG_FILAMENT                        _UxGT("Harizpia")

+ 1
- 0
Marlin/src/lcd/language/language_fi.h Целия файл

120
 #define MSG_E3STEPS                         _UxGT("E3steps/mm")
120
 #define MSG_E3STEPS                         _UxGT("E3steps/mm")
121
 #define MSG_E4STEPS                         _UxGT("E4steps/mm")
121
 #define MSG_E4STEPS                         _UxGT("E4steps/mm")
122
 #define MSG_E5STEPS                         _UxGT("E5steps/mm")
122
 #define MSG_E5STEPS                         _UxGT("E5steps/mm")
123
+#define MSG_E6STEPS                         _UxGT("E6steps/mm")
123
 #define MSG_TEMPERATURE                     _UxGT("Lämpötila")
124
 #define MSG_TEMPERATURE                     _UxGT("Lämpötila")
124
 #define MSG_MOTION                          _UxGT("Liike")
125
 #define MSG_MOTION                          _UxGT("Liike")
125
 #define MSG_FILAMENT                        _UxGT("Filament")
126
 #define MSG_FILAMENT                        _UxGT("Filament")

+ 1
- 0
Marlin/src/lcd/language/language_fr.h Целия файл

228
 #define MSG_E3STEPS                         _UxGT("E3 pas/mm")
228
 #define MSG_E3STEPS                         _UxGT("E3 pas/mm")
229
 #define MSG_E4STEPS                         _UxGT("E4 pas/mm")
229
 #define MSG_E4STEPS                         _UxGT("E4 pas/mm")
230
 #define MSG_E5STEPS                         _UxGT("E5 pas/mm")
230
 #define MSG_E5STEPS                         _UxGT("E5 pas/mm")
231
+#define MSG_E6STEPS                         _UxGT("E6 pas/mm")
231
 #define MSG_TEMPERATURE                     _UxGT("Température")
232
 #define MSG_TEMPERATURE                     _UxGT("Température")
232
 #define MSG_MOTION                          _UxGT("Mouvement")
233
 #define MSG_MOTION                          _UxGT("Mouvement")
233
 #define MSG_FILAMENT                        _UxGT("Filament")
234
 #define MSG_FILAMENT                        _UxGT("Filament")

+ 1
- 0
Marlin/src/lcd/language/language_gl.h Целия файл

129
 #define MSG_E3STEPS                         _UxGT("E3 pasos/mm")
129
 #define MSG_E3STEPS                         _UxGT("E3 pasos/mm")
130
 #define MSG_E4STEPS                         _UxGT("E4 pasos/mm")
130
 #define MSG_E4STEPS                         _UxGT("E4 pasos/mm")
131
 #define MSG_E5STEPS                         _UxGT("E5 pasos/mm")
131
 #define MSG_E5STEPS                         _UxGT("E5 pasos/mm")
132
+#define MSG_E6STEPS                         _UxGT("E6 pasos/mm")
132
 #define MSG_TEMPERATURE                     _UxGT("Temperatura")
133
 #define MSG_TEMPERATURE                     _UxGT("Temperatura")
133
 #define MSG_MOTION                          _UxGT("Movemento")
134
 #define MSG_MOTION                          _UxGT("Movemento")
134
 #define MSG_FILAMENT                        _UxGT("Filamento")
135
 #define MSG_FILAMENT                        _UxGT("Filamento")

+ 1
- 0
Marlin/src/lcd/language/language_hr.h Целия файл

129
 #define MSG_E3STEPS                         _UxGT("E3steps/mm")
129
 #define MSG_E3STEPS                         _UxGT("E3steps/mm")
130
 #define MSG_E4STEPS                         _UxGT("E4steps/mm")
130
 #define MSG_E4STEPS                         _UxGT("E4steps/mm")
131
 #define MSG_E5STEPS                         _UxGT("E5steps/mm")
131
 #define MSG_E5STEPS                         _UxGT("E5steps/mm")
132
+#define MSG_E6STEPS                         _UxGT("E6steps/mm")
132
 #define MSG_TEMPERATURE                     _UxGT("Temperature")
133
 #define MSG_TEMPERATURE                     _UxGT("Temperature")
133
 #define MSG_MOTION                          _UxGT("Gibanje")
134
 #define MSG_MOTION                          _UxGT("Gibanje")
134
 #define MSG_FILAMENT                        _UxGT("Filament")
135
 #define MSG_FILAMENT                        _UxGT("Filament")

+ 1
- 0
Marlin/src/lcd/language/language_it.h Целия файл

232
 #define MSG_E3STEPS                         _UxGT("E3passi/mm")
232
 #define MSG_E3STEPS                         _UxGT("E3passi/mm")
233
 #define MSG_E4STEPS                         _UxGT("E4passi/mm")
233
 #define MSG_E4STEPS                         _UxGT("E4passi/mm")
234
 #define MSG_E5STEPS                         _UxGT("E5passi/mm")
234
 #define MSG_E5STEPS                         _UxGT("E5passi/mm")
235
+#define MSG_E6STEPS                         _UxGT("E6passi/mm")
235
 #define MSG_TEMPERATURE                     _UxGT("Temperatura")
236
 #define MSG_TEMPERATURE                     _UxGT("Temperatura")
236
 #define MSG_MOTION                          _UxGT("Movimento")
237
 #define MSG_MOTION                          _UxGT("Movimento")
237
 #define MSG_FILAMENT                        _UxGT("Filamento")
238
 #define MSG_FILAMENT                        _UxGT("Filamento")

+ 1
- 0
Marlin/src/lcd/language/language_nl.h Целия файл

136
 #define MSG_E3STEPS                         _UxGT("E3steps/mm")
136
 #define MSG_E3STEPS                         _UxGT("E3steps/mm")
137
 #define MSG_E4STEPS                         _UxGT("E4steps/mm")
137
 #define MSG_E4STEPS                         _UxGT("E4steps/mm")
138
 #define MSG_E5STEPS                         _UxGT("E5steps/mm")
138
 #define MSG_E5STEPS                         _UxGT("E5steps/mm")
139
+#define MSG_E6STEPS                         _UxGT("E6steps/mm")
139
 #define MSG_TEMPERATURE                     _UxGT("Temperatuur")
140
 #define MSG_TEMPERATURE                     _UxGT("Temperatuur")
140
 #define MSG_MOTION                          _UxGT("Beweging")
141
 #define MSG_MOTION                          _UxGT("Beweging")
141
 #define MSG_FILAMENT                        _UxGT("Filament")
142
 #define MSG_FILAMENT                        _UxGT("Filament")

+ 1
- 0
Marlin/src/lcd/language/language_pl.h Целия файл

129
 #define MSG_E3STEPS                         _UxGT("krokiE3/mm")
129
 #define MSG_E3STEPS                         _UxGT("krokiE3/mm")
130
 #define MSG_E4STEPS                         _UxGT("krokiE4/mm")
130
 #define MSG_E4STEPS                         _UxGT("krokiE4/mm")
131
 #define MSG_E5STEPS                         _UxGT("krokiE5/mm")
131
 #define MSG_E5STEPS                         _UxGT("krokiE5/mm")
132
+#define MSG_E6STEPS                         _UxGT("krokiE6/mm")
132
 #define MSG_TEMPERATURE                     _UxGT("Temperatura")
133
 #define MSG_TEMPERATURE                     _UxGT("Temperatura")
133
 #define MSG_MOTION                          _UxGT("Ruch")
134
 #define MSG_MOTION                          _UxGT("Ruch")
134
 #define MSG_FILAMENT                        _UxGT("Filament")
135
 #define MSG_FILAMENT                        _UxGT("Filament")

+ 1
- 0
Marlin/src/lcd/language/language_pt-br.h Целия файл

237
 #define MSG_E3STEPS                         _UxGT("E3/mm")
237
 #define MSG_E3STEPS                         _UxGT("E3/mm")
238
 #define MSG_E4STEPS                         _UxGT("E4/mm")
238
 #define MSG_E4STEPS                         _UxGT("E4/mm")
239
 #define MSG_E5STEPS                         _UxGT("E5/mm")
239
 #define MSG_E5STEPS                         _UxGT("E5/mm")
240
+#define MSG_E6STEPS                         _UxGT("E6/mm")
240
 #define MSG_TEMPERATURE                     _UxGT("Temperatura")
241
 #define MSG_TEMPERATURE                     _UxGT("Temperatura")
241
 #define MSG_MOTION                          _UxGT("Movimento")
242
 #define MSG_MOTION                          _UxGT("Movimento")
242
 #define MSG_FILAMENT                        _UxGT("Filamento")
243
 #define MSG_FILAMENT                        _UxGT("Filamento")

+ 1
- 0
Marlin/src/lcd/language/language_pt.h Целия файл

126
 #define MSG_E3STEPS                         _UxGT("E3 passo/mm")
126
 #define MSG_E3STEPS                         _UxGT("E3 passo/mm")
127
 #define MSG_E4STEPS                         _UxGT("E4 passo/mm")
127
 #define MSG_E4STEPS                         _UxGT("E4 passo/mm")
128
 #define MSG_E5STEPS                         _UxGT("E5 passo/mm")
128
 #define MSG_E5STEPS                         _UxGT("E5 passo/mm")
129
+#define MSG_E6STEPS                         _UxGT("E6 passo/mm")
129
 #define MSG_TEMPERATURE                     _UxGT("Temperatura")
130
 #define MSG_TEMPERATURE                     _UxGT("Temperatura")
130
 #define MSG_MOTION                          _UxGT("Movimento")
131
 #define MSG_MOTION                          _UxGT("Movimento")
131
 #define MSG_FILAMENT                        _UxGT("Filamento")
132
 #define MSG_FILAMENT                        _UxGT("Filamento")

+ 1
- 0
Marlin/src/lcd/language/language_ru.h Целия файл

227
 #define MSG_E3STEPS                         _UxGT("E3шаг/мм")
227
 #define MSG_E3STEPS                         _UxGT("E3шаг/мм")
228
 #define MSG_E4STEPS                         _UxGT("E4шаг/мм")
228
 #define MSG_E4STEPS                         _UxGT("E4шаг/мм")
229
 #define MSG_E5STEPS                         _UxGT("E5шаг/мм")
229
 #define MSG_E5STEPS                         _UxGT("E5шаг/мм")
230
+#define MSG_E6STEPS                         _UxGT("E6шаг/мм")
230
 #define MSG_TEMPERATURE                     _UxGT("Температура")
231
 #define MSG_TEMPERATURE                     _UxGT("Температура")
231
 #define MSG_MOTION                          _UxGT("Движение")
232
 #define MSG_MOTION                          _UxGT("Движение")
232
 #define MSG_FILAMENT                        _UxGT("Филамент")
233
 #define MSG_FILAMENT                        _UxGT("Филамент")

+ 1
- 0
Marlin/src/lcd/language/language_sk.h Целия файл

246
 #define MSG_E3STEPS                         _UxGT("E3krokov/mm")
246
 #define MSG_E3STEPS                         _UxGT("E3krokov/mm")
247
 #define MSG_E4STEPS                         _UxGT("E4krokov/mm")
247
 #define MSG_E4STEPS                         _UxGT("E4krokov/mm")
248
 #define MSG_E5STEPS                         _UxGT("E5krokov/mm")
248
 #define MSG_E5STEPS                         _UxGT("E5krokov/mm")
249
+#define MSG_E6STEPS                         _UxGT("E6krokov/mm")
249
 #define MSG_TEMPERATURE                     _UxGT("Teplota")
250
 #define MSG_TEMPERATURE                     _UxGT("Teplota")
250
 #define MSG_MOTION                          _UxGT("Pohyb")
251
 #define MSG_MOTION                          _UxGT("Pohyb")
251
 #define MSG_FILAMENT                        _UxGT("Filament")
252
 #define MSG_FILAMENT                        _UxGT("Filament")

+ 2
- 1
Marlin/src/lcd/language/language_tr.h Целия файл

135
 #define MSG_E2STEPS                         _UxGT("E2steps/mm")                                         // E2steps/mm
135
 #define MSG_E2STEPS                         _UxGT("E2steps/mm")                                         // E2steps/mm
136
 #define MSG_E3STEPS                         _UxGT("E3steps/mm")                                         // E3steps/mm
136
 #define MSG_E3STEPS                         _UxGT("E3steps/mm")                                         // E3steps/mm
137
 #define MSG_E4STEPS                         _UxGT("E4steps/mm")                                         // E4steps/mm
137
 #define MSG_E4STEPS                         _UxGT("E4steps/mm")                                         // E4steps/mm
138
-#define MSG_E5STEPS                         _UxGT("E5steps/mm")                                         // E4steps/mm
138
+#define MSG_E5STEPS                         _UxGT("E5steps/mm")                                         // E5steps/mm
139
+#define MSG_E6STEPS                         _UxGT("E6steps/mm")                                         // E6steps/mm
139
 #define MSG_TEMPERATURE                     _UxGT("Sıcaklık")                                           // Sıcaklık
140
 #define MSG_TEMPERATURE                     _UxGT("Sıcaklık")                                           // Sıcaklık
140
 #define MSG_MOTION                          _UxGT("Hareket")                                            // Hareket
141
 #define MSG_MOTION                          _UxGT("Hareket")                                            // Hareket
141
 #define MSG_FILAMENT                        _UxGT("Filaman")                                            // Filaman
142
 #define MSG_FILAMENT                        _UxGT("Filaman")                                            // Filaman

+ 1
- 0
Marlin/src/lcd/language/language_uk.h Целия файл

129
 #define MSG_E3STEPS                         _UxGT("E3кроків/мм")
129
 #define MSG_E3STEPS                         _UxGT("E3кроків/мм")
130
 #define MSG_E4STEPS                         _UxGT("E4кроків/мм")
130
 #define MSG_E4STEPS                         _UxGT("E4кроків/мм")
131
 #define MSG_E5STEPS                         _UxGT("E5кроків/мм")
131
 #define MSG_E5STEPS                         _UxGT("E5кроків/мм")
132
+#define MSG_E6STEPS                         _UxGT("E6кроків/мм")
132
 #define MSG_TEMPERATURE                     _UxGT("Температура")
133
 #define MSG_TEMPERATURE                     _UxGT("Температура")
133
 #define MSG_MOTION                          _UxGT("Рух")
134
 #define MSG_MOTION                          _UxGT("Рух")
134
 #define MSG_FILAMENT                        _UxGT("Волокно")
135
 #define MSG_FILAMENT                        _UxGT("Волокно")

+ 1
- 0
Marlin/src/lcd/language/language_zh_CN.h Целия файл

226
 #define MSG_E3STEPS                         _UxGT("挤出机3步数/mm") //"E3steps/mm"
226
 #define MSG_E3STEPS                         _UxGT("挤出机3步数/mm") //"E3steps/mm"
227
 #define MSG_E4STEPS                         _UxGT("挤出机4步数/mm") //"E4steps/mm"
227
 #define MSG_E4STEPS                         _UxGT("挤出机4步数/mm") //"E4steps/mm"
228
 #define MSG_E5STEPS                         _UxGT("挤出机5步数/mm") //"E5steps/mm"
228
 #define MSG_E5STEPS                         _UxGT("挤出机5步数/mm") //"E5steps/mm"
229
+#define MSG_E6STEPS                         _UxGT("挤出机6步数/mm") //"E6steps/mm"
229
 #define MSG_TEMPERATURE                     _UxGT("温度")  //"Temperature"
230
 #define MSG_TEMPERATURE                     _UxGT("温度")  //"Temperature"
230
 #define MSG_MOTION                          _UxGT("运动")  //"Motion"
231
 #define MSG_MOTION                          _UxGT("运动")  //"Motion"
231
 #define MSG_FILAMENT                        _UxGT("丝料测容")  //"Filament" lcd_control_volumetric_menu
232
 #define MSG_FILAMENT                        _UxGT("丝料测容")  //"Filament" lcd_control_volumetric_menu

+ 1
- 0
Marlin/src/lcd/language/language_zh_TW.h Целия файл

226
 #define MSG_E3STEPS                         _UxGT("擠出機3步數/mm") //"E3steps/mm"
226
 #define MSG_E3STEPS                         _UxGT("擠出機3步數/mm") //"E3steps/mm"
227
 #define MSG_E4STEPS                         _UxGT("擠出機4步數/mm") //"E4steps/mm"
227
 #define MSG_E4STEPS                         _UxGT("擠出機4步數/mm") //"E4steps/mm"
228
 #define MSG_E5STEPS                         _UxGT("擠出機5步數/mm") //"E5steps/mm"
228
 #define MSG_E5STEPS                         _UxGT("擠出機5步數/mm") //"E5steps/mm"
229
+#define MSG_E6STEPS                         _UxGT("擠出機6步數/mm") //"E6steps/mm"
229
 #define MSG_TEMPERATURE                     _UxGT("溫度")  //"Temperature"
230
 #define MSG_TEMPERATURE                     _UxGT("溫度")  //"Temperature"
230
 #define MSG_MOTION                          _UxGT("運作")  //"Motion"
231
 #define MSG_MOTION                          _UxGT("運作")  //"Motion"
231
 #define MSG_FILAMENT                        _UxGT("絲料測容")  //"Filament" lcd_control_volumetric_menu
232
 #define MSG_FILAMENT                        _UxGT("絲料測容")  //"Filament" lcd_control_volumetric_menu

+ 142
- 11
Marlin/src/lcd/ultralcd.cpp Целия файл

1402
           void watch_temp_callback_E3() { _WATCH_FUNC(3); }
1402
           void watch_temp_callback_E3() { _WATCH_FUNC(3); }
1403
           #if HOTENDS > 4
1403
           #if HOTENDS > 4
1404
             void watch_temp_callback_E4() { _WATCH_FUNC(4); }
1404
             void watch_temp_callback_E4() { _WATCH_FUNC(4); }
1405
+            #if HOTENDS > 5
1406
+              void watch_temp_callback_E5() { _WATCH_FUNC(5); }
1407
+            #endif // HOTENDS > 5
1405
           #endif // HOTENDS > 4
1408
           #endif // HOTENDS > 4
1406
         #endif // HOTENDS > 3
1409
         #endif // HOTENDS > 3
1407
       #endif // HOTENDS > 2
1410
       #endif // HOTENDS > 2
1434
         inline void _lcd_refresh_e_factor_3() { planner.refresh_e_factor(3); }
1437
         inline void _lcd_refresh_e_factor_3() { planner.refresh_e_factor(3); }
1435
         #if EXTRUDERS > 4
1438
         #if EXTRUDERS > 4
1436
           inline void _lcd_refresh_e_factor_4() { planner.refresh_e_factor(4); }
1439
           inline void _lcd_refresh_e_factor_4() { planner.refresh_e_factor(4); }
1440
+          #if EXTRUDERS > 5
1441
+            inline void _lcd_refresh_e_factor_5() { planner.refresh_e_factor(5); }
1442
+          #endif // EXTRUDERS > 5
1437
         #endif // EXTRUDERS > 4
1443
         #endif // EXTRUDERS > 4
1438
       #endif // EXTRUDERS > 3
1444
       #endif // EXTRUDERS > 3
1439
     #endif // EXTRUDERS > 2
1445
     #endif // EXTRUDERS > 2
1486
           MENU_MULTIPLIER_ITEM_EDIT_CALLBACK(int3, MSG_NOZZLE MSG_N4, &thermalManager.target_temperature[3], 0, HEATER_3_MAXTEMP - 15, watch_temp_callback_E3);
1492
           MENU_MULTIPLIER_ITEM_EDIT_CALLBACK(int3, MSG_NOZZLE MSG_N4, &thermalManager.target_temperature[3], 0, HEATER_3_MAXTEMP - 15, watch_temp_callback_E3);
1487
           #if HOTENDS > 4
1493
           #if HOTENDS > 4
1488
             MENU_MULTIPLIER_ITEM_EDIT_CALLBACK(int3, MSG_NOZZLE MSG_N5, &thermalManager.target_temperature[4], 0, HEATER_4_MAXTEMP - 15, watch_temp_callback_E4);
1494
             MENU_MULTIPLIER_ITEM_EDIT_CALLBACK(int3, MSG_NOZZLE MSG_N5, &thermalManager.target_temperature[4], 0, HEATER_4_MAXTEMP - 15, watch_temp_callback_E4);
1495
+            #if HOTENDS > 5
1496
+              MENU_MULTIPLIER_ITEM_EDIT_CALLBACK(int3, MSG_NOZZLE MSG_N6, &thermalManager.target_temperature[5], 0, HEATER_5_MAXTEMP - 15, watch_temp_callback_E5);
1497
+            #endif // HOTENDS > 5
1489
           #endif // HOTENDS > 4
1498
           #endif // HOTENDS > 4
1490
         #endif // HOTENDS > 3
1499
         #endif // HOTENDS > 3
1491
       #endif // HOTENDS > 2
1500
       #endif // HOTENDS > 2
1538
           MENU_ITEM_EDIT_CALLBACK(int3, MSG_FLOW MSG_N4, &planner.flow_percentage[3], 10, 999, _lcd_refresh_e_factor_3);
1547
           MENU_ITEM_EDIT_CALLBACK(int3, MSG_FLOW MSG_N4, &planner.flow_percentage[3], 10, 999, _lcd_refresh_e_factor_3);
1539
           #if EXTRUDERS > 4
1548
           #if EXTRUDERS > 4
1540
             MENU_ITEM_EDIT_CALLBACK(int3, MSG_FLOW MSG_N5, &planner.flow_percentage[4], 10, 999, _lcd_refresh_e_factor_4);
1549
             MENU_ITEM_EDIT_CALLBACK(int3, MSG_FLOW MSG_N5, &planner.flow_percentage[4], 10, 999, _lcd_refresh_e_factor_4);
1550
+            #if EXTRUDERS > 5
1551
+              MENU_ITEM_EDIT_CALLBACK(int3, MSG_FLOW MSG_N6, &planner.flow_percentage[5], 10, 999, _lcd_refresh_e_factor_5);
1552
+            #endif // EXTRUDERS > 5
1541
           #endif // EXTRUDERS > 4
1553
           #endif // EXTRUDERS > 4
1542
         #endif // EXTRUDERS > 3
1554
         #endif // EXTRUDERS > 3
1543
       #endif // EXTRUDERS > 2
1555
       #endif // EXTRUDERS > 2
1672
             void lcd_preheat_m1_e4() { _lcd_preheat(4, lcd_preheat_hotend_temp[0], lcd_preheat_bed_temp[0], lcd_preheat_fan_speed[0]); }
1684
             void lcd_preheat_m1_e4() { _lcd_preheat(4, lcd_preheat_hotend_temp[0], lcd_preheat_bed_temp[0], lcd_preheat_fan_speed[0]); }
1673
             void lcd_preheat_m2_e4() { _lcd_preheat(4, lcd_preheat_hotend_temp[1], lcd_preheat_bed_temp[1], lcd_preheat_fan_speed[1]); }
1685
             void lcd_preheat_m2_e4() { _lcd_preheat(4, lcd_preheat_hotend_temp[1], lcd_preheat_bed_temp[1], lcd_preheat_fan_speed[1]); }
1674
           #endif
1686
           #endif
1687
+          #if HOTENDS > 5
1688
+            void lcd_preheat_m1_e5_only() { _lcd_preheat(5, lcd_preheat_hotend_temp[0], -1, lcd_preheat_fan_speed[0]); }
1689
+            void lcd_preheat_m2_e5_only() { _lcd_preheat(5, lcd_preheat_hotend_temp[1], -1, lcd_preheat_fan_speed[1]); }
1690
+            #if HAS_HEATED_BED
1691
+              void lcd_preheat_m1_e5() { _lcd_preheat(5, lcd_preheat_hotend_temp[0], lcd_preheat_bed_temp[0], lcd_preheat_fan_speed[0]); }
1692
+              void lcd_preheat_m2_e5() { _lcd_preheat(5, lcd_preheat_hotend_temp[1], lcd_preheat_bed_temp[1], lcd_preheat_fan_speed[1]); }
1693
+            #endif
1694
+          #endif // HOTENDS > 5
1675
         #endif // HOTENDS > 4
1695
         #endif // HOTENDS > 4
1676
       #endif // HOTENDS > 3
1696
       #endif // HOTENDS > 3
1677
     #endif // HOTENDS > 2
1697
     #endif // HOTENDS > 2
1685
             thermalManager.setTargetHotend(lcd_preheat_hotend_temp[0], 3);
1705
             thermalManager.setTargetHotend(lcd_preheat_hotend_temp[0], 3);
1686
             #if HOTENDS > 4
1706
             #if HOTENDS > 4
1687
               thermalManager.setTargetHotend(lcd_preheat_hotend_temp[0], 4);
1707
               thermalManager.setTargetHotend(lcd_preheat_hotend_temp[0], 4);
1708
+              #if HOTENDS > 5
1709
+                thermalManager.setTargetHotend(lcd_preheat_hotend_temp[0], 5);
1710
+              #endif // HOTENDS > 5
1688
             #endif // HOTENDS > 4
1711
             #endif // HOTENDS > 4
1689
           #endif // HOTENDS > 3
1712
           #endif // HOTENDS > 3
1690
         #endif // HOTENDS > 2
1713
         #endif // HOTENDS > 2
1704
             thermalManager.setTargetHotend(lcd_preheat_hotend_temp[1], 3);
1727
             thermalManager.setTargetHotend(lcd_preheat_hotend_temp[1], 3);
1705
             #if HOTENDS > 4
1728
             #if HOTENDS > 4
1706
               thermalManager.setTargetHotend(lcd_preheat_hotend_temp[1], 4);
1729
               thermalManager.setTargetHotend(lcd_preheat_hotend_temp[1], 4);
1730
+              #if HOTENDS > 5
1731
+                thermalManager.setTargetHotend(lcd_preheat_hotend_temp[1], 5);
1732
+              #endif // HOTENDS > 5
1707
             #endif // HOTENDS > 4
1733
             #endif // HOTENDS > 4
1708
           #endif // HOTENDS > 3
1734
           #endif // HOTENDS > 3
1709
         #endif // HOTENDS > 2
1735
         #endif // HOTENDS > 2
1765
               #else
1791
               #else
1766
                 MENU_ITEM(function, MSG_PREHEAT_1_N MSG_H5, lcd_preheat_m1_e4_only);
1792
                 MENU_ITEM(function, MSG_PREHEAT_1_N MSG_H5, lcd_preheat_m1_e4_only);
1767
               #endif
1793
               #endif
1794
+              #if HOTENDS > 5
1795
+                #if HAS_HEATED_BED
1796
+                  MENU_ITEM(function, MSG_PREHEAT_1_N MSG_H6, lcd_preheat_m1_e5);
1797
+                  MENU_ITEM(function, MSG_PREHEAT_1_END " " MSG_E6, lcd_preheat_m1_e5_only);
1798
+                #else
1799
+                  MENU_ITEM(function, MSG_PREHEAT_1_N MSG_H6, lcd_preheat_m1_e5_only);
1800
+                #endif
1801
+              #endif // HOTENDS > 5
1768
             #endif // HOTENDS > 4
1802
             #endif // HOTENDS > 4
1769
           #endif // HOTENDS > 3
1803
           #endif // HOTENDS > 3
1770
         #endif // HOTENDS > 2
1804
         #endif // HOTENDS > 2
1817
               #else
1851
               #else
1818
                 MENU_ITEM(function, MSG_PREHEAT_2_N MSG_H5, lcd_preheat_m2_e4_only);
1852
                 MENU_ITEM(function, MSG_PREHEAT_2_N MSG_H5, lcd_preheat_m2_e4_only);
1819
               #endif
1853
               #endif
1854
+              #if HOTENDS > 5
1855
+                #if HAS_HEATED_BED
1856
+                  MENU_ITEM(function, MSG_PREHEAT_2_N MSG_H6, lcd_preheat_m2_e5);
1857
+                  MENU_ITEM(function, MSG_PREHEAT_2_END " " MSG_E6, lcd_preheat_m2_e5_only);
1858
+                #else
1859
+                  MENU_ITEM(function, MSG_PREHEAT_2_N MSG_H6, lcd_preheat_m2_e5_only);
1860
+                #endif
1861
+              #endif // HOTENDS > 5
1820
             #endif // HOTENDS > 4
1862
             #endif // HOTENDS > 4
1821
           #endif // HOTENDS > 3
1863
           #endif // HOTENDS > 3
1822
         #endif // HOTENDS > 2
1864
         #endif // HOTENDS > 2
3061
               case 3: pos_label = PSTR(MSG_MOVE_E MSG_MOVE_E4); break;
3103
               case 3: pos_label = PSTR(MSG_MOVE_E MSG_MOVE_E4); break;
3062
               #if E_MANUAL > 4
3104
               #if E_MANUAL > 4
3063
                 case 4: pos_label = PSTR(MSG_MOVE_E MSG_MOVE_E5); break;
3105
                 case 4: pos_label = PSTR(MSG_MOVE_E MSG_MOVE_E5); break;
3106
+                #if E_MANUAL > 5
3107
+                  case 5: pos_label = PSTR(MSG_MOVE_E MSG_MOVE_E6); break;
3108
+                #endif // E_MANUAL > 5
3064
               #endif // E_MANUAL > 4
3109
               #endif // E_MANUAL > 4
3065
             #endif // E_MANUAL > 3
3110
             #endif // E_MANUAL > 3
3066
           #endif // E_MANUAL > 2
3111
           #endif // E_MANUAL > 2
3087
         void lcd_move_e3() { _lcd_move_e(3); }
3132
         void lcd_move_e3() { _lcd_move_e(3); }
3088
         #if E_MANUAL > 4
3133
         #if E_MANUAL > 4
3089
           void lcd_move_e4() { _lcd_move_e(4); }
3134
           void lcd_move_e4() { _lcd_move_e(4); }
3135
+          #if E_MANUAL > 5
3136
+            void lcd_move_e5() { _lcd_move_e(5); }
3137
+          #endif // E_MANUAL > 5
3090
         #endif // E_MANUAL > 4
3138
         #endif // E_MANUAL > 4
3091
       #endif // E_MANUAL > 3
3139
       #endif // E_MANUAL > 3
3092
     #endif // E_MANUAL > 2
3140
     #endif // E_MANUAL > 2
3147
         void lcd_move_get_e3_amount() { _lcd_move_distance_menu(E_AXIS, lcd_move_e3); }
3195
         void lcd_move_get_e3_amount() { _lcd_move_distance_menu(E_AXIS, lcd_move_e3); }
3148
         #if E_MANUAL > 4
3196
         #if E_MANUAL > 4
3149
           void lcd_move_get_e4_amount() { _lcd_move_distance_menu(E_AXIS, lcd_move_e4); }
3197
           void lcd_move_get_e4_amount() { _lcd_move_distance_menu(E_AXIS, lcd_move_e4); }
3198
+          #if E_MANUAL > 5
3199
+            void lcd_move_get_e5_amount() { _lcd_move_distance_menu(E_AXIS, lcd_move_e5); }
3200
+          #endif // E_MANUAL > 5
3150
         #endif // E_MANUAL > 4
3201
         #endif // E_MANUAL > 4
3151
       #endif // E_MANUAL > 3
3202
       #endif // E_MANUAL > 3
3152
     #endif // E_MANUAL > 2
3203
     #endif // E_MANUAL > 2
3199
 
3250
 
3200
     #if ENABLED(SWITCHING_EXTRUDER) || ENABLED(SWITCHING_NOZZLE)
3251
     #if ENABLED(SWITCHING_EXTRUDER) || ENABLED(SWITCHING_NOZZLE)
3201
 
3252
 
3202
-      #if EXTRUDERS == 4
3253
+      #if EXTRUDERS == 6
3254
+        switch (active_extruder) {
3255
+          case 0: MENU_ITEM(gcode, MSG_SELECT " " MSG_E2, PSTR("T1")); break;
3256
+          case 1: MENU_ITEM(gcode, MSG_SELECT " " MSG_E1, PSTR("T0")); break;
3257
+          case 2: MENU_ITEM(gcode, MSG_SELECT " " MSG_E4, PSTR("T3")); break;
3258
+          case 3: MENU_ITEM(gcode, MSG_SELECT " " MSG_E3, PSTR("T2")); break;
3259
+          case 4: MENU_ITEM(gcode, MSG_SELECT " " MSG_E6, PSTR("T5")); break;
3260
+          case 5: MENU_ITEM(gcode, MSG_SELECT " " MSG_E5, PSTR("T4")); break;
3261
+        }
3262
+      #elif EXTRUDERS == 5 || EXTRUDERS == 4
3203
         switch (active_extruder) {
3263
         switch (active_extruder) {
3204
           case 0: MENU_ITEM(gcode, MSG_SELECT " " MSG_E2, PSTR("T1")); break;
3264
           case 0: MENU_ITEM(gcode, MSG_SELECT " " MSG_E2, PSTR("T1")); break;
3205
           case 1: MENU_ITEM(gcode, MSG_SELECT " " MSG_E1, PSTR("T0")); break;
3265
           case 1: MENU_ITEM(gcode, MSG_SELECT " " MSG_E1, PSTR("T0")); break;
3253
             MENU_ITEM(submenu, MSG_MOVE_E MSG_MOVE_E4, lcd_move_get_e3_amount);
3313
             MENU_ITEM(submenu, MSG_MOVE_E MSG_MOVE_E4, lcd_move_get_e3_amount);
3254
             #if E_MANUAL > 4
3314
             #if E_MANUAL > 4
3255
               MENU_ITEM(submenu, MSG_MOVE_E MSG_MOVE_E5, lcd_move_get_e4_amount);
3315
               MENU_ITEM(submenu, MSG_MOVE_E MSG_MOVE_E5, lcd_move_get_e4_amount);
3316
+              #if E_MANUAL > 5
3317
+                MENU_ITEM(submenu, MSG_MOVE_E MSG_MOVE_E6, lcd_move_get_e5_amount);
3318
+              #endif // E_MANUAL > 5
3256
             #endif // E_MANUAL > 4
3319
             #endif // E_MANUAL > 4
3257
           #endif // E_MANUAL > 3
3320
           #endif // E_MANUAL > 3
3258
         #endif // E_MANUAL > 2
3321
         #endif // E_MANUAL > 2
3412
             DEFINE_PIDTEMP_FUNCS(3);
3475
             DEFINE_PIDTEMP_FUNCS(3);
3413
             #if HOTENDS > 4
3476
             #if HOTENDS > 4
3414
               DEFINE_PIDTEMP_FUNCS(4);
3477
               DEFINE_PIDTEMP_FUNCS(4);
3478
+              #if HOTENDS > 5
3479
+                DEFINE_PIDTEMP_FUNCS(5);
3480
+              #endif // HOTENDS > 5
3415
             #endif // HOTENDS > 4
3481
             #endif // HOTENDS > 4
3416
           #endif // HOTENDS > 3
3482
           #endif // HOTENDS > 3
3417
         #endif // HOTENDS > 2
3483
         #endif // HOTENDS > 2
3444
           MENU_MULTIPLIER_ITEM_EDIT_CALLBACK(int3, MSG_NOZZLE MSG_N4, &thermalManager.target_temperature[3], 0, HEATER_3_MAXTEMP - 15, watch_temp_callback_E3);
3510
           MENU_MULTIPLIER_ITEM_EDIT_CALLBACK(int3, MSG_NOZZLE MSG_N4, &thermalManager.target_temperature[3], 0, HEATER_3_MAXTEMP - 15, watch_temp_callback_E3);
3445
           #if HOTENDS > 4
3511
           #if HOTENDS > 4
3446
             MENU_MULTIPLIER_ITEM_EDIT_CALLBACK(int3, MSG_NOZZLE MSG_N5, &thermalManager.target_temperature[4], 0, HEATER_4_MAXTEMP - 15, watch_temp_callback_E4);
3512
             MENU_MULTIPLIER_ITEM_EDIT_CALLBACK(int3, MSG_NOZZLE MSG_N5, &thermalManager.target_temperature[4], 0, HEATER_4_MAXTEMP - 15, watch_temp_callback_E4);
3513
+            #if HOTENDS > 5
3514
+              MENU_MULTIPLIER_ITEM_EDIT_CALLBACK(int3, MSG_NOZZLE MSG_N6, &thermalManager.target_temperature[5], 0, HEATER_5_MAXTEMP - 15, watch_temp_callback_E5);
3515
+            #endif // HOTENDS > 5
3447
           #endif // HOTENDS > 4
3516
           #endif // HOTENDS > 4
3448
         #endif // HOTENDS > 3
3517
         #endif // HOTENDS > 3
3449
       #endif // HOTENDS > 2
3518
       #endif // HOTENDS > 2
3568
             PID_MENU_ITEMS(" " MSG_E4, 3);
3637
             PID_MENU_ITEMS(" " MSG_E4, 3);
3569
             #if HOTENDS > 4
3638
             #if HOTENDS > 4
3570
               PID_MENU_ITEMS(" " MSG_E5, 4);
3639
               PID_MENU_ITEMS(" " MSG_E5, 4);
3640
+              #if HOTENDS > 5
3641
+                PID_MENU_ITEMS(" " MSG_E6, 5);
3642
+              #endif // HOTENDS > 5
3571
             #endif // HOTENDS > 4
3643
             #endif // HOTENDS > 4
3572
           #endif // HOTENDS > 3
3644
           #endif // HOTENDS > 3
3573
         #endif // HOTENDS > 2
3645
         #endif // HOTENDS > 2
3583
   #if DISABLED(SLIM_LCD_MENUS)
3655
   #if DISABLED(SLIM_LCD_MENUS)
3584
 
3656
 
3585
     void _lcd_configuration_temperature_preheat_settings_menu(const uint8_t material) {
3657
     void _lcd_configuration_temperature_preheat_settings_menu(const uint8_t material) {
3586
-      #if HOTENDS > 4
3658
+      #if HOTENDS > 5
3659
+        #define MINTEMP_ALL MIN5(HEATER_0_MINTEMP, HEATER_1_MINTEMP, HEATER_2_MINTEMP, HEATER_3_MINTEMP, HEATER_4_MINTEMP, HEATER_5_MINTEMP)
3660
+        #define MAXTEMP_ALL MAX5(HEATER_0_MAXTEMP, HEATER_1_MAXTEMP, HEATER_2_MAXTEMP, HEATER_3_MAXTEMP, HEATER_4_MAXTEMP, HEATER_5_MAXTEMP)
3661
+      #elif HOTENDS > 4
3587
         #define MINTEMP_ALL MIN5(HEATER_0_MINTEMP, HEATER_1_MINTEMP, HEATER_2_MINTEMP, HEATER_3_MINTEMP, HEATER_4_MINTEMP)
3662
         #define MINTEMP_ALL MIN5(HEATER_0_MINTEMP, HEATER_1_MINTEMP, HEATER_2_MINTEMP, HEATER_3_MINTEMP, HEATER_4_MINTEMP)
3588
         #define MAXTEMP_ALL MAX5(HEATER_0_MAXTEMP, HEATER_1_MAXTEMP, HEATER_2_MAXTEMP, HEATER_3_MAXTEMP, HEATER_4_MAXTEMP)
3663
         #define MAXTEMP_ALL MAX5(HEATER_0_MAXTEMP, HEATER_1_MAXTEMP, HEATER_2_MAXTEMP, HEATER_3_MAXTEMP, HEATER_4_MAXTEMP)
3589
       #elif HOTENDS > 3
3664
       #elif HOTENDS > 3
3639
           void _reset_e3_acceleration_rate() { _reset_e_acceleration_rate(3); }
3714
           void _reset_e3_acceleration_rate() { _reset_e_acceleration_rate(3); }
3640
           #if E_STEPPERS > 4
3715
           #if E_STEPPERS > 4
3641
             void _reset_e4_acceleration_rate() { _reset_e_acceleration_rate(4); }
3716
             void _reset_e4_acceleration_rate() { _reset_e_acceleration_rate(4); }
3717
+            #if E_STEPPERS > 5
3718
+              void _reset_e5_acceleration_rate() { _reset_e_acceleration_rate(5); }
3719
+            #endif // E_STEPPERS > 5
3642
           #endif // E_STEPPERS > 4
3720
           #endif // E_STEPPERS > 4
3643
         #endif // E_STEPPERS > 3
3721
         #endif // E_STEPPERS > 3
3644
       #endif // E_STEPPERS > 2
3722
       #endif // E_STEPPERS > 2
3660
           void _planner_refresh_e3_positioning() { _planner_refresh_e_positioning(3); }
3738
           void _planner_refresh_e3_positioning() { _planner_refresh_e_positioning(3); }
3661
           #if E_STEPPERS > 4
3739
           #if E_STEPPERS > 4
3662
             void _planner_refresh_e4_positioning() { _planner_refresh_e_positioning(4); }
3740
             void _planner_refresh_e4_positioning() { _planner_refresh_e_positioning(4); }
3741
+            #if E_STEPPERS > 5
3742
+              void _planner_refresh_e5_positioning() { _planner_refresh_e_positioning(5); }
3743
+            #endif // E_STEPPERS > 5
3663
           #endif // E_STEPPERS > 4
3744
           #endif // E_STEPPERS > 4
3664
         #endif // E_STEPPERS > 3
3745
         #endif // E_STEPPERS > 3
3665
       #endif // E_STEPPERS > 2
3746
       #endif // E_STEPPERS > 2
3685
             MENU_MULTIPLIER_ITEM_EDIT(float3, MSG_VMAX MSG_E4, &planner.max_feedrate_mm_s[E_AXIS + 3], 1, 999);
3766
             MENU_MULTIPLIER_ITEM_EDIT(float3, MSG_VMAX MSG_E4, &planner.max_feedrate_mm_s[E_AXIS + 3], 1, 999);
3686
             #if E_STEPPERS > 4
3767
             #if E_STEPPERS > 4
3687
               MENU_MULTIPLIER_ITEM_EDIT(float3, MSG_VMAX MSG_E5, &planner.max_feedrate_mm_s[E_AXIS + 4], 1, 999);
3768
               MENU_MULTIPLIER_ITEM_EDIT(float3, MSG_VMAX MSG_E5, &planner.max_feedrate_mm_s[E_AXIS + 4], 1, 999);
3769
+              #if E_STEPPERS > 5
3770
+                MENU_MULTIPLIER_ITEM_EDIT(float3, MSG_VMAX MSG_E6, &planner.max_feedrate_mm_s[E_AXIS + 5], 1, 999);
3771
+              #endif // E_STEPPERS > 5
3688
             #endif // E_STEPPERS > 4
3772
             #endif // E_STEPPERS > 4
3689
           #endif // E_STEPPERS > 3
3773
           #endif // E_STEPPERS > 3
3690
         #endif // E_STEPPERS > 2
3774
         #endif // E_STEPPERS > 2
3730
             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);
3814
             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);
3731
             #if E_STEPPERS > 4
3815
             #if E_STEPPERS > 4
3732
               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);
3816
               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);
3817
+              #if E_STEPPERS > 5
3818
+                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);
3819
+              #endif // E_STEPPERS > 5
3733
             #endif // E_STEPPERS > 4
3820
             #endif // E_STEPPERS > 4
3734
           #endif // E_STEPPERS > 3
3821
           #endif // E_STEPPERS > 3
3735
         #endif // E_STEPPERS > 2
3822
         #endif // E_STEPPERS > 2
3787
             MENU_MULTIPLIER_ITEM_EDIT_CALLBACK(float62, MSG_E4STEPS, &planner.axis_steps_per_mm[E_AXIS + 3], 5, 9999, _planner_refresh_e3_positioning);
3874
             MENU_MULTIPLIER_ITEM_EDIT_CALLBACK(float62, MSG_E4STEPS, &planner.axis_steps_per_mm[E_AXIS + 3], 5, 9999, _planner_refresh_e3_positioning);
3788
             #if E_STEPPERS > 4
3875
             #if E_STEPPERS > 4
3789
               MENU_MULTIPLIER_ITEM_EDIT_CALLBACK(float62, MSG_E5STEPS, &planner.axis_steps_per_mm[E_AXIS + 4], 5, 9999, _planner_refresh_e4_positioning);
3876
               MENU_MULTIPLIER_ITEM_EDIT_CALLBACK(float62, MSG_E5STEPS, &planner.axis_steps_per_mm[E_AXIS + 4], 5, 9999, _planner_refresh_e4_positioning);
3877
+              #if E_STEPPERS > 5
3878
+                MENU_MULTIPLIER_ITEM_EDIT_CALLBACK(float62, MSG_E6STEPS, &planner.axis_steps_per_mm[E_AXIS + 5], 5, 9999, _planner_refresh_e5_positioning);
3879
+              #endif // E_STEPPERS > 5
3790
             #endif // E_STEPPERS > 4
3880
             #endif // E_STEPPERS > 4
3791
           #endif // E_STEPPERS > 3
3881
           #endif // E_STEPPERS > 3
3792
         #endif // E_STEPPERS > 2
3882
         #endif // E_STEPPERS > 2
3865
             MENU_ITEM_EDIT(float52, MSG_ADVANCE_K MSG_E4, &planner.extruder_advance_K[3], 0, 999);
3955
             MENU_ITEM_EDIT(float52, MSG_ADVANCE_K MSG_E4, &planner.extruder_advance_K[3], 0, 999);
3866
             #if EXTRUDERS > 4
3956
             #if EXTRUDERS > 4
3867
               MENU_ITEM_EDIT(float52, MSG_ADVANCE_K MSG_E5, &planner.extruder_advance_K[4], 0, 999);
3957
               MENU_ITEM_EDIT(float52, MSG_ADVANCE_K MSG_E5, &planner.extruder_advance_K[4], 0, 999);
3958
+              #if EXTRUDERS > 5
3959
+                MENU_ITEM_EDIT(float52, MSG_ADVANCE_K MSG_E6, &planner.extruder_advance_K[5], 0, 999);
3960
+              #endif // EXTRUDERS > 5
3868
             #endif // EXTRUDERS > 4
3961
             #endif // EXTRUDERS > 4
3869
           #endif // EXTRUDERS > 3
3962
           #endif // EXTRUDERS > 3
3870
         #endif // EXTRUDERS > 2
3963
         #endif // EXTRUDERS > 2
3914
               MENU_ITEM_EDIT(float52, MSG_ADVANCE_K MSG_E4, &planner.extruder_advance_K[3], 0, 999);
4007
               MENU_ITEM_EDIT(float52, MSG_ADVANCE_K MSG_E4, &planner.extruder_advance_K[3], 0, 999);
3915
               #if EXTRUDERS > 4
4008
               #if EXTRUDERS > 4
3916
                 MENU_ITEM_EDIT(float52, MSG_ADVANCE_K MSG_E5, &planner.extruder_advance_K[4], 0, 999);
4009
                 MENU_ITEM_EDIT(float52, MSG_ADVANCE_K MSG_E5, &planner.extruder_advance_K[4], 0, 999);
4010
+                #if EXTRUDERS > 5
4011
+                  MENU_ITEM_EDIT(float52, MSG_ADVANCE_K MSG_E6, &planner.extruder_advance_K[5], 0, 999);
4012
+                #endif // EXTRUDERS > 5
3917
               #endif // EXTRUDERS > 4
4013
               #endif // EXTRUDERS > 4
3918
             #endif // EXTRUDERS > 3
4014
             #endif // EXTRUDERS > 3
3919
           #endif // EXTRUDERS > 2
4015
           #endif // EXTRUDERS > 2
3932
             MENU_MULTIPLIER_ITEM_EDIT_CALLBACK(float43, MSG_FILAMENT_DIAM MSG_DIAM_E2, &planner.filament_size[1], 1.5f, 3.25f, planner.calculate_volumetric_multipliers);
4028
             MENU_MULTIPLIER_ITEM_EDIT_CALLBACK(float43, MSG_FILAMENT_DIAM MSG_DIAM_E2, &planner.filament_size[1], 1.5f, 3.25f, planner.calculate_volumetric_multipliers);
3933
             #if EXTRUDERS > 2
4029
             #if EXTRUDERS > 2
3934
               MENU_MULTIPLIER_ITEM_EDIT_CALLBACK(float43, MSG_FILAMENT_DIAM MSG_DIAM_E3, &planner.filament_size[2], 1.5f, 3.25f, planner.calculate_volumetric_multipliers);
4030
               MENU_MULTIPLIER_ITEM_EDIT_CALLBACK(float43, MSG_FILAMENT_DIAM MSG_DIAM_E3, &planner.filament_size[2], 1.5f, 3.25f, planner.calculate_volumetric_multipliers);
3935
-            #if EXTRUDERS > 3
3936
-              MENU_MULTIPLIER_ITEM_EDIT_CALLBACK(float43, MSG_FILAMENT_DIAM MSG_DIAM_E4, &planner.filament_size[3], 1.5f, 3.25f, planner.calculate_volumetric_multipliers);
3937
-              #if EXTRUDERS > 4
4031
+              #if EXTRUDERS > 3
4032
+                MENU_MULTIPLIER_ITEM_EDIT_CALLBACK(float43, MSG_FILAMENT_DIAM MSG_DIAM_E4, &planner.filament_size[3], 1.5f, 3.25f, planner.calculate_volumetric_multipliers);
4033
+                #if EXTRUDERS > 4
3938
                   MENU_MULTIPLIER_ITEM_EDIT_CALLBACK(float43, MSG_FILAMENT_DIAM MSG_DIAM_E5, &planner.filament_size[4], 1.5f, 3.25f, planner.calculate_volumetric_multipliers);
4034
                   MENU_MULTIPLIER_ITEM_EDIT_CALLBACK(float43, MSG_FILAMENT_DIAM MSG_DIAM_E5, &planner.filament_size[4], 1.5f, 3.25f, planner.calculate_volumetric_multipliers);
4035
+                  #if EXTRUDERS > 5
4036
+                    MENU_MULTIPLIER_ITEM_EDIT_CALLBACK(float43, MSG_FILAMENT_DIAM MSG_DIAM_E6, &planner.filament_size[5], 1.5f, 3.25f, planner.calculate_volumetric_multipliers);
4037
+                  #endif // EXTRUDERS > 5
3939
                 #endif // EXTRUDERS > 4
4038
                 #endif // EXTRUDERS > 4
3940
               #endif // EXTRUDERS > 3
4039
               #endif // EXTRUDERS > 3
3941
             #endif // EXTRUDERS > 2
4040
             #endif // EXTRUDERS > 2
3960
           MENU_MULTIPLIER_ITEM_EDIT(float3, MSG_FILAMENT_UNLOAD MSG_DIAM_E2, &filament_change_unload_length[1], 0, extrude_maxlength);
4059
           MENU_MULTIPLIER_ITEM_EDIT(float3, MSG_FILAMENT_UNLOAD MSG_DIAM_E2, &filament_change_unload_length[1], 0, extrude_maxlength);
3961
           #if EXTRUDERS > 2
4060
           #if EXTRUDERS > 2
3962
             MENU_MULTIPLIER_ITEM_EDIT(float3, MSG_FILAMENT_UNLOAD MSG_DIAM_E3, &filament_change_unload_length[2], 0, extrude_maxlength);
4061
             MENU_MULTIPLIER_ITEM_EDIT(float3, MSG_FILAMENT_UNLOAD MSG_DIAM_E3, &filament_change_unload_length[2], 0, extrude_maxlength);
3963
-          #if EXTRUDERS > 3
3964
-            MENU_MULTIPLIER_ITEM_EDIT(float3, MSG_FILAMENT_UNLOAD MSG_DIAM_E4, &filament_change_unload_length[3], 0, extrude_maxlength);
3965
-            #if EXTRUDERS > 4
4062
+            #if EXTRUDERS > 3
4063
+              MENU_MULTIPLIER_ITEM_EDIT(float3, MSG_FILAMENT_UNLOAD MSG_DIAM_E4, &filament_change_unload_length[3], 0, extrude_maxlength);
4064
+              #if EXTRUDERS > 4
3966
                 MENU_MULTIPLIER_ITEM_EDIT(float3, MSG_FILAMENT_UNLOAD MSG_DIAM_E5, &filament_change_unload_length[4], 0, extrude_maxlength);
4065
                 MENU_MULTIPLIER_ITEM_EDIT(float3, MSG_FILAMENT_UNLOAD MSG_DIAM_E5, &filament_change_unload_length[4], 0, extrude_maxlength);
4066
+                #if EXTRUDERS > 5
4067
+                  MENU_MULTIPLIER_ITEM_EDIT(float3, MSG_FILAMENT_UNLOAD MSG_DIAM_E6, &filament_change_unload_length[5], 0, extrude_maxlength);
4068
+                #endif // EXTRUDERS > 5
3967
               #endif // EXTRUDERS > 4
4069
               #endif // EXTRUDERS > 4
3968
             #endif // EXTRUDERS > 3
4070
             #endif // EXTRUDERS > 3
3969
           #endif // EXTRUDERS > 2
4071
           #endif // EXTRUDERS > 2
3977
           MENU_MULTIPLIER_ITEM_EDIT(float3, MSG_FILAMENT_LOAD MSG_DIAM_E2, &filament_change_load_length[1], 0, extrude_maxlength);
4079
           MENU_MULTIPLIER_ITEM_EDIT(float3, MSG_FILAMENT_LOAD MSG_DIAM_E2, &filament_change_load_length[1], 0, extrude_maxlength);
3978
           #if EXTRUDERS > 2
4080
           #if EXTRUDERS > 2
3979
             MENU_MULTIPLIER_ITEM_EDIT(float3, MSG_FILAMENT_LOAD MSG_DIAM_E3, &filament_change_load_length[2], 0, extrude_maxlength);
4081
             MENU_MULTIPLIER_ITEM_EDIT(float3, MSG_FILAMENT_LOAD MSG_DIAM_E3, &filament_change_load_length[2], 0, extrude_maxlength);
3980
-          #if EXTRUDERS > 3
3981
-            MENU_MULTIPLIER_ITEM_EDIT(float3, MSG_FILAMENT_LOAD MSG_DIAM_E4, &filament_change_load_length[3], 0, extrude_maxlength);
3982
-            #if EXTRUDERS > 4
4082
+            #if EXTRUDERS > 3
4083
+              MENU_MULTIPLIER_ITEM_EDIT(float3, MSG_FILAMENT_LOAD MSG_DIAM_E4, &filament_change_load_length[3], 0, extrude_maxlength);
4084
+              #if EXTRUDERS > 4
3983
                 MENU_MULTIPLIER_ITEM_EDIT(float3, MSG_FILAMENT_LOAD MSG_DIAM_E5, &filament_change_load_length[4], 0, extrude_maxlength);
4085
                 MENU_MULTIPLIER_ITEM_EDIT(float3, MSG_FILAMENT_LOAD MSG_DIAM_E5, &filament_change_load_length[4], 0, extrude_maxlength);
4086
+                #if EXTRUDERS > 5
4087
+                  MENU_MULTIPLIER_ITEM_EDIT(float3, MSG_FILAMENT_LOAD MSG_DIAM_E6, &filament_change_load_length[5], 0, extrude_maxlength);
4088
+                #endif // EXTRUDERS > 5
3984
               #endif // EXTRUDERS > 4
4089
               #endif // EXTRUDERS > 4
3985
             #endif // EXTRUDERS > 3
4090
             #endif // EXTRUDERS > 3
3986
           #endif // EXTRUDERS > 2
4091
           #endif // EXTRUDERS > 2
4405
               case 3: max_temp = HEATER_3_MAXTEMP; break;
4510
               case 3: max_temp = HEATER_3_MAXTEMP; break;
4406
               #if HOTENDS > 4
4511
               #if HOTENDS > 4
4407
                 case 4: max_temp = HEATER_4_MAXTEMP; break;
4512
                 case 4: max_temp = HEATER_4_MAXTEMP; break;
4513
+                #if HOTENDS > 5
4514
+                  case 5: max_temp = HEATER_5_MAXTEMP; break;
4515
+                #endif
4408
               #endif
4516
               #endif
4409
             #endif
4517
             #endif
4410
           #endif
4518
           #endif
4486
                   MENU_ITEM_P(submenu, msg4, lcd_temp_menu_e4_filament_change);
4594
                   MENU_ITEM_P(submenu, msg4, lcd_temp_menu_e4_filament_change);
4487
                 else
4595
                 else
4488
                   MENU_ITEM_P(gcode, msg4, PSTR("M600 B0 T4"));
4596
                   MENU_ITEM_P(gcode, msg4, PSTR("M600 B0 T4"));
4597
+                #if E_STEPPERS > 5
4598
+                  PGM_P msg5 = PSTR(MSG_FILAMENTCHANGE " " MSG_E6);
4599
+                  if (thermalManager.targetTooColdToExtrude(5))
4600
+                    MENU_ITEM_P(submenu, msg5, lcd_temp_menu_e5_filament_change);
4601
+                  else
4602
+                    MENU_ITEM_P(gcode, msg5, PSTR("M600 B0 T5"));
4603
+                #endif // E_STEPPERS > 5
4489
               #endif // E_STEPPERS > 4
4604
               #endif // E_STEPPERS > 4
4490
             #endif // E_STEPPERS > 3
4605
             #endif // E_STEPPERS > 3
4491
           #endif // E_STEPPERS > 2
4606
           #endif // E_STEPPERS > 2
4529
                       MENU_ITEM_P(submenu, msg4, lcd_temp_menu_e4_filament_load);
4644
                       MENU_ITEM_P(submenu, msg4, lcd_temp_menu_e4_filament_load);
4530
                     else
4645
                     else
4531
                       MENU_ITEM_P(gcode, msg4, PSTR("M701 T4"));
4646
                       MENU_ITEM_P(gcode, msg4, PSTR("M701 T4"));
4647
+                    #if E_STEPPERS > 5
4648
+                      PGM_P msg5 = PSTR(MSG_FILAMENTLOAD " " MSG_E6);
4649
+                      if (thermalManager.targetTooColdToExtrude(5))
4650
+                        MENU_ITEM_P(submenu, msg5, lcd_temp_menu_e5_filament_load);
4651
+                      else
4652
+                        MENU_ITEM_P(gcode, msg5, PSTR("M701 T5"));
4653
+                    #endif // E_STEPPERS > 5
4532
                   #endif // E_STEPPERS > 4
4654
                   #endif // E_STEPPERS > 4
4533
                 #endif // E_STEPPERS > 3
4655
                 #endif // E_STEPPERS > 3
4534
               #endif // E_STEPPERS > 2
4656
               #endif // E_STEPPERS > 2
4551
                         && thermalManager.targetHotEnoughToExtrude(3)
4673
                         && thermalManager.targetHotEnoughToExtrude(3)
4552
                         #if E_STEPPERS > 4
4674
                         #if E_STEPPERS > 4
4553
                           && thermalManager.targetHotEnoughToExtrude(4)
4675
                           && thermalManager.targetHotEnoughToExtrude(4)
4676
+                          #if E_STEPPERS > 5
4677
+                            && thermalManager.targetHotEnoughToExtrude(5)
4678
+                          #endif // E_STEPPERS > 5
4554
                         #endif // E_STEPPERS > 4
4679
                         #endif // E_STEPPERS > 4
4555
                       #endif // E_STEPPERS > 3
4680
                       #endif // E_STEPPERS > 3
4556
                     #endif // E_STEPPERS > 2
4681
                     #endif // E_STEPPERS > 2
4583
                       MENU_ITEM(gcode, MSG_FILAMENTUNLOAD " " MSG_E5, PSTR("M702 T4"));
4708
                       MENU_ITEM(gcode, MSG_FILAMENTUNLOAD " " MSG_E5, PSTR("M702 T4"));
4584
                     else
4709
                     else
4585
                       MENU_ITEM(submenu, MSG_FILAMENTUNLOAD " " MSG_E5, lcd_temp_menu_e4_filament_unload);
4710
                       MENU_ITEM(submenu, MSG_FILAMENTUNLOAD " " MSG_E5, lcd_temp_menu_e4_filament_unload);
4711
+                    #if E_STEPPERS > 5
4712
+                      if (thermalManager.targetHotEnoughToExtrude(5))
4713
+                        MENU_ITEM(gcode, MSG_FILAMENTUNLOAD " " MSG_E6, PSTR("M702 T5"));
4714
+                      else
4715
+                        MENU_ITEM(submenu, MSG_FILAMENTUNLOAD " " MSG_E6, lcd_temp_menu_e5_filament_unload);
4716
+                    #endif // E_STEPPERS > 5
4586
                   #endif // E_STEPPERS > 4
4717
                   #endif // E_STEPPERS > 4
4587
                 #endif // E_STEPPERS > 3
4718
                 #endif // E_STEPPERS > 3
4588
               #endif // E_STEPPERS > 2
4719
               #endif // E_STEPPERS > 2

+ 168
- 108
Marlin/src/module/configuration_store.cpp Целия файл

37
  */
37
  */
38
 
38
 
39
 // Change EEPROM version if the structure changes
39
 // Change EEPROM version if the structure changes
40
-#define EEPROM_VERSION "V57"
40
+#define EEPROM_VERSION "V58"
41
 #define EEPROM_OFFSET 100
41
 #define EEPROM_OFFSET 100
42
 
42
 
43
 // Check the integrity of data offsets.
43
 // Check the integrity of data offsets.
213
   //
213
   //
214
   // PIDTEMP
214
   // PIDTEMP
215
   //
215
   //
216
-  PIDC hotendPID[MAX_EXTRUDERS];                        // M301 En PIDC / M303 En U
216
+  PIDC hotendPID[HOTENDS];                              // M301 En PIDC / M303 En U
217
 
217
 
218
   int16_t lpq_len;                                      // M301 L
218
   int16_t lpq_len;                                      // M301 L
219
 
219
 
244
   // !NO_VOLUMETRIC
244
   // !NO_VOLUMETRIC
245
   //
245
   //
246
   bool parser_volumetric_enabled;                       // M200 D  parser.volumetric_enabled
246
   bool parser_volumetric_enabled;                       // M200 D  parser.volumetric_enabled
247
-  float planner_filament_size[MAX_EXTRUDERS];           // M200 T D  planner.filament_size[]
247
+  float planner_filament_size[EXTRUDERS];               // M200 T D  planner.filament_size[]
248
 
248
 
249
   //
249
   //
250
   // HAS_TRINAMIC
250
   // HAS_TRINAMIC
251
   //
251
   //
252
   #define TMC_AXES (MAX_EXTRUDERS + 7)
252
   #define TMC_AXES (MAX_EXTRUDERS + 7)
253
-  uint16_t tmc_stepper_current[TMC_AXES];               // M906 X Y Z X2 Y2 Z2 Z3 E0 E1 E2 E3 E4
254
-  uint32_t tmc_hybrid_threshold[TMC_AXES];              // M913 X Y Z X2 Y2 Z2 Z3 E0 E1 E2 E3 E4
253
+  uint16_t tmc_stepper_current[TMC_AXES];               // M906 X Y Z X2 Y2 Z2 Z3 E0 E1 E2 E3 E4 E5
254
+  uint32_t tmc_hybrid_threshold[TMC_AXES];              // M913 X Y Z X2 Y2 Z2 Z3 E0 E1 E2 E3 E4 E5
255
   int16_t tmc_sgt[XYZ];                                 // M914 X Y Z
255
   int16_t tmc_sgt[XYZ];                                 // M914 X Y Z
256
 
256
 
257
   //
257
   //
279
   //
279
   //
280
   // ADVANCED_PAUSE_FEATURE
280
   // ADVANCED_PAUSE_FEATURE
281
   //
281
   //
282
-  float filament_change_unload_length[MAX_EXTRUDERS],   // M603 T U
283
-        filament_change_load_length[MAX_EXTRUDERS];     // M603 T L
282
+  float filament_change_unload_length[EXTRUDERS],       // M603 T U
283
+        filament_change_load_length[EXTRUDERS];         // M603 T L
284
 
284
 
285
 } SettingsData;
285
 } SettingsData;
286
 
286
 
629
     EEPROM_WRITE(lcd_preheat_bed_temp);
629
     EEPROM_WRITE(lcd_preheat_bed_temp);
630
     EEPROM_WRITE(lcd_preheat_fan_speed);
630
     EEPROM_WRITE(lcd_preheat_fan_speed);
631
 
631
 
632
-    for (uint8_t e = 0; e < MAX_EXTRUDERS; e++) {
633
-
632
+    for (uint8_t e = 0; e < HOTENDS; e++) {
634
       #if ENABLED(PIDTEMP)
633
       #if ENABLED(PIDTEMP)
635
-        if (e < HOTENDS) {
636
-          EEPROM_WRITE(PID_PARAM(Kp, e));
637
-          EEPROM_WRITE(PID_PARAM(Ki, e));
638
-          EEPROM_WRITE(PID_PARAM(Kd, e));
639
-          #if ENABLED(PID_EXTRUSION_SCALING)
640
-            EEPROM_WRITE(PID_PARAM(Kc, e));
641
-          #else
642
-            dummy = 1.0f; // 1.0 = default kc
643
-            EEPROM_WRITE(dummy);
644
-          #endif
645
-        }
646
-        else
647
-      #endif // !PIDTEMP
648
-        {
649
-          dummy = DUMMY_PID_VALUE; // When read, will not change the existing value
650
-          EEPROM_WRITE(dummy); // Kp
651
-          dummy = 0;
652
-          for (uint8_t q = 3; q--;) EEPROM_WRITE(dummy); // Ki, Kd, Kc
653
-        }
654
-
634
+        EEPROM_WRITE(PID_PARAM(Kp, e));
635
+        EEPROM_WRITE(PID_PARAM(Ki, e));
636
+        EEPROM_WRITE(PID_PARAM(Kd, e));
637
+        #if ENABLED(PID_EXTRUSION_SCALING)
638
+          EEPROM_WRITE(PID_PARAM(Kc, e));
639
+        #else
640
+          dummy = 1.0f; // 1.0 = default kc
641
+          EEPROM_WRITE(dummy);
642
+        #endif
643
+      #else
644
+        dummy = DUMMY_PID_VALUE; // When read, will not change the existing value
645
+        EEPROM_WRITE(dummy); // Kp
646
+        dummy = 0;
647
+        for (uint8_t q = 3; q--;) EEPROM_WRITE(dummy); // Ki, Kd, Kc
648
+      #endif
655
     } // Hotends Loop
649
     } // Hotends Loop
656
 
650
 
657
     _FIELD_TEST(lpq_len);
651
     _FIELD_TEST(lpq_len);
705
       EEPROM_WRITE(parser.volumetric_enabled);
699
       EEPROM_WRITE(parser.volumetric_enabled);
706
 
700
 
707
       // Save filament sizes
701
       // Save filament sizes
708
-      for (uint8_t q = 0; q < MAX_EXTRUDERS; q++) {
709
-        if (q < COUNT(planner.filament_size)) dummy = planner.filament_size[q];
710
-        EEPROM_WRITE(dummy);
711
-      }
702
+      for (uint8_t q = 0; q < COUNT(planner.filament_size); q++)
703
+        EEPROM_WRITE(planner.filament_size[q]);
712
 
704
 
713
     #else
705
     #else
714
 
706
 
715
       const bool volumetric_enabled = false;
707
       const bool volumetric_enabled = false;
716
       dummy = DEFAULT_NOMINAL_FILAMENT_DIA;
708
       dummy = DEFAULT_NOMINAL_FILAMENT_DIA;
717
       EEPROM_WRITE(volumetric_enabled);
709
       EEPROM_WRITE(volumetric_enabled);
718
-      for (uint8_t q = MAX_EXTRUDERS; q--;) EEPROM_WRITE(dummy);
710
+      for (uint8_t q = EXTRUDERS; q--;) EEPROM_WRITE(dummy);
719
 
711
 
720
     #endif
712
     #endif
721
 
713
 
762
         #else
754
         #else
763
           0,
755
           0,
764
         #endif
756
         #endif
765
-        #if AXIS_IS_TMC(E0)
766
-          stepperE0.getCurrent(),
767
-        #else
768
-          0,
769
-        #endif
770
-        #if AXIS_IS_TMC(E1)
771
-          stepperE1.getCurrent(),
772
-        #else
773
-          0,
774
-        #endif
775
-        #if AXIS_IS_TMC(E2)
776
-          stepperE2.getCurrent(),
777
-        #else
778
-          0,
779
-        #endif
780
-        #if AXIS_IS_TMC(E3)
781
-          stepperE3.getCurrent(),
782
-        #else
783
-          0,
784
-        #endif
785
-        #if AXIS_IS_TMC(E4)
786
-          stepperE4.getCurrent()
787
-        #else
788
-          0
789
-        #endif
757
+        #if MAX_EXTRUDERS
758
+          #if AXIS_IS_TMC(E0)
759
+            stepperE0.getCurrent(),
760
+          #else
761
+            0,
762
+          #endif
763
+          #if MAX_EXTRUDERS > 1
764
+            #if AXIS_IS_TMC(E1)
765
+              stepperE1.getCurrent(),
766
+            #else
767
+              0,
768
+            #endif
769
+            #if MAX_EXTRUDERS > 2
770
+              #if AXIS_IS_TMC(E2)
771
+                stepperE2.getCurrent(),
772
+              #else
773
+                0,
774
+              #endif
775
+              #if MAX_EXTRUDERS > 3
776
+                  #if AXIS_IS_TMC(E3)
777
+                  stepperE3.getCurrent(),
778
+                #else
779
+                  0,
780
+                #endif
781
+                #if MAX_EXTRUDERS > 4
782
+                  #if AXIS_IS_TMC(E4)
783
+                    stepperE4.getCurrent()
784
+                  #else
785
+                    0
786
+                  #endif
787
+                  #if MAX_EXTRUDERS > 5
788
+                    #if AXIS_IS_TMC(E5)
789
+                      stepperE5.getCurrent()
790
+                    #else
791
+                      0
792
+                    #endif
793
+                  #endif // MAX_EXTRUDERS > 5
794
+                #endif // MAX_EXTRUDERS > 4
795
+              #endif // MAX_EXTRUDERS > 3
796
+            #endif // MAX_EXTRUDERS > 2
797
+          #endif // MAX_EXTRUDERS > 1
798
+        #endif // MAX_EXTRUDERS
790
       #else
799
       #else
791
         0
800
         0
792
       #endif
801
       #endif
836
         #else
845
         #else
837
           Z3_HYBRID_THRESHOLD,
846
           Z3_HYBRID_THRESHOLD,
838
         #endif
847
         #endif
839
-        #if AXIS_HAS_STEALTHCHOP(E0)
840
-          TMC_GET_PWMTHRS(E, E0),
841
-        #else
842
-          E0_HYBRID_THRESHOLD,
843
-        #endif
844
-        #if AXIS_HAS_STEALTHCHOP(E1)
845
-          TMC_GET_PWMTHRS(E, E1),
846
-        #else
847
-          E1_HYBRID_THRESHOLD,
848
-        #endif
849
-        #if AXIS_HAS_STEALTHCHOP(E2)
850
-          TMC_GET_PWMTHRS(E, E2),
851
-        #else
852
-          E2_HYBRID_THRESHOLD,
853
-        #endif
854
-        #if AXIS_HAS_STEALTHCHOP(E3)
855
-          TMC_GET_PWMTHRS(E, E3),
856
-        #else
857
-          E3_HYBRID_THRESHOLD,
858
-        #endif
859
-        #if AXIS_HAS_STEALTHCHOP(E4)
860
-          TMC_GET_PWMTHRS(E, E4)
861
-        #else
862
-          E4_HYBRID_THRESHOLD
863
-        #endif
848
+        #if MAX_EXTRUDERS
849
+          #if AXIS_HAS_STEALTHCHOP(E0)
850
+            TMC_GET_PWMTHRS(E, E0),
851
+          #else
852
+            E0_HYBRID_THRESHOLD,
853
+          #endif
854
+          #if MAX_EXTRUDERS > 1
855
+            #if AXIS_HAS_STEALTHCHOP(E1)
856
+              TMC_GET_PWMTHRS(E, E1),
857
+            #else
858
+              E1_HYBRID_THRESHOLD,
859
+            #endif
860
+            #if MAX_EXTRUDERS > 2
861
+              #if AXIS_HAS_STEALTHCHOP(E2)
862
+                TMC_GET_PWMTHRS(E, E2),
863
+              #else
864
+                E2_HYBRID_THRESHOLD,
865
+              #endif
866
+              #if MAX_EXTRUDERS > 3
867
+                #if AXIS_HAS_STEALTHCHOP(E3)
868
+                  TMC_GET_PWMTHRS(E, E3),
869
+                #else
870
+                  E3_HYBRID_THRESHOLD,
871
+                #endif
872
+                #if MAX_EXTRUDERS > 4
873
+                  #if AXIS_HAS_STEALTHCHOP(E4)
874
+                    TMC_GET_PWMTHRS(E, E4)
875
+                  #else
876
+                    E4_HYBRID_THRESHOLD
877
+                  #endif
878
+                  #if MAX_EXTRUDERS > 5
879
+                    #if AXIS_HAS_STEALTHCHOP(E5)
880
+                      TMC_GET_PWMTHRS(E, E5)
881
+                    #else
882
+                      E5_HYBRID_THRESHOLD
883
+                    #endif
884
+                  #endif // MAX_EXTRUDERS > 5
885
+                #endif // MAX_EXTRUDERS > 4
886
+              #endif // MAX_EXTRUDERS > 3
887
+            #endif // MAX_EXTRUDERS > 2
888
+          #endif // MAX_EXTRUDERS > 1
889
+        #endif // MAX_EXTRUDERS
864
       #else
890
       #else
865
-        100, 100, 3,          // X, Y, Z
866
-        100, 100, 3, 3,       // X2, Y2, Z2, Z3
867
-        30, 30, 30, 30, 30    // E0, E1, E2, E3, E4
891
+        100, 100, 3,            // X, Y, Z
892
+        100, 100, 3, 3          // X2, Y2, Z2, Z3
893
+        #if MAX_EXTRUDERS
894
+          , 30                  // E0
895
+          #if MAX_EXTRUDERS > 1
896
+            , 30                // E1
897
+            #if MAX_EXTRUDERS > 2
898
+              , 30              // E2
899
+              #if MAX_EXTRUDERS > 3
900
+                , 30            // E3
901
+                #if MAX_EXTRUDERS > 4
902
+                  , 30          // E4
903
+                  #if MAX_EXTRUDERS > 5
904
+                    , 30        // E5
905
+                  #endif
906
+                #endif
907
+              #endif
908
+            #endif
909
+          #endif
910
+        #endif
868
       #endif
911
       #endif
869
     };
912
     };
870
     EEPROM_WRITE(tmc_hybrid_threshold);
913
     EEPROM_WRITE(tmc_hybrid_threshold);
951
     _FIELD_TEST(filament_change_unload_length);
994
     _FIELD_TEST(filament_change_unload_length);
952
 
995
 
953
     #if ENABLED(ADVANCED_PAUSE_FEATURE)
996
     #if ENABLED(ADVANCED_PAUSE_FEATURE)
954
-      for (uint8_t q = 0; q < MAX_EXTRUDERS; q++) {
955
-        if (q < COUNT(filament_change_unload_length)) dummy = filament_change_unload_length[q];
956
-        EEPROM_WRITE(dummy);
957
-      }
958
-      for (uint8_t q = 0; q < MAX_EXTRUDERS; q++) {
959
-        if (q < COUNT(filament_change_load_length)) dummy = filament_change_load_length[q];
960
-        EEPROM_WRITE(dummy);
997
+      for (uint8_t q = 0; q < COUNT(filament_change_unload_length); q++) {
998
+        EEPROM_WRITE(filament_change_unload_length[q]);
999
+        EEPROM_WRITE(filament_change_load_length[q]);
961
       }
1000
       }
962
     #else
1001
     #else
963
       dummy = 0;
1002
       dummy = 0;
964
-      for (uint8_t q = MAX_EXTRUDERS * 2; q--;) EEPROM_WRITE(dummy);
1003
+      for (uint8_t q = EXTRUDERS * 2; q--;) EEPROM_WRITE(dummy);
965
     #endif
1004
     #endif
966
 
1005
 
967
     //
1006
     //
1271
       //
1310
       //
1272
 
1311
 
1273
       #if ENABLED(PIDTEMP)
1312
       #if ENABLED(PIDTEMP)
1274
-        for (uint8_t e = 0; e < MAX_EXTRUDERS; e++) {
1313
+        for (uint8_t e = 0; e < HOTENDS; e++) {
1275
           EEPROM_READ(dummy); // Kp
1314
           EEPROM_READ(dummy); // Kp
1276
-          if (e < HOTENDS && dummy != DUMMY_PID_VALUE) {
1315
+          if (dummy != DUMMY_PID_VALUE) {
1277
             // do not need to scale PID values as the values in EEPROM are already scaled
1316
             // do not need to scale PID values as the values in EEPROM are already scaled
1278
             if (!validating) PID_PARAM(Kp, e) = dummy;
1317
             if (!validating) PID_PARAM(Kp, e) = dummy;
1279
             EEPROM_READ(PID_PARAM(Ki, e));
1318
             EEPROM_READ(PID_PARAM(Ki, e));
1284
               EEPROM_READ(dummy);
1323
               EEPROM_READ(dummy);
1285
             #endif
1324
             #endif
1286
           }
1325
           }
1287
-          else {
1326
+          else
1288
             for (uint8_t q=3; q--;) EEPROM_READ(dummy); // Ki, Kd, Kc
1327
             for (uint8_t q=3; q--;) EEPROM_READ(dummy); // Ki, Kd, Kc
1289
-          }
1290
         }
1328
         }
1291
       #else // !PIDTEMP
1329
       #else // !PIDTEMP
1292
         // 4 x 4 = 16 slots for PID parameters
1330
         // 4 x 4 = 16 slots for PID parameters
1293
-        for (uint8_t q = MAX_EXTRUDERS * 4; q--;) EEPROM_READ(dummy);  // Kp, Ki, Kd, Kc
1331
+        for (uint8_t q = HOTENDS * 4; q--;) EEPROM_READ(dummy);  // Kp, Ki, Kd, Kc
1294
       #endif // !PIDTEMP
1332
       #endif // !PIDTEMP
1295
 
1333
 
1296
       //
1334
       //
1359
 
1397
 
1360
         EEPROM_READ(parser.volumetric_enabled);
1398
         EEPROM_READ(parser.volumetric_enabled);
1361
 
1399
 
1362
-        for (uint8_t q = 0; q < MAX_EXTRUDERS; q++) {
1400
+        for (uint8_t q = 0; q < COUNT(planner.filament_size); q++) {
1363
           EEPROM_READ(dummy);
1401
           EEPROM_READ(dummy);
1364
-          if (!validating && q < COUNT(planner.filament_size))
1365
-            planner.filament_size[q] = dummy;
1402
+          if (!validating) planner.filament_size[q] = dummy;
1366
         }
1403
         }
1367
 
1404
 
1368
       #else
1405
       #else
1369
 
1406
 
1370
         EEPROM_READ(dummyb);
1407
         EEPROM_READ(dummyb);
1371
-        for (uint8_t q=MAX_EXTRUDERS; q--;) EEPROM_READ(dummy);
1408
+        for (uint8_t q=EXTRUDERS; q--;) EEPROM_READ(dummy);
1372
 
1409
 
1373
       #endif
1410
       #endif
1374
 
1411
 
1422
           #if AXIS_IS_TMC(E4)
1459
           #if AXIS_IS_TMC(E4)
1423
             SET_CURR(E4);
1460
             SET_CURR(E4);
1424
           #endif
1461
           #endif
1462
+          #if AXIS_IS_TMC(E5)
1463
+            SET_CURR(E5);
1464
+          #endif
1425
         }
1465
         }
1426
       #else
1466
       #else
1427
         uint16_t val;
1467
         uint16_t val;
1469
           #if AXIS_HAS_STEALTHCHOP(E4)
1509
           #if AXIS_HAS_STEALTHCHOP(E4)
1470
             TMC_SET_PWMTHRS(E, E4);
1510
             TMC_SET_PWMTHRS(E, E4);
1471
           #endif
1511
           #endif
1512
+          #if AXIS_HAS_STEALTHCHOP(E5)
1513
+            TMC_SET_PWMTHRS(E, E5);
1514
+          #endif
1472
         }
1515
         }
1473
       #else
1516
       #else
1474
         uint32_t thrs_val;
1517
         uint32_t thrs_val;
1580
       _FIELD_TEST(filament_change_unload_length);
1623
       _FIELD_TEST(filament_change_unload_length);
1581
 
1624
 
1582
       #if ENABLED(ADVANCED_PAUSE_FEATURE)
1625
       #if ENABLED(ADVANCED_PAUSE_FEATURE)
1583
-        for (uint8_t q = 0; q < MAX_EXTRUDERS; q++) {
1626
+        for (uint8_t q = 0; q < COUNT(filament_change_unload_length); q++) {
1584
           EEPROM_READ(dummy);
1627
           EEPROM_READ(dummy);
1585
           if (!validating && q < COUNT(filament_change_unload_length)) filament_change_unload_length[q] = dummy;
1628
           if (!validating && q < COUNT(filament_change_unload_length)) filament_change_unload_length[q] = dummy;
1586
-        }
1587
-        for (uint8_t q = 0; q < MAX_EXTRUDERS; q++) {
1588
           EEPROM_READ(dummy);
1629
           EEPROM_READ(dummy);
1589
           if (!validating && q < COUNT(filament_change_load_length)) filament_change_load_length[q] = dummy;
1630
           if (!validating && q < COUNT(filament_change_load_length)) filament_change_load_length[q] = dummy;
1590
         }
1631
         }
1591
       #else
1632
       #else
1592
-        for (uint8_t q = MAX_EXTRUDERS * 2; q--;) EEPROM_READ(dummy);
1633
+        for (uint8_t q = EXTRUDERS * 2; q--;) EEPROM_READ(dummy);
1593
       #endif
1634
       #endif
1594
 
1635
 
1595
       eeprom_error = size_error(eeprom_index - (EEPROM_OFFSET));
1636
       eeprom_error = size_error(eeprom_index - (EEPROM_OFFSET));
2176
               CONFIG_ECHO_START;
2217
               CONFIG_ECHO_START;
2177
               SERIAL_ECHOPAIR_P(port, "  M200 T4 D", LINEAR_UNIT(planner.filament_size[4]));
2218
               SERIAL_ECHOPAIR_P(port, "  M200 T4 D", LINEAR_UNIT(planner.filament_size[4]));
2178
               SERIAL_EOL_P(port);
2219
               SERIAL_EOL_P(port);
2220
+              #if EXTRUDERS > 5
2221
+                CONFIG_ECHO_START;
2222
+                SERIAL_ECHOPAIR_P(port, "  M200 T5 D", LINEAR_UNIT(planner.filament_size[5]));
2223
+                SERIAL_EOL_P(port);
2224
+              #endif // EXTRUDERS > 5
2179
             #endif // EXTRUDERS > 4
2225
             #endif // EXTRUDERS > 4
2180
           #endif // EXTRUDERS > 3
2226
           #endif // EXTRUDERS > 3
2181
         #endif // EXTRUDERS > 2
2227
         #endif // EXTRUDERS > 2
2681
         say_M906(PORTVAR_SOLO);
2727
         say_M906(PORTVAR_SOLO);
2682
         SERIAL_ECHOLNPAIR_P(port, " T4 E", stepperE4.getCurrent());
2728
         SERIAL_ECHOLNPAIR_P(port, " T4 E", stepperE4.getCurrent());
2683
       #endif
2729
       #endif
2730
+      #if E_STEPPERS > 5 && AXIS_IS_TMC(E5)
2731
+        say_M906(PORTVAR_SOLO);
2732
+        SERIAL_ECHOLNPAIR_P(port, " T5 E", stepperE5.getCurrent());
2733
+      #endif
2684
       SERIAL_EOL_P(port);
2734
       SERIAL_EOL_P(port);
2685
 
2735
 
2686
       /**
2736
       /**
2748
           say_M913(PORTVAR_SOLO);
2798
           say_M913(PORTVAR_SOLO);
2749
           SERIAL_ECHOLNPAIR_P(port, " T4 E", TMC_GET_PWMTHRS(E, E4));
2799
           SERIAL_ECHOLNPAIR_P(port, " T4 E", TMC_GET_PWMTHRS(E, E4));
2750
         #endif
2800
         #endif
2801
+        #if E_STEPPERS > 5 && AXIS_IS_TMC(E5)
2802
+          say_M913(PORTVAR_SOLO);
2803
+          SERIAL_ECHOLNPAIR_P(port, " T5 E", TMC_GET_PWMTHRS(E, E5));
2804
+        #endif
2751
         SERIAL_EOL_P(port);
2805
         SERIAL_EOL_P(port);
2752
       #endif // HYBRID_THRESHOLD
2806
       #endif // HYBRID_THRESHOLD
2753
 
2807
 
2871
               say_M603(PORTVAR_SOLO);
2925
               say_M603(PORTVAR_SOLO);
2872
               SERIAL_ECHOPAIR_P(port, "T4 L", LINEAR_UNIT(filament_change_load_length[4]));
2926
               SERIAL_ECHOPAIR_P(port, "T4 L", LINEAR_UNIT(filament_change_load_length[4]));
2873
               SERIAL_ECHOLNPAIR_P(port, " U", LINEAR_UNIT(filament_change_unload_length[4]));
2927
               SERIAL_ECHOLNPAIR_P(port, " U", LINEAR_UNIT(filament_change_unload_length[4]));
2928
+              #if EXTRUDERS > 5
2929
+                CONFIG_ECHO_START;
2930
+                say_M603(PORTVAR_SOLO);
2931
+                SERIAL_ECHOPAIR_P(port, "T5 L", LINEAR_UNIT(filament_change_load_length[5]));
2932
+                SERIAL_ECHOLNPAIR_P(port, " U", LINEAR_UNIT(filament_change_unload_length[5]));
2933
+              #endif // EXTRUDERS > 5
2874
             #endif // EXTRUDERS > 4
2934
             #endif // EXTRUDERS > 4
2875
           #endif // EXTRUDERS > 3
2935
           #endif // EXTRUDERS > 3
2876
         #endif // EXTRUDERS > 2
2936
         #endif // EXTRUDERS > 2

+ 27
- 0
Marlin/src/module/planner.cpp Целия файл

1849
                 DISABLE_IDLE_E(3);
1849
                 DISABLE_IDLE_E(3);
1850
                 #if EXTRUDERS > 4
1850
                 #if EXTRUDERS > 4
1851
                   DISABLE_IDLE_E(4);
1851
                   DISABLE_IDLE_E(4);
1852
+                  #if EXTRUDERS > 5
1853
+                    DISABLE_IDLE_E(5);
1854
+                  #endif // EXTRUDERS > 5
1852
                 #endif // EXTRUDERS > 4
1855
                 #endif // EXTRUDERS > 4
1853
               #endif // EXTRUDERS > 3
1856
               #endif // EXTRUDERS > 3
1854
             #endif // EXTRUDERS > 2
1857
             #endif // EXTRUDERS > 2
1871
                 DISABLE_IDLE_E(3);
1874
                 DISABLE_IDLE_E(3);
1872
                 #if EXTRUDERS > 4
1875
                 #if EXTRUDERS > 4
1873
                   DISABLE_IDLE_E(4);
1876
                   DISABLE_IDLE_E(4);
1877
+                  #if EXTRUDERS > 5
1878
+                    DISABLE_IDLE_E(5);
1879
+                  #endif // EXTRUDERS > 5
1874
                 #endif // EXTRUDERS > 4
1880
                 #endif // EXTRUDERS > 4
1875
               #endif // EXTRUDERS > 3
1881
               #endif // EXTRUDERS > 3
1876
             #endif // EXTRUDERS > 2
1882
             #endif // EXTRUDERS > 2
1885
                 DISABLE_IDLE_E(3);
1891
                 DISABLE_IDLE_E(3);
1886
                 #if EXTRUDERS > 4
1892
                 #if EXTRUDERS > 4
1887
                   DISABLE_IDLE_E(4);
1893
                   DISABLE_IDLE_E(4);
1894
+                  #if EXTRUDERS > 5
1895
+                    DISABLE_IDLE_E(5);
1896
+                  #endif
1888
                 #endif
1897
                 #endif
1889
               #endif
1898
               #endif
1890
               enable_E2();
1899
               enable_E2();
1897
                 DISABLE_IDLE_E(2);
1906
                 DISABLE_IDLE_E(2);
1898
                 #if EXTRUDERS > 4
1907
                 #if EXTRUDERS > 4
1899
                   DISABLE_IDLE_E(4);
1908
                   DISABLE_IDLE_E(4);
1909
+                  #if EXTRUDERS > 5
1910
+                    DISABLE_IDLE_E(5);
1911
+                  #endif
1900
                 #endif
1912
                 #endif
1901
                 enable_E3();
1913
                 enable_E3();
1902
                 g_uc_extruder_last_move[3] = (BLOCK_BUFFER_SIZE) * 2;
1914
                 g_uc_extruder_last_move[3] = (BLOCK_BUFFER_SIZE) * 2;
1907
                   DISABLE_IDLE_E(1);
1919
                   DISABLE_IDLE_E(1);
1908
                   DISABLE_IDLE_E(2);
1920
                   DISABLE_IDLE_E(2);
1909
                   DISABLE_IDLE_E(3);
1921
                   DISABLE_IDLE_E(3);
1922
+                  #if EXTRUDERS > 5
1923
+                    DISABLE_IDLE_E(5);
1924
+                  #endif
1910
                   enable_E4();
1925
                   enable_E4();
1911
                   g_uc_extruder_last_move[4] = (BLOCK_BUFFER_SIZE) * 2;
1926
                   g_uc_extruder_last_move[4] = (BLOCK_BUFFER_SIZE) * 2;
1912
                 break;
1927
                 break;
1928
+                #if EXTRUDERS > 5
1929
+                  case 5:
1930
+                    DISABLE_IDLE_E(0);
1931
+                    DISABLE_IDLE_E(1);
1932
+                    DISABLE_IDLE_E(2);
1933
+                    DISABLE_IDLE_E(3);
1934
+                    DISABLE_IDLE_E(4);
1935
+                    enable_E5();
1936
+                    g_uc_extruder_last_move[5] = (BLOCK_BUFFER_SIZE) * 2;
1937
+                  break;
1938
+                #endif // EXTRUDERS > 5
1913
               #endif // EXTRUDERS > 4
1939
               #endif // EXTRUDERS > 4
1914
             #endif // EXTRUDERS > 3
1940
             #endif // EXTRUDERS > 3
1915
           #endif // EXTRUDERS > 2
1941
           #endif // EXTRUDERS > 2
1921
       enable_E2();
1947
       enable_E2();
1922
       enable_E3();
1948
       enable_E3();
1923
       enable_E4();
1949
       enable_E4();
1950
+      enable_E5();
1924
     #endif
1951
     #endif
1925
   }
1952
   }
1926
 
1953
 

+ 25
- 0
Marlin/src/module/stepper.cpp Целия файл

1982
   #if HAS_E4_DIR
1982
   #if HAS_E4_DIR
1983
     E4_DIR_INIT;
1983
     E4_DIR_INIT;
1984
   #endif
1984
   #endif
1985
+  #if HAS_E5_DIR
1986
+    E5_DIR_INIT;
1987
+  #endif
1985
 
1988
 
1986
   // Init Enable Pins - steppers default to disabled.
1989
   // Init Enable Pins - steppers default to disabled.
1987
   #if HAS_X_ENABLE
1990
   #if HAS_X_ENABLE
2032
     E4_ENABLE_INIT;
2035
     E4_ENABLE_INIT;
2033
     if (!E_ENABLE_ON) E4_ENABLE_WRITE(HIGH);
2036
     if (!E_ENABLE_ON) E4_ENABLE_WRITE(HIGH);
2034
   #endif
2037
   #endif
2038
+  #if HAS_E5_ENABLE
2039
+    E5_ENABLE_INIT;
2040
+    if (!E_ENABLE_ON) E5_ENABLE_WRITE(HIGH);
2041
+  #endif
2035
 
2042
 
2036
   #define _STEP_INIT(AXIS) AXIS ##_STEP_INIT
2043
   #define _STEP_INIT(AXIS) AXIS ##_STEP_INIT
2037
   #define _WRITE_STEP(AXIS, HIGHLOW) AXIS ##_STEP_WRITE(HIGHLOW)
2044
   #define _WRITE_STEP(AXIS, HIGHLOW) AXIS ##_STEP_WRITE(HIGHLOW)
2088
   #if E_STEPPERS > 4 && HAS_E4_STEP
2095
   #if E_STEPPERS > 4 && HAS_E4_STEP
2089
     E_AXIS_INIT(4);
2096
     E_AXIS_INIT(4);
2090
   #endif
2097
   #endif
2098
+  #if E_STEPPERS > 5 && HAS_E5_STEP
2099
+    E_AXIS_INIT(5);
2100
+  #endif
2091
 
2101
 
2092
   // Init Stepper ISR to 122 Hz for quick starting
2102
   // Init Stepper ISR to 122 Hz for quick starting
2093
   HAL_timer_start(STEP_TIMER_NUM, 122);
2103
   HAL_timer_start(STEP_TIMER_NUM, 122);
2524
       SET_OUTPUT(E4_MS1_PIN);
2534
       SET_OUTPUT(E4_MS1_PIN);
2525
       SET_OUTPUT(E4_MS2_PIN);
2535
       SET_OUTPUT(E4_MS2_PIN);
2526
     #endif
2536
     #endif
2537
+    #if HAS_E5_MICROSTEPS
2538
+      SET_OUTPUT(E5_MS1_PIN);
2539
+      SET_OUTPUT(E5_MS2_PIN);
2540
+    #endif
2527
     static const uint8_t microstep_modes[] = MICROSTEP_MODES;
2541
     static const uint8_t microstep_modes[] = MICROSTEP_MODES;
2528
     for (uint16_t i = 0; i < COUNT(microstep_modes); i++)
2542
     for (uint16_t i = 0; i < COUNT(microstep_modes); i++)
2529
       microstep_mode(i, microstep_modes[i]);
2543
       microstep_mode(i, microstep_modes[i]);
2553
       #if HAS_E4_MICROSTEPS
2567
       #if HAS_E4_MICROSTEPS
2554
         case 7: WRITE(E4_MS1_PIN, ms1); break;
2568
         case 7: WRITE(E4_MS1_PIN, ms1); break;
2555
       #endif
2569
       #endif
2570
+      #if HAS_E5_MICROSTEPS
2571
+        case 8: WRITE(E5_MS1_PIN, ms1); break;
2572
+      #endif
2556
     }
2573
     }
2557
     if (ms2 >= 0) switch (driver) {
2574
     if (ms2 >= 0) switch (driver) {
2558
       case 0: WRITE(X_MS2_PIN, ms2); break;
2575
       case 0: WRITE(X_MS2_PIN, ms2); break;
2577
       #if HAS_E4_MICROSTEPS
2594
       #if HAS_E4_MICROSTEPS
2578
         case 7: WRITE(E4_MS2_PIN, ms2); break;
2595
         case 7: WRITE(E4_MS2_PIN, ms2); break;
2579
       #endif
2596
       #endif
2597
+      #if HAS_E5_MICROSTEPS
2598
+        case 8: WRITE(E5_MS2_PIN, ms2); break;
2599
+      #endif
2580
     }
2600
     }
2581
   }
2601
   }
2582
 
2602
 
2638
       SERIAL_PROTOCOL(READ(E4_MS1_PIN));
2658
       SERIAL_PROTOCOL(READ(E4_MS1_PIN));
2639
       SERIAL_PROTOCOLLN(READ(E4_MS2_PIN));
2659
       SERIAL_PROTOCOLLN(READ(E4_MS2_PIN));
2640
     #endif
2660
     #endif
2661
+    #if HAS_E5_MICROSTEPS
2662
+      SERIAL_PROTOCOLPGM("E5: ");
2663
+      SERIAL_PROTOCOL(READ(E5_MS1_PIN));
2664
+      SERIAL_PROTOCOLLN(READ(E5_MS2_PIN));
2665
+    #endif
2641
   }
2666
   }
2642
 
2667
 
2643
 #endif // HAS_MICROSTEPS
2668
 #endif // HAS_MICROSTEPS

+ 42
- 1
Marlin/src/module/stepper_indirection.h Целия файл

482
 #define E4_STEP_WRITE(STATE) WRITE(E4_STEP_PIN,STATE)
482
 #define E4_STEP_WRITE(STATE) WRITE(E4_STEP_PIN,STATE)
483
 #define E4_STEP_READ READ(E4_STEP_PIN)
483
 #define E4_STEP_READ READ(E4_STEP_PIN)
484
 
484
 
485
+// E5 Stepper
486
+#if AXIS_DRIVER_TYPE(E5, L6470)
487
+  extern L6470 stepperE5;
488
+  #define E5_ENABLE_INIT NOOP
489
+  #define E5_ENABLE_WRITE(STATE) do{ if (STATE) stepperE5.Step_Clock(stepperE5.getStatus() & STATUS_HIZ); else stepperE5.softFree(); }while(0)
490
+  #define E5_ENABLE_READ (stepperE5.getStatus() & STATUS_HIZ)
491
+  #define E5_DIR_INIT NOOP
492
+  #define E5_DIR_WRITE(STATE) stepperE5.Step_Clock(STATE)
493
+  #define E5_DIR_READ (stepperE5.getStatus() & STATUS_DIR)
494
+#else
495
+  #if AXIS_DRIVER_TYPE(E5, TMC26X)
496
+    extern TMC26XStepper stepperE5;
497
+    #define E5_ENABLE_INIT NOOP
498
+    #define E5_ENABLE_WRITE(STATE) stepperE5.setEnabled(STATE)
499
+    #define E5_ENABLE_READ stepperE5.isEnabled()
500
+  #else
501
+    #if AXIS_DRIVER_TYPE(E5, TMC2130)
502
+      extern TMC2130Stepper stepperE5;
503
+    #elif AXIS_DRIVER_TYPE(E5, TMC2208)
504
+      extern TMC2208Stepper stepperE5;
505
+    #endif
506
+    #define E5_ENABLE_INIT SET_OUTPUT(E5_ENABLE_PIN)
507
+    #define E5_ENABLE_WRITE(STATE) WRITE(E5_ENABLE_PIN,STATE)
508
+    #define E5_ENABLE_READ READ(E5_ENABLE_PIN)
509
+  #endif
510
+  #define E5_DIR_INIT SET_OUTPUT(E5_DIR_PIN)
511
+  #define E5_DIR_WRITE(STATE) WRITE(E5_DIR_PIN,STATE)
512
+  #define E5_DIR_READ READ(E5_DIR_PIN)
513
+#endif
514
+#define E5_STEP_INIT SET_OUTPUT(E5_STEP_PIN)
515
+#define E5_STEP_WRITE(STATE) WRITE(E5_STEP_PIN,STATE)
516
+#define E5_STEP_READ READ(E5_STEP_PIN)
517
+
485
 /**
518
 /**
486
  * Extruder indirection for the single E axis
519
  * Extruder indirection for the single E axis
487
  */
520
  */
488
 #if ENABLED(SWITCHING_EXTRUDER) // One stepper driver per two extruders, reversed on odd index
521
 #if ENABLED(SWITCHING_EXTRUDER) // One stepper driver per two extruders, reversed on odd index
489
-  #if EXTRUDERS > 4
522
+  #if EXTRUDERS > 5
523
+    #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)
524
+    #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)
525
+    #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)
526
+  #elif EXTRUDERS > 4
490
     #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)
527
     #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)
491
     #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)
528
     #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)
492
     #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)
529
     #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
   #define E_STEP_WRITE(E,V) E0_STEP_WRITE(V)
544
   #define E_STEP_WRITE(E,V) E0_STEP_WRITE(V)
508
   #define   NORM_E_DIR(E)   do{ E0_DIR_WRITE(TEST(E, 0) ? !INVERT_E0_DIR:  INVERT_E0_DIR); }while(0)
545
   #define   NORM_E_DIR(E)   do{ E0_DIR_WRITE(TEST(E, 0) ? !INVERT_E0_DIR:  INVERT_E0_DIR); }while(0)
509
   #define    REV_E_DIR(E)   do{ E0_DIR_WRITE(TEST(E, 0) ?  INVERT_E0_DIR: !INVERT_E0_DIR); }while(0)
546
   #define    REV_E_DIR(E)   do{ E0_DIR_WRITE(TEST(E, 0) ?  INVERT_E0_DIR: !INVERT_E0_DIR); }while(0)
547
+#elif E_STEPPERS > 5
548
+  #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)
549
+  #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)
550
+  #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)
510
 #elif E_STEPPERS > 4
551
 #elif E_STEPPERS > 4
511
   #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)
552
   #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)
512
   #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)
553
   #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)

+ 73
- 12
Marlin/src/module/temperature.cpp Целия файл

74
     (HOTENDS > 2 && (E) == 2) ? PSTR(MSG_E3 " " MSG) : \
74
     (HOTENDS > 2 && (E) == 2) ? PSTR(MSG_E3 " " MSG) : \
75
     (HOTENDS > 3 && (E) == 3) ? PSTR(MSG_E4 " " MSG) : \
75
     (HOTENDS > 3 && (E) == 3) ? PSTR(MSG_E4 " " MSG) : \
76
     (HOTENDS > 4 && (E) == 4) ? PSTR(MSG_E5 " " MSG) : \
76
     (HOTENDS > 4 && (E) == 4) ? PSTR(MSG_E5 " " MSG) : \
77
+    (HOTENDS > 5 && (E) == 5) ? PSTR(MSG_E6 " " MSG) : \
77
     PSTR(MSG_E1 " " MSG)
78
     PSTR(MSG_E1 " " MSG)
78
 #else
79
 #else
79
   #define TEMP_ERR_PSTR(MSG, E) \
80
   #define TEMP_ERR_PSTR(MSG, E) \
81
     (HOTENDS > 2 && (E) == 2) ? PSTR(MSG_E3 " " MSG) : \
82
     (HOTENDS > 2 && (E) == 2) ? PSTR(MSG_E3 " " MSG) : \
82
     (HOTENDS > 3 && (E) == 3) ? PSTR(MSG_E4 " " MSG) : \
83
     (HOTENDS > 3 && (E) == 3) ? PSTR(MSG_E4 " " MSG) : \
83
     (HOTENDS > 4 && (E) == 4) ? PSTR(MSG_E5 " " MSG) : \
84
     (HOTENDS > 4 && (E) == 4) ? PSTR(MSG_E5 " " MSG) : \
85
+    (HOTENDS > 5 && (E) == 5) ? PSTR(MSG_E6 " " MSG) : \
84
     PSTR(MSG_E1 " " MSG)
86
     PSTR(MSG_E1 " " MSG)
85
 #endif
87
 #endif
86
 
88
 
149
 #endif
151
 #endif
150
 
152
 
151
 #if ENABLED(BABYSTEPPING)
153
 #if ENABLED(BABYSTEPPING)
152
-  volatile int Temperature::babystepsTodo[XYZ] = { 0 };
154
+  volatile int16_t Temperature::babystepsTodo[XYZ] = { 0 };
153
 #endif
155
 #endif
154
 
156
 
155
 #if WATCH_HOTENDS
157
 #if WATCH_HOTENDS
527
 #if HAS_AUTO_FAN
529
 #if HAS_AUTO_FAN
528
 
530
 
529
   void Temperature::checkExtruderAutoFans() {
531
   void Temperature::checkExtruderAutoFans() {
530
-    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 };
532
+    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 };
531
     static const uint8_t fanBit[] PROGMEM = {
533
     static const uint8_t fanBit[] PROGMEM = {
532
                     0,
534
                     0,
533
       AUTO_1_IS_0 ? 0 :               1,
535
       AUTO_1_IS_0 ? 0 :               1,
534
       AUTO_2_IS_0 ? 0 : AUTO_2_IS_1 ? 1 :               2,
536
       AUTO_2_IS_0 ? 0 : AUTO_2_IS_1 ? 1 :               2,
535
       AUTO_3_IS_0 ? 0 : AUTO_3_IS_1 ? 1 : AUTO_3_IS_2 ? 2 :               3,
537
       AUTO_3_IS_0 ? 0 : AUTO_3_IS_1 ? 1 : AUTO_3_IS_2 ? 2 :               3,
536
-      AUTO_4_IS_0 ? 0 : AUTO_4_IS_1 ? 1 : AUTO_4_IS_2 ? 2 : AUTO_4_IS_3 ? 3 : 4,
538
+      AUTO_4_IS_0 ? 0 : AUTO_4_IS_1 ? 1 : AUTO_4_IS_2 ? 2 : AUTO_4_IS_3 ? 3 :                   4,
539
+      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,
537
       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
540
       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
538
     };
541
     };
539
     uint8_t fanState = 0;
542
     uint8_t fanState = 0;
1193
   #if HAS_TEMP_ADC_4
1196
   #if HAS_TEMP_ADC_4
1194
     HAL_ANALOG_SELECT(TEMP_4_PIN);
1197
     HAL_ANALOG_SELECT(TEMP_4_PIN);
1195
   #endif
1198
   #endif
1199
+  #if HAS_TEMP_ADC_5
1200
+    HAL_ANALOG_SELECT(TEMP_5_PIN);
1201
+  #endif
1196
   #if HAS_HEATED_BED
1202
   #if HAS_HEATED_BED
1197
     HAL_ANALOG_SELECT(TEMP_BED_PIN);
1203
     HAL_ANALOG_SELECT(TEMP_BED_PIN);
1198
   #endif
1204
   #endif
1226
       SET_OUTPUT(E1_AUTO_FAN_PIN);
1232
       SET_OUTPUT(E1_AUTO_FAN_PIN);
1227
     #endif
1233
     #endif
1228
   #endif
1234
   #endif
1229
-  #if HAS_AUTO_FAN_2 && !AUTO_2_IS_0 && !AUTO_2_IS_1
1235
+  #if HAS_AUTO_FAN_2 && !(AUTO_2_IS_0 || AUTO_2_IS_1)
1230
     #if E2_AUTO_FAN_PIN == FAN1_PIN
1236
     #if E2_AUTO_FAN_PIN == FAN1_PIN
1231
       SET_OUTPUT(E2_AUTO_FAN_PIN);
1237
       SET_OUTPUT(E2_AUTO_FAN_PIN);
1232
       #if ENABLED(FAST_PWM_FAN)
1238
       #if ENABLED(FAST_PWM_FAN)
1236
       SET_OUTPUT(E2_AUTO_FAN_PIN);
1242
       SET_OUTPUT(E2_AUTO_FAN_PIN);
1237
     #endif
1243
     #endif
1238
   #endif
1244
   #endif
1239
-  #if HAS_AUTO_FAN_3 && !AUTO_3_IS_0 && !AUTO_3_IS_1 && !AUTO_3_IS_2
1245
+  #if HAS_AUTO_FAN_3 && !(AUTO_3_IS_0 || AUTO_3_IS_1 || AUTO_3_IS_2)
1240
     #if E3_AUTO_FAN_PIN == FAN1_PIN
1246
     #if E3_AUTO_FAN_PIN == FAN1_PIN
1241
       SET_OUTPUT(E3_AUTO_FAN_PIN);
1247
       SET_OUTPUT(E3_AUTO_FAN_PIN);
1242
       #if ENABLED(FAST_PWM_FAN)
1248
       #if ENABLED(FAST_PWM_FAN)
1246
       SET_OUTPUT(E3_AUTO_FAN_PIN);
1252
       SET_OUTPUT(E3_AUTO_FAN_PIN);
1247
     #endif
1253
     #endif
1248
   #endif
1254
   #endif
1249
-  #if HAS_AUTO_FAN_4 && !AUTO_4_IS_0 && !AUTO_4_IS_1 && !AUTO_4_IS_2 && !AUTO_4_IS_3
1255
+  #if HAS_AUTO_FAN_4 && !(AUTO_4_IS_0 || AUTO_4_IS_1 || AUTO_4_IS_2 || AUTO_4_IS_3)
1250
     #if E4_AUTO_FAN_PIN == FAN1_PIN
1256
     #if E4_AUTO_FAN_PIN == FAN1_PIN
1251
       SET_OUTPUT(E4_AUTO_FAN_PIN);
1257
       SET_OUTPUT(E4_AUTO_FAN_PIN);
1252
       #if ENABLED(FAST_PWM_FAN)
1258
       #if ENABLED(FAST_PWM_FAN)
1256
       SET_OUTPUT(E4_AUTO_FAN_PIN);
1262
       SET_OUTPUT(E4_AUTO_FAN_PIN);
1257
     #endif
1263
     #endif
1258
   #endif
1264
   #endif
1259
-  #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
1265
+  #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)
1266
+    #if E5_AUTO_FAN_PIN == FAN1_PIN
1267
+      SET_OUTPUT(E5_AUTO_FAN_PIN);
1268
+      #if ENABLED(FAST_PWM_FAN)
1269
+        setPwmFrequency(E5_AUTO_FAN_PIN, 1); // No prescaling. Pwm frequency = F_CPU/256/8
1270
+      #endif
1271
+    #else
1272
+      SET_OUTPUT(E5_AUTO_FAN_PIN);
1273
+    #endif
1274
+  #endif
1275
+  #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)
1260
     #if CHAMBER_AUTO_FAN_PIN == FAN1_PIN
1276
     #if CHAMBER_AUTO_FAN_PIN == FAN1_PIN
1261
       SET_OUTPUT(CHAMBER_AUTO_FAN_PIN);
1277
       SET_OUTPUT(CHAMBER_AUTO_FAN_PIN);
1262
       #if ENABLED(FAST_PWM_FAN)
1278
       #if ENABLED(FAST_PWM_FAN)
1321
           #ifdef HEATER_4_MAXTEMP
1337
           #ifdef HEATER_4_MAXTEMP
1322
             TEMP_MAX_ROUTINE(4);
1338
             TEMP_MAX_ROUTINE(4);
1323
           #endif
1339
           #endif
1340
+          #if HOTENDS > 5
1341
+            #ifdef HEATER_5_MINTEMP
1342
+              TEMP_MIN_ROUTINE(5);
1343
+            #endif
1344
+            #ifdef HEATER_5_MAXTEMP
1345
+              TEMP_MAX_ROUTINE(5);
1346
+            #endif
1347
+          #endif // HOTENDS > 5
1324
         #endif // HOTENDS > 4
1348
         #endif // HOTENDS > 4
1325
       #endif // HOTENDS > 3
1349
       #endif // HOTENDS > 3
1326
     #endif // HOTENDS > 2
1350
     #endif // HOTENDS > 2
1539
           DISABLE_HEATER(3);
1563
           DISABLE_HEATER(3);
1540
           #if HOTENDS > 4
1564
           #if HOTENDS > 4
1541
             DISABLE_HEATER(4);
1565
             DISABLE_HEATER(4);
1566
+            #if HOTENDS > 5
1567
+              DISABLE_HEATER(5);
1568
+            #endif // HOTENDS > 5
1542
           #endif // HOTENDS > 4
1569
           #endif // HOTENDS > 4
1543
         #endif // HOTENDS > 3
1570
         #endif // HOTENDS > 3
1544
       #endif // HOTENDS > 2
1571
       #endif // HOTENDS > 2
1665
         current_temperature_raw[3] = raw_temp_value[3];
1692
         current_temperature_raw[3] = raw_temp_value[3];
1666
         #if HAS_TEMP_ADC_4
1693
         #if HAS_TEMP_ADC_4
1667
           current_temperature_raw[4] = raw_temp_value[4];
1694
           current_temperature_raw[4] = raw_temp_value[4];
1668
-        #endif
1669
-      #endif
1670
-    #endif
1671
-  #endif
1695
+          #if HAS_TEMP_ADC_5
1696
+            current_temperature_raw[5] = raw_temp_value[5];
1697
+          #endif // HAS_TEMP_ADC_5
1698
+        #endif // HAS_TEMP_ADC_4
1699
+      #endif // HAS_TEMP_ADC_3
1700
+    #endif // HAS_TEMP_ADC_2
1701
+  #endif // HAS_TEMP_ADC_1
1672
 
1702
 
1673
   #if HAS_HEATED_BED
1703
   #if HAS_HEATED_BED
1674
     current_temperature_bed_raw = raw_temp_bed_value;
1704
     current_temperature_bed_raw = raw_temp_bed_value;
1718
           , TEMPDIR(3)
1748
           , TEMPDIR(3)
1719
           #if HOTENDS > 4
1749
           #if HOTENDS > 4
1720
             , TEMPDIR(4)
1750
             , TEMPDIR(4)
1751
+            #if HOTENDS > 5
1752
+              , TEMPDIR(5)
1753
+            #endif // HOTENDS > 5
1721
           #endif // HOTENDS > 4
1754
           #endif // HOTENDS > 4
1722
         #endif // HOTENDS > 3
1755
         #endif // HOTENDS > 3
1723
       #endif // HOTENDS > 2
1756
       #endif // HOTENDS > 2
1815
         ISR_STATICS(3);
1848
         ISR_STATICS(3);
1816
         #if HOTENDS > 4
1849
         #if HOTENDS > 4
1817
           ISR_STATICS(4);
1850
           ISR_STATICS(4);
1851
+          #if HOTENDS > 5
1852
+            ISR_STATICS(5);
1853
+          #endif // HOTENDS > 5
1818
         #endif // HOTENDS > 4
1854
         #endif // HOTENDS > 4
1819
       #endif // HOTENDS > 3
1855
       #endif // HOTENDS > 3
1820
     #endif // HOTENDS > 2
1856
     #endif // HOTENDS > 2
1851
             #if HOTENDS > 4
1887
             #if HOTENDS > 4
1852
               soft_pwm_count_4 = (soft_pwm_count_4 & pwm_mask) + soft_pwm_amount[4];
1888
               soft_pwm_count_4 = (soft_pwm_count_4 & pwm_mask) + soft_pwm_amount[4];
1853
               WRITE_HEATER_4(soft_pwm_count_4 > pwm_mask ? HIGH : LOW);
1889
               WRITE_HEATER_4(soft_pwm_count_4 > pwm_mask ? HIGH : LOW);
1890
+              #if HOTENDS > 5
1891
+                soft_pwm_count_5 = (soft_pwm_count_5 & pwm_mask) + soft_pwm_amount[5];
1892
+                WRITE_HEATER_5(soft_pwm_count_5 > pwm_mask ? HIGH : LOW);
1893
+              #endif // HOTENDS > 5
1854
             #endif // HOTENDS > 4
1894
             #endif // HOTENDS > 4
1855
           #endif // HOTENDS > 3
1895
           #endif // HOTENDS > 3
1856
         #endif // HOTENDS > 2
1896
         #endif // HOTENDS > 2
1886
             if (soft_pwm_count_3 <= pwm_count_tmp) WRITE_HEATER_3(LOW);
1926
             if (soft_pwm_count_3 <= pwm_count_tmp) WRITE_HEATER_3(LOW);
1887
             #if HOTENDS > 4
1927
             #if HOTENDS > 4
1888
               if (soft_pwm_count_4 <= pwm_count_tmp) WRITE_HEATER_4(LOW);
1928
               if (soft_pwm_count_4 <= pwm_count_tmp) WRITE_HEATER_4(LOW);
1929
+              #if HOTENDS > 5
1930
+                if (soft_pwm_count_5 <= pwm_count_tmp) WRITE_HEATER_5(LOW);
1931
+              #endif // HOTENDS > 5
1889
             #endif // HOTENDS > 4
1932
             #endif // HOTENDS > 4
1890
           #endif // HOTENDS > 3
1933
           #endif // HOTENDS > 3
1891
         #endif // HOTENDS > 2
1934
         #endif // HOTENDS > 2
1968
             SLOW_PWM_ROUTINE(3);
2011
             SLOW_PWM_ROUTINE(3);
1969
             #if HOTENDS > 4
2012
             #if HOTENDS > 4
1970
               SLOW_PWM_ROUTINE(4);
2013
               SLOW_PWM_ROUTINE(4);
2014
+              #if HOTENDS > 5
2015
+                SLOW_PWM_ROUTINE(5);
2016
+              #endif // HOTENDS > 5
1971
             #endif // HOTENDS > 4
2017
             #endif // HOTENDS > 4
1972
           #endif // HOTENDS > 3
2018
           #endif // HOTENDS > 3
1973
         #endif // HOTENDS > 2
2019
         #endif // HOTENDS > 2
1987
           PWM_OFF_ROUTINE(3);
2033
           PWM_OFF_ROUTINE(3);
1988
           #if HOTENDS > 4
2034
           #if HOTENDS > 4
1989
             PWM_OFF_ROUTINE(4);
2035
             PWM_OFF_ROUTINE(4);
2036
+            #if HOTENDS > 5
2037
+              PWM_OFF_ROUTINE(5);
2038
+            #endif // HOTENDS > 5
1990
           #endif // HOTENDS > 4
2039
           #endif // HOTENDS > 4
1991
         #endif // HOTENDS > 3
2040
         #endif // HOTENDS > 3
1992
       #endif // HOTENDS > 2
2041
       #endif // HOTENDS > 2
2047
             if (state_timer_heater_3 > 0) state_timer_heater_3--;
2096
             if (state_timer_heater_3 > 0) state_timer_heater_3--;
2048
             #if HOTENDS > 4
2097
             #if HOTENDS > 4
2049
               if (state_timer_heater_4 > 0) state_timer_heater_4--;
2098
               if (state_timer_heater_4 > 0) state_timer_heater_4--;
2099
+              #if HOTENDS > 5
2100
+                if (state_timer_heater_5 > 0) state_timer_heater_5--;
2101
+              #endif // HOTENDS > 5
2050
             #endif // HOTENDS > 4
2102
             #endif // HOTENDS > 4
2051
           #endif // HOTENDS > 3
2103
           #endif // HOTENDS > 3
2052
         #endif // HOTENDS > 2
2104
         #endif // HOTENDS > 2
2169
         break;
2221
         break;
2170
     #endif
2222
     #endif
2171
 
2223
 
2224
+    #if HAS_TEMP_ADC_5
2225
+      case PrepareTemp_5:
2226
+        HAL_START_ADC(TEMP_5_PIN);
2227
+        break;
2228
+      case MeasureTemp_5:
2229
+        ACCUMULATE_ADC(raw_temp_value[5]);
2230
+        break;
2231
+    #endif
2232
+
2172
     #if ENABLED(FILAMENT_WIDTH_SENSOR)
2233
     #if ENABLED(FILAMENT_WIDTH_SENSOR)
2173
       case Prepare_FILWIDTH:
2234
       case Prepare_FILWIDTH:
2174
         HAL_START_ADC(FILWIDTH_PIN);
2235
         HAL_START_ADC(FILWIDTH_PIN);
2218
 
2279
 
2219
   #if ENABLED(BABYSTEPPING)
2280
   #if ENABLED(BABYSTEPPING)
2220
     LOOP_XYZ(axis) {
2281
     LOOP_XYZ(axis) {
2221
-      const int curTodo = babystepsTodo[axis]; // get rid of volatile for performance
2282
+      const int16_t curTodo = babystepsTodo[axis]; // get rid of volatile for performance
2222
       if (curTodo) {
2283
       if (curTodo) {
2223
         stepper.babystep((AxisEnum)axis, curTodo > 0);
2284
         stepper.babystep((AxisEnum)axis, curTodo > 0);
2224
         if (curTodo > 0) babystepsTodo[axis]--;
2285
         if (curTodo > 0) babystepsTodo[axis]--;

+ 1
- 1
Marlin/src/module/temperature.h Целия файл

163
     #endif
163
     #endif
164
 
164
 
165
     #if ENABLED(BABYSTEPPING)
165
     #if ENABLED(BABYSTEPPING)
166
-      static volatile int babystepsTodo[3];
166
+      static volatile int16_t babystepsTodo[3];
167
     #endif
167
     #endif
168
 
168
 
169
     #if ENABLED(PREVENT_COLD_EXTRUSION)
169
     #if ENABLED(PREVENT_COLD_EXTRUSION)

+ 54
- 6
Marlin/src/pins/pins.h Целия файл

468
 #ifndef E4_MS3_PIN
468
 #ifndef E4_MS3_PIN
469
   #define E4_MS3_PIN -1
469
   #define E4_MS3_PIN -1
470
 #endif
470
 #endif
471
+#ifndef E5_MS1_PIN
472
+  #define E5_MS1_PIN -1
473
+#endif
474
+#ifndef E5_MS2_PIN
475
+  #define E5_MS2_PIN -1
476
+#endif
477
+#ifndef E5_MS3_PIN
478
+  #define E5_MS3_PIN -1
479
+#endif
471
 
480
 
472
 #ifndef E0_STEP_PIN
481
 #ifndef E0_STEP_PIN
473
   #define E0_STEP_PIN -1
482
   #define E0_STEP_PIN -1
514
 #ifndef E4_ENABLE_PIN
523
 #ifndef E4_ENABLE_PIN
515
   #define E4_ENABLE_PIN -1
524
   #define E4_ENABLE_PIN -1
516
 #endif
525
 #endif
526
+#ifndef E5_STEP_PIN
527
+  #define E5_STEP_PIN -1
528
+#endif
529
+#ifndef E5_DIR_PIN
530
+  #define E5_DIR_PIN -1
531
+#endif
532
+#ifndef E5_ENABLE_PIN
533
+  #define E5_ENABLE_PIN -1
534
+#endif
517
 
535
 
518
 #ifndef X_CS_PIN
536
 #ifndef X_CS_PIN
519
   #define X_CS_PIN -1
537
   #define X_CS_PIN -1
539
 #ifndef E4_CS_PIN
557
 #ifndef E4_CS_PIN
540
   #define E4_CS_PIN -1
558
   #define E4_CS_PIN -1
541
 #endif
559
 #endif
560
+#ifndef E5_CS_PIN
561
+  #define E5_CS_PIN -1
562
+#endif
542
 
563
 
543
 #ifndef FAN_PIN
564
 #ifndef FAN_PIN
544
   #define FAN_PIN -1
565
   #define FAN_PIN -1
578
 #ifndef HEATER_4_PIN
599
 #ifndef HEATER_4_PIN
579
   #define HEATER_4_PIN -1
600
   #define HEATER_4_PIN -1
580
 #endif
601
 #endif
602
+#ifndef HEATER_5_PIN
603
+  #define HEATER_5_PIN -1
604
+#endif
581
 #ifndef HEATER_BED_PIN
605
 #ifndef HEATER_BED_PIN
582
   #define HEATER_BED_PIN -1
606
   #define HEATER_BED_PIN -1
583
 #endif
607
 #endif
597
 #ifndef TEMP_4_PIN
621
 #ifndef TEMP_4_PIN
598
   #define TEMP_4_PIN -1
622
   #define TEMP_4_PIN -1
599
 #endif
623
 #endif
624
+#ifndef TEMP_5_PIN
625
+  #define TEMP_5_PIN -1
626
+#endif
600
 #ifndef TEMP_BED_PIN
627
 #ifndef TEMP_BED_PIN
601
   #define TEMP_BED_PIN -1
628
   #define TEMP_BED_PIN -1
602
 #endif
629
 #endif
669
     #define E4_AUTO_FAN_PIN -1
696
     #define E4_AUTO_FAN_PIN -1
670
   #endif
697
   #endif
671
 #endif
698
 #endif
699
+#ifndef E5_AUTO_FAN_PIN
700
+  #ifdef ORIG_E5_AUTO_FAN_PIN
701
+    #define E5_AUTO_FAN_PIN ORIG_E5_AUTO_FAN_PIN
702
+  #else
703
+    #define E5_AUTO_FAN_PIN -1
704
+  #endif
705
+#endif
672
 #ifndef CHAMBER_AUTO_FAN_PIN
706
 #ifndef CHAMBER_AUTO_FAN_PIN
673
   #ifdef ORIG_CHAMBER_AUTO_FAN_PIN
707
   #ifdef ORIG_CHAMBER_AUTO_FAN_PIN
674
     #define CHAMBER_AUTO_FAN_PIN ORIG_CHAMBER_AUTO_FAN_PIN
708
     #define CHAMBER_AUTO_FAN_PIN ORIG_CHAMBER_AUTO_FAN_PIN
683
 #define _E2_PINS
717
 #define _E2_PINS
684
 #define _E3_PINS
718
 #define _E3_PINS
685
 #define _E4_PINS
719
 #define _E4_PINS
720
+#define _E5_PINS
686
 
721
 
687
 #if ENABLED(SWITCHING_EXTRUDER)
722
 #if ENABLED(SWITCHING_EXTRUDER)
688
                       // Tools 0 and 1 use E0
723
                       // Tools 0 and 1 use E0
706
       #if EXTRUDERS > 4
741
       #if EXTRUDERS > 4
707
         #undef _E4_PINS
742
         #undef _E4_PINS
708
         #define _E4_PINS E4_STEP_PIN, E4_DIR_PIN, E4_ENABLE_PIN, E4_MS1_PIN, E4_MS2_PIN, E4_MS3_PIN, E4_CS_PIN,
743
         #define _E4_PINS E4_STEP_PIN, E4_DIR_PIN, E4_ENABLE_PIN, E4_MS1_PIN, E4_MS2_PIN, E4_MS3_PIN, E4_CS_PIN,
744
+        #if EXTRUDERS > 5
745
+          #undef _E5_PINS
746
+          #define _E5_PINS E5_STEP_PIN, E5_DIR_PIN, E5_ENABLE_PIN, E5_MS1_PIN, E5_MS2_PIN, E5_MS3_PIN, E5_CS_PIN,
747
+        #endif // EXTRUDERS > 5
709
       #endif // EXTRUDERS > 4
748
       #endif // EXTRUDERS > 4
710
     #endif // EXTRUDERS > 3
749
     #endif // EXTRUDERS > 3
711
   #endif // EXTRUDERS > 2
750
   #endif // EXTRUDERS > 2
716
 #define _H2_PINS
755
 #define _H2_PINS
717
 #define _H3_PINS
756
 #define _H3_PINS
718
 #define _H4_PINS
757
 #define _H4_PINS
758
+#define _H5_PINS
719
 
759
 
720
 #if HOTENDS > 1
760
 #if HOTENDS > 1
721
   #undef _H1_PINS
761
   #undef _H1_PINS
728
       #define _H3_PINS HEATER_3_PIN, E3_AUTO_FAN_PIN, analogInputToDigitalPin(TEMP_3_PIN),
768
       #define _H3_PINS HEATER_3_PIN, E3_AUTO_FAN_PIN, analogInputToDigitalPin(TEMP_3_PIN),
729
       #if HOTENDS > 4
769
       #if HOTENDS > 4
730
         #undef _H4_PINS
770
         #undef _H4_PINS
731
-        #define _H4_PINS HEATER_4_PIN, analogInputToDigitalPin(TEMP_4_PIN),
771
+        #define _H4_PINS HEATER_4_PIN, E4_AUTO_FAN_PIN, analogInputToDigitalPin(TEMP_4_PIN),
772
+        #if HOTENDS > 5
773
+          #undef _H5_PINS
774
+          #define _H5_PINS HEATER_5_PIN, E5_AUTO_FAN_PIN, analogInputToDigitalPin(TEMP_5_PIN),
775
+        #endif // HOTENDS > 5
732
       #endif // HOTENDS > 4
776
       #endif // HOTENDS > 4
733
     #endif // HOTENDS > 3
777
     #endif // HOTENDS > 3
734
   #endif // HOTENDS > 2
778
   #endif // HOTENDS > 2
744
       #if MIXING_STEPPERS > 4
788
       #if MIXING_STEPPERS > 4
745
         #undef _E4_PINS
789
         #undef _E4_PINS
746
         #define _E4_PINS E4_STEP_PIN, E4_DIR_PIN, E4_ENABLE_PIN, E4_MS1_PIN, E4_MS2_PIN, E4_CS_PIN,
790
         #define _E4_PINS E4_STEP_PIN, E4_DIR_PIN, E4_ENABLE_PIN, E4_MS1_PIN, E4_MS2_PIN, E4_CS_PIN,
791
+        #if MIXING_STEPPERS > 5
792
+          #undef _E5_PINS
793
+          #define _E5_PINS E5_STEP_PIN, E5_DIR_PIN, E5_ENABLE_PIN, E5_MS1_PIN, E5_MS2_PIN, E5_CS_PIN,
794
+        #endif // MIXING_STEPPERS > 5
747
       #endif // MIXING_STEPPERS > 4
795
       #endif // MIXING_STEPPERS > 4
748
     #endif // MIXING_STEPPERS > 3
796
     #endif // MIXING_STEPPERS > 3
749
   #endif // MIXING_STEPPERS > 2
797
   #endif // MIXING_STEPPERS > 2
856
     #ifndef X2_CS_PIN
904
     #ifndef X2_CS_PIN
857
       #define X2_CS_PIN   _EPIN(E_STEPPERS, CS)
905
       #define X2_CS_PIN   _EPIN(E_STEPPERS, CS)
858
     #endif
906
     #endif
859
-    #if E_STEPPERS > 4 || !PIN_EXISTS(X2_ENABLE)
907
+    #if E_STEPPERS > MAX_EXTRUDERS || !PIN_EXISTS(X2_ENABLE)
860
       #error "No E stepper plug left for X2!"
908
       #error "No E stepper plug left for X2!"
861
     #endif
909
     #endif
862
   #endif
910
   #endif
881
     #ifndef Y2_CS_PIN
929
     #ifndef Y2_CS_PIN
882
       #define Y2_CS_PIN   _EPIN(Y2_E_INDEX, CS)
930
       #define Y2_CS_PIN   _EPIN(Y2_E_INDEX, CS)
883
     #endif
931
     #endif
884
-    #if Y2_E_INDEX > 4 || !PIN_EXISTS(Y2_ENABLE)
932
+    #if Y2_E_INDEX > MAX_EXTRUDERS || !PIN_EXISTS(Y2_ENABLE)
885
       #error "No E stepper plug left for Y2!"
933
       #error "No E stepper plug left for Y2!"
886
     #endif
934
     #endif
887
   #endif
935
   #endif
906
     #ifndef Z2_CS_PIN
954
     #ifndef Z2_CS_PIN
907
       #define Z2_CS_PIN   _EPIN(Z2_E_INDEX, CS)
955
       #define Z2_CS_PIN   _EPIN(Z2_E_INDEX, CS)
908
     #endif
956
     #endif
909
-    #if Z2_E_INDEX > 4 || !PIN_EXISTS(Z2_ENABLE)
957
+    #if Z2_E_INDEX > MAX_EXTRUDERS || !PIN_EXISTS(Z2_ENABLE)
910
       #error "No E stepper plug left for Z2!"
958
       #error "No E stepper plug left for Z2!"
911
     #endif
959
     #endif
912
   #endif
960
   #endif
952
     Y_STEP_PIN, Y_DIR_PIN, Y_ENABLE_PIN, Y_MIN_PIN, Y_MAX_PIN, Y_MS1_PIN, Y_MS2_PIN, Y_CS_PIN, \
1000
     Y_STEP_PIN, Y_DIR_PIN, Y_ENABLE_PIN, Y_MIN_PIN, Y_MAX_PIN, Y_MS1_PIN, Y_MS2_PIN, Y_CS_PIN, \
953
     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, \
1001
     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, \
954
     PS_ON_PIN, HEATER_BED_PIN, FAN_PIN, FAN1_PIN, FAN2_PIN, CONTROLLER_FAN_PIN, \
1002
     PS_ON_PIN, HEATER_BED_PIN, FAN_PIN, FAN1_PIN, FAN2_PIN, CONTROLLER_FAN_PIN, \
955
-    _E0_PINS _E1_PINS _E2_PINS _E3_PINS _E4_PINS BED_PINS \
956
-    _H0_PINS _H1_PINS _H2_PINS _H3_PINS _H4_PINS \
1003
+    _E0_PINS _E1_PINS _E2_PINS _E3_PINS _E4_PINS _E5_PINS BED_PINS \
1004
+    _H0_PINS _H1_PINS _H2_PINS _H3_PINS _H4_PINS _H5_PINS \
957
     _X2_PINS _Y2_PINS _Z2_PINS _Z3_PINS \
1005
     _X2_PINS _Y2_PINS _Z2_PINS _Z3_PINS \
958
     HAL_SENSITIVE_PINS \
1006
     HAL_SENSITIVE_PINS \
959
   }
1007
   }

+ 36
- 0
Marlin/src/pins/pinsDebug_list.h Целия файл

361
 #if PIN_EXISTS(E4_STEP)
361
 #if PIN_EXISTS(E4_STEP)
362
   REPORT_NAME_DIGITAL(__LINE__, E4_STEP_PIN)
362
   REPORT_NAME_DIGITAL(__LINE__, E4_STEP_PIN)
363
 #endif
363
 #endif
364
+#if PIN_EXISTS(E5_AUTO_FAN)
365
+  REPORT_NAME_DIGITAL(__LINE__, E5_AUTO_FAN_PIN)
366
+#endif
367
+#if PIN_EXISTS(E5_CS)
368
+  REPORT_NAME_DIGITAL(__LINE__, E5_CS_PIN)
369
+#endif
370
+#if PIN_EXISTS(E5_DIR)
371
+  REPORT_NAME_DIGITAL(__LINE__, E5_DIR_PIN)
372
+#endif
373
+#if PIN_EXISTS(E5_ENABLE)
374
+  REPORT_NAME_DIGITAL(__LINE__, E5_ENABLE_PIN)
375
+#endif
376
+#if PIN_EXISTS(E5_MS1)
377
+  REPORT_NAME_DIGITAL(__LINE__, E5_MS1_PIN)
378
+#endif
379
+#if PIN_EXISTS(E5_MS2)
380
+  REPORT_NAME_DIGITAL(__LINE__, E5_MS2_PIN)
381
+#endif
382
+#if PIN_EXISTS(E5_MS3)
383
+  REPORT_NAME_DIGITAL(__LINE__, E5_MS3_PIN)
384
+#endif
385
+#if PIN_EXISTS(E5_STEP)
386
+  REPORT_NAME_DIGITAL(__LINE__, E5_STEP_PIN)
387
+#endif
364
 #if defined(ENET_CRS) && ENET_CRS >= 0
388
 #if defined(ENET_CRS) && ENET_CRS >= 0
365
   REPORT_NAME_DIGITAL(__LINE__, ENET_CRS)
389
   REPORT_NAME_DIGITAL(__LINE__, ENET_CRS)
366
 #endif
390
 #endif
578
 #if PIN_EXISTS(ORIG_E4_AUTO_FAN)
602
 #if PIN_EXISTS(ORIG_E4_AUTO_FAN)
579
   REPORT_NAME_DIGITAL(__LINE__, ORIG_E4_AUTO_FAN_PIN)
603
   REPORT_NAME_DIGITAL(__LINE__, ORIG_E4_AUTO_FAN_PIN)
580
 #endif
604
 #endif
605
+#if PIN_EXISTS(ORIG_E5_AUTO_FAN)
606
+  REPORT_NAME_DIGITAL(__LINE__, ORIG_E5_AUTO_FAN_PIN)
607
+#endif
581
 #if PIN_EXISTS(PHOTOGRAPH)
608
 #if PIN_EXISTS(PHOTOGRAPH)
582
   REPORT_NAME_DIGITAL(__LINE__, PHOTOGRAPH_PIN)
609
   REPORT_NAME_DIGITAL(__LINE__, PHOTOGRAPH_PIN)
583
 #endif
610
 #endif
689
 #if PIN_EXISTS(SOL4)
716
 #if PIN_EXISTS(SOL4)
690
   REPORT_NAME_DIGITAL(__LINE__, SOL4_PIN)
717
   REPORT_NAME_DIGITAL(__LINE__, SOL4_PIN)
691
 #endif
718
 #endif
719
+#if PIN_EXISTS(SOL5)
720
+  REPORT_NAME_DIGITAL(__LINE__, SOL5_PIN)
721
+#endif
692
 #if defined(SPARE_IO) && SPARE_IO >= 0
722
 #if defined(SPARE_IO) && SPARE_IO >= 0
693
   REPORT_NAME_DIGITAL(__LINE__, SPARE_IO)
723
   REPORT_NAME_DIGITAL(__LINE__, SPARE_IO)
694
 #endif
724
 #endif
1043
 #if PIN_EXISTS(E4_SERIAL_RX)
1073
 #if PIN_EXISTS(E4_SERIAL_RX)
1044
   REPORT_NAME_DIGITAL(__LINE__, E4_SERIAL_RX_PIN)
1074
   REPORT_NAME_DIGITAL(__LINE__, E4_SERIAL_RX_PIN)
1045
 #endif
1075
 #endif
1076
+#if PIN_EXISTS(E5_SERIAL_TX)
1077
+  REPORT_NAME_DIGITAL(__LINE__, E5_SERIAL_TX_PIN)
1078
+#endif
1079
+#if PIN_EXISTS(E5_SERIAL_RX)
1080
+  REPORT_NAME_DIGITAL(__LINE__, E5_SERIAL_RX_PIN)
1081
+#endif

Loading…
Отказ
Запис