|
@@ -506,7 +506,19 @@ void Stepper::isr() {
|
506
|
506
|
|
507
|
507
|
void Stepper::advance_isr() {
|
508
|
508
|
|
509
|
|
- old_OCR0A += 52; // ~10kHz interrupt (250000 / 26 = 9615kHz)
|
|
509
|
+ byte maxesteps = 0;
|
|
510
|
+ for (uint8_t i = 0; i < EXTRUDERS; i++)
|
|
511
|
+ if (abs(e_steps[i]) > maxesteps) maxesteps = abs(e_steps[i]);
|
|
512
|
+
|
|
513
|
+ if (maxesteps > 3)
|
|
514
|
+ old_OCR0A += 13; // ~19kHz (250000/13 = 19230 Hz)
|
|
515
|
+ else if (maxesteps > 2)
|
|
516
|
+ old_OCR0A += 17; // ~15kHz (250000/17 = 14705 Hz)
|
|
517
|
+ else if (maxesteps > 1)
|
|
518
|
+ old_OCR0A += 26; // ~10kHz (250000/26 = 9615 Hz)
|
|
519
|
+ else
|
|
520
|
+ old_OCR0A += 52; // ~5kHz (250000/26 = 4807 Hz)
|
|
521
|
+
|
510
|
522
|
OCR0A = old_OCR0A;
|
511
|
523
|
|
512
|
524
|
#define STEP_E_ONCE(INDEX) \
|
|
@@ -523,19 +535,17 @@ void Stepper::isr() {
|
523
|
535
|
E## INDEX ##_STEP_WRITE(!INVERT_E_STEP_PIN); \
|
524
|
536
|
}
|
525
|
537
|
|
526
|
|
- // Step all E steppers that have steps, up to 4 steps per interrupt
|
527
|
|
- for (unsigned char i = 0; i < 4; i++) {
|
528
|
|
- STEP_E_ONCE(0);
|
529
|
|
- #if EXTRUDERS > 1
|
530
|
|
- STEP_E_ONCE(1);
|
531
|
|
- #if EXTRUDERS > 2
|
532
|
|
- STEP_E_ONCE(2);
|
533
|
|
- #if EXTRUDERS > 3
|
534
|
|
- STEP_E_ONCE(3);
|
535
|
|
- #endif
|
|
538
|
+ // Step all E steppers that have steps
|
|
539
|
+ STEP_E_ONCE(0);
|
|
540
|
+ #if EXTRUDERS > 1
|
|
541
|
+ STEP_E_ONCE(1);
|
|
542
|
+ #if EXTRUDERS > 2
|
|
543
|
+ STEP_E_ONCE(2);
|
|
544
|
+ #if EXTRUDERS > 3
|
|
545
|
+ STEP_E_ONCE(3);
|
536
|
546
|
#endif
|
537
|
547
|
#endif
|
538
|
|
- }
|
|
548
|
+ #endif
|
539
|
549
|
|
540
|
550
|
}
|
541
|
551
|
|