Browse Source

Fix Baby Stepping on 32-Bit platforms (#8001)

Also, Max7219 debug code was used for this effort.   It has been
improved and hardened.
Roxy-3D 6 years ago
parent
commit
6cb26c98c8

+ 7
- 16
Marlin/src/config/examples/Folger Tech/i3-2020/Configuration.h View File

@@ -125,7 +125,7 @@
125 125
 
126 126
 // Optional custom name for your RepStrap or other custom machine
127 127
 // Displayed in the LCD "Ready" message
128
-#define CUSTOM_MACHINE_NAME "FT-2020 v2"
128
+#define CUSTOM_MACHINE_NAME "FT-2020 v3"
129 129
 
130 130
 // Define this to set a unique identifier for this printer, (Used by some programs to differentiate between machines)
131 131
 // You can use an online service to generate a random UUID. (eg http://www.uuidgenerator.net/version4)
@@ -691,6 +691,7 @@
691 691
 
692 692
 // X and Y axis travel speed (mm/m) between probes
693 693
 #define XY_PROBE_SPEED 7500
694
+
694 695
 // Speed for the first approach when double-probing (with PROBE_DOUBLE_TOUCH)
695 696
 #define Z_PROBE_SPEED_FAST HOMING_FEEDRATE_Z
696 697
 
@@ -750,6 +751,7 @@
750 751
 #define INVERT_X_DIR false
751 752
 #define INVERT_Y_DIR true
752 753
 #define INVERT_Z_DIR true
754
+
753 755
 // Enable this option for Toshiba stepper drivers
754 756
 //#define CONFIG_STEPPERS_TOSHIBA
755 757
 
@@ -789,16 +791,7 @@
789 791
 #define Y_MAX_POS 182
790 792
 #define Z_MAX_POS 175
791 793
 
792
-/**
793
- * Software Endstops
794
- *
795
- * - Prevent moves outside the set machine bounds.
796
- * - Individual axes can be disabled, if desired.
797
- * - X and Y only apply to Cartesian robots.
798
- * - Use 'M211' to set software endstops on/off or report current state
799
- */
800
-
801
-// Min software endstops curtail movement below minimum coordinate bounds
794
+// If enabled, axes won't move below MIN_POS in response to movement commands.
802 795
 //#define MIN_SOFTWARE_ENDSTOPS
803 796
 #if ENABLED(MIN_SOFTWARE_ENDSTOPS)
804 797
   #define MIN_SOFTWARE_ENDSTOP_X
@@ -806,7 +799,7 @@
806 799
   #define MIN_SOFTWARE_ENDSTOP_Z
807 800
 #endif
808 801
 
809
-// Max software endstops curtail movement above maximum coordinate bounds
802
+// If enabled, axes won't move above MAX_POS in response to movement commands.
810 803
 #define MAX_SOFTWARE_ENDSTOPS
811 804
 #if ENABLED(MAX_SOFTWARE_ENDSTOPS)
812 805
   #define MAX_SOFTWARE_ENDSTOP_X
@@ -939,8 +932,6 @@
939 932
   #define ABL_PROBE_PT_3_X 170
940 933
   #define ABL_PROBE_PT_3_Y 10
941 934
 
942
-
943
-
944 935
 #elif ENABLED(AUTO_BED_LEVELING_UBL)
945 936
 
946 937
   //===========================================================================
@@ -1681,12 +1672,12 @@
1681 1672
 // leaving it undefined or defining as 0 will disable the servo subsystem
1682 1673
 // If unsure, leave commented / disabled
1683 1674
 //
1684
-#define NUM_SERVOS 2 // Servo index starts with 0 for M280 command
1675
+#define NUM_SERVOS 1 // Servo index starts with 0 for M280 command
1685 1676
 
1686 1677
 // Delay (in milliseconds) before the next move will start, to give the servo time to reach its target angle.
1687 1678
 // 300ms is a good value but you can try less delay.
1688 1679
 // If the servo can't reach the requested position, increase it.
1689
-#define SERVO_DELAY { 500, 500 }
1680
+#define SERVO_DELAY { 500 }
1690 1681
 
1691 1682
 // Servo deactivation
1692 1683
 //

+ 13
- 7
Marlin/src/config/examples/Folger Tech/i3-2020/Configuration_adv.h View File

@@ -534,7 +534,7 @@
534 534
   #endif
535 535
 
536 536
   // Show a progress bar on HD44780 LCDs for SD printing
537
-  #define LCD_PROGRESS_BAR
537
+  //#define LCD_PROGRESS_BAR
538 538
 
539 539
   #if ENABLED(LCD_PROGRESS_BAR)
540 540
     // Amount of time (ms) to show the bar
@@ -592,6 +592,7 @@
592 592
   // Enable this option and reduce the value to optimize screen updates.
593 593
   // The normal delay is 10µs. Use the lowest value that still gives a reliable display.
594 594
   //#define DOGM_SPI_DELAY_US 5
595
+
595 596
 #endif // DOGLCD
596 597
 
597 598
 // @section safety
@@ -620,7 +621,7 @@
620 621
 #if ENABLED(BABYSTEPPING)
621 622
   //#define BABYSTEP_XY              // Also enable X/Y Babystepping. Not supported on DELTA!
622 623
   #define BABYSTEP_INVERT_Z false    // Change if Z babysteps should go the other way
623
-  #define BABYSTEP_MULTIPLICATOR 100 // Babysteps are very small. Increase for faster motion.
624
+  #define BABYSTEP_MULTIPLICATOR 16  // Babysteps are very small. Increase for faster motion.
624 625
   //#define BABYSTEP_ZPROBE_OFFSET   // Enable to combine M851 and Babystepping
625 626
   #define DOUBLECLICK_FOR_Z_BABYSTEPPING // Double-click on the Status Screen for Z Babystepping.
626 627
   #define DOUBLECLICK_MAX_INTERVAL 1250 // Maximum interval between clicks, in milliseconds.
@@ -1313,8 +1314,8 @@
1313 1314
   #define USER_DESC_4 "Heat Bed/Home/Level"
1314 1315
   #define USER_GCODE_4 "M140 S" STRINGIFY(PREHEAT_2_TEMP_BED) "\nG28\nG29"
1315 1316
 
1316
-  //#define USER_DESC_5 "Home & Info"
1317
-  //#define USER_GCODE_5 "G28\nM503"
1317
+  #define USER_DESC_5 "Home & Info"
1318
+  #define USER_GCODE_5 "G28\nM503"
1318 1319
 #endif
1319 1320
 
1320 1321
 /**
@@ -1423,15 +1424,20 @@
1423 1424
 //#define MAX7219_DIN_PIN   57  // on RAMPS
1424 1425
 //#define MAX7219_LOAD_PIN  44  // on RAMPS
1425 1426
 
1426
-  #define MAX7219_CLK_PIN   77 // on Re-ARM       // Configuration of the 3 pins to control the display
1427
-  #define MAX7219_DIN_PIN   78 // on Re-ARM
1428
-  #define MAX7219_LOAD_PIN  79 // on Re-ARM
1427
+//#define MAX7219_CLK_PIN   77 // on Re-ARM       // Configuration of the 3 pins to control the display
1428
+//#define MAX7219_DIN_PIN   78 // on Re-ARM
1429
+//#define MAX7219_LOAD_PIN  79 // on Re-ARM
1430
+
1431
+  #define MAX7219_CLK_PIN   30 // for RAMPS E1     // Configuration of the 3 pins to control the display
1432
+  #define MAX7219_DIN_PIN   34 // for RAMPS E1
1433
+  #define MAX7219_LOAD_PIN  36 // for RAMPS E1
1429 1434
 
1430 1435
   /**
1431 1436
    * Sample debug features
1432 1437
    * If you add more debug displays, be careful to avoid conflicts!
1433 1438
    */
1434 1439
   #define MAX7219_DEBUG_PRINTER_ALIVE    // Blink corner LED of 8x8 matrix to show that the firmware is functioning
1440
+
1435 1441
   #define MAX7219_DEBUG_STEPPER_HEAD  3  // Show the stepper queue head position on this and the next LED matrix row
1436 1442
   #define MAX7219_DEBUG_STEPPER_TAIL  5  // Show the stepper queue tail position on this and the next LED matrix row
1437 1443
 

+ 170
- 35
Marlin/src/feature/Max7219_Debug_LEDs.cpp View File

@@ -39,12 +39,14 @@
39 39
  * void Max7219_init();
40 40
  * void Max7219_PutByte(uint8_t data);
41 41
  * void Max7219(uint8_t reg, uint8_t data);
42
- * void Max7219_LED_On(uint8_t row, uint8_t col);
43
- * void Max7219_LED_Off(uint8_t row, uint8_t col);
44
- * void Max7219_LED_Toggle(uint8_t row, uint8_t col);
42
+ * void Max7219_LED_On(uint8_t col, uint8_t row);
43
+ * void Max7219_LED_Off(uint8_t col, uint8_t row);
44
+ * void Max7219_LED_Toggle(uint8_t col, uint8_t row);
45 45
  * void Max7219_Clear_Row(uint8_t row);
46 46
  * void Max7219_Clear_Column(uint8_t col);
47 47
  * void Max7219_Set_Row(uint8_t row, uint8_t val);
48
+ * void Max7219_Set_2_Rows(uint8_t row, uint16_t val);
49
+ * void Max7219_Set_4_Rows(uint8_t row, uint32_t val);
48 50
  * void Max7219_Set_Column(uint8_t col, uint8_t val);
49 51
  * void Max7219_idle_tasks();
50 52
  */
@@ -62,9 +64,10 @@
62 64
 static uint8_t LEDs[8] = { 0 };
63 65
 
64 66
 void Max7219_PutByte(uint8_t data) {
67
+  CRITICAL_SECTION_START
65 68
   for (uint8_t i = 8; i--;) {
66 69
     #ifdef CPU_32_BIT                    // The 32-bit processors are so fast, a small delay in the code is needed
67
-                                         // to let the signal wires stabilize.
70
+      delayMicroseconds(5);              // to let the signal wires stabilize.
68 71
       WRITE(MAX7219_CLK_PIN, LOW);       // tick
69 72
       delayMicroseconds(5);
70 73
       WRITE(MAX7219_DIN_PIN, (data & 0x80) ? HIGH : LOW);  // send 1 or 0 based on data bit
@@ -79,14 +82,22 @@ void Max7219_PutByte(uint8_t data) {
79 82
 
80 83
     data <<= 1;
81 84
   }
85
+  CRITICAL_SECTION_END
82 86
 }
83 87
 
84 88
 void Max7219(const uint8_t reg, const uint8_t data) {
89
+  #ifdef CPU_32_BIT
90
+    delayMicroseconds(5);
91
+  #endif
92
+  CRITICAL_SECTION_START
85 93
   WRITE(MAX7219_LOAD_PIN, LOW);  // begin
86 94
   #ifdef CPU_32_BIT              // The 32-bit processors are so fast, a small delay in the code is needed
87 95
     delayMicroseconds(5);        // to let the signal wires stabilize.
88 96
   #endif
89 97
   Max7219_PutByte(reg);          // specify register
98
+  #ifdef CPU_32_BIT
99
+    delayMicroseconds(5);
100
+  #endif
90 101
   Max7219_PutByte(data);         // put data
91 102
   #ifdef CPU_32_BIT
92 103
     delayMicroseconds(5);
@@ -96,45 +107,103 @@ void Max7219(const uint8_t reg, const uint8_t data) {
96 107
     delayMicroseconds(5);
97 108
   #endif
98 109
   WRITE(MAX7219_LOAD_PIN, HIGH);
110
+  CRITICAL_SECTION_END
111
+  #ifdef CPU_32_BIT
112
+    delayMicroseconds(5);
113
+  #endif
99 114
 }
100 115
 
101 116
 void Max7219_LED_Set(const uint8_t row, const uint8_t col, const bool on) {
102
-  if (row > 7 || col > 7) return;
117
+  if (row > 7 || col > 7) {
118
+    int r,c;
119
+    r = row;
120
+    c = col;
121
+    SERIAL_ECHOPAIR("??? Max7219_LED_Set(",r);
122
+    SERIAL_ECHOPAIR(",",c);
123
+    SERIAL_ECHO(")\n");
124
+    return;
125
+  }
103 126
   if (TEST(LEDs[row], col) == on) return; // if LED is already on/off, leave alone
104 127
   if (on) SBI(LEDs[row], col); else CBI(LEDs[row], col);
105 128
   Max7219(8 - row, LEDs[row]);
106 129
 }
107 130
 
108
-void Max7219_LED_On(const uint8_t row, const uint8_t col) {
109
-  Max7219_LED_Set(row, col, true);
131
+void Max7219_LED_On(const uint8_t col, const uint8_t row) {
132
+  if (row > 7 || col > 7) {
133
+    int r,c;
134
+    r = row;
135
+    c = col;
136
+    SERIAL_ECHOPAIR("??? Max7219_LED_On(",c);
137
+    SERIAL_ECHOPAIR(",",r);
138
+    SERIAL_ECHO(")\n");
139
+    return;
140
+  }
141
+  Max7219_LED_Set(col, row, true);
110 142
 }
111 143
 
112
-void Max7219_LED_Off(const uint8_t row, const uint8_t col) {
113
-  Max7219_LED_Set(row, col, false);
144
+void Max7219_LED_Off(const uint8_t col, const uint8_t row) {
145
+  if (row > 7 || col > 7) {
146
+    int r,c;
147
+    r = row;
148
+    c = col;
149
+    SERIAL_ECHOPAIR("??? Max7219_LED_Off(",r);
150
+    SERIAL_ECHOPAIR(",",c);
151
+    SERIAL_ECHO(")\n");
152
+    return;
153
+  }
154
+  Max7219_LED_Set(col, row, false);
114 155
 }
115 156
 
116
-void Max7219_LED_Toggle(const uint8_t row, const uint8_t col) {
117
-  if (row > 7 || col > 7) return;
157
+void Max7219_LED_Toggle(const uint8_t col, const uint8_t row) {
158
+  if (row > 7 || col > 7) {
159
+    int r,c;
160
+    r = row;
161
+    c = col;
162
+    SERIAL_ECHOPAIR("??? Max7219_LED_Toggle(",r);
163
+    SERIAL_ECHOPAIR(",",c);
164
+    SERIAL_ECHO(")\n");
165
+    return;
166
+  }
118 167
   if (TEST(LEDs[row], col))
119
-    Max7219_LED_Off(row, col);
168
+    Max7219_LED_Off(col, row);
120 169
   else
121
-    Max7219_LED_On(row, col);
170
+    Max7219_LED_On(col, row);
122 171
 }
123 172
 
124 173
 void Max7219_Clear_Column(const uint8_t col) {
125
-  if (col > 7) return;
174
+  if (col > 7) {
175
+    int c;
176
+    c = col;
177
+    SERIAL_ECHOPAIR("??? Max7219_Clear_Column(",c);
178
+    SERIAL_ECHO(")\n");
179
+    return;
180
+  }
126 181
   LEDs[col] = 0;
127 182
   Max7219(8 - col, LEDs[col]);
128 183
 }
129 184
 
130 185
 void Max7219_Clear_Row(const uint8_t row) {
131
-  if (row > 7) return;
186
+  if (row > 7) {
187
+    int r;
188
+    r = row;
189
+    SERIAL_ECHOPAIR("??? Max7219_Clear_Row(",r);
190
+    SERIAL_ECHO(")\n");
191
+    return;
192
+  }
132 193
   for (uint8_t c = 0; c <= 7; c++)
133 194
     Max7219_LED_Off(c, row);
134 195
 }
135 196
 
136 197
 void Max7219_Set_Row(const uint8_t row, const uint8_t val) {
137
-  if (row > 7) return;
198
+  if (row > 7 || val>255) {
199
+    int r, v;
200
+    r = row;
201
+    v = val;
202
+    SERIAL_ECHOPAIR("??? Max7219_Set_Row(",r);
203
+    SERIAL_ECHOPAIR(",",v);
204
+    SERIAL_ECHO(")\n");
205
+    return;
206
+  }
138 207
   for (uint8_t b = 0; b <= 7; b++)
139 208
     if (TEST(val, b))
140 209
       Max7219_LED_On(7 - b, row);
@@ -142,8 +211,47 @@ void Max7219_Set_Row(const uint8_t row, const uint8_t val) {
142 211
       Max7219_LED_Off(7 - b, row);
143 212
 }
144 213
 
214
+void Max7219_Set_2_Rows(const uint8_t row, const uint16_t val) {
215
+  if (row > 6 || val>65535) {
216
+    int r, v;
217
+    r = row;
218
+    v = val;
219
+    SERIAL_ECHOPAIR("??? Max7219_Set_2_Rows(",r);
220
+    SERIAL_ECHOPAIR(",",v);
221
+    SERIAL_ECHO(")\n");
222
+    return;
223
+  }
224
+  Max7219_Set_Row(row+1, (val & 0xff00) >> 8 );
225
+  Max7219_Set_Row(row+0, (val & 0xff));
226
+}
227
+
228
+void Max7219_Set_4_Rows(const uint8_t row, const uint32_t val) {
229
+  if (row > 4 ) {
230
+    int r;
231
+    long v;
232
+    r = row;
233
+    v = val;
234
+    SERIAL_ECHOPAIR("??? Max7219_Set_4_Rows(",r);
235
+    SERIAL_ECHOPAIR(",",v);
236
+    SERIAL_ECHO(")\n");
237
+    return;
238
+  }
239
+  Max7219_Set_Row(row+3, (val & 0xff000000) >> 24);
240
+  Max7219_Set_Row(row+2, (val & 0xff0000) >> 16);
241
+  Max7219_Set_Row(row+1, (val & 0xff00) >> 8);
242
+  Max7219_Set_Row(row+0, (val & 0xff));
243
+}
244
+
145 245
 void Max7219_Set_Column(const uint8_t col, const uint8_t val) {
146
-  if (col > 7) return;
246
+  if (val > 255 || col > 7) {
247
+    int v,c;
248
+    v = val;
249
+    c = col;
250
+    SERIAL_ECHOPAIR("??? Max7219_Column(",c);
251
+    SERIAL_ECHOPAIR(",",v);
252
+    SERIAL_ECHO(")\n");
253
+    return;
254
+  }
147 255
   LEDs[col] = val;
148 256
   Max7219(8 - col, LEDs[col]);
149 257
 }
@@ -206,10 +314,23 @@ void Max7219_init() {
206 314
 * or clear a row is not very significant.
207 315
 */
208 316
 void Max7219_idle_tasks() {
317
+#if MAX7219_DEBUG_STEPPER_HEAD || MAX7219_DEBUG_STEPPER_TAIL || MAX7219_DEBUG_STEPPER_QUEUE
318
+  CRITICAL_SECTION_START
319
+  #if MAX7219_DEBUG_STEPPER_HEAD || MAX7219_DEBUG_STEPPER_QUEUE
320
+    uint8_t head;
321
+    head = planner.block_buffer_head;
322
+  #endif
323
+  #if MAX7219_DEBUG_STEPPER_TAIL || MAX7219_DEBUG_STEPPER_QUEUE
324
+    uint8_t tail;
325
+    tail = planner.block_buffer_tail;
326
+  #endif
327
+  CRITICAL_SECTION_END
328
+#endif
329
+
209 330
   #if ENABLED(MAX7219_DEBUG_PRINTER_ALIVE)
210 331
     static int debug_cnt = 0;
211
-    #ifdef CPU_32_BIT  
212
-      if (debug_cnt++ > 400) {
332
+    #ifdef CPU_32_BIT
333
+      if (debug_cnt++ > 1000) {
213 334
     #else
214 335
       if (debug_cnt++ > 100) {
215 336
     #endif
@@ -219,26 +340,40 @@ void Max7219_idle_tasks() {
219 340
   #endif
220 341
 
221 342
   #ifdef MAX7219_DEBUG_STEPPER_HEAD
222
-    Max7219_Clear_Row(MAX7219_DEBUG_STEPPER_HEAD);
223
-    Max7219_Clear_Row(MAX7219_DEBUG_STEPPER_HEAD + 1);
224
-    if ( planner.block_buffer_head < 8)
225
-      Max7219_LED_On( planner.block_buffer_head, MAX7219_DEBUG_STEPPER_HEAD);
226
-    else
227
-      Max7219_LED_On( planner.block_buffer_head-8, MAX7219_DEBUG_STEPPER_HEAD+1);
343
+    static int16_t last_head_cnt=0;
344
+    if (last_head_cnt != head) {
345
+      if ( last_head_cnt < 8)
346
+        Max7219_LED_Off( last_head_cnt, MAX7219_DEBUG_STEPPER_HEAD);
347
+      else
348
+        Max7219_LED_Off( last_head_cnt-8, MAX7219_DEBUG_STEPPER_HEAD+1);
349
+
350
+      last_head_cnt = head;
351
+      if ( head < 8)
352
+        Max7219_LED_On(head, MAX7219_DEBUG_STEPPER_HEAD);
353
+      else
354
+        Max7219_LED_On(head-8, MAX7219_DEBUG_STEPPER_HEAD+1);
355
+    }
228 356
   #endif
229 357
 
230 358
   #ifdef MAX7219_DEBUG_STEPPER_TAIL
231
-    Max7219_Clear_Row(MAX7219_DEBUG_STEPPER_TAIL);
232
-    Max7219_Clear_Row(MAX7219_DEBUG_STEPPER_TAIL + 1);
233
-    if ( planner.block_buffer_tail < 8)
234
-      Max7219_LED_On( planner.block_buffer_tail, MAX7219_DEBUG_STEPPER_TAIL );
235
-    else
236
-      Max7219_LED_On( planner.block_buffer_tail-8, MAX7219_DEBUG_STEPPER_TAIL+1 );
359
+    static int16_t last_tail_cnt=0;
360
+    if (last_tail_cnt != tail) {
361
+      if ( last_tail_cnt < 8)
362
+        Max7219_LED_Off( last_tail_cnt, MAX7219_DEBUG_STEPPER_TAIL);
363
+      else
364
+        Max7219_LED_Off( last_tail_cnt-8, MAX7219_DEBUG_STEPPER_TAIL+1);
365
+
366
+      last_tail_cnt = tail;
367
+      if ( tail < 8)
368
+        Max7219_LED_On(tail, MAX7219_DEBUG_STEPPER_TAIL);
369
+      else
370
+        Max7219_LED_On(tail-8, MAX7219_DEBUG_STEPPER_TAIL+1);
371
+    }
237 372
   #endif
238 373
 
239 374
   #ifdef MAX7219_DEBUG_STEPPER_QUEUE
240 375
     static int16_t last_depth = 0;
241
-    int16_t current_depth = planner.block_buffer_head - planner.block_buffer_tail;
376
+    int16_t current_depth = head - tail;
242 377
     if (current_depth != last_depth) {  // usually, no update will be needed.
243 378
       if (current_depth < 0) current_depth += BLOCK_BUFFER_SIZE;
244 379
       NOMORE(current_depth, BLOCK_BUFFER_SIZE);
@@ -249,10 +384,10 @@ void Max7219_idle_tasks() {
249 384
                     en = max(current_depth, last_depth);
250 385
       if (current_depth < last_depth)
251 386
         for (uint8_t i = st; i <= en; i++)   // clear the highest order LEDs
252
-          Max7219_LED_Off(i >> 1, MAX7219_DEBUG_STEPPER_QUEUE + (i & 1));
387
+            Max7219_LED_Off(i/2, MAX7219_DEBUG_STEPPER_QUEUE + (i & 1));
253 388
       else
254
-        for (uint8_t i = st; i <= en; i++)   // set the highest order LEDs
255
-          Max7219_LED_On(i >> 1, MAX7219_DEBUG_STEPPER_QUEUE + (i & 1));
389
+          for (uint8_t i = st; i <= en; i++)   // set the LEDs to current depth
390
+            Max7219_LED_On(i/2, MAX7219_DEBUG_STEPPER_QUEUE + (i & 1));
256 391
 
257 392
       last_depth = current_depth;
258 393
     }

+ 4
- 2
Marlin/src/feature/Max7219_Debug_LEDs.h View File

@@ -40,12 +40,14 @@
40 40
  * void Max7219_PutByte(uint8_t data);
41 41
  * void Max7219(uint8_t reg, uint8_t data);
42 42
  * void Max7219_LED_Set(uint8_t row, uint8_t col, bool on);
43
- * void Max7219_LED_On(uint8_t row, uint8_t col);
44
- * void Max7219_LED_Off(uint8_t row, uint8_t col);
43
+ * void Max7219_LED_On(uint8_t col, uint8_t row);
44
+ * void Max7219_LED_Off(uint8_t col, uint8_t row);
45 45
  * void Max7219_LED_Toggle(uint8_t row, uint8_t col);
46 46
  * void Max7219_Clear_Row(uint8_t row);
47 47
  * void Max7219_Clear_Column(uint8_t col);
48 48
  * void Max7219_Set_Row(uint8_t row, uint8_t val);
49
+ * void Max7219_Set_2_Rows(uint8_t row, uint16_t val);
50
+ * void Max7219_Set_4_Rows(uint8_t row, uint32_t val);
49 51
  * void Max7219_Set_Column(uint8_t col, uint8_t val);
50 52
  * void Max7219_idle_tasks();
51 53
  */

+ 1
- 0
Marlin/src/module/stepper.cpp View File

@@ -1294,6 +1294,7 @@ void Stepper::report_positions() {
1294 1294
       _ENABLE(AXIS);                                        \
1295 1295
       _SAVE_START;                                          \
1296 1296
       _APPLY_DIR(AXIS, _INVERT_DIR(AXIS)^direction^INVERT); \
1297
+      _PULSE_WAIT;                                          \
1297 1298
       _APPLY_STEP(AXIS)(!_INVERT_STEP_PIN(AXIS), true);     \
1298 1299
       _PULSE_WAIT;                                          \
1299 1300
       _APPLY_STEP(AXIS)(_INVERT_STEP_PIN(AXIS), true);      \

+ 1
- 1
Marlin/src/module/temperature.h View File

@@ -441,7 +441,7 @@ class Temperature {
441 441
 
442 442
     #if ENABLED(BABYSTEPPING)
443 443
 
444
-      static void babystep_axis(const AxisEnum axis, const int distance) {
444
+      static void babystep_axis(const AxisEnum axis, const int16_t distance) {
445 445
         if (axis_known_position[axis]) {
446 446
           #if IS_CORE
447 447
             #if ENABLED(BABYSTEP_XY)

Loading…
Cancel
Save