diff --git a/Firmware/Configuration.h b/Firmware/Configuration.h index 2cc1f4f8c..697f50e59 100644 --- a/Firmware/Configuration.h +++ b/Firmware/Configuration.h @@ -7,11 +7,11 @@ #define STR(x) STR_HELPER(x) // Firmware version -#define FW_VERSION "3.1.2" -#define FW_COMMIT_NR 231 +#define FW_VERSION "3.1.3" +#define FW_COMMIT_NR 245 // FW_VERSION_UNKNOWN means this is an unofficial build. // The firmware should only be checked into github with this symbol. -#define FW_DEV_VERSION FW_VERSION_UNKNOWN +#define FW_DEV_VERSION FW_VERSION_GOLD #define FW_REPOSITORY "Prusa3D/MK3" #define FW_VERSION_FULL FW_VERSION "-" STR(FW_COMMIT_NR) @@ -123,12 +123,6 @@ #define EEPROM_FSENS_AUTOLOAD_ENABLED (EEPROM_SECOND_SERIAL_ACTIVE - 1) -// Hyperfine Bed Tuning -#define EEPROM_BED_CORRECTION_FRONT_LEFT (EEPROM_FSENS_AUTOLOAD_ENABLED - 1) -#define EEPROM_BED_CORRECTION_FRONT_RIGHT (EEPROM_BED_CORRECTION_FRONT_LEFT - 1) -#define EEPROM_BED_CORRECTION_REAR_RIGHT (EEPROM_BED_CORRECTION_FRONT_RIGHT - 1) -#define EEPROM_BED_CORRECTION_REAR_LEFT (EEPROM_BED_CORRECTION_REAR_RIGHT - 1) -// End Hyperfine Bed Tuning // Crash detection counter X (total) #define EEPROM_CRASH_COUNT_X_TOT (EEPROM_FSENS_AUTOLOAD_ENABLED - 2) // uint16 // Crash detection counter Y (total) @@ -138,6 +132,13 @@ // Power loss errors (total) #define EEPROM_POWER_COUNT_TOT (EEPROM_FERROR_COUNT_TOT - 2) // uint16 +// Hyperfine Bed Tuning +#define EEPROM_BED_CORRECTION_FRONT_LEFT (EEPROM_POWER_COUNT_TOT - 1) +#define EEPROM_BED_CORRECTION_FRONT_RIGHT (EEPROM_BED_CORRECTION_FRONT_LEFT - 1) +#define EEPROM_BED_CORRECTION_REAR_RIGHT (EEPROM_BED_CORRECTION_FRONT_RIGHT - 1) +#define EEPROM_BED_CORRECTION_REAR_LEFT (EEPROM_BED_CORRECTION_REAR_RIGHT - 1) +// End Hyperfine Bed Tuning + //////////////////////////////////////// // TMC2130 Accurate sensorless homing diff --git a/Firmware/ConfigurationStore.cpp b/Firmware/ConfigurationStore.cpp index 253452fed..26cbc8228 100644 --- a/Firmware/ConfigurationStore.cpp +++ b/Firmware/ConfigurationStore.cpp @@ -378,8 +378,8 @@ bool Config_RetrieveSettings(uint16_t offset, uint8_t level) EEPROM_READ_VAR(i, extruder_advance_k); EEPROM_READ_VAR(i, advance_ed_ratio); } - calculate_volumetric_multipliers(); #endif //LIN_ADVANCE + calculate_extruder_multipliers(); // Call updatePID (similar to when we have processed M301) updatePID(); diff --git a/Firmware/Configuration_prusa.h b/Firmware/Configuration_prusa.h index 4538b226a..52ce678f9 100644 --- a/Firmware/Configuration_prusa.h +++ b/Firmware/Configuration_prusa.h @@ -17,6 +17,7 @@ // Electronics #define MOTHERBOARD BOARD_EINSY_0_4a +#define HAS_SECOND_SERIAL_PORT // Uncomment the below for the E3D PT100 temperature sensor (with or without PT100 Amplifier) diff --git a/Firmware/Marlin_main.cpp b/Firmware/Marlin_main.cpp index 645e39e34..0fdedb41f 100644 --- a/Firmware/Marlin_main.cpp +++ b/Firmware/Marlin_main.cpp @@ -3267,10 +3267,8 @@ void process_commands() #ifdef PINDA_THERMISTOR if (true) { - lcd_show_fullscreen_message_and_wait_P(MSG_TEMP_CAL_WARNING); - bool result = lcd_show_fullscreen_message_yes_no_and_wait_P(MSG_STEEL_SHEET_CHECK, false, false); - if(result) lcd_show_fullscreen_message_and_wait_P(MSG_REMOVE_STEEL_SHEET); - if (!(axis_known_position[X_AXIS] && axis_known_position[Y_AXIS] && axis_known_position[Z_AXIS])) { + if (!(axis_known_position[X_AXIS] && axis_known_position[Y_AXIS] && axis_known_position[Z_AXIS])) + { // We don't know where we are! HOME! // Push the commands to the front of the message queue in the reverse order! // There shall be always enough space reserved for these commands. @@ -3278,6 +3276,17 @@ void process_commands() enquecommand_front_P((PSTR("G28 W0"))); break; } + lcd_show_fullscreen_message_and_wait_P(MSG_TEMP_CAL_WARNING); + bool result = lcd_show_fullscreen_message_yes_no_and_wait_P(MSG_STEEL_SHEET_CHECK, false, false); + if (result) + { + current_position[Z_AXIS] = 50; + current_position[Y_AXIS] = 190; + 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(); + lcd_show_fullscreen_message_and_wait_P(MSG_REMOVE_STEEL_SHEET); + } + lcd_update_enable(true); KEEPALIVE_STATE(NOT_BUSY); //no need to print busy messages as we print current temperatures periodicaly SERIAL_ECHOLNPGM("PINDA probe calibration start"); @@ -7119,11 +7128,14 @@ void save_statistics(unsigned long _total_filament_used, unsigned long _total_pr } float calculate_extruder_multiplier(float diameter) { - bool enabled = volumetric_enabled && diameter > 0; - float area = enabled ? (M_PI * pow(diameter * .5, 2)) : 0; - return (extrudemultiply == 100) ? - (enabled ? (1.f / area) : 1.f) : - (enabled ? ((float(extrudemultiply) * 0.01f) / area) : 1.f); + float out = 1.f; + if (volumetric_enabled && diameter > 0.f) { + float area = M_PI * diameter * diameter * 0.25; + out = 1.f / area; + } + if (extrudemultiply != 100) + out *= float(extrudemultiply) * 0.01f; + return out; } void calculate_extruder_multipliers() { @@ -7636,8 +7648,8 @@ void serialecho_temperatures() { float tt = degHotend(active_extruder); SERIAL_PROTOCOLPGM("T:"); SERIAL_PROTOCOL(tt); - SERIAL_PROTOCOLPGM(" P:"); - SERIAL_PROTOCOL(current_temperature_pinda); + SERIAL_PROTOCOLPGM(" E:"); + SERIAL_PROTOCOL((int)active_extruder); SERIAL_PROTOCOLPGM(" B:"); SERIAL_PROTOCOL_F(degBed(), 1); SERIAL_PROTOCOLLN(""); diff --git a/Firmware/ultralcd.cpp b/Firmware/ultralcd.cpp index 064ba29fc..130d200e3 100644 --- a/Firmware/ultralcd.cpp +++ b/Firmware/ultralcd.cpp @@ -99,7 +99,19 @@ union MenuData int mid_left2; } adjustBed; // End Hyperfine bed Tuning - + + struct TuneMenu + { + // editMenuParentState is used when an edit menu is entered, so it knows + // the return menu and encoder state. + struct EditMenuParentState editMenuParentState; + // To recognize, whether the menu has been just initialized. + int8_t status; + // Backup of extrudemultiply, to recognize, that the value has been changed and + // it needs to be applied. + int16_t extrudemultiply; + } tuneMenu; + // editMenuParentState is used when an edit menu is entered, so it knows // the return menu and encoder state. struct EditMenuParentState editMenuParentState; @@ -3957,12 +3969,14 @@ static void lcd_settings_menu() else { MENU_ITEM(function, MSG_TEMP_CALIBRATION_ON, lcd_temp_calibration_set); } +#ifdef HAS_SECOND_SERIAL_PORT if (selectedSerialPort == 0) { MENU_ITEM(function, MSG_SECOND_SERIAL_OFF, lcd_second_serial_set); } else { MENU_ITEM(function, MSG_SECOND_SERIAL_ON, lcd_second_serial_set); } +#endif //HAS_SECOND_SERIAL if (!isPrintPaused && !homing_flag) { @@ -5492,6 +5506,16 @@ static void lcd_colorprint_change() { static void lcd_tune_menu() { + if (menuData.tuneMenu.status == 0) { + // Menu was entered. Mark the menu as entered and save the current extrudemultiply value. + menuData.tuneMenu.status = 1; + menuData.tuneMenu.extrudemultiply = extrudemultiply; + } else if (menuData.tuneMenu.extrudemultiply != extrudemultiply) { + // extrudemultiply has been changed from the child menu. Apply the new value. + menuData.tuneMenu.extrudemultiply = extrudemultiply; + calculate_extruder_multipliers(); + } + EEPROM_read(EEPROM_SILENT, (uint8_t*)&SilentModeMenu, sizeof(SilentModeMenu)); @@ -6082,14 +6106,12 @@ static bool lcd_selfcheck_axis_sg(char axis) { } // first axis length measurement begin - - tmc2130_home_enter(X_AXIS_MASK << axis); + current_position[axis] -= (axis_length + margin); plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[3], manual_feedrate[0] / 60, active_extruder); st_synchronize(); - tmc2130_home_exit(); tmc2130_sg_meassure_start(axis); @@ -6102,9 +6124,7 @@ static bool lcd_selfcheck_axis_sg(char axis) { current_position[axis] += axis_length; plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[3], manual_feedrate[0] / 60, active_extruder); - tmc2130_home_enter(X_AXIS_MASK << axis); st_synchronize(); - tmc2130_home_exit(); uint16_t sg1 = tmc2130_sg_meassure_stop(); printf_P(PSTR("%c AXIS SG1=%d\n"), 'X'+axis, sg1); @@ -6121,12 +6141,10 @@ static bool lcd_selfcheck_axis_sg(char axis) { plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[3], manual_feedrate[0] / 60, active_extruder); st_synchronize(); - tmc2130_home_enter(X_AXIS_MASK << axis); current_position[axis] -= (axis_length + margin); plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[3], manual_feedrate[0] / 60, active_extruder); st_synchronize(); - tmc2130_home_exit(); current_position_init = st_get_position_mm(axis); @@ -6134,7 +6152,7 @@ static bool lcd_selfcheck_axis_sg(char axis) { //end of second measurement, now check for possible errors: - + for(int i = 0; i < 2; i++){ //check if measured axis length corresponds to expected length SERIAL_ECHOPGM("Measured axis length:"); MYSERIAL.println(measured_axis_length[i]); diff --git a/Firmware/variants/1_75mm_MK3-EINY03-E3Dv6full.h b/Firmware/variants/1_75mm_MK3-EINY03-E3Dv6full.h index 41afcb87c..fccd58a94 100644 --- a/Firmware/variants/1_75mm_MK3-EINY03-E3Dv6full.h +++ b/Firmware/variants/1_75mm_MK3-EINY03-E3Dv6full.h @@ -17,6 +17,7 @@ // Electronics #define MOTHERBOARD BOARD_EINY_0_3a +#define HAS_SECOND_SERIAL_PORT // Uncomment the below for the E3D PT100 temperature sensor (with or without PT100 Amplifier) diff --git a/Firmware/variants/1_75mm_MK3-EINY04-E3Dv6full.h b/Firmware/variants/1_75mm_MK3-EINY04-E3Dv6full.h index 251d01e7f..63deeddbc 100644 --- a/Firmware/variants/1_75mm_MK3-EINY04-E3Dv6full.h +++ b/Firmware/variants/1_75mm_MK3-EINY04-E3Dv6full.h @@ -17,6 +17,7 @@ // Electronics #define MOTHERBOARD BOARD_EINY_0_4a +#define HAS_SECOND_SERIAL_PORT // Uncomment the below for the E3D PT100 temperature sensor (with or without PT100 Amplifier) diff --git a/Firmware/variants/1_75mm_MK3-EINY10a-E3Dv6full.h b/Firmware/variants/1_75mm_MK3-EINY10a-E3Dv6full.h index dbc6cb756..be2663942 100644 --- a/Firmware/variants/1_75mm_MK3-EINY10a-E3Dv6full.h +++ b/Firmware/variants/1_75mm_MK3-EINY10a-E3Dv6full.h @@ -17,6 +17,7 @@ // Electronics #define MOTHERBOARD BOARD_EINY_0_4a +#define HAS_SECOND_SERIAL_PORT // Uncomment the below for the E3D PT100 temperature sensor (with or without PT100 Amplifier)