Quellcode durchsuchen

linear advance fix: advance_isr and plan_set_e_position

PavelSindler vor 7 Jahren
Ursprung
Commit
f42b81fa38
3 geänderte Dateien mit 11 neuen und 5 gelöschten Zeilen
  1. 2 2
      Firmware/Marlin_main.cpp
  2. 3 0
      Firmware/planner.cpp
  3. 6 3
      Firmware/stepper.cpp

+ 2 - 2
Firmware/Marlin_main.cpp

@@ -5764,7 +5764,9 @@ case 404:  //M404 Enter the nominal filament width (3mm, 1.75mm ) N<3.0> or disp
 
   else if(code_seen('T'))
   {
+	#ifdef SNMM
 	  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) != '?') {
@@ -5778,7 +5780,6 @@ case 404:  //M404 Enter the nominal filament width (3mm, 1.75mm ) N<3.0> or disp
 			  tmp_extruder = code_value();
 		  }
 		  snmm_filaments_used |= (1 << tmp_extruder); //for stop print
-#ifdef SNMM
       #ifdef LIN_ADVANCE
         if (snmm_extruder != tmp_extruder)
           clear_current_adv_vars(); //Check if the selected extruder is not the active one and reset LIN_ADVANCE variables if so.
@@ -5786,7 +5787,6 @@ 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();

+ 3 - 0
Firmware/planner.cpp

@@ -1294,6 +1294,9 @@ void plan_set_z_position(const float &z)
 
 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]);
 }

+ 6 - 3
Firmware/stepper.cpp

@@ -735,7 +735,7 @@ void isr() {
 
   void advance_isr() {
 
-    nextAdvanceISR = eISR_Rate;
+	nextAdvanceISR = eISR_Rate;
 
     if (e_steps) {
       bool dir =
@@ -752,7 +752,10 @@ void isr() {
         e_steps < 0 ? ++e_steps : --e_steps;
         WRITE(E0_STEP_PIN, INVERT_E_STEP_PIN);
       }
-    }
+	}
+	else if(eISR_Rate == 0) {
+	  nextAdvanceISR = ADV_NEVER;
+	}
   }
 
   void advance_isr_scheduler() {
@@ -782,7 +785,7 @@ void isr() {
     }
 
     // Don't run the ISR faster than possible
-    if (OCR1A < TCNT1 + 16) OCR1A = TCNT1 + 16;
+	if (OCR1A < TCNT1 + 16) OCR1A = TCNT1 + 16;
   }
   
   void clear_current_adv_vars() {