Browse Source

Merged lin adv. fix from MK2

PavelSindler 7 years ago
parent
commit
4d9780a3c6
3 changed files with 12 additions and 4 deletions
  1. 2 1
      Firmware/Marlin_main.cpp
  2. 6 0
      Firmware/planner.cpp
  3. 4 3
      Firmware/stepper.cpp

+ 2 - 1
Firmware/Marlin_main.cpp

@@ -5644,6 +5644,7 @@ case 404:  //M404 Enter the nominal filament width (3mm, 1.75mm ) N<3.0> or disp
   else if(code_seen('T'))
   {
 	  int index;
+	  st_synchronize();
 	  for (index = 1; *(strchr_pointer + index) == ' ' || *(strchr_pointer + index) == '\t'; index++);
 	   
 	  if ((*(strchr_pointer + index) < '0' || *(strchr_pointer + index) > '9') && *(strchr_pointer + index) != '?') {
@@ -5666,7 +5667,7 @@ case 404:  //M404 Enter the nominal filament width (3mm, 1.75mm ) N<3.0> or disp
           
 		  snmm_extruder = tmp_extruder;
 
-		  st_synchronize();
+		  
 		  delay(100);
 
 		  disable_e0();

+ 6 - 0
Firmware/planner.cpp

@@ -1292,12 +1292,18 @@ void plan_set_position(float x, float y, float z, const float &e)
 // Only useful in the bed leveling routine, when the mesh bed leveling is off.
 void plan_set_z_position(const float &z)
 {
+	#ifdef LIN_ADVANCE
+	position_float[Z_AXIS] = z;
+	#endif
     position[Z_AXIS] = lround(z*axis_steps_per_unit[Z_AXIS]);
     st_set_position(position[X_AXIS], position[Y_AXIS], position[Z_AXIS], position[E_AXIS]);
 }
 
 void plan_set_e_position(const float &e)
 {
+  #ifdef LIN_ADVANCE
+  position_float[E_AXIS] = e;
+  #endif
   position[E_AXIS] = lround(e*axis_steps_per_unit[E_AXIS]);  
   st_set_e_position(position[E_AXIS]);
 }

+ 4 - 3
Firmware/stepper.cpp

@@ -846,9 +846,6 @@ void isr() {
       // Timer interrupt for E. e_steps is set in the main routine.
       
 void advance_isr() {
-  
-  nextAdvanceISR = eISR_Rate;
-  
   if (e_steps) {
       bool dir =
 #ifdef SNMM
@@ -869,6 +866,10 @@ void advance_isr() {
 
       }
   }
+  else {
+    eISR_Rate = ADV_NEVER;
+  }
+  nextAdvanceISR = eISR_Rate;
 }
 
 void advance_isr_scheduler() {