|  |  | @ -242,8 +242,8 @@ volatile signed char count_direction[NUM_AXIS] = { 1 }; | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  | // Some useful constants
 |  |  |  | // Some useful constants
 | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  | #define ENABLE_STEPPER_DRIVER_INTERRUPT()  TIMSK1 |= BIT(OCIE1A) |  |  |  | #define ENABLE_STEPPER_DRIVER_INTERRUPT()  SBI(TIMSK1, OCIE1A) | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  | #define DISABLE_STEPPER_DRIVER_INTERRUPT() TIMSK1 &= ~BIT(OCIE1A) |  |  |  | #define DISABLE_STEPPER_DRIVER_INTERRUPT() CBI(TIMSK1, OCIE1A) | 
			
				
				
			
		
	
		
		
	
		
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  | void endstops_hit_on_purpose() { |  |  |  | void endstops_hit_on_purpose() { | 
			
		
	
		
		
			
				
					
					|  |  |  |   endstop_hit_bits = 0; |  |  |  |   endstop_hit_bits = 0; | 
			
		
	
	
		
		
			
				
					|  |  | @ -253,20 +253,20 @@ void checkHitEndstops() { | 
			
		
	
		
		
			
				
					
					|  |  |  |   if (endstop_hit_bits) { |  |  |  |   if (endstop_hit_bits) { | 
			
		
	
		
		
			
				
					
					|  |  |  |     SERIAL_ECHO_START; |  |  |  |     SERIAL_ECHO_START; | 
			
		
	
		
		
			
				
					
					|  |  |  |     SERIAL_ECHOPGM(MSG_ENDSTOPS_HIT); |  |  |  |     SERIAL_ECHOPGM(MSG_ENDSTOPS_HIT); | 
			
		
	
		
		
			
				
					
					|  |  |  |     if (endstop_hit_bits & BIT(X_MIN)) { |  |  |  |     if (TEST(endstop_hit_bits, X_MIN)) { | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |       SERIAL_ECHOPAIR(" X:", (float)endstops_trigsteps[X_AXIS] / axis_steps_per_unit[X_AXIS]); |  |  |  |       SERIAL_ECHOPAIR(" X:", (float)endstops_trigsteps[X_AXIS] / axis_steps_per_unit[X_AXIS]); | 
			
		
	
		
		
			
				
					
					|  |  |  |       LCD_MESSAGEPGM(MSG_ENDSTOPS_HIT "X"); |  |  |  |       LCD_MESSAGEPGM(MSG_ENDSTOPS_HIT "X"); | 
			
		
	
		
		
			
				
					
					|  |  |  |     } |  |  |  |     } | 
			
		
	
		
		
			
				
					
					|  |  |  |     if (endstop_hit_bits & BIT(Y_MIN)) { |  |  |  |     if (TEST(endstop_hit_bits, Y_MIN)) { | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |       SERIAL_ECHOPAIR(" Y:", (float)endstops_trigsteps[Y_AXIS] / axis_steps_per_unit[Y_AXIS]); |  |  |  |       SERIAL_ECHOPAIR(" Y:", (float)endstops_trigsteps[Y_AXIS] / axis_steps_per_unit[Y_AXIS]); | 
			
		
	
		
		
			
				
					
					|  |  |  |       LCD_MESSAGEPGM(MSG_ENDSTOPS_HIT "Y"); |  |  |  |       LCD_MESSAGEPGM(MSG_ENDSTOPS_HIT "Y"); | 
			
		
	
		
		
			
				
					
					|  |  |  |     } |  |  |  |     } | 
			
		
	
		
		
			
				
					
					|  |  |  |     if (endstop_hit_bits & BIT(Z_MIN)) { |  |  |  |     if (TEST(endstop_hit_bits, Z_MIN)) { | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |       SERIAL_ECHOPAIR(" Z:", (float)endstops_trigsteps[Z_AXIS] / axis_steps_per_unit[Z_AXIS]); |  |  |  |       SERIAL_ECHOPAIR(" Z:", (float)endstops_trigsteps[Z_AXIS] / axis_steps_per_unit[Z_AXIS]); | 
			
		
	
		
		
			
				
					
					|  |  |  |       LCD_MESSAGEPGM(MSG_ENDSTOPS_HIT "Z"); |  |  |  |       LCD_MESSAGEPGM(MSG_ENDSTOPS_HIT "Z"); | 
			
		
	
		
		
			
				
					
					|  |  |  |     } |  |  |  |     } | 
			
		
	
		
		
			
				
					
					|  |  |  |     #if ENABLED(Z_MIN_PROBE_ENDSTOP) |  |  |  |     #if ENABLED(Z_MIN_PROBE_ENDSTOP) | 
			
		
	
		
		
			
				
					
					|  |  |  |       if (endstop_hit_bits & BIT(Z_MIN_PROBE)) { |  |  |  |       if (TEST(endstop_hit_bits, Z_MIN_PROBE)) { | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |         SERIAL_ECHOPAIR(" Z_MIN_PROBE:", (float)endstops_trigsteps[Z_AXIS] / axis_steps_per_unit[Z_AXIS]); |  |  |  |         SERIAL_ECHOPAIR(" Z_MIN_PROBE:", (float)endstops_trigsteps[Z_AXIS] / axis_steps_per_unit[Z_AXIS]); | 
			
		
	
		
		
			
				
					
					|  |  |  |         LCD_MESSAGEPGM(MSG_ENDSTOPS_HIT "ZP"); |  |  |  |         LCD_MESSAGEPGM(MSG_ENDSTOPS_HIT "ZP"); | 
			
		
	
		
		
			
				
					
					|  |  |  |       } |  |  |  |       } | 
			
		
	
	
		
		
			
				
					|  |  | @ -309,7 +309,7 @@ inline void update_endstops() { | 
			
		
	
		
		
			
				
					
					|  |  |  |   #define _ENDSTOP_PIN(AXIS, MINMAX) AXIS ##_## MINMAX ##_PIN |  |  |  |   #define _ENDSTOP_PIN(AXIS, MINMAX) AXIS ##_## MINMAX ##_PIN | 
			
		
	
		
		
			
				
					
					|  |  |  |   #define _ENDSTOP_INVERTING(AXIS, MINMAX) AXIS ##_## MINMAX ##_ENDSTOP_INVERTING |  |  |  |   #define _ENDSTOP_INVERTING(AXIS, MINMAX) AXIS ##_## MINMAX ##_ENDSTOP_INVERTING | 
			
		
	
		
		
			
				
					
					|  |  |  |   #define _AXIS(AXIS) AXIS ##_AXIS |  |  |  |   #define _AXIS(AXIS) AXIS ##_AXIS | 
			
		
	
		
		
			
				
					
					|  |  |  |   #define _ENDSTOP_HIT(AXIS) endstop_hit_bits |= BIT(_ENDSTOP(AXIS, MIN)) |  |  |  |   #define _ENDSTOP_HIT(AXIS) SBI(endstop_hit_bits, _ENDSTOP(AXIS, MIN)) | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |   #define _ENDSTOP(AXIS, MINMAX) AXIS ##_## MINMAX |  |  |  |   #define _ENDSTOP(AXIS, MINMAX) AXIS ##_## MINMAX | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |   // SET_ENDSTOP_BIT: set the current endstop bits for an endstop to its status
 |  |  |  |   // SET_ENDSTOP_BIT: set the current endstop bits for an endstop to its status
 | 
			
		
	
	
		
		
			
				
					|  |  | @ -424,7 +424,7 @@ inline void update_endstops() { | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |             if (z_test && current_block->steps[Z_AXIS] > 0) { // z_test = Z_MIN || Z2_MIN
 |  |  |  |             if (z_test && current_block->steps[Z_AXIS] > 0) { // z_test = Z_MIN || Z2_MIN
 | 
			
		
	
		
		
			
				
					
					|  |  |  |               endstops_trigsteps[Z_AXIS] = count_position[Z_AXIS]; |  |  |  |               endstops_trigsteps[Z_AXIS] = count_position[Z_AXIS]; | 
			
		
	
		
		
			
				
					
					|  |  |  |               endstop_hit_bits |= BIT(Z_MIN); |  |  |  |               SBI(endstop_hit_bits, Z_MIN); | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |               if (!performing_homing || (z_test == 0x3))  //if not performing home or if both endstops were trigged during homing...
 |  |  |  |               if (!performing_homing || (z_test == 0x3))  //if not performing home or if both endstops were trigged during homing...
 | 
			
		
	
		
		
			
				
					
					|  |  |  |                 step_events_completed = current_block->step_event_count; |  |  |  |                 step_events_completed = current_block->step_event_count; | 
			
		
	
		
		
			
				
					
					|  |  |  |             } |  |  |  |             } | 
			
		
	
	
		
		
			
				
					|  |  | @ -440,7 +440,7 @@ inline void update_endstops() { | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |           if (TEST_ENDSTOP(Z_MIN_PROBE)) { |  |  |  |           if (TEST_ENDSTOP(Z_MIN_PROBE)) { | 
			
		
	
		
		
			
				
					
					|  |  |  |             endstops_trigsteps[Z_AXIS] = count_position[Z_AXIS]; |  |  |  |             endstops_trigsteps[Z_AXIS] = count_position[Z_AXIS]; | 
			
		
	
		
		
			
				
					
					|  |  |  |             endstop_hit_bits |= BIT(Z_MIN_PROBE); |  |  |  |             SBI(endstop_hit_bits, Z_MIN_PROBE); | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |           } |  |  |  |           } | 
			
		
	
		
		
			
				
					
					|  |  |  |         #endif |  |  |  |         #endif | 
			
		
	
		
		
			
				
					
					|  |  |  |       } |  |  |  |       } | 
			
		
	
	
		
		
			
				
					|  |  | @ -460,7 +460,7 @@ inline void update_endstops() { | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |             if (z_test && current_block->steps[Z_AXIS] > 0) {  // t_test = Z_MAX || Z2_MAX
 |  |  |  |             if (z_test && current_block->steps[Z_AXIS] > 0) {  // t_test = Z_MAX || Z2_MAX
 | 
			
		
	
		
		
			
				
					
					|  |  |  |               endstops_trigsteps[Z_AXIS] = count_position[Z_AXIS]; |  |  |  |               endstops_trigsteps[Z_AXIS] = count_position[Z_AXIS]; | 
			
		
	
		
		
			
				
					
					|  |  |  |               endstop_hit_bits |= BIT(Z_MIN); |  |  |  |               SBI(endstop_hit_bits, Z_MIN); | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |               if (!performing_homing || (z_test == 0x3))  //if not performing home or if both endstops were trigged during homing...
 |  |  |  |               if (!performing_homing || (z_test == 0x3))  //if not performing home or if both endstops were trigged during homing...
 | 
			
		
	
		
		
			
				
					
					|  |  |  |                 step_events_completed = current_block->step_event_count; |  |  |  |                 step_events_completed = current_block->step_event_count; | 
			
		
	
		
		
			
				
					
					|  |  |  |             } |  |  |  |             } | 
			
		
	
	
		
		
			
				
					|  |  | @ -1052,10 +1052,10 @@ void st_init() { | 
			
		
	
		
		
			
				
					
					|  |  |  |   #endif |  |  |  |   #endif | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |   // waveform generation = 0100 = CTC
 |  |  |  |   // waveform generation = 0100 = CTC
 | 
			
		
	
		
		
			
				
					
					|  |  |  |   TCCR1B &= ~BIT(WGM13); |  |  |  |   CBI(TCCR1B, WGM13); | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |   TCCR1B |=  BIT(WGM12); |  |  |  |   SBI(TCCR1B, WGM12); | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |   TCCR1A &= ~BIT(WGM11); |  |  |  |   CBI(TCCR1A, WGM11); | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |   TCCR1A &= ~BIT(WGM10); |  |  |  |   CBI(TCCR1A, WGM10); | 
			
				
				
			
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |   // output mode = 00 (disconnected)
 |  |  |  |   // output mode = 00 (disconnected)
 | 
			
		
	
		
		
			
				
					
					|  |  |  |   TCCR1A &= ~(3 << COM1A0); |  |  |  |   TCCR1A &= ~(3 << COM1A0); | 
			
		
	
	
		
		
			
				
					|  |  | @ -1073,11 +1073,11 @@ void st_init() { | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |   #if ENABLED(ADVANCE) |  |  |  |   #if ENABLED(ADVANCE) | 
			
		
	
		
		
			
				
					
					|  |  |  |     #if defined(TCCR0A) && defined(WGM01) |  |  |  |     #if defined(TCCR0A) && defined(WGM01) | 
			
		
	
		
		
			
				
					
					|  |  |  |       TCCR0A &= ~BIT(WGM01); |  |  |  |       CBI(TCCR0A, WGM01); | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |       TCCR0A &= ~BIT(WGM00); |  |  |  |       CBI(TCCR0A, WGM00); | 
			
				
				
			
		
	
		
		
	
		
		
	
		
		
			
				
					
					|  |  |  |     #endif |  |  |  |     #endif | 
			
		
	
		
		
			
				
					
					|  |  |  |     e_steps[0] = e_steps[1] = e_steps[2] = e_steps[3] = 0; |  |  |  |     e_steps[0] = e_steps[1] = e_steps[2] = e_steps[3] = 0; | 
			
		
	
		
		
			
				
					
					|  |  |  |     TIMSK0 |= BIT(OCIE0A); |  |  |  |     SBI(TIMSK0, OCIE0A); | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |   #endif //ADVANCE
 |  |  |  |   #endif //ADVANCE
 | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |   enable_endstops(true); // Start with endstops active. After homing they can be disabled
 |  |  |  |   enable_endstops(true); // Start with endstops active. After homing they can be disabled
 | 
			
		
	
	
		
		
			
				
					|  |  | 
 |