From 7ec45271c2b07c38f84e676b4572a9efa3233669 Mon Sep 17 00:00:00 2001 From: PavelSindler Date: Fri, 21 Apr 2017 16:29:04 +0200 Subject: [PATCH 1/4] timeout to status, better print time counting when using pause print --- Firmware/Configuration.h | 2 +- Firmware/Marlin.h | 1 + Firmware/Marlin_main.cpp | 7 ++++--- Firmware/ultralcd.cpp | 8 ++++---- 4 files changed, 10 insertions(+), 8 deletions(-) diff --git a/Firmware/Configuration.h b/Firmware/Configuration.h index 15e85667f..a24ec4cac 100644 --- a/Firmware/Configuration.h +++ b/Firmware/Configuration.h @@ -5,7 +5,7 @@ #include "Configuration_prusa.h" // Firmware version -#define FW_version "3.0.11-alpha" +#define FW_version "3.0.10-10" #define FW_PRUSA3D_MAGIC "PRUSA3DFW" #define FW_PRUSA3D_MAGIC_LEN 10 diff --git a/Firmware/Marlin.h b/Firmware/Marlin.h index c0cc98fb6..c33ccb392 100644 --- a/Firmware/Marlin.h +++ b/Firmware/Marlin.h @@ -317,6 +317,7 @@ extern float HotendTempBckp; extern int fanSpeedBckp; extern float pause_lastpos[4]; extern unsigned long pause_time; +extern unsigned long start_pause_print; extern bool mesh_bed_leveling_flag; diff --git a/Firmware/Marlin_main.cpp b/Firmware/Marlin_main.cpp index 296fc9d81..843ec4cc9 100644 --- a/Firmware/Marlin_main.cpp +++ b/Firmware/Marlin_main.cpp @@ -263,6 +263,7 @@ float HotendTempBckp = 0; int fanSpeedBckp = 0; float pause_lastpos[4]; unsigned long pause_time = 0; +unsigned long start_pause_print = millis(); bool mesh_bed_leveling_flag = false; @@ -6320,7 +6321,7 @@ void temp_compensation_start() { 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(); - while (fabs(degBed() - target_temperature_bed) > 3) delay_keep_alive(1000); + while (fabs(degBed() - target_temperature_bed) > 1) delay_keep_alive(1000); for(int i = 0; i < PINDA_HEAT_T; i++) delay_keep_alive(1000); @@ -6428,8 +6429,8 @@ void long_pause() //long pause print saved_feedmultiply = feedmultiply; HotendTempBckp = degTargetHotend(active_extruder); fanSpeedBckp = fanSpeed; - pause_time += (millis() - starttime); - + start_pause_print = millis(); + //save position pause_lastpos[X_AXIS] = current_position[X_AXIS]; diff --git a/Firmware/ultralcd.cpp b/Firmware/ultralcd.cpp index 07c23c132..cb998b697 100644 --- a/Firmware/ultralcd.cpp +++ b/Firmware/ultralcd.cpp @@ -540,11 +540,12 @@ void lcd_commands() lcdDrawUpdate = 3; lcd_commands_step = 4; } - if (lcd_commands_step == 1 && !blocks_queued()) { //recover feedmultiply, current + if (lcd_commands_step == 1 && !blocks_queued()) { //recover feedmultiply sprintf_P(cmd1, PSTR("M220 S%d"), saved_feedmultiply); enquecommand(cmd1); isPrintPaused = false; + pause_time += (millis() - start_pause_print); //accumulate time when print is paused for correct statistics calculation card.startFileprint(); lcd_commands_step = 0; lcd_commands_type = 0; @@ -580,7 +581,7 @@ void lcd_commands() strcat(cmd1, " Y"); strcat(cmd1, ftostr32(pause_lastpos[Y_AXIS])); enquecommand(cmd1); - + lcd_setstatuspgm(MSG_RESUMING_PRINT); lcd_commands_step = 3; } @@ -2436,7 +2437,6 @@ void lcd_pinda_calibration_menu() START_MENU(); MENU_ITEM(back, MSG_MENU_CALIBRATION, lcd_calibration_menu); MENU_ITEM(submenu, MSG_CALIBRATE_PINDA, lcd_calibrate_pinda); - //MENU_ITEM(back, MSG_SETTINGS, lcd_settings_menu); if (temp_cal_active == false) { MENU_ITEM(function, MSG_TEMP_CALIBRATION_OFF, lcd_temp_calibration_set); } @@ -4651,7 +4651,7 @@ void lcd_update(uint8_t lcdDrawUpdateOverride) lcd_timeoutToStatus = millis() + LCD_TIMEOUT_TO_STATUS; } - /*if (LCD_CLICKED)*/ lcd_timeoutToStatus = millis() + LCD_TIMEOUT_TO_STATUS; + if (LCD_CLICKED) lcd_timeoutToStatus = millis() + LCD_TIMEOUT_TO_STATUS; #endif//ULTIPANEL #ifdef DOGLCD // Changes due to different driver architecture of the DOGM display From 7e8780ba615acd94ff6d9922c4657c85df2d4c52 Mon Sep 17 00:00:00 2001 From: PavelSindler Date: Tue, 25 Apr 2017 11:36:34 +0200 Subject: [PATCH 2/4] long press compatible with timeout to status, temp compensation extrapolation, preheat Z coordinate added, G75 for showing interpolation table --- Firmware/Marlin_main.cpp | 33 ++++++++++++++++++++------------- Firmware/language_cz.h | 2 +- Firmware/language_en.h | 2 +- Firmware/ultralcd.cpp | 3 ++- 4 files changed, 24 insertions(+), 16 deletions(-) diff --git a/Firmware/Marlin_main.cpp b/Firmware/Marlin_main.cpp index 843ec4cc9..68f7c4ff0 100644 --- a/Firmware/Marlin_main.cpp +++ b/Firmware/Marlin_main.cpp @@ -2793,6 +2793,16 @@ void process_commands() break; + case 75: + { + for (int i = 40; i <= 110; i++) { + MYSERIAL.print(i); + MYSERIAL.print(" "); + MYSERIAL.println(temp_comp_interpolation(i));// / axis_steps_per_unit[Z_AXIS]); + } + } + break; + case 76: //PINDA probe temperature calibration { setTargetBed(PINDA_MIN_T); @@ -2814,7 +2824,7 @@ void process_commands() custom_message = MSG_TEMP_CALIBRATION; current_position[X_AXIS] = PINDA_PREHEAT_X; current_position[Y_AXIS] = PINDA_PREHEAT_Y; - current_position[Z_AXIS] = 0; + current_position[Z_AXIS] = PINDA_PREHEAT_Z; 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(); @@ -2847,7 +2857,7 @@ void process_commands() setTargetBed(t_c); current_position[X_AXIS] = PINDA_PREHEAT_X; current_position[Y_AXIS] = PINDA_PREHEAT_Y; - current_position[Z_AXIS] = 0; + current_position[Z_AXIS] = PINDA_PREHEAT_Z; 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(); while (degBed() < t_c) delay_keep_alive(1000); @@ -6317,7 +6327,7 @@ void temp_compensation_start() { current_position[X_AXIS] = PINDA_PREHEAT_X; current_position[Y_AXIS] = PINDA_PREHEAT_Y; - current_position[Z_AXIS] = 0; + current_position[Z_AXIS] = PINDA_PREHEAT_Z; 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(); @@ -6336,12 +6346,11 @@ void temp_compensation_apply() { float z_shift_mm; if (calibration_status() == CALIBRATION_STATUS_CALIBRATED) { - if (target_temperature_bed % 10 == 0 && target_temperature_bed >= 50 && target_temperature_bed <= 100) { + if (target_temperature_bed % 10 == 0 && target_temperature_bed >= 60 && target_temperature_bed <= 100) { i_add = (target_temperature_bed - 60) / 10; EEPROM_read_B(EEPROM_PROBE_TEMP_SHIFT + i_add * 2, &z_shift); z_shift_mm = z_shift / axis_steps_per_unit[Z_AXIS]; - } - else { + }else { //interpolation z_shift_mm = temp_comp_interpolation(target_temperature_bed) / axis_steps_per_unit[Z_AXIS]; } @@ -6353,7 +6362,7 @@ void temp_compensation_apply() { plan_set_z_position(current_position[Z_AXIS]); } else { - //message that we have no temp compensation data ? + //we have no temp compensation data } } @@ -6362,23 +6371,21 @@ float temp_comp_interpolation(float inp_temperature) { //cubic spline interpolation int n, i, j, k; - float h[10], a, b, c, d, sum, s[10] = { 0 }, x[10], F[10], f[10], p, m[10][10] = { 0 }, temp; + float h[10], a, b, c, d, sum, s[10] = { 0 }, x[10], F[10], f[10], m[10][10] = { 0 }, temp; int shift[10]; int temp_C[10]; - p = inp_temperature; n = 6; //number of measured points shift[0] = 0; for (i = 0; i < n; i++) { - //scanf_s("%f%f", &x[i], &f[i]); if (i>0) EEPROM_read_B(EEPROM_PROBE_TEMP_SHIFT + (i-1) * 2, &shift[i]); //read shift in steps from EEPROM temp_C[i] = 50 + i * 10; //temperature in C x[i] = (float)temp_C[i]; f[i] = (float)shift[i]; } - + if (inp_temperature < x[0]) return 0; for (i = n - 1; i>0; i--) { @@ -6409,12 +6416,12 @@ float temp_comp_interpolation(float inp_temperature) { } for (i = 0; i x[i + 1])) { a = (s[i + 1] - s[i]) / (6 * h[i]); b = s[i] / 2; c = (f[i + 1] - f[i]) / h[i] - (2 * h[i] * s[i] + s[i + 1] * h[i]) / 6; d = f[i]; - sum = a*pow((p - x[i]), 3) + b*pow((p - x[i]), 2) + c*(p - x[i]) + d; + sum = a*pow((inp_temperature - x[i]), 3) + b*pow((inp_temperature - x[i]), 2) + c*(inp_temperature - x[i]) + d; } return sum; diff --git a/Firmware/language_cz.h b/Firmware/language_cz.h index b2267ad8c..66bb627bb 100644 --- a/Firmware/language_cz.h +++ b/Firmware/language_cz.h @@ -277,7 +277,7 @@ #define MSG_CALIBRATE_PINDA "Zkalibrovat" #define MSG_CALIBRATION_PINDA_MENU "Teplotni kalibrace" #define MSG_PINDA_NOT_CALIBRATED "Tiskarna nebyla teplotne zkalibrovana" -#define MSG_PINDA_PREHEAT "Predehrivani" +#define MSG_PINDA_PREHEAT "Predehrivani " #define MSG_TEMP_CALIBRATION "Tepl. kal. " #define MSG_TEMP_CALIBRATION_DONE "Teplotni kalibrace dokoncena. Pokracujte stiskem tlacitka." #define MSG_TEMP_CALIBRATION_ON "Tepl. kal. [ON]" diff --git a/Firmware/language_en.h b/Firmware/language_en.h index 8c5e71d8a..759ca2744 100644 --- a/Firmware/language_en.h +++ b/Firmware/language_en.h @@ -278,7 +278,7 @@ #define(length=17, lines=1) MSG_CALIBRATE_PINDA "Calibrate" #define(length=17, lines=1) MSG_CALIBRATION_PINDA_MENU "Temp. calibration" #define(length=20, lines=4) MSG_PINDA_NOT_CALIBRATED "Temperature calibration has not been run yet" -#define(length=20, lines=1) MSG_PINDA_PREHEAT "Preheating" +#define(length=20, lines=1) MSG_PINDA_PREHEAT "Preheating " #define(length=20, lines=1) MSG_TEMP_CALIBRATION "Temp. cal. " #define(length=20, lines=4) MSG_TEMP_CALIBRATION_DONE "Temperature calibration is finished. Click to continue." #define(length=20, lines=1) MSG_TEMP_CALIBRATION_ON "Temp. cal. [ON]" diff --git a/Firmware/ultralcd.cpp b/Firmware/ultralcd.cpp index cb998b697..422fe9457 100644 --- a/Firmware/ultralcd.cpp +++ b/Firmware/ultralcd.cpp @@ -4651,7 +4651,7 @@ void lcd_update(uint8_t lcdDrawUpdateOverride) lcd_timeoutToStatus = millis() + LCD_TIMEOUT_TO_STATUS; } - if (LCD_CLICKED) lcd_timeoutToStatus = millis() + LCD_TIMEOUT_TO_STATUS; + if (lcd_clicked()) lcd_timeoutToStatus = millis() + LCD_TIMEOUT_TO_STATUS; #endif//ULTIPANEL #ifdef DOGLCD // Changes due to different driver architecture of the DOGM display @@ -4788,6 +4788,7 @@ void lcd_buttons_update() #if BTN_ENC > 0 if (lcd_update_enabled == true) { //if we are in non-modal mode, long press can be used and short press triggers with button release if (READ(BTN_ENC) == 0) { //button is pressed + lcd_timeoutToStatus = millis() + LCD_TIMEOUT_TO_STATUS; if (millis() > button_blanking_time) { button_blanking_time = millis() + BUTTON_BLANKING_TIME; if (button_pressed == false && long_press_active == false) { From 2aa363f4600f329599280b986c78889cbd893cd0 Mon Sep 17 00:00:00 2001 From: PavelSindler Date: Tue, 25 Apr 2017 12:59:44 +0200 Subject: [PATCH 3/4] lcd_timeoutToStatus --- Firmware/ultralcd.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Firmware/ultralcd.cpp b/Firmware/ultralcd.cpp index 422fe9457..efd94aa31 100644 --- a/Firmware/ultralcd.cpp +++ b/Firmware/ultralcd.cpp @@ -4651,7 +4651,7 @@ void lcd_update(uint8_t lcdDrawUpdateOverride) lcd_timeoutToStatus = millis() + LCD_TIMEOUT_TO_STATUS; } - if (lcd_clicked()) lcd_timeoutToStatus = millis() + LCD_TIMEOUT_TO_STATUS; + if (LCD_CLICKED) lcd_timeoutToStatus = millis() + LCD_TIMEOUT_TO_STATUS; #endif//ULTIPANEL #ifdef DOGLCD // Changes due to different driver architecture of the DOGM display From d5aa1bdceb197fa39fc2d3d297c0a978fd540379 Mon Sep 17 00:00:00 2001 From: PavelSindler Date: Tue, 25 Apr 2017 13:38:13 +0200 Subject: [PATCH 4/4] updated pinda preheat coordinate and pause retraction --- Firmware/variants/1_75mm_MK2-RAMBo10a-E3Dv6full.h | 9 +++++---- Firmware/variants/1_75mm_MK2-RAMBo13a-E3Dv6full.h | 9 +++++---- 2 files changed, 10 insertions(+), 8 deletions(-) diff --git a/Firmware/variants/1_75mm_MK2-RAMBo10a-E3Dv6full.h b/Firmware/variants/1_75mm_MK2-RAMBo10a-E3Dv6full.h index 15a66337c..3fafc96df 100644 --- a/Firmware/variants/1_75mm_MK2-RAMBo10a-E3Dv6full.h +++ b/Firmware/variants/1_75mm_MK2-RAMBo10a-E3Dv6full.h @@ -370,8 +370,9 @@ THERMISTORS SETTINGS #define Z_BABYSTEP_MIN -3999 #define Z_BABYSTEP_MAX 0 -#define PINDA_PREHEAT_X 75 -#define PINDA_PREHEAT_Y 75 +#define PINDA_PREHEAT_X 70 +#define PINDA_PREHEAT_Y -3 +#define PINDA_PREHEAT_Z 1 #define PINDA_HEAT_T 120 //time in s #define PINDA_MIN_T 50 @@ -385,10 +386,10 @@ THERMISTORS SETTINGS #define LONG_PRESS_TIME 1000 //time in ms for button long press #define BUTTON_BLANKING_TIME 200 //time in ms for blanking after button release -#define PAUSE_RETRACT 2 +#define PAUSE_RETRACT 1 #define DEFAULT_PID_TEMP 210 -#define DEFAULT_RETRACTION 1 //used for PINDA temp compensation +#define DEFAULT_RETRACTION 1 //used for PINDA temp calibration #endif //__CONFIGURATION_PRUSA_H diff --git a/Firmware/variants/1_75mm_MK2-RAMBo13a-E3Dv6full.h b/Firmware/variants/1_75mm_MK2-RAMBo13a-E3Dv6full.h index c45c8ec74..29c6b005d 100644 --- a/Firmware/variants/1_75mm_MK2-RAMBo13a-E3Dv6full.h +++ b/Firmware/variants/1_75mm_MK2-RAMBo13a-E3Dv6full.h @@ -373,8 +373,9 @@ THERMISTORS SETTINGS #define Z_BABYSTEP_MIN -3999 #define Z_BABYSTEP_MAX 0 -#define PINDA_PREHEAT_X 75 -#define PINDA_PREHEAT_Y 75 +#define PINDA_PREHEAT_X 70 +#define PINDA_PREHEAT_Y -3 +#define PINDA_PREHEAT_Z 1 #define PINDA_HEAT_T 120 //time in s #define PINDA_MIN_T 50 @@ -388,10 +389,10 @@ THERMISTORS SETTINGS #define LONG_PRESS_TIME 1000 //time in ms for button long press #define BUTTON_BLANKING_TIME 200 //time in ms for blanking after button release -#define PAUSE_RETRACT 2 +#define PAUSE_RETRACT 1 #define DEFAULT_PID_TEMP 210 -#define DEFAULT_RETRACTION 1 //used for PINDA temp compensation +#define DEFAULT_RETRACTION 1 //used for PINDA temp calibration #endif //__CONFIGURATION_PRUSA_H