From 5dc2af961bbda993354105f56c74678cc500d0bc Mon Sep 17 00:00:00 2001 From: MRprusa3d Date: Thu, 23 Aug 2018 00:08:14 +0200 Subject: [PATCH 1/5] ShippingPrepare & M600 message after ShippingPrepare M600 :: better filament (un)retraction --- Firmware/Marlin_main.cpp | 7 +------ Firmware/messages.c | 1 + Firmware/messages.h | 1 + 3 files changed, 3 insertions(+), 6 deletions(-) diff --git a/Firmware/Marlin_main.cpp b/Firmware/Marlin_main.cpp index 6aea1214..4966caa1 100644 --- a/Firmware/Marlin_main.cpp +++ b/Firmware/Marlin_main.cpp @@ -1663,7 +1663,7 @@ void setup() } else if (calibration_status() == CALIBRATION_STATUS_Z_CALIBRATION) { // Show the message. - lcd_show_fullscreen_message_and_wait_P(_T(MSG_FOLLOW_CALIBRATION_FLOW)); + lcd_show_fullscreen_message_and_wait_P(_T(MSG_FOLLOW_Z_CALIBRATION_FLOW)); } } @@ -3140,11 +3140,6 @@ void gcode_M600(bool automatic, float x_position, float y_position, float z_shif plan_buffer_line(lastpos[X_AXIS], lastpos[Y_AXIS], lastpos[Z_AXIS], current_position[E_AXIS], FILAMENTCHANGE_ZFEED, active_extruder); st_synchronize(); - //Unretract - current_position[E_AXIS]= current_position[E_AXIS] - e_shift; - plan_buffer_line(lastpos[X_AXIS], lastpos[Y_AXIS], lastpos[Z_AXIS], current_position[E_AXIS], FILAMENTCHANGE_RFEED, active_extruder); - st_synchronize(); - //Set E position to original plan_set_e_position(lastpos[E_AXIS]); diff --git a/Firmware/messages.c b/Firmware/messages.c index 857c05c5..35aa9068 100644 --- a/Firmware/messages.c +++ b/Firmware/messages.c @@ -43,6 +43,7 @@ const char MSG_FIND_BED_OFFSET_AND_SKEW_LINE1[] PROGMEM_I1 = ISTR("Searching bed const char MSG_FIND_BED_OFFSET_AND_SKEW_LINE2[] PROGMEM_I1 = ISTR(" of 4"); ////c=14 r=0 const char MSG_FINISHING_MOVEMENTS[] PROGMEM_I1 = ISTR("Finishing movements"); ////c=20 r=1 const char MSG_FOLLOW_CALIBRATION_FLOW[] PROGMEM_I1 = ISTR("Printer has not been calibrated yet. Please follow the manual, chapter First steps, section Calibration flow."); ////c=20 r=8 +const char MSG_FOLLOW_Z_CALIBRATION_FLOW[] PROGMEM_I1 = ISTR("There is still a need to make Z calibration. Please follow the manual, chapter First steps, section Calibration flow."); ////c=20 r=8 const char MSG_FSENS_AUTOLOAD_NA[] PROGMEM_I1 = ISTR("F. autoload [N/A]"); ////c=17 r=1 const char MSG_FSENSOR_OFF[] PROGMEM_I1 = ISTR("Fil. sensor [off]"); ////c=0 r=0 const char MSG_FSENSOR_ON[] PROGMEM_I1 = ISTR("Fil. sensor [on]"); ////c=0 r=0 diff --git a/Firmware/messages.h b/Firmware/messages.h index 95a1610f..07f2a3a7 100644 --- a/Firmware/messages.h +++ b/Firmware/messages.h @@ -40,6 +40,7 @@ extern const char MSG_FIND_BED_OFFSET_AND_SKEW_LINE1[]; extern const char MSG_FIND_BED_OFFSET_AND_SKEW_LINE2[]; extern const char MSG_FINISHING_MOVEMENTS[]; extern const char MSG_FOLLOW_CALIBRATION_FLOW[]; +extern const char MSG_FOLLOW_Z_CALIBRATION_FLOW[]; extern const char MSG_FSENS_AUTOLOAD_NA[]; extern const char MSG_FSENSOR_OFF[]; extern const char MSG_FSENSOR_ON[]; From 35cf3f3a61028ca4693fc71192d601f791823e62 Mon Sep 17 00:00:00 2001 From: MRprusa3d Date: Tue, 4 Sep 2018 14:39:46 +0200 Subject: [PATCH 2/5] Time info suffix for doubt time estimation (i.e. if feed rate changed) --- Firmware/ultralcd.cpp | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/Firmware/ultralcd.cpp b/Firmware/ultralcd.cpp index f49911bc..46ac9d66 100644 --- a/Firmware/ultralcd.cpp +++ b/Firmware/ultralcd.cpp @@ -597,8 +597,15 @@ void lcdui_print_time(void) int chars = 0; if ((PRINTER_ACTIVE) && ((print_time_remaining_normal != PRINT_TIME_REMAINING_INIT) || (starttime != 0))) { - char suff = (print_time_remaining_normal == PRINT_TIME_REMAINING_INIT)?' ':'R'; - chars = lcd_printf_P(_N("%c%02u:%02u%c"), LCD_STR_CLOCK[0], print_t / 60, print_t % 60, suff); + char suff = ' '; + char suff_doubt = ' '; + if (print_time_remaining_normal != PRINT_TIME_REMAINING_INIT) + { + suff = 'R'; + if (feedmultiply != 100) + suff_doubt = '?'; + } + chars = lcd_printf_P(_N("%c%02u:%02u%c%c"), LCD_STR_CLOCK[0], print_t / 60, print_t % 60, suff, suff_doubt); } else chars = lcd_printf_P(_N("%c--:-- "), LCD_STR_CLOCK[0]); From 0d99dc0a3ffa5673ae9c3b94352e8697498278a6 Mon Sep 17 00:00:00 2001 From: Marek Bel Date: Mon, 3 Sep 2018 17:32:42 +0200 Subject: [PATCH 3/5] PFW-543 Add filament ramming when unloading filament with MMU. --- Firmware/mmu.cpp | 61 ++++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 57 insertions(+), 4 deletions(-) diff --git a/Firmware/mmu.cpp b/Firmware/mmu.cpp index 7ceb53e9..ac972c4a 100644 --- a/Firmware/mmu.cpp +++ b/Firmware/mmu.cpp @@ -642,6 +642,61 @@ void extr_adj(int extruder) //loading filament for SNMM #endif } +//! @brief Unload sequence to optimize shape of the tip of the unloaded filament +//! +//! Ideas to minimize flash consumption of this code: +//! +//! Create const array of extrude and feed_rate on stack, call increment current_position, plan_buffer_line() and st_synchronize() +//! in loop iterating over array. +//! +//! Same as previous, but create array in PROGMEM and call PGM_read instructions in a loop. +//! +static void filament_ramming() +{ + current_position[E_AXIS] += 1; + plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], 1000 / 60, active_extruder); + st_synchronize(); + + current_position[E_AXIS] += 1; + plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], 1500 / 60, active_extruder); + st_synchronize(); + + current_position[E_AXIS] += 2; + plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], 2000 / 60, active_extruder); + st_synchronize(); + + current_position[E_AXIS] += 1.5; + plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], 3000 / 60, active_extruder); + st_synchronize(); + + current_position[E_AXIS] += 2.5; + plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], 4000 / 60, active_extruder); + st_synchronize(); + + current_position[E_AXIS] -= 15; + plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], 5000 / 60, active_extruder); + st_synchronize(); + + current_position[E_AXIS] -= 14; + plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], 1200 / 60, active_extruder); + st_synchronize(); + + current_position[E_AXIS] -= 6; + plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], 600 / 60, active_extruder); + st_synchronize(); + + current_position[E_AXIS] += 10; + plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], 700 / 60, active_extruder); + st_synchronize(); + + current_position[E_AXIS] -= 10; + plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], 400 / 60, active_extruder); + st_synchronize(); + + current_position[E_AXIS] -= 50; + plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], 2000 / 60, active_extruder); + st_synchronize(); +} void extr_unload() { //unload just current filament for multimaterial printers @@ -663,9 +718,7 @@ void extr_unload() lcd_print(" "); lcd_print(mmu_extruder + 1); - current_position[E_AXIS] -= 80; - plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], 2500 / 60, active_extruder); - st_synchronize(); + filament_ramming(); mmu_command(MMU_CMD_U0); // get response @@ -986,4 +1039,4 @@ void mmu_eject_filament(uint8_t filament, bool recover) { puts_P(PSTR("Filament nr out of range!")); } -} \ No newline at end of file +} From 0e50c388af4f13990dac25be22fc70992cd1e653 Mon Sep 17 00:00:00 2001 From: Marek Bel Date: Mon, 3 Sep 2018 20:00:46 +0200 Subject: [PATCH 4/5] Save 1K flash memory. --- Firmware/mmu.cpp | 79 +++++++++++++++++------------------------------- 1 file changed, 28 insertions(+), 51 deletions(-) diff --git a/Firmware/mmu.cpp b/Firmware/mmu.cpp index ac972c4a..7c38e9ea 100644 --- a/Firmware/mmu.cpp +++ b/Firmware/mmu.cpp @@ -11,6 +11,7 @@ #include "cardreader.h" #include "ultralcd.h" #include "sound.h" +#include #define CHECK_FINDA ((IS_SD_PRINTING || is_usb_printing) && (mcode_in_progress != 600) && !saved_printing && e_active()) @@ -642,60 +643,36 @@ void extr_adj(int extruder) //loading filament for SNMM #endif } +struct E_step +{ + float extrude; //!< extrude distance in mm + float feed_rate; //!< feed rate in mm/s +}; +static const E_step ramming_sequence[] PROGMEM = +{ + {1.0, 1000.0/60}, + {1.0, 1500.0/60}, + {2.0, 2000.0/60}, + {1.5, 3000.0/60}, + {2.5, 4000.0/60}, + {-15.0, 5000.0/60}, + {-14.0, 1200.0/60}, + {-6.0, 600.0/60}, + {10.0, 700.0/60}, + {-10.0, 400.0/60}, + {-50.0, 2000.0/60}, +}; + //! @brief Unload sequence to optimize shape of the tip of the unloaded filament -//! -//! Ideas to minimize flash consumption of this code: -//! -//! Create const array of extrude and feed_rate on stack, call increment current_position, plan_buffer_line() and st_synchronize() -//! in loop iterating over array. -//! -//! Same as previous, but create array in PROGMEM and call PGM_read instructions in a loop. -//! static void filament_ramming() { - current_position[E_AXIS] += 1; - plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], 1000 / 60, active_extruder); - st_synchronize(); - - current_position[E_AXIS] += 1; - plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], 1500 / 60, active_extruder); - st_synchronize(); - - current_position[E_AXIS] += 2; - plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], 2000 / 60, active_extruder); - st_synchronize(); - - current_position[E_AXIS] += 1.5; - plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], 3000 / 60, active_extruder); - st_synchronize(); - - current_position[E_AXIS] += 2.5; - plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], 4000 / 60, active_extruder); - st_synchronize(); - - current_position[E_AXIS] -= 15; - plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], 5000 / 60, active_extruder); - st_synchronize(); - - current_position[E_AXIS] -= 14; - plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], 1200 / 60, active_extruder); - st_synchronize(); - - current_position[E_AXIS] -= 6; - plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], 600 / 60, active_extruder); - st_synchronize(); - - current_position[E_AXIS] += 10; - plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], 700 / 60, active_extruder); - st_synchronize(); - - current_position[E_AXIS] -= 10; - plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], 400 / 60, active_extruder); - st_synchronize(); - - current_position[E_AXIS] -= 50; - plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], 2000 / 60, active_extruder); - st_synchronize(); + for(uint8_t i = 0; i < (sizeof(ramming_sequence)/sizeof(E_step));++i) + { + current_position[E_AXIS] += pgm_read_float(&(ramming_sequence[i].extrude)); + plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], + current_position[E_AXIS], pgm_read_float(&(ramming_sequence[i].feed_rate)), active_extruder); + st_synchronize(); + } } void extr_unload() From 66305b3e0413b64adc135e34ef9acabdf69e725b Mon Sep 17 00:00:00 2001 From: PavelSindler Date: Thu, 6 Sep 2018 23:05:36 +0200 Subject: [PATCH 5/5] MK25: always show "normal mode" remaining time --- Firmware/Marlin_main.cpp | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/Firmware/Marlin_main.cpp b/Firmware/Marlin_main.cpp index cb218019..05a5d49e 100644 --- a/Firmware/Marlin_main.cpp +++ b/Firmware/Marlin_main.cpp @@ -8857,8 +8857,12 @@ void print_mesh_bed_leveling_table() uint16_t print_time_remaining() { uint16_t print_t = PRINT_TIME_REMAINING_INIT; +#ifdef TMC2130 if (SilentModeMenu == SILENT_MODE_OFF) print_t = print_time_remaining_normal; else print_t = print_time_remaining_silent; +#else + print_t = print_time_remaining_normal; +#endif //TMC2130 if ((print_t != PRINT_TIME_REMAINING_INIT) && (feedmultiply != 0)) print_t = 100 * print_t / feedmultiply; return print_t; } @@ -8867,12 +8871,18 @@ uint8_t calc_percent_done() { //in case that we have information from M73 gcode return percentage counted by slicer, else return percentage counted as byte_printed/filesize uint8_t percent_done = 0; +#ifdef TMC2130 if (SilentModeMenu == SILENT_MODE_OFF && print_percent_done_normal <= 100) { percent_done = print_percent_done_normal; } else if (print_percent_done_silent <= 100) { percent_done = print_percent_done_silent; } +#else + if (print_percent_done_normal <= 100) { + percent_done = print_percent_done_normal; + } +#endif //TMC2130 else { percent_done = card.percentDone(); }