From cc57d461587d35fdc9cc2412dd87c96255990af5 Mon Sep 17 00:00:00 2001 From: Scott Lahteine Date: Thu, 3 Nov 2016 16:41:55 -0500 Subject: [PATCH 1/4] Fix set_position for CoreYZ --- Marlin/stepper.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Marlin/stepper.cpp b/Marlin/stepper.cpp index cb7eb3c31..4ed9f3221 100644 --- a/Marlin/stepper.cpp +++ b/Marlin/stepper.cpp @@ -982,8 +982,8 @@ void Stepper::set_position(const long &a, const long &b, const long &c, const lo #elif ENABLED(COREYZ) // coreyz planning count_position[X_AXIS] = a; - count_position[B_AXIS] = y + c; - count_position[C_AXIS] = y - c; + count_position[B_AXIS] = b + c; + count_position[C_AXIS] = b - c; #else // default non-h-bot planning count_position[X_AXIS] = a; From b23d2554913705a503f4edc66bfd4b4f858185b2 Mon Sep 17 00:00:00 2001 From: Scott Lahteine Date: Thu, 3 Nov 2016 16:42:44 -0500 Subject: [PATCH 2/4] Move macros above Stepper::babystep --- Marlin/stepper.cpp | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/Marlin/stepper.cpp b/Marlin/stepper.cpp index 4ed9f3221..6621e1962 100644 --- a/Marlin/stepper.cpp +++ b/Marlin/stepper.cpp @@ -1108,25 +1108,25 @@ void Stepper::report_positions() { #if ENABLED(BABYSTEPPING) + #define _ENABLE(axis) enable_## axis() + #define _READ_DIR(AXIS) AXIS ##_DIR_READ + #define _INVERT_DIR(AXIS) INVERT_## AXIS ##_DIR + #define _APPLY_DIR(AXIS, INVERT) AXIS ##_APPLY_DIR(INVERT, true) + + #define BABYSTEP_AXIS(axis, AXIS, INVERT) { \ + _ENABLE(axis); \ + uint8_t old_pin = _READ_DIR(AXIS); \ + _APPLY_DIR(AXIS, _INVERT_DIR(AXIS)^direction^INVERT); \ + _APPLY_STEP(AXIS)(!_INVERT_STEP_PIN(AXIS), true); \ + delayMicroseconds(2); \ + _APPLY_STEP(AXIS)(_INVERT_STEP_PIN(AXIS), true); \ + _APPLY_DIR(AXIS, old_pin); \ + } + // MUST ONLY BE CALLED BY AN ISR, // No other ISR should ever interrupt this! void Stepper::babystep(const uint8_t axis, const bool direction) { - #define _ENABLE(axis) enable_## axis() - #define _READ_DIR(AXIS) AXIS ##_DIR_READ - #define _INVERT_DIR(AXIS) INVERT_## AXIS ##_DIR - #define _APPLY_DIR(AXIS, INVERT) AXIS ##_APPLY_DIR(INVERT, true) - - #define BABYSTEP_AXIS(axis, AXIS, INVERT) { \ - _ENABLE(axis); \ - uint8_t old_pin = _READ_DIR(AXIS); \ - _APPLY_DIR(AXIS, _INVERT_DIR(AXIS)^direction^INVERT); \ - _APPLY_STEP(AXIS)(!_INVERT_STEP_PIN(AXIS), true); \ - delayMicroseconds(2); \ - _APPLY_STEP(AXIS)(_INVERT_STEP_PIN(AXIS), true); \ - _APPLY_DIR(AXIS, old_pin); \ - } - switch (axis) { case X_AXIS: From cad792e7025380185691420a751bc3535cf3f0ed Mon Sep 17 00:00:00 2001 From: Scott Lahteine Date: Thu, 3 Nov 2016 18:03:02 -0500 Subject: [PATCH 3/4] Reduce code for invariant lcd_detected --- Marlin/ultralcd.cpp | 10 +++------- Marlin/ultralcd.h | 9 +++++++-- 2 files changed, 10 insertions(+), 9 deletions(-) diff --git a/Marlin/ultralcd.cpp b/Marlin/ultralcd.cpp index 98bcda321..448f319be 100755 --- a/Marlin/ultralcd.cpp +++ b/Marlin/ultralcd.cpp @@ -2982,13 +2982,9 @@ void lcd_reset_alert_level() { lcd_status_message_level = 0; } lastEncoderBits = enc; } - bool lcd_detected(void) { - #if (ENABLED(LCD_I2C_TYPE_MCP23017) || ENABLED(LCD_I2C_TYPE_MCP23008)) && ENABLED(DETECT_DEVICE) - return lcd.LcdDetected() == 1; - #else - return true; - #endif - } + #if (ENABLED(LCD_I2C_TYPE_MCP23017) || ENABLED(LCD_I2C_TYPE_MCP23008)) && ENABLED(DETECT_DEVICE) + bool lcd_detected() { return lcd.LcdDetected() == 1; } + #endif #endif // ULTIPANEL diff --git a/Marlin/ultralcd.h b/Marlin/ultralcd.h index 9c35891a6..3cd071114 100644 --- a/Marlin/ultralcd.h +++ b/Marlin/ultralcd.h @@ -41,10 +41,15 @@ void lcd_setstatuspgm(const char* message, const uint8_t level=0); void lcd_setalertstatuspgm(const char* message); void lcd_reset_alert_level(); - bool lcd_detected(void); void lcd_kill_screen(); void kill_screen(const char* lcd_msg); + #if (ENABLED(LCD_I2C_TYPE_MCP23017) || ENABLED(LCD_I2C_TYPE_MCP23008)) && ENABLED(DETECT_DEVICE) + bool lcd_detected(); + #else + inline bool lcd_detected() { return true; } + #endif + #if HAS_BUZZER void lcd_buzz(long duration, uint16_t freq); #endif @@ -155,7 +160,7 @@ inline void lcd_setstatuspgm(const char* message, const uint8_t level=0) { UNUSED(message); UNUSED(level); } inline void lcd_buttons_update() {} inline void lcd_reset_alert_level() {} - inline bool lcd_detected(void) { return true; } + inline bool lcd_detected() { return true; } #define LCD_MESSAGEPGM(x) NOOP #define LCD_ALERTMESSAGEPGM(x) NOOP From 00662b86351b6d9db240f4056f848bd6b9a9b293 Mon Sep 17 00:00:00 2001 From: Scott Lahteine Date: Thu, 3 Nov 2016 18:23:31 -0500 Subject: [PATCH 4/4] Minor babystep cleanup patches --- Marlin/stepper.cpp | 2 +- Marlin/stepper.h | 2 +- Marlin/temperature.cpp | 6 +++--- Marlin/temperature.h | 2 +- Marlin/ultralcd.cpp | 2 +- 5 files changed, 7 insertions(+), 7 deletions(-) diff --git a/Marlin/stepper.cpp b/Marlin/stepper.cpp index 6621e1962..77834bd36 100644 --- a/Marlin/stepper.cpp +++ b/Marlin/stepper.cpp @@ -1125,7 +1125,7 @@ void Stepper::report_positions() { // MUST ONLY BE CALLED BY AN ISR, // No other ISR should ever interrupt this! - void Stepper::babystep(const uint8_t axis, const bool direction) { + void Stepper::babystep(const AxisEnum axis, const bool direction) { switch (axis) { diff --git a/Marlin/stepper.h b/Marlin/stepper.h index 10c5c64ee..bff23cc39 100644 --- a/Marlin/stepper.h +++ b/Marlin/stepper.h @@ -257,7 +257,7 @@ class Stepper { #endif #if ENABLED(BABYSTEPPING) - static void babystep(const uint8_t axis, const bool direction); // perform a short step with a single stepper motor, outside of any convention + static void babystep(const AxisEnum axis, const bool direction); // perform a short step with a single stepper motor, outside of any convention #endif static inline void kill_current_block() { diff --git a/Marlin/temperature.cpp b/Marlin/temperature.cpp index 61b6eb4b3..f01c0862b 100644 --- a/Marlin/temperature.cpp +++ b/Marlin/temperature.cpp @@ -1916,15 +1916,15 @@ void Temperature::isr() { } // temp_count >= OVERSAMPLENR #if ENABLED(BABYSTEPPING) - for (uint8_t axis = X_AXIS; axis <= Z_AXIS; axis++) { + LOOP_XYZ(axis) { int curTodo = babystepsTodo[axis]; //get rid of volatile for performance if (curTodo > 0) { - stepper.babystep(axis,/*fwd*/true); + stepper.babystep((AxisEnum)axis,/*fwd*/true); babystepsTodo[axis]--; //fewer to do next time } else if (curTodo < 0) { - stepper.babystep(axis,/*fwd*/false); + stepper.babystep((AxisEnum)axis,/*fwd*/false); babystepsTodo[axis]++; //fewer to do next time } } diff --git a/Marlin/temperature.h b/Marlin/temperature.h index 072364e2e..37d47fe5b 100644 --- a/Marlin/temperature.h +++ b/Marlin/temperature.h @@ -384,7 +384,7 @@ class Temperature { #if ENABLED(BABYSTEPPING) - static void babystep_axis(AxisEnum axis, int distance) { + static void babystep_axis(const AxisEnum axis, const int distance) { #if ENABLED(COREXY) || ENABLED(COREXZ) || ENABLED(COREYZ) #if ENABLED(BABYSTEP_XY) switch (axis) { diff --git a/Marlin/ultralcd.cpp b/Marlin/ultralcd.cpp index 448f319be..00e58ca2d 100755 --- a/Marlin/ultralcd.cpp +++ b/Marlin/ultralcd.cpp @@ -651,7 +651,7 @@ void kill_screen(const char* lcd_msg) { if (lcd_clicked) { defer_return_to_status = false; return lcd_goto_previous_menu(); } ENCODER_DIRECTION_NORMAL(); if (encoderPosition) { - int babystep_increment = (int32_t)encoderPosition * BABYSTEP_MULTIPLICATOR; + int babystep_increment = (int32_t)encoderPosition * (BABYSTEP_MULTIPLICATOR); encoderPosition = 0; lcdDrawUpdate = LCDVIEW_REDRAW_NOW; thermalManager.babystep_axis(axis, babystep_increment);