From 0c5192b288ea66c66938f36b002538df0f95853a Mon Sep 17 00:00:00 2001 From: Sebastianv650 Date: Wed, 22 Jun 2016 18:32:01 +0200 Subject: [PATCH] Patch LIN_ADVANCE timing issue Also the extruder stepper ISR has to keep an eye on step_loops count. --- Marlin/stepper.cpp | 24 +++++++++++++----------- 1 file changed, 13 insertions(+), 11 deletions(-) diff --git a/Marlin/stepper.cpp b/Marlin/stepper.cpp index 8d1fe031e..1f1658ac3 100644 --- a/Marlin/stepper.cpp +++ b/Marlin/stepper.cpp @@ -451,7 +451,7 @@ void Stepper::isr() { #endif // ADVANCE or LIN_ADVANCE #if ENABLED(ADVANCE) || ENABLED(LIN_ADVANCE) - eISR_Rate = (timer >> 2) / abs(e_steps[current_block->active_extruder]); + eISR_Rate = (timer >> 2) * step_loops / abs(e_steps[current_block->active_extruder]); #endif } else if (step_events_completed > (unsigned long)current_block->decelerate_after) { @@ -487,7 +487,7 @@ void Stepper::isr() { #endif // ADVANCE or LIN_ADVANCE #if ENABLED(ADVANCE) || ENABLED(LIN_ADVANCE) - eISR_Rate = (timer >> 2) / abs(e_steps[current_block->active_extruder]); + eISR_Rate = (timer >> 2) * step_loops / abs(e_steps[current_block->active_extruder]); #endif } else { @@ -497,7 +497,7 @@ void Stepper::isr() { if (current_block->use_advance_lead) current_estep_rate[current_block->active_extruder] = final_estep_rate; - eISR_Rate = (OCR1A_nominal >> 2) / abs(e_steps[current_block->active_extruder]); + eISR_Rate = (OCR1A_nominal >> 2) * step_loops_nominal / abs(e_steps[current_block->active_extruder]); #endif @@ -542,16 +542,18 @@ void Stepper::isr() { } // Step all E steppers that have steps - STEP_E_ONCE(0); - #if EXTRUDERS > 1 - STEP_E_ONCE(1); - #if EXTRUDERS > 2 - STEP_E_ONCE(2); - #if EXTRUDERS > 3 - STEP_E_ONCE(3); + for (uint8_t i = 0; i < step_loops; i++) { + STEP_E_ONCE(0); + #if EXTRUDERS > 1 + STEP_E_ONCE(1); + #if EXTRUDERS > 2 + STEP_E_ONCE(2); + #if EXTRUDERS > 3 + STEP_E_ONCE(3); + #endif #endif #endif - #endif + } }