Procházet zdrojové kódy

Follow up fixes to various PRs. (#13334)

- Ensure `MarlinUI:get_progress` is defined for `ExtUI`.
- Fix for `BACKLASH_SMOOTHING` with small segments.
  `BACKLASH_SMOOTHING` with extremely small segments failed to fully correct due to the correction factor being rounded down. Rounding up ensures the entire backlash will converge to zero even for small segments.
- Add pinout for the beta revision `EINSY_RETRO`.
- Update soft endstops with tool offsets (for toolchange et. al. move clamping) (#12568)
Marcio Teixeira před 6 roky
rodič
revize
00fc43144a

+ 10
- 11
Marlin/src/gcode/calibrate/G425.cpp Zobrazit soubor

@@ -143,18 +143,15 @@ inline void park_above_object(measurements_t &m, const float uncertainty) {
143 143
 }
144 144
 
145 145
 #if HOTENDS > 1
146
-
147 146
   inline void set_nozzle(measurements_t &m, const uint8_t extruder) {
148 147
     if (extruder != active_extruder) {
149 148
       park_above_object(m, CALIBRATION_MEASUREMENT_UNKNOWN);
150 149
       tool_change(extruder);
151 150
     }
152 151
   }
152
+#endif
153 153
 
154
-  inline void reset_nozzle_offsets() {
155
-    constexpr float tmp[XYZ][HOTENDS] = { HOTEND_OFFSET_X, HOTEND_OFFSET_Y, HOTEND_OFFSET_Z };
156
-    LOOP_XYZ(i) HOTEND_LOOP() hotend_offset[i][e] = tmp[i][e];
157
-  }
154
+#if HAS_HOTEND_OFFSET
158 155
 
159 156
   inline void normalize_hotend_offsets() {
160 157
     for (uint8_t e = 1; e < HOTENDS; e++) {
@@ -167,7 +164,7 @@ inline void park_above_object(measurements_t &m, const float uncertainty) {
167 164
     hotend_offset[Z_AXIS][0] = 0;
168 165
   }
169 166
 
170
-#endif // HOTENDS > 1
167
+#endif
171 168
 
172 169
 inline bool read_calibration_pin() {
173 170
   #if HAS_CALIBRATION_PIN
@@ -526,7 +523,7 @@ inline void calibrate_toolhead(measurements_t &m, const float uncertainty, const
526 523
   probe_sides(m, uncertainty);
527 524
 
528 525
   // Adjust the hotend offset
529
-  #if HOTENDS > 1
526
+  #if HAS_HOTEND_OFFSET
530 527
     #if HAS_X_CENTER
531 528
       hotend_offset[X_AXIS][extruder] += m.pos_error[X_AXIS];
532 529
     #endif
@@ -534,7 +531,6 @@ inline void calibrate_toolhead(measurements_t &m, const float uncertainty, const
534 531
       hotend_offset[Y_AXIS][extruder] += m.pos_error[Y_AXIS];
535 532
     #endif
536 533
     hotend_offset[Z_AXIS][extruder] += m.pos_error[Z_AXIS];
537
-
538 534
     normalize_hotend_offsets();
539 535
   #endif
540 536
 
@@ -565,8 +561,11 @@ inline void calibrate_all_toolheads(measurements_t &m, const float uncertainty)
565 561
 
566 562
   HOTEND_LOOP() calibrate_toolhead(m, uncertainty, e);
567 563
 
568
-  #if HOTENDS > 1
564
+  #if HAS_HOTEND_OFFSET
569 565
     normalize_hotend_offsets();
566
+  #endif
567
+
568
+  #if HOTENDS > 1
570 569
     set_nozzle(m, 0);
571 570
   #endif
572 571
 }
@@ -585,8 +584,8 @@ inline void calibrate_all_toolheads(measurements_t &m, const float uncertainty)
585 584
 inline void calibrate_all() {
586 585
   measurements_t m;
587 586
 
588
-  #if HOTENDS > 1
589
-    reset_nozzle_offsets();
587
+  #if HAS_HOTEND_OFFSET
588
+    reset_hotend_offsets();
590 589
   #endif
591 590
 
592 591
   TEMPORARY_BACKLASH_CORRECTION(1.0f);

+ 2
- 2
Marlin/src/gcode/feature/pause/M125.cpp Zobrazit soubor

@@ -68,8 +68,8 @@ void GcodeSuite::M125() {
68 68
   if (parser.seenval('Z')) park_point.z = parser.linearval('Z');
69 69
 
70 70
   #if HAS_HOTEND_OFFSET && DISABLED(DUAL_X_CARRIAGE) && DISABLED(DELTA)
71
-    park_point.x += (active_extruder ? hotend_offset[X_AXIS][active_extruder] : 0);
72
-    park_point.y += (active_extruder ? hotend_offset[Y_AXIS][active_extruder] : 0);
71
+    park_point.x += hotend_offset[X_AXIS][active_extruder];
72
+    park_point.y += hotend_offset[Y_AXIS][active_extruder];
73 73
   #endif
74 74
 
75 75
   #if ENABLED(SDSUPPORT)

+ 2
- 2
Marlin/src/gcode/feature/pause/M600.cpp Zobrazit soubor

@@ -110,8 +110,8 @@ void GcodeSuite::M600() {
110 110
   if (parser.seenval('Y')) park_point.y = parser.linearval('Y');
111 111
 
112 112
   #if HAS_HOTEND_OFFSET && DISABLED(DUAL_X_CARRIAGE) && DISABLED(DELTA)
113
-    park_point.x += (active_extruder ? hotend_offset[X_AXIS][active_extruder] : 0);
114
-    park_point.y += (active_extruder ? hotend_offset[Y_AXIS][active_extruder] : 0);
113
+    park_point.x += hotend_offset[X_AXIS][active_extruder];
114
+    park_point.y += hotend_offset[Y_AXIS][active_extruder];
115 115
   #endif
116 116
 
117 117
   #if ENABLED(MMU2_MENUS)

+ 14
- 14
Marlin/src/lcd/ultralcd.cpp Zobrazit soubor

@@ -397,20 +397,6 @@ bool MarlinUI::get_blink() {
397 397
   #endif
398 398
 #endif
399 399
 
400
-#if HAS_PRINT_PROGRESS
401
-  uint8_t MarlinUI::get_progress() {
402
-    #if ENABLED(LCD_SET_PROGRESS_MANUALLY)
403
-      uint8_t &progress = progress_bar_percent;
404
-    #else
405
-      uint8_t progress = 0;
406
-    #endif
407
-    #if ENABLED(SDSUPPORT)
408
-      if (IS_SD_PRINTING()) progress = card.percentDone();
409
-    #endif
410
-    return progress;
411
-  }
412
-#endif
413
-
414 400
 void MarlinUI::status_screen() {
415 401
 
416 402
   #if HAS_LCD_MENU
@@ -1321,4 +1307,18 @@ void MarlinUI::update() {
1321 1307
     set_status_P(msg, -1);
1322 1308
   }
1323 1309
 
1310
+  #if HAS_PRINT_PROGRESS
1311
+    uint8_t MarlinUI::get_progress() {
1312
+      #if ENABLED(LCD_SET_PROGRESS_MANUALLY)
1313
+        uint8_t &progress = progress_bar_percent;
1314
+      #else
1315
+        uint8_t progress = 0;
1316
+      #endif
1317
+      #if ENABLED(SDSUPPORT)
1318
+        if (IS_SD_PRINTING()) progress = card.percentDone();
1319
+      #endif
1320
+      return progress;
1321
+    }
1322
+  #endif
1323
+
1324 1324
 #endif // HAS_SPI_LCD || EXTENSIBLE_UI

+ 1
- 9
Marlin/src/module/configuration_store.cpp Zobrazit soubor

@@ -2028,15 +2028,7 @@ void MarlinSettings::reset() {
2028 2028
   #endif
2029 2029
 
2030 2030
   #if HAS_HOTEND_OFFSET
2031
-    constexpr float tmp4[XYZ][HOTENDS] = { HOTEND_OFFSET_X, HOTEND_OFFSET_Y, HOTEND_OFFSET_Z };
2032
-    static_assert(
2033
-      tmp4[X_AXIS][0] == 0 && tmp4[Y_AXIS][0] == 0 && tmp4[Z_AXIS][0] == 0,
2034
-      "Offsets for the first hotend must be 0.0."
2035
-    );
2036
-    LOOP_XYZ(i) HOTEND_LOOP() hotend_offset[i][e] = tmp4[i][e];
2037
-    #if ENABLED(DUAL_X_CARRIAGE)
2038
-      hotend_offset[X_AXIS][1] = MAX(X2_HOME_POS, X2_MAX_POS);
2039
-    #endif
2031
+    reset_hotend_offsets();
2040 2032
   #endif
2041 2033
 
2042 2034
   #if EXTRUDERS > 1

+ 101
- 47
Marlin/src/module/motion.cpp Zobrazit soubor

@@ -106,6 +106,17 @@ float destination[XYZE]; // = { 0 }
106 106
 // Extruder offsets
107 107
 #if HAS_HOTEND_OFFSET
108 108
   float hotend_offset[XYZ][HOTENDS]; // Initialized by settings.load()
109
+  void reset_hotend_offsets() {
110
+    constexpr float tmp[XYZ][HOTENDS] = { HOTEND_OFFSET_X, HOTEND_OFFSET_Y, HOTEND_OFFSET_Z };
111
+    static_assert(
112
+      tmp[X_AXIS][0] == 0 && tmp[Y_AXIS][0] == 0 && tmp[Z_AXIS][0] == 0,
113
+      "Offsets for the first hotend must be 0.0."
114
+    );
115
+    LOOP_XYZ(i) HOTEND_LOOP() hotend_offset[i][e] = tmp[i][e];
116
+    #if ENABLED(DUAL_X_CARRIAGE)
117
+      hotend_offset[X_AXIS][1] = MAX(X2_HOME_POS, X2_MAX_POS);
118
+    #endif
119
+  }
109 120
 #endif
110 121
 
111 122
 // The feedrate for the current move, often used as the default if
@@ -130,11 +141,23 @@ const float homing_feedrate_mm_s[XYZ] PROGMEM = {
130 141
 float cartes[XYZ];
131 142
 
132 143
 #if IS_KINEMATIC
144
+
133 145
   float delta[ABC];
134
-#endif
135 146
 
136
-#if HAS_SCARA_OFFSET
137
-  float scara_home_offset[ABC];
147
+  #if HAS_SCARA_OFFSET
148
+    float scara_home_offset[ABC];
149
+  #endif
150
+
151
+  #if HAS_SOFTWARE_ENDSTOPS
152
+    float soft_endstop_radius, soft_endstop_radius_2;
153
+  #elif IS_SCARA
154
+    constexpr float soft_endstop_radius = SCARA_PRINTABLE_RADIUS,
155
+                    soft_endstop_radius_2 = sq(SCARA_PRINTABLE_RADIUS);
156
+  #else // DELTA
157
+    constexpr float soft_endstop_radius = DELTA_PRINTABLE_RADIUS,
158
+                    soft_endstop_radius_2 = sq(DELTA_PRINTABLE_RADIUS);
159
+  #endif
160
+
138 161
 #endif
139 162
 
140 163
 /**
@@ -440,47 +463,6 @@ void clean_up_after_endstop_or_probe_move() {
440 463
   float soft_endstop_min[XYZ] = { X_MIN_BED, Y_MIN_BED, Z_MIN_POS },
441 464
         soft_endstop_max[XYZ] = { X_MAX_BED, Y_MAX_BED, Z_MAX_POS };
442 465
 
443
-  #if IS_KINEMATIC
444
-    float soft_endstop_radius, soft_endstop_radius_2;
445
-  #endif
446
-
447
-  /**
448
-   * Constrain the given coordinates to the software endstops.
449
-   *
450
-   * For DELTA/SCARA the XY constraint is based on the smallest
451
-   * radius within the set software endstops.
452
-   */
453
-  void clamp_to_software_endstops(float target[XYZ]) {
454
-    if (!soft_endstops_enabled) return;
455
-    #if IS_KINEMATIC
456
-      const float dist_2 = HYPOT2(target[X_AXIS], target[Y_AXIS]);
457
-      if (dist_2 > soft_endstop_radius_2) {
458
-        const float ratio = soft_endstop_radius / SQRT(dist_2); // 200 / 300 = 0.66
459
-        target[X_AXIS] *= ratio;
460
-        target[Y_AXIS] *= ratio;
461
-      }
462
-    #else
463
-      #if ENABLED(MIN_SOFTWARE_ENDSTOP_X)
464
-        NOLESS(target[X_AXIS], soft_endstop_min[X_AXIS]);
465
-      #endif
466
-      #if ENABLED(MIN_SOFTWARE_ENDSTOP_Y)
467
-        NOLESS(target[Y_AXIS], soft_endstop_min[Y_AXIS]);
468
-      #endif
469
-      #if ENABLED(MAX_SOFTWARE_ENDSTOP_X)
470
-        NOMORE(target[X_AXIS], soft_endstop_max[X_AXIS]);
471
-      #endif
472
-      #if ENABLED(MAX_SOFTWARE_ENDSTOP_Y)
473
-        NOMORE(target[Y_AXIS], soft_endstop_max[Y_AXIS]);
474
-      #endif
475
-    #endif
476
-    #if ENABLED(MIN_SOFTWARE_ENDSTOP_Z)
477
-      NOLESS(target[Z_AXIS], soft_endstop_min[Z_AXIS]);
478
-    #endif
479
-    #if ENABLED(MAX_SOFTWARE_ENDSTOP_Z)
480
-      NOMORE(target[Z_AXIS], soft_endstop_max[Z_AXIS]);
481
-    #endif
482
-  }
483
-
484 466
   /**
485 467
    * Software endstops can be used to monitor the open end of
486 468
    * an axis that has a hardware endstop on the other end. Or
@@ -490,7 +472,11 @@ void clean_up_after_endstop_or_probe_move() {
490 472
    * the software endstop positions must be refreshed to remain
491 473
    * at the same positions relative to the machine.
492 474
    */
493
-  void update_software_endstops(const AxisEnum axis) {
475
+  void update_software_endstops(const AxisEnum axis
476
+    #if HAS_HOTEND_OFFSET
477
+      , const uint8_t old_tool_index/*=0*/, const uint8_t new_tool_index/*=0*/
478
+    #endif
479
+  ) {
494 480
 
495 481
     #if ENABLED(DUAL_X_CARRIAGE)
496 482
 
@@ -499,7 +485,7 @@ void clean_up_after_endstop_or_probe_move() {
499 485
         // In Dual X mode hotend_offset[X] is T1's home position
500 486
         const float dual_max_x = MAX(hotend_offset[X_AXIS][1], X2_MAX_POS);
501 487
 
502
-        if (active_extruder != 0) {
488
+        if (new_tool_index != 0) {
503 489
           // T1 can move from X2_MIN_POS to X2_MAX_POS or X2 home position (whichever is larger)
504 490
           soft_endstop_min[X_AXIS] = X2_MIN_POS;
505 491
           soft_endstop_max[X_AXIS] = dual_max_x;
@@ -538,6 +524,22 @@ void clean_up_after_endstop_or_probe_move() {
538 524
         default: break;
539 525
       }
540 526
 
527
+    #elif HAS_HOTEND_OFFSET
528
+
529
+      // Software endstops are relative to the tool 0 workspace, so
530
+      // the movement limits must be shifted by the tool offset to
531
+      // retain the same physical limit when other tools are selected.
532
+      if (old_tool_index != new_tool_index) {
533
+        const float offs = hotend_offset[axis][new_tool_index] - hotend_offset[axis][old_tool_index];
534
+        soft_endstop_min[axis] += offs;
535
+        soft_endstop_max[axis] += offs;
536
+      }
537
+      else {
538
+        const float offs = hotend_offset[axis][active_extruder];
539
+        soft_endstop_min[axis] = base_min_pos(axis) + offs;
540
+        soft_endstop_max[axis] = base_max_pos(axis) + offs;
541
+      }
542
+
541 543
     #else
542 544
 
543 545
       soft_endstop_min[axis] = base_min_pos(axis);
@@ -554,7 +556,59 @@ void clean_up_after_endstop_or_probe_move() {
554 556
     #endif
555 557
   }
556 558
 
557
-#endif
559
+#endif // HAS_SOFTWARE_ENDSTOPS
560
+
561
+/**
562
+ * Constrain the given coordinates to the software endstops.
563
+ *
564
+ * For DELTA/SCARA the XY constraint is based on the smallest
565
+ * radius within the set software endstops.
566
+ */
567
+void clamp_to_software_endstops(float target[XYZ]) {
568
+
569
+  if (!soft_endstops_enabled) return;
570
+
571
+  #if IS_KINEMATIC
572
+
573
+    #if HAS_HOTEND_OFFSET && ENABLED(DELTA)
574
+      // The effector center position will be the target minus the hotend offset.
575
+      const float offx = hotend_offset[X_AXIS][active_extruder], offy = hotend_offset[Y_AXIS][active_extruder];
576
+    #else
577
+      // SCARA needs to consider the angle of the arm through the entire move, so for now use no tool offset.
578
+      constexpr float offx = 0, offy = 0;
579
+    #endif
580
+
581
+    const float dist_2 = HYPOT2(target[X_AXIS] - offx, target[Y_AXIS] - offy);
582
+    if (dist_2 > soft_endstop_radius_2) {
583
+      const float ratio = (soft_endstop_radius) / SQRT(dist_2); // 200 / 300 = 0.66
584
+      target[X_AXIS] *= ratio;
585
+      target[Y_AXIS] *= ratio;
586
+    }
587
+
588
+  #else
589
+
590
+    #if !HAS_SOFTWARE_ENDSTOPS || ENABLED(MIN_SOFTWARE_ENDSTOP_X)
591
+      NOLESS(target[X_AXIS], soft_endstop_min[X_AXIS]);
592
+    #endif
593
+    #if !HAS_SOFTWARE_ENDSTOPS || ENABLED(MAX_SOFTWARE_ENDSTOP_X)
594
+      NOMORE(target[X_AXIS], soft_endstop_max[X_AXIS]);
595
+    #endif
596
+    #if !HAS_SOFTWARE_ENDSTOPS || ENABLED(MIN_SOFTWARE_ENDSTOP_Y)
597
+      NOLESS(target[Y_AXIS], soft_endstop_min[Y_AXIS]);
598
+    #endif
599
+    #if !HAS_SOFTWARE_ENDSTOPS || ENABLED(MAX_SOFTWARE_ENDSTOP_Y)
600
+      NOMORE(target[Y_AXIS], soft_endstop_max[Y_AXIS]);
601
+    #endif
602
+
603
+  #endif
604
+
605
+  #if !HAS_SOFTWARE_ENDSTOPS || ENABLED(MIN_SOFTWARE_ENDSTOP_Z)
606
+    NOLESS(target[Z_AXIS], soft_endstop_min[Z_AXIS]);
607
+  #endif
608
+  #if !HAS_SOFTWARE_ENDSTOPS || ENABLED(MAX_SOFTWARE_ENDSTOP_Z)
609
+    NOMORE(target[Z_AXIS], soft_endstop_max[Z_AXIS]);
610
+  #endif
611
+}
558 612
 
559 613
 #if !UBL_SEGMENTED
560 614
 #if IS_KINEMATIC

+ 18
- 11
Marlin/src/module/motion.h Zobrazit soubor

@@ -90,10 +90,6 @@ extern int16_t feedrate_percentage;
90 90
   constexpr uint8_t active_extruder = 0;
91 91
 #endif
92 92
 
93
-#if HAS_HOTEND_OFFSET
94
-  extern float hotend_offset[XYZ][HOTENDS];
95
-#endif
96
-
97 93
 FORCE_INLINE float pgm_read_any(const float *p) { return pgm_read_float(p); }
98 94
 FORCE_INLINE signed char pgm_read_any(const signed char *p) { return pgm_read_byte(p); }
99 95
 
@@ -115,19 +111,30 @@ XYZ_DEFS(signed char, home_dir, HOME_DIR);
115 111
   #define update_workspace_offset(x) NOOP
116 112
 #endif
117 113
 
114
+#if HAS_HOTEND_OFFSET
115
+  extern float hotend_offset[XYZ][HOTENDS];
116
+  void reset_hotend_offsets();
117
+#else
118
+  constexpr float hotend_offset[XYZ][HOTENDS] = { { 0 }, { 0 }, { 0 } };
119
+#endif
120
+
118 121
 #if HAS_SOFTWARE_ENDSTOPS
119 122
   extern bool soft_endstops_enabled;
120 123
   extern float soft_endstop_min[XYZ], soft_endstop_max[XYZ];
121
-  void clamp_to_software_endstops(float target[XYZ]);
122
-  void update_software_endstops(const AxisEnum axis);
124
+  void update_software_endstops(const AxisEnum axis
125
+    #if HAS_HOTEND_OFFSET
126
+      , const uint8_t old_tool_index=0, const uint8_t new_tool_index=0
127
+    #endif
128
+  );
123 129
 #else
124
-  constexpr bool soft_endstops_enabled = false;
125
-  constexpr float soft_endstop_min[XYZ] = { X_MIN_BED, Y_MIN_BED, Z_MIN_POS },
126
-                  soft_endstop_max[XYZ] = { X_MAX_BED, Y_MAX_BED, Z_MAX_POS };
127
-  #define clamp_to_software_endstops(x) NOOP
128
-  #define update_software_endstops(x) NOOP
130
+  constexpr bool soft_endstops_enabled = true;
131
+  constexpr float soft_endstop_min[XYZ] = { X_MIN_POS, Y_MIN_POS, Z_MIN_POS },
132
+                  soft_endstop_max[XYZ] = { X_MAX_POS, Y_MAX_POS, Z_MAX_POS };
133
+  #define update_software_endstops(...) NOOP
129 134
 #endif
130 135
 
136
+void clamp_to_software_endstops(float target[XYZ]);
137
+
131 138
 void report_current_position();
132 139
 
133 140
 inline void set_current_from_destination() { COPY(current_position, destination); }

+ 1
- 1
Marlin/src/module/planner.cpp Zobrazit soubor

@@ -1626,7 +1626,7 @@ void Planner::synchronize() {
1626 1626
             if (reversing == (error_correction < 0)) {
1627 1627
               if (segment_proportion == 0)
1628 1628
                 segment_proportion = MIN(1.0f, block->millimeters / backlash_smoothing_mm);
1629
-              error_correction *= segment_proportion;
1629
+              error_correction = ceil(segment_proportion * error_correction);
1630 1630
             }
1631 1631
             else
1632 1632
               error_correction = 0; // Don't take up any backlash in this segment, as it would subtract steps

+ 3
- 22
Marlin/src/module/tool_change.cpp Zobrazit soubor

@@ -735,23 +735,8 @@ void tool_change(const uint8_t tmp_extruder, const float fr_mm_s/*=0.0*/, bool n
735 735
       const float old_feedrate_mm_s = fr_mm_s > 0.0 ? fr_mm_s : feedrate_mm_s;
736 736
       feedrate_mm_s = fr_mm_s > 0.0 ? fr_mm_s : XY_PROBE_FEEDRATE_MM_S;
737 737
 
738
-      #if ENABLED(DUAL_X_CARRIAGE)
739
-
740
-        #if HAS_SOFTWARE_ENDSTOPS
741
-          // Update the X software endstops early
742
-          active_extruder = tmp_extruder;
743
-          update_software_endstops(X_AXIS);
744
-          active_extruder = !tmp_extruder;
745
-          const float minx = soft_endstop_min[X_AXIS], maxx = soft_endstop_max[X_AXIS];
746
-        #else
747
-          // No software endstops? Use the configured limits
748
-          const float minx = tmp_extruder ? X2_MIN_POS : X1_MIN_POS,
749
-                      maxx = tmp_extruder ? X2_MAX_POS : X1_MAX_POS;
750
-        #endif
751
-
752
-        // Don't move the new extruder out of bounds
753
-        if (!WITHIN(current_position[X_AXIS], minx, maxx)) no_move = true;
754
-
738
+      #if HAS_SOFTWARE_ENDSTOPS && ENABLED(DUAL_X_CARRIAGE)
739
+        update_software_endstops(X_AXIS, active_extruder, tmp_extruder);
755 740
       #endif
756 741
 
757 742
       set_destination_from_current();
@@ -772,7 +757,7 @@ void tool_change(const uint8_t tmp_extruder, const float fr_mm_s/*=0.0*/, bool n
772 757
         planner.synchronize();
773 758
       }
774 759
 
775
-      #if HOTENDS > 1
760
+      #if HAS_HOTEND_OFFSET
776 761
         #if ENABLED(DUAL_X_CARRIAGE)
777 762
           constexpr float xdiff = 0;
778 763
         #else
@@ -914,10 +899,6 @@ void tool_change(const uint8_t tmp_extruder, const float fr_mm_s/*=0.0*/, bool n
914 899
       enable_solenoid_on_active_extruder();
915 900
     #endif
916 901
 
917
-    #if HAS_SOFTWARE_ENDSTOPS && ENABLED(DUAL_X_CARRIAGE)
918
-      update_software_endstops(X_AXIS);
919
-    #endif
920
-
921 902
     #if ENABLED(MK2_MULTIPLEXER)
922 903
       if (tmp_extruder >= E_STEPPERS) return invalid_extruder_error(tmp_extruder);
923 904
       select_multiplexed_stepper(tmp_extruder);

+ 2
- 2
Marlin/src/pins/pins_EINSY_RETRO.h Zobrazit soubor

@@ -176,8 +176,8 @@
176 176
       #define BTN_EN2         19
177 177
     #else
178 178
       #define LCD_PINS_RS     82
179
-      #define LCD_PINS_ENABLE 18
180
-      #define LCD_PINS_D4     19
179
+      #define LCD_PINS_ENABLE 18   // On 0.6b, use 61
180
+      #define LCD_PINS_D4     19   // On 0.6b, use 59
181 181
       #define LCD_PINS_D5     70
182 182
       #define LCD_PINS_D6     85
183 183
       #define LCD_PINS_D7     71

Loading…
Zrušit
Uložit