Browse Source

Patch LIN_ADVANCE timing issue

Also the extruder stepper ISR has to keep an eye on step_loops count.
Sebastianv650 9 years ago
parent
commit
0c5192b288
1 changed files with 13 additions and 11 deletions
  1. 13
    11
      Marlin/stepper.cpp

+ 13
- 11
Marlin/stepper.cpp View File

451
       #endif // ADVANCE or LIN_ADVANCE
451
       #endif // ADVANCE or LIN_ADVANCE
452
 
452
 
453
       #if ENABLED(ADVANCE) || ENABLED(LIN_ADVANCE)
453
       #if ENABLED(ADVANCE) || ENABLED(LIN_ADVANCE)
454
-        eISR_Rate = (timer >> 2) / abs(e_steps[current_block->active_extruder]);
454
+        eISR_Rate = (timer >> 2) * step_loops / abs(e_steps[current_block->active_extruder]);
455
       #endif
455
       #endif
456
     }
456
     }
457
     else if (step_events_completed > (unsigned long)current_block->decelerate_after) {
457
     else if (step_events_completed > (unsigned long)current_block->decelerate_after) {
487
       #endif // ADVANCE or LIN_ADVANCE
487
       #endif // ADVANCE or LIN_ADVANCE
488
 
488
 
489
       #if ENABLED(ADVANCE) || ENABLED(LIN_ADVANCE)
489
       #if ENABLED(ADVANCE) || ENABLED(LIN_ADVANCE)
490
-        eISR_Rate = (timer >> 2) / abs(e_steps[current_block->active_extruder]);
490
+        eISR_Rate = (timer >> 2) * step_loops / abs(e_steps[current_block->active_extruder]);
491
       #endif
491
       #endif
492
     }
492
     }
493
     else {
493
     else {
497
         if (current_block->use_advance_lead)
497
         if (current_block->use_advance_lead)
498
           current_estep_rate[current_block->active_extruder] = final_estep_rate;
498
           current_estep_rate[current_block->active_extruder] = final_estep_rate;
499
 
499
 
500
-        eISR_Rate = (OCR1A_nominal >> 2) / abs(e_steps[current_block->active_extruder]);
500
+        eISR_Rate = (OCR1A_nominal >> 2) * step_loops_nominal / abs(e_steps[current_block->active_extruder]);
501
 
501
 
502
       #endif
502
       #endif
503
 
503
 
542
       }
542
       }
543
 
543
 
544
     // Step all E steppers that have steps
544
     // Step all E steppers that have steps
545
-    STEP_E_ONCE(0);
546
-    #if EXTRUDERS > 1
547
-      STEP_E_ONCE(1);
548
-      #if EXTRUDERS > 2
549
-        STEP_E_ONCE(2);
550
-        #if EXTRUDERS > 3
551
-          STEP_E_ONCE(3);
545
+    for (uint8_t i = 0; i < step_loops; i++) {
546
+      STEP_E_ONCE(0);
547
+      #if EXTRUDERS > 1
548
+        STEP_E_ONCE(1);
549
+        #if EXTRUDERS > 2
550
+          STEP_E_ONCE(2);
551
+          #if EXTRUDERS > 3
552
+            STEP_E_ONCE(3);
553
+          #endif
552
         #endif
554
         #endif
553
       #endif
555
       #endif
554
-    #endif
556
+    }
555
 
557
 
556
   }
558
   }
557
 
559
 

Loading…
Cancel
Save