|
@ -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
|
|
|