From 74441ce3a13d90b19e1b23dc90761b83caa32331 Mon Sep 17 00:00:00 2001 From: PavelSindler Date: Wed, 29 Nov 2017 14:05:47 +0100 Subject: [PATCH 01/45] power panic in absolute mode fixed, but some e steps are probably missing --- Firmware/Marlin_main.cpp | 27 ++++++++++++++------------- 1 file changed, 14 insertions(+), 13 deletions(-) diff --git a/Firmware/Marlin_main.cpp b/Firmware/Marlin_main.cpp index 58d5aacd2..0af6c973a 100644 --- a/Firmware/Marlin_main.cpp +++ b/Firmware/Marlin_main.cpp @@ -7108,7 +7108,8 @@ void uvlo_() planner_abort_hard(); // Store the current extruder position. - eeprom_update_float((float*)(EEPROM_UVLO_CURRENT_POSITION_E), st_get_position_mm(E_AXIS)); + // eeprom_update_float((float*)(EEPROM_UVLO_CURRENT_POSITION_E), st_get_position_mm(E_AXIS)); + eeprom_update_float((float*)(EEPROM_UVLO_CURRENT_POSITION_E), current_position[E_AXIS]); eeprom_update_byte((uint8_t*)EEPROM_UVLO_E_ABS, axis_relative_modes[3]?0:1); // Clean the input command queue. @@ -7259,16 +7260,6 @@ void recover_print(uint8_t automatic) { enquecommand_P(PSTR("G1 E5 F120")); //Extrude some filament to stabilize pessure } enquecommand_P(PSTR("G1 E" STRINGIFY(-DEFAULT_RETRACTION)" F480")); - if (eeprom_read_byte((uint8_t*)EEPROM_UVLO_E_ABS)) - { - float extruder_abs_pos = eeprom_read_float((float*)(EEPROM_UVLO_CURRENT_POSITION_E)); - enquecommand_P(PSTR("M82")); //E axis abslute mode -// current_position[E_AXIS] = extruder_abs_pos; -// plan_set_e_position(extruder_abs_pos); - sprintf_P(cmd, PSTR("G92 E")); - dtostrf(extruder_abs_pos, 6, 3, cmd + strlen(cmd)); - enquecommand(cmd); - } // Mark the power panic status as inactive. eeprom_update_byte((uint8_t*)EEPROM_UVLO, 0); @@ -7389,9 +7380,9 @@ void restore_print_from_eeprom() { uint32_t position = eeprom_read_dword((uint32_t*)(EEPROM_FILE_POSITION)); SERIAL_ECHOPGM("Position read from eeprom:"); MYSERIAL.println(position); - + // E axis relative mode. - enquecommand_P(PSTR("M83")); + enquecommand_P(PSTR("M83")); // Move to the XY print position in logical coordinates, where the print has been killed. strcpy_P(cmd, PSTR("G1 X")); strcat(cmd, ftostr32(eeprom_read_float((float*)(EEPROM_UVLO_CURRENT_POSITION + 0)))); strcat_P(cmd, PSTR(" Y")); strcat(cmd, ftostr32(eeprom_read_float((float*)(EEPROM_UVLO_CURRENT_POSITION + 4)))); @@ -7405,6 +7396,16 @@ void restore_print_from_eeprom() { // Set the feedrate saved at the power panic. sprintf_P(cmd, PSTR("G1 F%d"), feedrate_rec); enquecommand(cmd); + if (eeprom_read_byte((uint8_t*)EEPROM_UVLO_E_ABS)) + { + float extruder_abs_pos = eeprom_read_float((float*)(EEPROM_UVLO_CURRENT_POSITION_E)); + enquecommand_P(PSTR("M82")); //E axis abslute mode + // current_position[E_AXIS] = extruder_abs_pos; + // plan_set_e_position(extruder_abs_pos); + sprintf_P(cmd, PSTR("G92 E")); + dtostrf(extruder_abs_pos, 6, 3, cmd + strlen(cmd)); + enquecommand(cmd); + } // Set the fan speed saved at the power panic. strcpy_P(cmd, PSTR("M106 S")); strcat(cmd, itostr3(int(fan_speed_rec))); From 06f7439dc117b53b94e9b340e5099d51cc6cadad Mon Sep 17 00:00:00 2001 From: PavelSindler Date: Wed, 29 Nov 2017 14:11:31 +0100 Subject: [PATCH 02/45] changed version --- Firmware/Configuration.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Firmware/Configuration.h b/Firmware/Configuration.h index 25ad10906..f94c11556 100644 --- a/Firmware/Configuration.h +++ b/Firmware/Configuration.h @@ -9,7 +9,7 @@ // Firmware version #define FW_version "3.1.1-RC1" -#define FW_build 121 +#define FW_build 122 //#define FW_build --BUILD-NUMBER-- #define FW_version_build FW_version " b" STR(FW_build) From 707e9cb396a0bee7c03309f0095110d7ecc7b6e1 Mon Sep 17 00:00:00 2001 From: PavelSindler Date: Fri, 1 Dec 2017 14:26:08 +0100 Subject: [PATCH 03/45] chages in power panic absolute mode --- Firmware/Marlin_main.cpp | 23 ++++++++++++----------- 1 file changed, 12 insertions(+), 11 deletions(-) diff --git a/Firmware/Marlin_main.cpp b/Firmware/Marlin_main.cpp index 0af6c973a..ce07d4e3b 100644 --- a/Firmware/Marlin_main.cpp +++ b/Firmware/Marlin_main.cpp @@ -7107,11 +7107,6 @@ void uvlo_() // are in action. planner_abort_hard(); - // Store the current extruder position. - // eeprom_update_float((float*)(EEPROM_UVLO_CURRENT_POSITION_E), st_get_position_mm(E_AXIS)); - eeprom_update_float((float*)(EEPROM_UVLO_CURRENT_POSITION_E), current_position[E_AXIS]); - eeprom_update_byte((uint8_t*)EEPROM_UVLO_E_ABS, axis_relative_modes[3]?0:1); - // Clean the input command queue. cmdqueue_reset(); card.sdprinting = false; @@ -7150,6 +7145,10 @@ void uvlo_() // for reaching the zero full step before powering off. eeprom_update_word((uint16_t*)(EEPROM_UVLO_Z_MICROSTEPS), z_microsteps); // Store the current position. + // Store the current extruder position. + // eeprom_update_float((float*)(EEPROM_UVLO_CURRENT_POSITION_E), st_get_position_mm(E_AXIS)); + eeprom_update_float((float*)(EEPROM_UVLO_CURRENT_POSITION_E), current_position[E_AXIS]); + eeprom_update_byte((uint8_t*)EEPROM_UVLO_E_ABS, axis_relative_modes[3] ? 0 : 1); eeprom_update_float((float*)(EEPROM_UVLO_CURRENT_POSITION + 0), current_position[X_AXIS]); eeprom_update_float((float*)(EEPROM_UVLO_CURRENT_POSITION + 4), current_position[Y_AXIS]); eeprom_update_float((float*)(EEPROM_UVLO_CURRENT_POSITION_Z), current_position[Z_AXIS]); @@ -7259,7 +7258,7 @@ void recover_print(uint8_t automatic) { if(automatic == 0){ enquecommand_P(PSTR("G1 E5 F120")); //Extrude some filament to stabilize pessure } - enquecommand_P(PSTR("G1 E" STRINGIFY(-DEFAULT_RETRACTION)" F480")); + //enquecommand_P(PSTR("G1 E" STRINGIFY(-DEFAULT_RETRACTION)" F480")); // Mark the power panic status as inactive. eeprom_update_byte((uint8_t*)EEPROM_UVLO, 0); @@ -7283,6 +7282,7 @@ void recover_print(uint8_t automatic) { void recover_machine_state_after_power_panic() { + char cmd[30]; // 1) Recover the logical cordinates at the time of the power panic. // The logical XY coordinates are needed to recover the machine Z coordinate corrected by the mesh bed leveling. current_position[X_AXIS] = eeprom_read_float((float*)(EEPROM_UVLO_CURRENT_POSITION + 0)); @@ -7291,6 +7291,12 @@ void recover_machine_state_after_power_panic() // The current position after power panic is moved to the next closest 0th full step. current_position[Z_AXIS] = eeprom_read_float((float*)(EEPROM_UVLO_CURRENT_POSITION_Z)) + UVLO_Z_AXIS_SHIFT + float((1024 - eeprom_read_word((uint16_t*)(EEPROM_UVLO_Z_MICROSTEPS)) + 7) >> 4) / axis_steps_per_unit[Z_AXIS]; + if (eeprom_read_byte((uint8_t*)EEPROM_UVLO_E_ABS)) { + current_position[E_AXIS] = eeprom_read_float((float*)(EEPROM_UVLO_CURRENT_POSITION_E)); + sprintf_P(cmd, PSTR("G92 E")); + dtostrf(current_position[E_AXIS], 6, 3, cmd + strlen(cmd)); + enquecommand(cmd); + } memcpy(destination, current_position, sizeof(destination)); SERIAL_ECHOPGM("recover_machine_state_after_power_panic, initial "); @@ -7400,11 +7406,6 @@ void restore_print_from_eeprom() { { float extruder_abs_pos = eeprom_read_float((float*)(EEPROM_UVLO_CURRENT_POSITION_E)); enquecommand_P(PSTR("M82")); //E axis abslute mode - // current_position[E_AXIS] = extruder_abs_pos; - // plan_set_e_position(extruder_abs_pos); - sprintf_P(cmd, PSTR("G92 E")); - dtostrf(extruder_abs_pos, 6, 3, cmd + strlen(cmd)); - enquecommand(cmd); } // Set the fan speed saved at the power panic. strcpy_P(cmd, PSTR("M106 S")); From c5dd9dd65469f87d2b50d738e9fef5a8f443982a Mon Sep 17 00:00:00 2001 From: PavelSindler Date: Sat, 2 Dec 2017 00:19:47 +0100 Subject: [PATCH 04/45] gitignore --- .gitignore | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .gitignore diff --git a/.gitignore b/.gitignore new file mode 100644 index 000000000..6ff03e181 --- /dev/null +++ b/.gitignore @@ -0,0 +1,5 @@ +################################################################################ +# This .gitignore file was automatically created by Microsoft(R) Visual Studio. +################################################################################ + +/Firmware/Firmware.vcxproj From 5f4bed8d7225a7cac2321a3bf109662b7ec05e4e Mon Sep 17 00:00:00 2001 From: PavelSindler Date: Thu, 29 Nov 2018 13:35:57 +0100 Subject: [PATCH 05/45] add gitignore --- .gitignore | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 .gitignore diff --git a/.gitignore b/.gitignore new file mode 100644 index 000000000..4bd53cdc5 --- /dev/null +++ b/.gitignore @@ -0,0 +1,27 @@ +################################################################################ +# This .gitignore file was automatically created by Microsoft(R) Visual Studio. +################################################################################ + +/Firmware/Configuration_prusa.h +/Firmware/Firmware.vcxproj.filters +/Firmware/Firmware.vcxproj +/Firmware/Firmware.sln +/Firmware/__vm +/Firmware/Debug +/Firmware/.vs/Firmware/v14 +/ArduinoAddons/Arduino_1.6.x/hardware/marlin/avr_/libraries/U8glib/utility +/ArduinoAddons/Arduino_1.6.x/hardware/marlin/avr_/libraries/Wire +/ArduinoAddons/Arduino_1.6.x/hardware/marlin/avr_/variants +/ArduinoAddons/Arduino_1.6.x/hardware/marlin/avr_/platform.txt +/ArduinoAddons/Arduino_1.6.x/hardware/marlin/avr_/platform.local.txt +/ArduinoAddons/Arduino_1.6.x/hardware/marlin/avr_/boards.txt +/ArduinoAddons/Arduino_1.6.x/hardware/marlin/avr_/libraries/U8glib +/ArduinoAddons/Arduino_1.6.x/hardware/marlin/avr_/libraries/SPI +/Firmware/variants/1_75mm_MK1-RAMBo13a-E3Dv6full.h +/Firmware/variants/1_75mm_MK1-RAMBo10a-E3Dv6full.h +/Firmware/variants/1_75mm_MK2-EINY01-E3Dv6full.h.bak +/Firmware/variants/1_75mm_MK2-MultiMaterial-RAMBo13a-E3Dv6full.h +/Firmware/variants/1_75mm_MK2-MultiMaterial-RAMBo10a-E3Dv6full.h +*.bak +/Firmware/Configuration_prusa_backup.h +/Firmware/builds/1_75mm_MK3-EINY04-E3Dv6full From 72accdc5bb83c02594e14e7a9e8dd19cae24c6fe Mon Sep 17 00:00:00 2001 From: PavelSindler Date: Thu, 29 Nov 2018 13:51:24 +0100 Subject: [PATCH 06/45] gitignore update --- .gitignore | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/.gitignore b/.gitignore index 834c746da..3a64286e1 100644 --- a/.gitignore +++ b/.gitignore @@ -16,3 +16,22 @@ Firmware/Doc /html /latex /Doxyfile +/Firmware/builds/1_75mm_MK3-EINY04-E3Dv6full +/Firmware/Configuration_prusa.h.bak +/Firmware/Configuration_prusa_backup.h +/Firmware/ultralcd_implementation_hitachi_HD44780.h.bak +/Firmware/ultralcd.cpp.bak +/Firmware/temperature.cpp.bak +/Firmware/pins.h.bak +/Firmware/Marlin_main.cpp.bak +/Firmware/language_pl.h.bak +/Firmware/language_it.h.bak +/Firmware/language_es.h.bak +/Firmware/language_en.h.bak +/Firmware/language_de.h.bak +/Firmware/language_cz.h.bak +/Firmware/variants/1_75mm_MK2-MultiMaterial-RAMBo13a-E3Dv6full.h +/Firmware/variants/1_75mm_MK2-MultiMaterial-RAMBo10a-E3Dv6full.h +/Firmware/variants/1_75mm_MK2-EINY01-E3Dv6full.h.bak +/Firmware/variants/1_75mm_MK1-RAMBo13a-E3Dv6full.h +/Firmware/variants/1_75mm_MK1-RAMBo10a-E3Dv6full.h From 839de141a37e47c7611c1acc9895161fa0061114 Mon Sep 17 00:00:00 2001 From: PavelSindler Date: Thu, 29 Nov 2018 16:26:49 +0100 Subject: [PATCH 07/45] resolving conflicts --- Firmware/Marlin_main.cpp | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/Firmware/Marlin_main.cpp b/Firmware/Marlin_main.cpp index 5b2794579..fa93facb8 100644 --- a/Firmware/Marlin_main.cpp +++ b/Firmware/Marlin_main.cpp @@ -8267,6 +8267,10 @@ void uvlo_() // are in action. planner_abort_hard(); + // Store the current extruder position. + eeprom_update_float((float*)(EEPROM_UVLO_CURRENT_POSITION_E), st_get_position_mm(E_AXIS)); + eeprom_update_byte((uint8_t*)EEPROM_UVLO_E_ABS, axis_relative_modes[3]?0:1); + // Clean the input command queue. cmdqueue_reset(); card.sdprinting = false; @@ -8322,10 +8326,6 @@ void uvlo_() // for reaching the zero full step before powering off. eeprom_update_word((uint16_t*)(EEPROM_UVLO_Z_MICROSTEPS), z_microsteps); // Store the current position. - // Store the current extruder position. - // eeprom_update_float((float*)(EEPROM_UVLO_CURRENT_POSITION_E), st_get_position_mm(E_AXIS)); - eeprom_update_float((float*)(EEPROM_UVLO_CURRENT_POSITION_E), current_position[E_AXIS]); - eeprom_update_byte((uint8_t*)EEPROM_UVLO_E_ABS, axis_relative_modes[3] ? 0 : 1); eeprom_update_float((float*)(EEPROM_UVLO_CURRENT_POSITION + 0), current_position[X_AXIS]); eeprom_update_float((float*)(EEPROM_UVLO_CURRENT_POSITION + 4), current_position[Y_AXIS]); eeprom_update_float((float*)(EEPROM_UVLO_CURRENT_POSITION_Z), current_position[Z_AXIS]); @@ -8624,10 +8624,9 @@ void restore_print_from_eeprom() { enquecommand(cmd); uint32_t position = eeprom_read_dword((uint32_t*)(EEPROM_FILE_POSITION)); SERIAL_ECHOPGM("Position read from eeprom:"); - MYSERIAL.println(position); - + MYSERIAL.println(position); // E axis relative mode. - enquecommand_P(PSTR("M83")); + enquecommand_P(PSTR("M83")); // Move to the XY print position in logical coordinates, where the print has been killed. strcpy_P(cmd, PSTR("G1 X")); strcat(cmd, ftostr32(eeprom_read_float((float*)(EEPROM_UVLO_CURRENT_POSITION + 0)))); strcat_P(cmd, PSTR(" Y")); strcat(cmd, ftostr32(eeprom_read_float((float*)(EEPROM_UVLO_CURRENT_POSITION + 4)))); From cb334238cc872cbcf634c91441b8ac0a180540af Mon Sep 17 00:00:00 2001 From: Robert Pelnar Date: Thu, 6 Dec 2018 15:18:07 +0100 Subject: [PATCH 08/45] Slow PWM fan @ 62.5Hz --- Firmware/Configuration.h | 3 ++- Firmware/temperature.cpp | 19 +++++++++++-------- 2 files changed, 13 insertions(+), 9 deletions(-) diff --git a/Firmware/Configuration.h b/Firmware/Configuration.h index 3bed653b7..0ca8f601d 100644 --- a/Firmware/Configuration.h +++ b/Firmware/Configuration.h @@ -477,7 +477,8 @@ your extruder heater takes 2 minutes to hit the target on heating. // Use software PWM to drive the fan, as for the heaters. This uses a very low frequency // which is not ass annoying as with the hardware PWM. On the other hand, if this frequency // is too low, you should also increment SOFT_PWM_SCALE. -//#define FAN_SOFT_PWM +#define FAN_SOFT_PWM +#define FAN_SOFT_PWM_BITS 4 //PWM bit resolution = 4bits, freq = 62.5Hz // Incrementing this by 1 will double the software PWM frequency, // affecting heaters, and the fan if FAN_SOFT_PWM is enabled. diff --git a/Firmware/temperature.cpp b/Firmware/temperature.cpp index cae3fada7..98e8aee37 100644 --- a/Firmware/temperature.cpp +++ b/Firmware/temperature.cpp @@ -1024,7 +1024,7 @@ void tp_init() setPwmFrequency(FAN_PIN, 1); // No prescaling. Pwm frequency = F_CPU/256/8 #endif #ifdef FAN_SOFT_PWM - soft_pwm_fan = fanSpeedSoftPwm / 2; + soft_pwm_fan = fanSpeedSoftPwm / (1 << (8 - FAN_SOFT_PWM_BITS)); #endif #endif @@ -1599,12 +1599,15 @@ ISR(TIMER0_COMPB_vect) #if defined(HEATER_BED_PIN) && HEATER_BED_PIN > -1 soft_pwm_b = soft_pwm_bed; if(soft_pwm_b > 0) WRITE(HEATER_BED_PIN,1); else WRITE(HEATER_BED_PIN,0); -#endif -#ifdef FAN_SOFT_PWM - soft_pwm_fan = fanSpeedSoftPwm / 2; - if(soft_pwm_fan > 0) WRITE(FAN_PIN,1); else WRITE(FAN_PIN,0); #endif } +#ifdef FAN_SOFT_PWM + if ((pwm_count & ((1 << FAN_SOFT_PWM_BITS) - 1)) == 0) + { + soft_pwm_fan = fanSpeedSoftPwm / (1 << (8 - FAN_SOFT_PWM_BITS)); + if(soft_pwm_fan > 0) WRITE(FAN_PIN,1); else WRITE(FAN_PIN,0); + } +#endif if(soft_pwm_0 < pwm_count) { WRITE(HEATER_0_PIN,0); @@ -1623,7 +1626,7 @@ ISR(TIMER0_COMPB_vect) if(soft_pwm_b < pwm_count) WRITE(HEATER_BED_PIN,0); #endif #ifdef FAN_SOFT_PWM - if(soft_pwm_fan < pwm_count) WRITE(FAN_PIN,0); + if (soft_pwm_fan < (pwm_count & ((1 << FAN_SOFT_PWM_BITS) - 1))) WRITE(FAN_PIN,0); #endif pwm_count += (1 << SOFT_PWM_SCALE); @@ -1810,8 +1813,8 @@ ISR(TIMER0_COMPB_vect) #endif #ifdef FAN_SOFT_PWM - if (pwm_count == 0){ - soft_pwm_fan = fanSpeedSoftPwm / 2; + if ((pwm_count & ((1 << FAN_SOFT_PWM_BITS) - 1)) == 0) + soft_pwm_fan = fanSpeedSoftPwm / (1 << (8 - FAN_SOFT_PWM_BITS)); if (soft_pwm_fan > 0) WRITE(FAN_PIN,1); else WRITE(FAN_PIN,0); } if (soft_pwm_fan < pwm_count) WRITE(FAN_PIN,0); From 41b78187ca96f55f679cb7a0cff8e499b5749dbd Mon Sep 17 00:00:00 2001 From: Robert Pelnar Date: Thu, 6 Dec 2018 15:27:05 +0100 Subject: [PATCH 09/45] LCD backlight - full brightnes at start --- Firmware/Marlin_main.cpp | 4 ++++ Firmware/pins_Einsy_1_0.h | 5 +---- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/Firmware/Marlin_main.cpp b/Firmware/Marlin_main.cpp index fa93facb8..4cd27ce6d 100644 --- a/Firmware/Marlin_main.cpp +++ b/Firmware/Marlin_main.cpp @@ -974,6 +974,10 @@ void setup() ultralcd_init(); +#if (LCD_BL_PIN != -1) + analogWrite(LCD_BL_PIN, 255); //set full brightnes +#endif //(LCD_BL_PIN != -1) + spi_init(); lcd_splash(); diff --git a/Firmware/pins_Einsy_1_0.h b/Firmware/pins_Einsy_1_0.h index eabdb4abb..35f7ced26 100644 --- a/Firmware/pins_Einsy_1_0.h +++ b/Firmware/pins_Einsy_1_0.h @@ -99,10 +99,7 @@ //#define KILL_PIN 32 - -//#define LCD_PWM_PIN -1//32 // lcd backlight brightnes pwm control pin -//#define LCD_PWM_MAX 0x0f // lcd pwm maximum value (0x07=64Hz, 0x0f=32Hz, 0x1f=16Hz) - +#define LCD_BL_PIN 5 //backlight control pin #define BEEPER 84 // Beeper on AUX-4 #define LCD_PINS_RS 82 #define LCD_PINS_ENABLE 61 // !!! changed from 18 (EINY03) From 6157c3ab3247815414209bcdb9fc6cc8e6af83af Mon Sep 17 00:00:00 2001 From: Robert Pelnar Date: Thu, 6 Dec 2018 15:41:53 +0100 Subject: [PATCH 10/45] New filament sensor --- Firmware/Marlin_main.cpp | 9 +++++++++ Firmware/fsensor.cpp | 13 +++++++++++++ Firmware/variants/1_75mm_MK3-EINSy10a-E3Dv6full.h | 1 + 3 files changed, 23 insertions(+) diff --git a/Firmware/Marlin_main.cpp b/Firmware/Marlin_main.cpp index 4cd27ce6d..5e4d54875 100644 --- a/Firmware/Marlin_main.cpp +++ b/Firmware/Marlin_main.cpp @@ -1813,6 +1813,15 @@ void loop() isPrintPaused ? manage_inactivity(true) : manage_inactivity(false); checkHitEndstops(); lcd_update(0); +#ifdef NEW_FILAMENT_SENSOR + if (mcode_in_progress != 600 && !mmu_enabled) //M600 not in progress + { + if (IS_SD_PRINTING) + { + fsensor_update(); + } + } +#endif //NEW_FILAMENT_SENSOR #ifdef TMC2130 tmc2130_check_overtemp(); if (tmc2130_sg_crash) diff --git a/Firmware/fsensor.cpp b/Firmware/fsensor.cpp index 8eef5a4fe..cddd40819 100644 --- a/Firmware/fsensor.cpp +++ b/Firmware/fsensor.cpp @@ -477,6 +477,18 @@ void fsensor_st_block_chunk(block_t* bl, int cnt) //! If there is still no plausible signal from filament sensor plans M600 (Filament change). void fsensor_update(void) { +#ifdef NEW_FILAMENT_SENSOR + if (digitalRead(A8) == 1) + { + fsensor_stop_and_save_print(); + printf_P(PSTR("fsensor_update - M600\n")); + eeprom_update_byte((uint8_t*)EEPROM_FERROR_COUNT, eeprom_read_byte((uint8_t*)EEPROM_FERROR_COUNT) + 1); + eeprom_update_word((uint16_t*)EEPROM_FERROR_COUNT_TOT, eeprom_read_word((uint16_t*)EEPROM_FERROR_COUNT_TOT) + 1); + enquecommand_front_P(PSTR("FSENSOR_RECOVER")); + enquecommand_front_P((PSTR("M600"))); + fsensor_watch_runout = false; + } +#else //NEW_FILAMENT_SENSOR if (fsensor_enabled && fsensor_watch_runout && (fsensor_err_cnt > FSENSOR_ERR_MAX)) { bool autoload_enabled_tmp = fsensor_autoload_enabled; @@ -527,6 +539,7 @@ void fsensor_update(void) fsensor_autoload_enabled = autoload_enabled_tmp; fsensor_oq_meassure_enabled = oq_meassure_enabled_tmp; } +#endif //NEW_FILAMENT_SENSOR } void fsensor_setup_interrupt(void) diff --git a/Firmware/variants/1_75mm_MK3-EINSy10a-E3Dv6full.h b/Firmware/variants/1_75mm_MK3-EINSy10a-E3Dv6full.h index 4655107c0..9bc491fc8 100644 --- a/Firmware/variants/1_75mm_MK3-EINSy10a-E3Dv6full.h +++ b/Firmware/variants/1_75mm_MK3-EINSy10a-E3Dv6full.h @@ -134,6 +134,7 @@ // Filament sensor #define PAT9125 #define FILAMENT_SENSOR +//#define NEW_FILAMENT_SENSOR // Backlash - //#define BACKLASH_X From e0c1e4a02d45c2d8e81c94833164ace070c6e4fa Mon Sep 17 00:00:00 2001 From: PavelSindler Date: Thu, 24 Jan 2019 01:12:30 +0100 Subject: [PATCH 11/45] version which should on all printer versions: autoload, selftest, filament detection, filament sensors initialization, filament menus --- Firmware/Marlin.h | 1 + Firmware/Marlin_main.cpp | 15 +- Firmware/fsensor.cpp | 131 +++++++++++------- Firmware/mmu.cpp | 71 +++++----- Firmware/mmu.h | 4 +- Firmware/pins_Einsy_1_0.h | 2 +- Firmware/pins_Rambo_1_0.h | 2 +- Firmware/pins_Rambo_1_3.h | 2 +- Firmware/ultralcd.cpp | 6 +- .../variants/1_75mm_MK25-RAMBo10a-E3Dv6full.h | 4 +- .../variants/1_75mm_MK25-RAMBo13a-E3Dv6full.h | 4 +- .../variants/1_75mm_MK3-EINSy10a-E3Dv6full.h | 6 +- 12 files changed, 134 insertions(+), 114 deletions(-) diff --git a/Firmware/Marlin.h b/Firmware/Marlin.h index 6d965a99e..33703708b 100644 --- a/Firmware/Marlin.h +++ b/Firmware/Marlin.h @@ -372,6 +372,7 @@ extern LongTimer safetyTimer; #define PRINT_PERCENT_DONE_INIT 0xff #define PRINTER_ACTIVE (IS_SD_PRINTING || is_usb_printing || isPrintPaused || (custom_message_type == CUSTOM_MSG_TYPE_TEMCAL) || saved_printing || (lcd_commands_type == LCD_COMMAND_V2_CAL) || card.paused || mmu_print_saved) +#define CHECK_FSENSOR ((IS_SD_PRINTING || is_usb_printing) && (mcode_in_progress != 600) && !saved_printing && e_active()) extern void calculate_extruder_multipliers(); diff --git a/Firmware/Marlin_main.cpp b/Firmware/Marlin_main.cpp index 306d76903..c3ae614c9 100644 --- a/Firmware/Marlin_main.cpp +++ b/Firmware/Marlin_main.cpp @@ -1615,7 +1615,6 @@ void setup() } #endif //UVLO_SUPPORT - KEEPALIVE_STATE(NOT_BUSY); #ifdef WATCHDOG wdt_enable(WDTO_4S); @@ -1835,15 +1834,6 @@ void loop() isPrintPaused ? manage_inactivity(true) : manage_inactivity(false); checkHitEndstops(); lcd_update(0); -#ifdef NEW_FILAMENT_SENSOR - if (mcode_in_progress != 600 && !mmu_enabled) //M600 not in progress - { - if (IS_SD_PRINTING) - { - fsensor_update(); - } - } -#endif //NEW_FILAMENT_SENSOR #ifdef TMC2130 tmc2130_check_overtemp(); if (tmc2130_sg_crash) @@ -3462,11 +3452,11 @@ void process_commands() } #endif //BACKLASH_Y #endif //TMC2130 -#ifdef PAT9125 +#ifdef FILAMENT_SENSOR else if (code_seen("FSENSOR_RECOVER")) { //! FSENSOR_RECOVER fsensor_restore_print_and_continue(); } -#endif //PAT9125 +#endif //FILAMENT_SENSOR else if(code_seen("PRUSA")){ if (code_seen("Ping")) { //! PRUSA Ping if (farm_mode) { @@ -7113,7 +7103,6 @@ if((eSoundMode==e_SOUND_MODE_LOUD)||(eSoundMode==e_SOUND_MODE_ONCE)) dcode_8(); break; case 9: //! D9 - Read/Write ADC dcode_9(); break; - case 10: //! D10 - XYZ calibration = OK dcode_10(); break; diff --git a/Firmware/fsensor.cpp b/Firmware/fsensor.cpp index cddd40819..0c511a827 100644 --- a/Firmware/fsensor.cpp +++ b/Firmware/fsensor.cpp @@ -13,6 +13,7 @@ #include "ultralcd.h" #include "ConfigurationStore.h" #include "mmu.h" +#include "cardreader.h" //! @name Basic parameters //! @{ @@ -120,17 +121,20 @@ void fsensor_stop_and_save_print(void) void fsensor_restore_print_and_continue(void) { printf_P(PSTR("fsensor_restore_print_and_continue\n")); - fsensor_watch_runout = true; - fsensor_err_cnt = 0; + fsensor_watch_runout = true; + fsensor_err_cnt = 0; restore_print_from_ram_and_continue(0); //XYZ = orig, E - no change } void fsensor_init(void) { +#ifdef PAT9125 uint8_t pat9125 = pat9125_init(); printf_P(PSTR("PAT9125_init:%hhu\n"), pat9125); +#endif //PAT9125 uint8_t fsensor = eeprom_read_byte((uint8_t*)EEPROM_FSENSOR); fsensor_autoload_enabled=eeprom_read_byte((uint8_t*)EEPROM_FSENS_AUTOLOAD_ENABLED); +#ifdef PAT9125 uint8_t oq_meassure_enabled = eeprom_read_byte((uint8_t*)EEPROM_FSENS_OQ_MEASS_ENABLED); fsensor_oq_meassure_enabled = (oq_meassure_enabled == 1)?true:false; fsensor_chunk_len = (int16_t)(FSENSOR_CHUNK_LEN * cs.axis_steps_per_unit[E_AXIS]); @@ -142,15 +146,19 @@ void fsensor_init(void) } else fsensor_not_responding = false; +#endif //PAT9125 if (fsensor) fsensor_enable(); else fsensor_disable(); printf_P(PSTR("FSensor %S\n"), (fsensor_enabled?PSTR("ENABLED"):PSTR("DISABLED\n"))); + if (check_for_ir_sensor()) ir_sensor_detected = true; + } bool fsensor_enable(void) { +#ifdef PAT9125 if (mmu_enabled == false) { //filament sensor is pat9125, enable only if it is working uint8_t pat9125 = pat9125_init(); printf_P(PSTR("PAT9125_init:%hhu\n"), pat9125); @@ -172,6 +180,11 @@ bool fsensor_enable(void) eeprom_update_byte((uint8_t*)EEPROM_FSENSOR, 0x01); FSensorStateMenu = 1; } +#else + fsensor_enabled = true; + eeprom_update_byte((uint8_t*)EEPROM_FSENSOR, 0x01); + FSensorStateMenu = 1; +#endif return fsensor_enabled; } @@ -223,6 +236,7 @@ void fsensor_autoload_check_start(void) void fsensor_autoload_check_stop(void) { +#ifdef PAT9125 // puts_P(_N("fsensor_autoload_check_stop\n")); if (!fsensor_enabled) return; // puts_P(_N("fsensor_autoload_check_stop 1\n")); @@ -234,12 +248,23 @@ void fsensor_autoload_check_stop(void) fsensor_watch_autoload = false; fsensor_watch_runout = true; fsensor_err_cnt = 0; +#endif //PAT9125 } bool fsensor_check_autoload(void) { if (!fsensor_enabled) return false; if (!fsensor_autoload_enabled) return false; + if (ir_sensor_detected) { + if (digitalRead(IR_SENSOR_PIN) == 1) { + fsensor_watch_autoload = true; + } + else if (fsensor_watch_autoload == true) { + fsensor_watch_autoload = false; + return true; + } + } +#ifdef PAT9125 if (!fsensor_watch_autoload) { fsensor_autoload_check_start(); @@ -283,6 +308,7 @@ bool fsensor_check_autoload(void) // puts_P(_N("fsensor_check_autoload = true !!!\n")); return true; } +#endif //PAT9125 return false; } @@ -362,7 +388,7 @@ bool fsensor_oq_result(void) ISR(FSENSOR_INT_PIN_VECT) { - if (mmu_enabled) return; + if (mmu_enabled || ir_sensor_detected) return; if (!((fsensor_int_pin_old ^ FSENSOR_INT_PIN_PIN_REG) & FSENSOR_INT_PIN_MASK)) return; fsensor_int_pin_old = FSENSOR_INT_PIN_PIN_REG; static bool _lock = false; @@ -477,29 +503,18 @@ void fsensor_st_block_chunk(block_t* bl, int cnt) //! If there is still no plausible signal from filament sensor plans M600 (Filament change). void fsensor_update(void) { -#ifdef NEW_FILAMENT_SENSOR - if (digitalRead(A8) == 1) - { - fsensor_stop_and_save_print(); - printf_P(PSTR("fsensor_update - M600\n")); - eeprom_update_byte((uint8_t*)EEPROM_FERROR_COUNT, eeprom_read_byte((uint8_t*)EEPROM_FERROR_COUNT) + 1); - eeprom_update_word((uint16_t*)EEPROM_FERROR_COUNT_TOT, eeprom_read_word((uint16_t*)EEPROM_FERROR_COUNT_TOT) + 1); - enquecommand_front_P(PSTR("FSENSOR_RECOVER")); - enquecommand_front_P((PSTR("M600"))); - fsensor_watch_runout = false; - } -#else //NEW_FILAMENT_SENSOR - if (fsensor_enabled && fsensor_watch_runout && (fsensor_err_cnt > FSENSOR_ERR_MAX)) - { - bool autoload_enabled_tmp = fsensor_autoload_enabled; - fsensor_autoload_enabled = false; - bool oq_meassure_enabled_tmp = fsensor_oq_meassure_enabled; - fsensor_oq_meassure_enabled = true; +#ifdef PAT9125 + if (fsensor_enabled && fsensor_watch_runout && (fsensor_err_cnt > FSENSOR_ERR_MAX)) + { + bool autoload_enabled_tmp = fsensor_autoload_enabled; + fsensor_autoload_enabled = false; + bool oq_meassure_enabled_tmp = fsensor_oq_meassure_enabled; + fsensor_oq_meassure_enabled = true; - fsensor_stop_and_save_print(); + fsensor_stop_and_save_print(); - fsensor_err_cnt = 0; - fsensor_oq_meassure_start(0); + fsensor_err_cnt = 0; + fsensor_oq_meassure_start(0); enquecommand_front_P((PSTR("G1 E-3 F200"))); process_commands(); @@ -507,39 +522,49 @@ void fsensor_update(void) cmdqueue_pop_front(); st_synchronize(); - enquecommand_front_P((PSTR("G1 E3 F200"))); - process_commands(); - KEEPALIVE_STATE(IN_HANDLER); - cmdqueue_pop_front(); - st_synchronize(); + enquecommand_front_P((PSTR("G1 E3 F200"))); + process_commands(); + KEEPALIVE_STATE(IN_HANDLER); + cmdqueue_pop_front(); + st_synchronize(); - uint8_t err_cnt = fsensor_err_cnt; - fsensor_oq_meassure_stop(); + uint8_t err_cnt = fsensor_err_cnt; + fsensor_oq_meassure_stop(); - bool err = false; - err |= (err_cnt > 1); + bool err = false; + err |= (err_cnt > 1); - err |= (fsensor_oq_er_sum > 2); - err |= (fsensor_oq_yd_sum < (4 * FSENSOR_OQ_MIN_YD)); + err |= (fsensor_oq_er_sum > 2); + err |= (fsensor_oq_yd_sum < (4 * FSENSOR_OQ_MIN_YD)); - if (!err) - { - printf_P(PSTR("fsensor_err_cnt = 0\n")); - fsensor_restore_print_and_continue(); - } - else - { - printf_P(PSTR("fsensor_update - M600\n")); - eeprom_update_byte((uint8_t*)EEPROM_FERROR_COUNT, eeprom_read_byte((uint8_t*)EEPROM_FERROR_COUNT) + 1); - eeprom_update_word((uint16_t*)EEPROM_FERROR_COUNT_TOT, eeprom_read_word((uint16_t*)EEPROM_FERROR_COUNT_TOT) + 1); - enquecommand_front_P(PSTR("FSENSOR_RECOVER")); - enquecommand_front_P((PSTR("M600"))); - fsensor_watch_runout = false; - } - fsensor_autoload_enabled = autoload_enabled_tmp; - fsensor_oq_meassure_enabled = oq_meassure_enabled_tmp; - } -#endif //NEW_FILAMENT_SENSOR + if (!err) + { + printf_P(PSTR("fsensor_err_cnt = 0\n")); + fsensor_restore_print_and_continue(); + } + else + { + printf_P(PSTR("fsensor_update - M600\n")); + eeprom_update_byte((uint8_t*)EEPROM_FERROR_COUNT, eeprom_read_byte((uint8_t*)EEPROM_FERROR_COUNT) + 1); + eeprom_update_word((uint16_t*)EEPROM_FERROR_COUNT_TOT, eeprom_read_word((uint16_t*)EEPROM_FERROR_COUNT_TOT) + 1); + enquecommand_front_P(PSTR("FSENSOR_RECOVER")); + enquecommand_front_P((PSTR("M600"))); + fsensor_watch_runout = false; + } + fsensor_autoload_enabled = autoload_enabled_tmp; + fsensor_oq_meassure_enabled = oq_meassure_enabled_tmp; + } +#else //PAT9125 + if ((digitalRead(IR_SENSOR_PIN) == 1) && CHECK_FSENSOR && fsensor_enabled && ir_sensor_detected) + { + fsensor_stop_and_save_print(); + printf_P(PSTR("fsensor_update - M600\n")); + eeprom_update_byte((uint8_t*)EEPROM_FERROR_COUNT, eeprom_read_byte((uint8_t*)EEPROM_FERROR_COUNT) + 1); + eeprom_update_word((uint16_t*)EEPROM_FERROR_COUNT_TOT, eeprom_read_word((uint16_t*)EEPROM_FERROR_COUNT_TOT) + 1); + enquecommand_front_P(PSTR("FSENSOR_RECOVER")); + enquecommand_front_P((PSTR("M600"))); + } +#endif //PAT9125 } void fsensor_setup_interrupt(void) diff --git a/Firmware/mmu.cpp b/Firmware/mmu.cpp index 6433eafb5..2b5bd3ca5 100644 --- a/Firmware/mmu.cpp +++ b/Firmware/mmu.cpp @@ -19,8 +19,6 @@ #include "tmc2130.h" #endif //TMC2130 -#define CHECK_FINDA ((IS_SD_PRINTING || is_usb_printing) && (mcode_in_progress != 600) && !saved_printing && e_active()) - #define MMU_TODELAY 100 #define MMU_TIMEOUT 10 #define MMU_CMD_TIMEOUT 45000ul //5min timeout for mmu commands (except P0) @@ -41,7 +39,7 @@ uint8_t mmu_cmd = 0; //idler ir sensor uint8_t mmu_idl_sens = 0; -bool mmu_idler_sensor_detected = false; +bool ir_sensor_detected = false; bool mmu_loading_flag = false; uint8_t mmu_extruder = MMU_FILAMENT_UNKNOWN; @@ -116,23 +114,31 @@ void mmu_init(void) _delay_ms(10); //wait 10ms for sure mmu_reset(); //reset mmu (HW or SW), do not wait for response mmu_state = -1; - PIN_INP(MMU_IDLER_SENSOR_PIN); //input mode - PIN_SET(MMU_IDLER_SENSOR_PIN); //pullup + PIN_INP(IR_SENSOR_PIN); //input mode + PIN_SET(IR_SENSOR_PIN); //pullup } //returns true if idler IR sensor was detected, otherwise returns false -bool check_for_idler_sensor() +bool check_for_ir_sensor() { +#ifdef IR_SENSOR + return true; +#endif //IR_SENSOR + bool detected = false; - //if MMU_IDLER_SENSOR_PIN input is low and pat9125sensor is not present we detected idler sensor - if ((PIN_GET(MMU_IDLER_SENSOR_PIN) == 0) && fsensor_not_responding) - { - detected = true; - //printf_P(PSTR("Idler IR sensor detected\n")); + //if IR_SENSOR_PIN input is low and pat9125sensor is not present we detected idler sensor + if ((PIN_GET(IR_SENSOR_PIN) == 0) +#ifdef PAT9125 + && fsensor_not_responding +#endif //PAT9125 + ) + { + detected = true; + //printf_P(PSTR("Idler IR sensor detected\n")); } else { - //printf_P(PSTR("Idler IR sensor not detected\n")); + //printf_P(PSTR("Idler IR sensor not detected\n")); } return detected; } @@ -224,8 +230,6 @@ void mmu_loop(void) #endif //MMU_DEBUG && MMU_FINDA_DEBUG puts_P(PSTR("MMU - ENABLED")); mmu_enabled = true; - //if we have filament loaded into the nozzle, we can decide if printer has idler sensor right now; otherwise we will will wait till start of T-code so it will be detected on beginning of second T-code - if(check_for_idler_sensor()) mmu_idler_sensor_detected = true; mmu_state = 1; } return; @@ -241,7 +245,7 @@ void mmu_loop(void) mmu_printf_P(PSTR("T%d\n"), filament); mmu_state = 3; // wait for response mmu_fil_loaded = true; - if(mmu_idler_sensor_detected) mmu_idl_sens = 1; //if idler sensor detected, use it for T-code + if(ir_sensor_detected) mmu_idl_sens = 1; //if idler sensor detected, use it for T-code } else if ((mmu_cmd >= MMU_CMD_L0) && (mmu_cmd <= MMU_CMD_L4)) { @@ -259,7 +263,7 @@ void mmu_loop(void) #endif //MMU_DEBUG mmu_puts_P(PSTR("C0\n")); //send 'continue loading' mmu_state = 3; - if(mmu_idler_sensor_detected) mmu_idl_sens = 1; //if idler sensor detected use it for C0 code + if(ir_sensor_detected) mmu_idl_sens = 1; //if idler sensor detected use it for C0 code } else if (mmu_cmd == MMU_CMD_U0) { @@ -301,7 +305,9 @@ void mmu_loop(void) } else if ((mmu_last_response + 300) < millis()) //request every 300ms { - if(check_for_idler_sensor()) mmu_idler_sensor_detected = true; +#ifndef IR_SENSOR + if(check_for_ir_sensor()) ir_sensor_detected = true; +#endif //IR_SENSOR not defined #if defined MMU_DEBUG && defined MMU_FINDA_DEBUG puts_P(PSTR("MMU <= 'P0'")); #endif //MMU_DEBUG && MMU_FINDA_DEBUG @@ -317,7 +323,7 @@ void mmu_loop(void) printf_P(PSTR("MMU => '%dok'\n"), mmu_finda); #endif //MMU_DEBUG && MMU_FINDA_DEBUG //printf_P(PSTR("Eact: %d\n"), int(e_active())); - if (!mmu_finda && CHECK_FINDA && fsensor_enabled) { + if (!mmu_finda && CHECK_FSENSOR && fsensor_enabled) { fsensor_stop_and_save_print(); enquecommand_front_P(PSTR("FSENSOR_RECOVER")); //then recover if (lcd_autoDepleteEnabled()) enquecommand_front_P(PSTR("M600 AUTO")); //save print and run M600 command @@ -333,21 +339,18 @@ void mmu_loop(void) } return; case 3: //response to mmu commands - if (mmu_idler_sensor_detected) { - if (mmu_idl_sens) + if (mmu_idl_sens && ir_sensor_detected) { + if (PIN_GET(IR_SENSOR_PIN) == 0 && mmu_loading_flag) { - if (PIN_GET(MMU_IDLER_SENSOR_PIN) == 0 && mmu_loading_flag) - { #ifdef MMU_DEBUG printf_P(PSTR("MMU <= 'A'\n")); #endif //MMU_DEBUG mmu_puts_P(PSTR("A\n")); //send 'abort' request mmu_idl_sens = 0; //printf_P(PSTR("MMU IDLER_SENSOR = 0 - ABORT\n")); - } - //else - //printf_P(PSTR("MMU IDLER_SENSOR = 1 - WAIT\n")); } + //else + //printf_P(PSTR("MMU IDLER_SENSOR = 1 - WAIT\n")); } if (mmu_rx_ok() > 0) { @@ -441,7 +444,7 @@ void mmu_load_step() { bool mmu_get_response(uint8_t move) { mmu_loading_flag = false; - if (!mmu_idler_sensor_detected) move = MMU_NO_MOVE; + if (!ir_sensor_detected) move = MMU_NO_MOVE; printf_P(PSTR("mmu_get_response - begin move:%d\n"), move); KEEPALIVE_STATE(IN_PROCESS); @@ -471,10 +474,10 @@ bool mmu_get_response(uint8_t move) mmu_loading_flag = true; mmu_load_step(); //don't rely on "ok" signal from mmu unit; if filament detected by idler sensor during loading stop loading movements to prevent infinite loading - if (PIN_GET(MMU_IDLER_SENSOR_PIN) == 0) move = MMU_NO_MOVE; + if (PIN_GET(IR_SENSOR_PIN) == 0) move = MMU_NO_MOVE; break; case MMU_UNLOAD_MOVE: - if (PIN_GET(MMU_IDLER_SENSOR_PIN) == 0) //filament is still detected by idler sensor, printer helps with unlading + if (PIN_GET(IR_SENSOR_PIN) == 0) //filament is still detected by idler sensor, printer helps with unlading { printf_P(PSTR("Unload 1\n")); current_position[E_AXIS] = current_position[E_AXIS] - MMU_LOAD_FEEDRATE * MMU_LOAD_TIME_MS*0.001; @@ -489,7 +492,7 @@ bool mmu_get_response(uint8_t move) } break; case MMU_TCODE_MOVE: //first do unload and then continue with infinite loading movements - if (PIN_GET(MMU_IDLER_SENSOR_PIN) == 0) //filament detected by idler sensor, we must unload first + if (PIN_GET(IR_SENSOR_PIN) == 0) //filament detected by idler sensor, we must unload first { printf_P(PSTR("Unload 2\n")); current_position[E_AXIS] = current_position[E_AXIS] - MMU_LOAD_FEEDRATE * MMU_LOAD_TIME_MS*0.001; @@ -674,7 +677,7 @@ void mmu_load_to_nozzle() bool saved_e_relative_mode = axis_relative_modes[E_AXIS]; if (!saved_e_relative_mode) axis_relative_modes[E_AXIS] = true; - if (mmu_idler_sensor_detected) + if (ir_sensor_detected) { current_position[E_AXIS] += 3.0f; } @@ -1330,16 +1333,16 @@ void mmu_eject_filament(uint8_t filament, bool recover) void mmu_continue_loading() { - if (mmu_idler_sensor_detected) { + if (ir_sensor_detected) { for (uint8_t i = 0; i < MMU_IDLER_SENSOR_ATTEMPTS_NR; i++) { - if (PIN_GET(MMU_IDLER_SENSOR_PIN) == 0) return; + if (PIN_GET(IR_SENSOR_PIN) == 0) return; #ifdef MMU_DEBUG printf_P(PSTR("Additional load attempt nr. %d\n"), i); #endif // MMU_DEBUG mmu_command(MMU_CMD_C0); manage_response(true, true, MMU_LOAD_MOVE); } - if (PIN_GET(MMU_IDLER_SENSOR_PIN) != 0) { + if (PIN_GET(IR_SENSOR_PIN) != 0) { uint8_t mmu_load_fail = eeprom_read_byte((uint8_t*)EEPROM_MMU_LOAD_FAIL); uint16_t mmu_load_fail_tot = eeprom_read_word((uint16_t*)EEPROM_MMU_LOAD_FAIL_TOT); if(mmu_load_fail < 255) eeprom_update_byte((uint8_t*)EEPROM_MMU_LOAD_FAIL, mmu_load_fail + 1); @@ -1365,7 +1368,7 @@ void mmu_continue_loading() mmu_fil_loaded = false; //so we can retry same T-code again } } - else { //mmu_idler_sensor_detected == false + else { //mmu_ir_sensor_detected == false mmu_command(MMU_CMD_C0); } } diff --git a/Firmware/mmu.h b/Firmware/mmu.h index 30f35599f..6e7704d64 100644 --- a/Firmware/mmu.h +++ b/Firmware/mmu.h @@ -11,7 +11,7 @@ extern uint8_t mmu_extruder; extern uint8_t tmp_extruder; extern int8_t mmu_finda; -extern bool mmu_idler_sensor_detected; +extern bool ir_sensor_detected; extern bool mmu_loading_flag; extern int16_t mmu_version; @@ -56,7 +56,7 @@ extern int mmu_printf_P(const char* format, ...); extern int8_t mmu_rx_ok(void); -extern bool check_for_idler_sensor(); +extern bool check_for_ir_sensor(); extern void mmu_init(void); diff --git a/Firmware/pins_Einsy_1_0.h b/Firmware/pins_Einsy_1_0.h index 769f61629..005683c01 100644 --- a/Firmware/pins_Einsy_1_0.h +++ b/Firmware/pins_Einsy_1_0.h @@ -118,7 +118,7 @@ #define TACH_0 79 // !!! changed from 81 (EINY03) #define TACH_1 80 -#define MMU_IDLER_SENSOR_PIN 62 //idler sensor @PK0 (digital pin 62/A8) +#define IR_SENSOR_PIN 62 //idler sensor @PK0 (digital pin 62/A8) // Support for an 8 bit logic analyzer, for example the Saleae. // Channels 0-2 are fast, they could generate 2.667Mhz waveform with a software loop. diff --git a/Firmware/pins_Rambo_1_0.h b/Firmware/pins_Rambo_1_0.h index b37ab641d..b973fd302 100644 --- a/Firmware/pins_Rambo_1_0.h +++ b/Firmware/pins_Rambo_1_0.h @@ -102,7 +102,7 @@ #define SDCARDDETECT 72 -#define MMU_IDLER_SENSOR_PIN 62 //idler sensor @PK0 (digital pin 62/A8) +#define IR_SENSOR_PIN 62 //idler sensor @PK0 (digital pin 62/A8) // Support for an 8 bit logic analyzer, for example the Saleae. // Channels 0-2 are fast, they could generate 2.667Mhz waveform with a software loop. diff --git a/Firmware/pins_Rambo_1_3.h b/Firmware/pins_Rambo_1_3.h index 297735c18..d684519e2 100644 --- a/Firmware/pins_Rambo_1_3.h +++ b/Firmware/pins_Rambo_1_3.h @@ -102,7 +102,7 @@ #define SDCARDDETECT 15 -#define MMU_IDLER_SENSOR_PIN 62 //idler sensor @PK0 (digital pin 62/A8) +#define IR_SENSOR_PIN 62 //idler sensor @PK0 (digital pin 62/A8) // Support for an 8 bit logic analyzer, for example the Saleae. // Channels 0-2 are fast, they could generate 2.667Mhz waveform with a software loop. diff --git a/Firmware/ultralcd.cpp b/Firmware/ultralcd.cpp index 937ccd5a1..371faec4f 100644 --- a/Firmware/ultralcd.cpp +++ b/Firmware/ultralcd.cpp @@ -3656,8 +3656,8 @@ static void lcd_show_sensors_state() if (mmu_enabled) { finda_state = mmu_finda; } - if (mmu_idler_sensor_detected) { - idler_state = !PIN_GET(MMU_IDLER_SENSOR_PIN); + if (ir_sensor_detected) { + idler_state = !PIN_GET(IR_SENSOR_PIN); } lcd_puts_at_P(0, 0, _i("Sensor state")); lcd_puts_at_P(1, 1, _i("PINDA:")); @@ -6418,7 +6418,7 @@ bool lcd_selftest() if (_result) { _progress = lcd_selftest_screen(8, _progress, 3, true, 2000); //bed ok -#ifdef FILAMENT_SENSOR +#ifdef PAT9125 if (mmu_enabled == false) { _progress = lcd_selftest_screen(9, _progress, 3, true, 2000); //check filaments sensor _result = lcd_selftest_fsensor(); diff --git a/Firmware/variants/1_75mm_MK25-RAMBo10a-E3Dv6full.h b/Firmware/variants/1_75mm_MK25-RAMBo10a-E3Dv6full.h index 0472a1082..a0323213c 100644 --- a/Firmware/variants/1_75mm_MK25-RAMBo10a-E3Dv6full.h +++ b/Firmware/variants/1_75mm_MK25-RAMBo10a-E3Dv6full.h @@ -110,8 +110,10 @@ #define DEFAULT_SAFETYTIMER_TIME_MINS 30 // Filament sensor -#define PAT9125 #define FILAMENT_SENSOR +#define PAT9125 +#define IR_SENSOR + #define DEBUG_DCODE3 diff --git a/Firmware/variants/1_75mm_MK25-RAMBo13a-E3Dv6full.h b/Firmware/variants/1_75mm_MK25-RAMBo13a-E3Dv6full.h index 615d34826..ba3de9104 100644 --- a/Firmware/variants/1_75mm_MK25-RAMBo13a-E3Dv6full.h +++ b/Firmware/variants/1_75mm_MK25-RAMBo13a-E3Dv6full.h @@ -111,8 +111,10 @@ #define DEFAULT_SAFETYTIMER_TIME_MINS 30 // Filament sensor -#define PAT9125 #define FILAMENT_SENSOR +#define PAT9125 +#define IR_SENSOR + #define DEBUG_DCODE3 diff --git a/Firmware/variants/1_75mm_MK3-EINSy10a-E3Dv6full.h b/Firmware/variants/1_75mm_MK3-EINSy10a-E3Dv6full.h index a59d78990..e1ff0036c 100644 --- a/Firmware/variants/1_75mm_MK3-EINSy10a-E3Dv6full.h +++ b/Firmware/variants/1_75mm_MK3-EINSy10a-E3Dv6full.h @@ -132,10 +132,9 @@ #define DEFAULT_SAFETYTIMER_TIME_MINS 30 // Filament sensor -#define PAT9125 #define FILAMENT_SENSOR -//#define NEW_FILAMENT_SENSOR - +//#define PAT9125 +#define IR_SENSOR // Backlash - //#define BACKLASH_X //#define BACKLASH_Y @@ -615,7 +614,6 @@ #define MMU_REQUIRED_FW_BUILDNR 83 #define MMU_HWRESET #define MMU_DEBUG //print communication between MMU2 and printer on serial - #define MMU_IDLER_SENSOR_ATTEMPTS_NR 21 //max. number of attempts to load filament if first load failed; value for max bowden length and case when loading fails right at the beginning #endif //__CONFIGURATION_PRUSA_H From ad650241470214fb9aa72a059959b72567f999fd Mon Sep 17 00:00:00 2001 From: PavelSindler Date: Thu, 24 Jan 2019 13:57:52 +0100 Subject: [PATCH 12/45] selftest: filament sensor check change --- Firmware/ultralcd.cpp | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/Firmware/ultralcd.cpp b/Firmware/ultralcd.cpp index 371faec4f..26b6ee760 100644 --- a/Firmware/ultralcd.cpp +++ b/Firmware/ultralcd.cpp @@ -6423,16 +6423,14 @@ bool lcd_selftest() _progress = lcd_selftest_screen(9, _progress, 3, true, 2000); //check filaments sensor _result = lcd_selftest_fsensor(); } -#endif // FILAMENT_SENSOR } if (_result) { -#ifdef FILAMENT_SENSOR if (mmu_enabled == false) { _progress = lcd_selftest_screen(10, _progress, 3, true, 2000); //fil sensor OK } -#endif // FILAMENT_SENSOR +#endif // PAT9125 _progress = lcd_selftest_screen(11, _progress, 3, true, 5000); //all correct } else From da2c9638930bc181318e7a822460f7b523e759ed Mon Sep 17 00:00:00 2001 From: PavelSindler Date: Thu, 24 Jan 2019 16:00:52 +0100 Subject: [PATCH 13/45] conditional compilation improved: fsensor_autoload_check_stop() and fsensor_autoload_check_start(); M600 "filament not responding" error on printers with ir sensor fixed --- Firmware/Marlin_main.cpp | 12 ++++++++---- Firmware/fsensor.cpp | 7 +++++-- Firmware/fsensor.h | 2 ++ 3 files changed, 15 insertions(+), 6 deletions(-) diff --git a/Firmware/Marlin_main.cpp b/Firmware/Marlin_main.cpp index c3ae614c9..066eef27f 100644 --- a/Firmware/Marlin_main.cpp +++ b/Firmware/Marlin_main.cpp @@ -7471,7 +7471,9 @@ void manage_inactivity(bool ignore_stepper_queue/*=false*/) //default argument s { if (fsensor_check_autoload()) { +#ifdef PAT9125 fsensor_autoload_check_stop(); +#endif //PAT9125 if (degHotend0() > EXTRUDE_MINTEMP) { if ((eSoundMode == e_SOUND_MODE_LOUD) || (eSoundMode == e_SOUND_MODE_ONCE)) @@ -7491,7 +7493,9 @@ void manage_inactivity(bool ignore_stepper_queue/*=false*/) //default argument s } else { +#ifdef PAT9125 fsensor_autoload_check_stop(); +#endif //PAT9125 fsensor_update(); } } @@ -9183,9 +9187,9 @@ void M600_load_filament() { //load_filament_time = millis(); KEEPALIVE_STATE(PAUSED_FOR_USER); -#ifdef FILAMENT_SENSOR +#ifdef PAT9125 fsensor_autoload_check_start(); -#endif //FILAMENT_SENSOR +#endif //PAT9125 while(!lcd_clicked()) { manage_heater(); @@ -9201,9 +9205,9 @@ if((eSoundMode==e_SOUND_MODE_LOUD)||(eSoundMode==e_SOUND_MODE_ONCE)) } #endif //FILAMENT_SENSOR } -#ifdef FILAMENT_SENSOR +#ifdef PAT9125 fsensor_autoload_check_stop(); -#endif //FILAMENT_SENSOR +#endif //PAT9125 KEEPALIVE_STATE(IN_HANDLER); #ifdef FSENSOR_QUALITY diff --git a/Firmware/fsensor.cpp b/Firmware/fsensor.cpp index 0c511a827..c5f8ee40b 100644 --- a/Firmware/fsensor.cpp +++ b/Firmware/fsensor.cpp @@ -197,7 +197,9 @@ void fsensor_disable(void) void fsensor_autoload_set(bool State) { +#ifdef PAT9125 if (!State) fsensor_autoload_check_stop(); +#endif //PAT9125 fsensor_autoload_enabled = State; eeprom_update_byte((unsigned char *)EEPROM_FSENS_AUTOLOAD_ENABLED, fsensor_autoload_enabled); } @@ -210,6 +212,7 @@ void pciSetup(byte pin) PCICR |= bit (digitalPinToPCICRbit(pin)); // enable interrupt for the group } +#ifdef PAT9125 void fsensor_autoload_check_start(void) { // puts_P(_N("fsensor_autoload_check_start\n")); @@ -236,7 +239,7 @@ void fsensor_autoload_check_start(void) void fsensor_autoload_check_stop(void) { -#ifdef PAT9125 + // puts_P(_N("fsensor_autoload_check_stop\n")); if (!fsensor_enabled) return; // puts_P(_N("fsensor_autoload_check_stop 1\n")); @@ -248,8 +251,8 @@ void fsensor_autoload_check_stop(void) fsensor_watch_autoload = false; fsensor_watch_runout = true; fsensor_err_cnt = 0; -#endif //PAT9125 } +#endif //PAT9125 bool fsensor_check_autoload(void) { diff --git a/Firmware/fsensor.h b/Firmware/fsensor.h index b60522d58..3237b5a70 100644 --- a/Firmware/fsensor.h +++ b/Firmware/fsensor.h @@ -41,8 +41,10 @@ extern void fsensor_setup_interrupt(void); //! @name autoload support //! @{ +#ifdef PAT9125 extern void fsensor_autoload_check_start(void); extern void fsensor_autoload_check_stop(void); +#endif //PAT9125 extern bool fsensor_check_autoload(void); //! @} From 6b1cf99066fdd4a104ff0b8378480fb34d707462 Mon Sep 17 00:00:00 2001 From: PavelSindler Date: Thu, 24 Jan 2019 16:14:02 +0100 Subject: [PATCH 14/45] conditional compilation updated --- Firmware/Marlin_main.cpp | 4 ++-- Firmware/fsensor.cpp | 34 ++++++++++++++++++---------------- Firmware/fsensor.h | 4 ++-- 3 files changed, 22 insertions(+), 20 deletions(-) diff --git a/Firmware/Marlin_main.cpp b/Firmware/Marlin_main.cpp index 066eef27f..ee1ee55ae 100644 --- a/Firmware/Marlin_main.cpp +++ b/Firmware/Marlin_main.cpp @@ -1481,9 +1481,9 @@ void setup() setup_fan_interrupt(); #endif //DEBUG_DISABLE_FANCHECK -#ifdef FILAMENT_SENSOR +#ifdef PAT9125 fsensor_setup_interrupt(); -#endif //FILAMENT_SENSOR +#endif //PAT9125 for (int i = 0; i<4; i++) EEPROM_read_B(EEPROM_BOWDEN_LENGTH + i * 2, &bowden_length[i]); #ifndef DEBUG_DISABLE_STARTMSGS diff --git a/Firmware/fsensor.cpp b/Firmware/fsensor.cpp index c5f8ee40b..c0654ee2f 100644 --- a/Firmware/fsensor.cpp +++ b/Firmware/fsensor.cpp @@ -388,7 +388,7 @@ bool fsensor_oq_result(void) printf_P(_N("fsensor_oq_result %S\n"), (res?_OK:_NG)); return res; } - +#ifdef PAT9125 ISR(FSENSOR_INT_PIN_VECT) { if (mmu_enabled || ir_sensor_detected) return; @@ -475,6 +475,23 @@ ISR(FSENSOR_INT_PIN_VECT) return; } +void fsensor_setup_interrupt(void) +{ + + pinMode(FSENSOR_INT_PIN, OUTPUT); + digitalWrite(FSENSOR_INT_PIN, LOW); + fsensor_int_pin_old = 0; + + //pciSetup(FSENSOR_INT_PIN); +// !!! "pciSetup()" does not provide the correct results for some MCU pins +// so interrupt registers settings: + FSENSOR_INT_PIN_PCMSK_REG |= bit(FSENSOR_INT_PIN_PCMSK_BIT); // enable corresponding PinChangeInterrupt (individual pin) + PCIFR |= bit(FSENSOR_INT_PIN_PCICR_BIT); // clear previous occasional interrupt (set of pins) + PCICR |= bit(FSENSOR_INT_PIN_PCICR_BIT); // enable corresponding PinChangeInterrupt (set of pins) +} + +#endif //PAT9125 + void fsensor_st_block_begin(block_t* bl) { if (!fsensor_enabled) return; @@ -569,18 +586,3 @@ void fsensor_update(void) } #endif //PAT9125 } - -void fsensor_setup_interrupt(void) -{ - - pinMode(FSENSOR_INT_PIN, OUTPUT); - digitalWrite(FSENSOR_INT_PIN, LOW); - fsensor_int_pin_old = 0; - - //pciSetup(FSENSOR_INT_PIN); -// !!! "pciSetup()" does not provide the correct results for some MCU pins -// so interrupt registers settings: - FSENSOR_INT_PIN_PCMSK_REG |= bit(FSENSOR_INT_PIN_PCMSK_BIT); // enable corresponding PinChangeInterrupt (individual pin) - PCIFR |= bit(FSENSOR_INT_PIN_PCICR_BIT); // clear previous occasional interrupt (set of pins) - PCICR |= bit(FSENSOR_INT_PIN_PCICR_BIT); // enable corresponding PinChangeInterrupt (set of pins) -} diff --git a/Firmware/fsensor.h b/Firmware/fsensor.h index 3237b5a70..71922fbfc 100644 --- a/Firmware/fsensor.h +++ b/Firmware/fsensor.h @@ -35,13 +35,13 @@ extern bool fsensor_autoload_enabled; extern void fsensor_autoload_set(bool State); extern void fsensor_update(void); - +#ifdef PAT9125 //! setup pin-change interrupt extern void fsensor_setup_interrupt(void); //! @name autoload support //! @{ -#ifdef PAT9125 + extern void fsensor_autoload_check_start(void); extern void fsensor_autoload_check_stop(void); #endif //PAT9125 From 6b6a3d7d5fb6ccca998877aec5b2111b332392a7 Mon Sep 17 00:00:00 2001 From: PavelSindler Date: Fri, 25 Jan 2019 18:01:17 +0100 Subject: [PATCH 15/45] MMU_IR_SENSOR_PIN -> IR_SENSOR_PIN --- Firmware/mmu.cpp | 6 +++--- Firmware/ultralcd.cpp | 4 ++-- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/Firmware/mmu.cpp b/Firmware/mmu.cpp index c901fa21d..4a208ee9c 100644 --- a/Firmware/mmu.cpp +++ b/Firmware/mmu.cpp @@ -349,7 +349,7 @@ void mmu_loop(void) case 3: //response to mmu commands if (mmu_idl_sens) { - if (PIN_GET(MMU_IDLER_SENSOR_PIN) == 0 && mmu_loading_flag) + if (PIN_GET(IR_SENSOR_PIN) == 0 && mmu_loading_flag) { #ifdef MMU_DEBUG printf_P(PSTR("MMU <= 'A'\n")); @@ -510,7 +510,7 @@ bool mmu_get_response(uint8_t move) if (PIN_GET(IR_SENSOR_PIN) == 0) move = MMU_NO_MOVE; break; case MMU_UNLOAD_MOVE: - if (PIN_GET(MMU_IDLER_SENSOR_PIN) == 0) //filament is still detected by idler sensor, printer helps with unlading + if (PIN_GET(IR_SENSOR_PIN) == 0) //filament is still detected by idler sensor, printer helps with unlading { if (can_extrude()) { @@ -528,7 +528,7 @@ bool mmu_get_response(uint8_t move) } break; case MMU_TCODE_MOVE: //first do unload and then continue with infinite loading movements - if (PIN_GET(MMU_IDLER_SENSOR_PIN) == 0) //filament detected by idler sensor, we must unload first + if (PIN_GET(IR_SENSOR_PIN) == 0) //filament detected by idler sensor, we must unload first { if (can_extrude()) { diff --git a/Firmware/ultralcd.cpp b/Firmware/ultralcd.cpp index 80d03e68f..97f18fb94 100644 --- a/Firmware/ultralcd.cpp +++ b/Firmware/ultralcd.cpp @@ -7023,7 +7023,7 @@ static bool lcd_selftest_fsensor(void) //! * Pre-heat to PLA extrude temperature. //! * Unload filament possibly present. //! * Move extruder idler same way as during filament load -//! and sample MMU_IDLER_SENSOR_PIN. +//! and sample IR_SENSOR_PIN. //! * Check that pin doesn't go low. //! //! @retval true passed @@ -7060,7 +7060,7 @@ static bool selftest_irsensor() mmu_load_step(false); while (blocks_queued()) { - if (PIN_GET(MMU_IDLER_SENSOR_PIN) == 0) return false; + if (PIN_GET(IR_SENSOR_PIN) == 0) return false; #ifdef TMC2130 manage_heater(); // Vojtech: Don't disable motors inside the planner! From fc1491670f75f2ad5dcbcfc1622e66e894042156 Mon Sep 17 00:00:00 2001 From: PavelSindler Date: Fri, 25 Jan 2019 18:03:05 +0100 Subject: [PATCH 16/45] mmu_idler_sensor_detected -> ir_sensor_detected --- Firmware/mmu.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Firmware/mmu.cpp b/Firmware/mmu.cpp index 4a208ee9c..790823493 100644 --- a/Firmware/mmu.cpp +++ b/Firmware/mmu.cpp @@ -477,7 +477,7 @@ void mmu_load_step(bool synchronize) //! off E-stepper to prevent over-heating and allow filament pull-out if necessary bool can_extrude() { - if ((degHotend(active_extruder) < EXTRUDE_MINTEMP) || !mmu_idler_sensor_detected) + if ((degHotend(active_extruder) < EXTRUDE_MINTEMP) || !ir_sensor_detected) { disable_e0(); delay_keep_alive(100); From 76db58605b19288f944fc13d42085ae3fcac0ad4 Mon Sep 17 00:00:00 2001 From: PavelSindler Date: Fri, 25 Jan 2019 18:37:23 +0100 Subject: [PATCH 17/45] Revert "Fast PWM for bed - timer2 used as system timer" This reverts commit 0963c889f065b60c9e42b524483dc94d260ba549. --- Firmware/temperature.cpp | 17 ++----- Firmware/temperature.h | 4 +- Firmware/timer02.c | 103 --------------------------------------- 3 files changed, 7 insertions(+), 117 deletions(-) delete mode 100644 Firmware/timer02.c diff --git a/Firmware/temperature.cpp b/Firmware/temperature.cpp index 41b8a0779..92d1a3392 100644 --- a/Firmware/temperature.cpp +++ b/Firmware/temperature.cpp @@ -45,12 +45,6 @@ #include "Configuration_prusa.h" -extern "C" { -extern void timer02_init(void); -extern void timer02_set_pwm0(uint8_t pwm0); -} - - //=========================================================================== //=============================public variables============================ //=========================================================================== @@ -1017,6 +1011,7 @@ static void updateTemperaturesFromRawValues() CRITICAL_SECTION_END; } + void tp_init() { #if MB(RUMBA) && ((TEMP_SENSOR_0==-1)||(TEMP_SENSOR_1==-1)||(TEMP_SENSOR_2==-1)||(TEMP_SENSOR_BED==-1)) @@ -1083,12 +1078,10 @@ void tp_init() adc_init(); - timer02_init(); - // Use timer0 for temperature measurement // Interleave temperature interrupt with millies interrupt - OCR2B = 128; - TIMSK2 |= (1< -#include -#include - - -uint8_t timer02_pwm0 = 0; - -void timer02_set_pwm0(uint8_t pwm0) -{ - if (timer02_pwm0 == pwm0) return; - if (pwm0) - { - TCCR0A |= (2 << COM0B0); - OCR0B = pwm0 - 1; - } - else - { - TCCR0A &= ~(2 << COM0B0); - OCR0B = 0; - } -} - -void timer02_init(void) -{ - //save sreg - uint8_t _sreg = SREG; - //disable interrupts for sure - cli(); - //mask timer0 interrupts - disable all - TIMSK0 &= ~(1<> 3) -#define FRACT_MAX (1000 >> 3) - -extern volatile unsigned long timer0_overflow_count; -extern volatile unsigned long timer0_millis; -unsigned char timer0_fract = 0; - -ISR(TIMER2_OVF_vect) -{ - // copy these to local variables so they can be stored in registers - // (volatile variables must be read from memory on every access) - unsigned long m = timer0_millis; - unsigned char f = timer0_fract; - - m += MILLIS_INC; - f += FRACT_INC; - if (f >= FRACT_MAX) - { - f -= FRACT_MAX; - m += 1; - } - - timer0_fract = f; - timer0_millis = m; - timer0_overflow_count++; -} - From 31236e411ea121308a18b5062caee3364d49e3bf Mon Sep 17 00:00:00 2001 From: PavelSindler Date: Fri, 25 Jan 2019 18:38:36 +0100 Subject: [PATCH 18/45] Revert "Fast PWM for bed - set pwm value from soft_pwm_bed variable." This reverts commit e612eb2a172c7911e484337c380f96702e53907c. --- Firmware/temperature.cpp | 16 ---------------- 1 file changed, 16 deletions(-) diff --git a/Firmware/temperature.cpp b/Firmware/temperature.cpp index 92d1a3392..070f9ad91 100644 --- a/Firmware/temperature.cpp +++ b/Firmware/temperature.cpp @@ -257,7 +257,6 @@ static void temp_runaway_stop(bool isPreheat, bool isBed); if (extruder<0) { soft_pwm_bed = (MAX_BED_POWER)/2; - timer02_set_pwm0(soft_pwm_bed << 1); bias = d = (MAX_BED_POWER)/2; } else @@ -294,10 +293,7 @@ static void temp_runaway_stop(bool isPreheat, bool isBed); if(millis() - t2 > 5000) { heating=false; if (extruder<0) - { soft_pwm_bed = (bias - d) >> 1; - timer02_set_pwm0(soft_pwm_bed << 1); - } else soft_pwm[extruder] = (bias - d) >> 1; t1=millis(); @@ -351,10 +347,7 @@ static void temp_runaway_stop(bool isPreheat, bool isBed); } } if (extruder<0) - { soft_pwm_bed = (bias + d) >> 1; - timer02_set_pwm0(soft_pwm_bed << 1); - } else soft_pwm[extruder] = (bias + d) >> 1; pid_cycle++; @@ -788,11 +781,9 @@ void manage_heater() if(current_temperature_bed < BED_MAXTEMP) { soft_pwm_bed = (int)pid_output >> 1; - timer02_set_pwm0(soft_pwm_bed << 1); } else { soft_pwm_bed = 0; - timer02_set_pwm0(soft_pwm_bed << 1); } #elif !defined(BED_LIMIT_SWITCHING) @@ -802,18 +793,15 @@ void manage_heater() if(current_temperature_bed >= target_temperature_bed) { soft_pwm_bed = 0; - timer02_set_pwm0(soft_pwm_bed << 1); } else { soft_pwm_bed = MAX_BED_POWER>>1; - timer02_set_pwm0(soft_pwm_bed << 1); } } else { soft_pwm_bed = 0; - timer02_set_pwm0(soft_pwm_bed << 1); WRITE(HEATER_BED_PIN,LOW); } #else //#ifdef BED_LIMIT_SWITCHING @@ -823,18 +811,15 @@ void manage_heater() if(current_temperature_bed > target_temperature_bed + BED_HYSTERESIS) { soft_pwm_bed = 0; - timer02_set_pwm0(soft_pwm_bed << 1); } else if(current_temperature_bed <= target_temperature_bed - BED_HYSTERESIS) { soft_pwm_bed = MAX_BED_POWER>>1; - timer02_set_pwm0(soft_pwm_bed << 1); } } else { soft_pwm_bed = 0; - timer02_set_pwm0(soft_pwm_bed << 1); WRITE(HEATER_BED_PIN,LOW); } #endif @@ -1389,7 +1374,6 @@ void disable_heater() #if defined(TEMP_BED_PIN) && TEMP_BED_PIN > -1 target_temperature_bed=0; soft_pwm_bed=0; - timer02_set_pwm0(soft_pwm_bed << 1); #if defined(HEATER_BED_PIN) && HEATER_BED_PIN > -1 WRITE(HEATER_BED_PIN,LOW); #endif From ab2a25cd3f26cbd068015a9003eb19e2ad5ec454 Mon Sep 17 00:00:00 2001 From: PavelSindler Date: Fri, 25 Jan 2019 18:38:46 +0100 Subject: [PATCH 19/45] Revert "Fast PWM for bed - newer set HEATER_BED_PIN to 1" This reverts commit 50bcfae1838e94ba570440342a3637ab5e49d9b7. --- Firmware/temperature.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Firmware/temperature.cpp b/Firmware/temperature.cpp index 070f9ad91..9b1e5e642 100644 --- a/Firmware/temperature.cpp +++ b/Firmware/temperature.cpp @@ -1606,7 +1606,7 @@ ISR(TIMER0_COMPB_vect) #endif #if defined(HEATER_BED_PIN) && HEATER_BED_PIN > -1 soft_pwm_b = soft_pwm_bed; - //if(soft_pwm_b > 0) WRITE(HEATER_BED_PIN,1); else WRITE(HEATER_BED_PIN,0); + if(soft_pwm_b > 0) WRITE(HEATER_BED_PIN,1); else WRITE(HEATER_BED_PIN,0); #endif } #ifdef FAN_SOFT_PWM @@ -1743,7 +1743,7 @@ ISR(TIMER0_COMPB_vect) state_timer_heater_b = MIN_STATE_TIME; } state_heater_b = 1; - //WRITE(HEATER_BED_PIN, 1); + WRITE(HEATER_BED_PIN, 1); } } else { // turn OFF heather only if the minimum time is up From 0514306bed74f94019cd8c249ded22bad8c5bc2e Mon Sep 17 00:00:00 2001 From: PavelSindler Date: Mon, 28 Jan 2019 11:09:41 +0100 Subject: [PATCH 20/45] selftest fixed --- Firmware/Configuration.h | 2 +- Firmware/ultralcd.cpp | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/Firmware/Configuration.h b/Firmware/Configuration.h index 37b7f6be9..f32df0f62 100644 --- a/Firmware/Configuration.h +++ b/Firmware/Configuration.h @@ -13,7 +13,7 @@ // The firmware should only be checked into github with this symbol. #define FW_DEV_VERSION FW_VERSION_UNKNOWN #define FW_REPOSITORY "Unknown" -#define FW_VERSION_FULL FW_VERSION "-" STR(FW_COMMIT_NR) +#define FW_VERSION_FULL FW_VERSION "-" STR(FW_COMMIT_NR) "a" // Debug version has debugging enabled (the symbol DEBUG_BUILD is set). // The debug build may be a bit slower than the non-debug build, therefore the debug build should diff --git a/Firmware/ultralcd.cpp b/Firmware/ultralcd.cpp index 24cc11f62..2d86f68d2 100644 --- a/Firmware/ultralcd.cpp +++ b/Firmware/ultralcd.cpp @@ -6456,20 +6456,20 @@ bool lcd_selftest() if (mmu_enabled) { - _progress = lcd_selftest_screen(9, _progress, 3, true, 2000); //check filaments sensor + _progress = lcd_selftest_screen(testScreen::fsensor, _progress, 3, true, 2000); //check filaments sensor _result = selftest_irsensor(); if (_result) { - _progress = lcd_selftest_screen(10, _progress, 3, true, 2000); //fil sensor OK + _progress = lcd_selftest_screen(testScreen::fsensorOk, _progress, 3, true, 2000); //fil sensor OK } } else { #ifdef PAT9125 - _progress = lcd_selftest_screen(9, _progress, 3, true, 2000); //check filaments sensor + _progress = lcd_selftest_screen(testScreen::fsensor, _progress, 3, true, 2000); //check filaments sensor _result = lcd_selftest_fsensor(); if (_result) { - _progress = lcd_selftest_screen(10, _progress, 3, true, 2000); //fil sensor OK + _progress = lcd_selftest_screen(testScreen::fsensorOk, _progress, 3, true, 2000); //fil sensor OK } #endif //PAT9125 } From 8f039263d509045a1d3a991a2606ca7f3eb5fee9 Mon Sep 17 00:00:00 2001 From: PavelSindler Date: Mon, 28 Jan 2019 17:14:24 +0100 Subject: [PATCH 21/45] variant files and version --- Firmware/Configuration.h | 2 +- Firmware/variants/1_75mm_MK25-RAMBo10a-E3Dv6full.h | 1 - Firmware/variants/1_75mm_MK25-RAMBo13a-E3Dv6full.h | 1 - Firmware/variants/1_75mm_MK3-EINSy10a-E3Dv6full.h | 4 ++-- 4 files changed, 3 insertions(+), 5 deletions(-) diff --git a/Firmware/Configuration.h b/Firmware/Configuration.h index f32df0f62..37b7f6be9 100644 --- a/Firmware/Configuration.h +++ b/Firmware/Configuration.h @@ -13,7 +13,7 @@ // The firmware should only be checked into github with this symbol. #define FW_DEV_VERSION FW_VERSION_UNKNOWN #define FW_REPOSITORY "Unknown" -#define FW_VERSION_FULL FW_VERSION "-" STR(FW_COMMIT_NR) "a" +#define FW_VERSION_FULL FW_VERSION "-" STR(FW_COMMIT_NR) // Debug version has debugging enabled (the symbol DEBUG_BUILD is set). // The debug build may be a bit slower than the non-debug build, therefore the debug build should diff --git a/Firmware/variants/1_75mm_MK25-RAMBo10a-E3Dv6full.h b/Firmware/variants/1_75mm_MK25-RAMBo10a-E3Dv6full.h index e12e6609b..464ef55c7 100644 --- a/Firmware/variants/1_75mm_MK25-RAMBo10a-E3Dv6full.h +++ b/Firmware/variants/1_75mm_MK25-RAMBo10a-E3Dv6full.h @@ -113,7 +113,6 @@ // Filament sensor #define FILAMENT_SENSOR #define PAT9125 -#define IR_SENSOR #define DEBUG_DCODE3 diff --git a/Firmware/variants/1_75mm_MK25-RAMBo13a-E3Dv6full.h b/Firmware/variants/1_75mm_MK25-RAMBo13a-E3Dv6full.h index bfcbf7419..e1f5ba092 100644 --- a/Firmware/variants/1_75mm_MK25-RAMBo13a-E3Dv6full.h +++ b/Firmware/variants/1_75mm_MK25-RAMBo13a-E3Dv6full.h @@ -114,7 +114,6 @@ // Filament sensor #define FILAMENT_SENSOR #define PAT9125 -#define IR_SENSOR #define DEBUG_DCODE3 diff --git a/Firmware/variants/1_75mm_MK3-EINSy10a-E3Dv6full.h b/Firmware/variants/1_75mm_MK3-EINSy10a-E3Dv6full.h index 7ced6b864..d64436d1f 100644 --- a/Firmware/variants/1_75mm_MK3-EINSy10a-E3Dv6full.h +++ b/Firmware/variants/1_75mm_MK3-EINSy10a-E3Dv6full.h @@ -134,8 +134,8 @@ // Filament sensor #define FILAMENT_SENSOR -//#define PAT9125 -#define IR_SENSOR +#define PAT9125 + // Backlash - //#define BACKLASH_X //#define BACKLASH_Y From 83510ed4896ae1613e8b4a4490bf47a0c45ff7d0 Mon Sep 17 00:00:00 2001 From: PavelSindler Date: Mon, 28 Jan 2019 17:27:16 +0100 Subject: [PATCH 22/45] check_for_ir_sensor --- Firmware/fsensor.cpp | 4 ++-- Firmware/mmu.cpp | 7 +++++-- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/Firmware/fsensor.cpp b/Firmware/fsensor.cpp index c0654ee2f..9aaad398f 100644 --- a/Firmware/fsensor.cpp +++ b/Firmware/fsensor.cpp @@ -180,11 +180,11 @@ bool fsensor_enable(void) eeprom_update_byte((uint8_t*)EEPROM_FSENSOR, 0x01); FSensorStateMenu = 1; } -#else +#else // PAT9125 fsensor_enabled = true; eeprom_update_byte((uint8_t*)EEPROM_FSENSOR, 0x01); FSensorStateMenu = 1; -#endif +#endif // PAT9125 return fsensor_enabled; } diff --git a/Firmware/mmu.cpp b/Firmware/mmu.cpp index 790823493..9cca3a7bf 100644 --- a/Firmware/mmu.cpp +++ b/Firmware/mmu.cpp @@ -119,12 +119,14 @@ void mmu_init(void) PIN_SET(IR_SENSOR_PIN); //pullup } -//returns true if idler IR sensor was detected, otherwise returns false + +//if IR_SENSOR defined, always returns true +//otherwise check for ir sensor and returns true if idler IR sensor was detected, otherwise returns false bool check_for_ir_sensor() { #ifdef IR_SENSOR return true; -#endif //IR_SENSOR +#else //IR_SENSOR bool detected = false; //if IR_SENSOR_PIN input is low and pat9125sensor is not present we detected idler sensor @@ -142,6 +144,7 @@ bool check_for_ir_sensor() //printf_P(PSTR("Idler IR sensor not detected\n")); } return detected; +#endif //IR_SENSOR } //mmu main loop - state machine processing From af348aa8ba4f0e6a1ea04bb9aafe29e339bbc571 Mon Sep 17 00:00:00 2001 From: PavelSindler Date: Mon, 28 Jan 2019 17:56:44 +0100 Subject: [PATCH 23/45] compilation error fix: pin for LCD brightness --- Firmware/Marlin_main.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Firmware/Marlin_main.cpp b/Firmware/Marlin_main.cpp index 9334d686e..875aa1a77 100644 --- a/Firmware/Marlin_main.cpp +++ b/Firmware/Marlin_main.cpp @@ -991,9 +991,9 @@ void setup() ultralcd_init(); -#if (LCD_BL_PIN != -1) +#if (LCD_BL_PIN != -1) && defined (LCD_BL_PIN) analogWrite(LCD_BL_PIN, 255); //set full brightnes -#endif //(LCD_BL_PIN != -1) +#endif //(LCD_BL_PIN != -1) && defined (LCD_BL_PIN) spi_init(); From dd4d8e12773ba1de2ba130908a4a7411d4531156 Mon Sep 17 00:00:00 2001 From: PavelSindler Date: Mon, 28 Jan 2019 19:23:19 +0100 Subject: [PATCH 24/45] calibrate z endstop update --- Firmware/Marlin_main.cpp | 23 ++++++++++++++--------- Firmware/ultralcd.cpp | 7 ++++++- 2 files changed, 20 insertions(+), 10 deletions(-) diff --git a/Firmware/Marlin_main.cpp b/Firmware/Marlin_main.cpp index 875aa1a77..918fb5955 100644 --- a/Firmware/Marlin_main.cpp +++ b/Firmware/Marlin_main.cpp @@ -2092,8 +2092,8 @@ bool calibrate_z_auto() { //lcd_display_message_fullscreen_P(_T(MSG_CALIBRATE_Z_AUTO)); lcd_clear(); - lcd_puts_at_P(0,1, _T(MSG_CALIBRATE_Z_AUTO)); - bool endstops_enabled = enable_endstops(true); + lcd_puts_at_P(0, 1, _T(MSG_CALIBRATE_Z_AUTO)); + bool endstops_enabled = enable_endstops(true); int axis_up_dir = -home_dir(Z_AXIS); tmc2130_home_enter(Z_AXIS_MASK); current_position[Z_AXIS] = 0; @@ -2101,21 +2101,26 @@ bool calibrate_z_auto() set_destination_to_current(); destination[Z_AXIS] += (1.1 * max_length(Z_AXIS) * axis_up_dir); feedrate = homing_feedrate[Z_AXIS]; - plan_buffer_line(destination[X_AXIS], destination[Y_AXIS], destination[Z_AXIS], destination[E_AXIS], feedrate/60, active_extruder); + plan_buffer_line(destination[X_AXIS], destination[Y_AXIS], destination[Z_AXIS], destination[E_AXIS], feedrate / 60, active_extruder); st_synchronize(); -// current_position[axis] = 0; -// plan_set_position(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS]); + // current_position[axis] = 0; + // plan_set_position(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS]); tmc2130_home_exit(); - enable_endstops(false); + enable_endstops(false); current_position[Z_AXIS] = 0; plan_set_position(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS]); set_destination_to_current(); destination[Z_AXIS] += 10 * axis_up_dir; //10mm up feedrate = homing_feedrate[Z_AXIS] / 2; - plan_buffer_line(destination[X_AXIS], destination[Y_AXIS], destination[Z_AXIS], destination[E_AXIS], feedrate/60, active_extruder); + plan_buffer_line(destination[X_AXIS], destination[Y_AXIS], destination[Z_AXIS], destination[E_AXIS], feedrate / 60, active_extruder); st_synchronize(); - enable_endstops(endstops_enabled); - current_position[Z_AXIS] = Z_MAX_POS+2.0; + enable_endstops(endstops_enabled); + if (PRINTER_TYPE == PRINTER_MK3) { + current_position[Z_AXIS] = Z_MAX_POS + 2.0; + } + else { + current_position[Z_AXIS] = Z_MAX_POS + 9.0; + } plan_set_position(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS]); return true; } diff --git a/Firmware/ultralcd.cpp b/Firmware/ultralcd.cpp index 2d86f68d2..41ecc299d 100644 --- a/Firmware/ultralcd.cpp +++ b/Firmware/ultralcd.cpp @@ -3208,7 +3208,12 @@ bool lcd_calibrate_z_end_stop_manual(bool only_z) calibrated: // Let the machine think the Z axis is a bit higher than it is, so it will not home into the bed // during the search for the induction points. - current_position[Z_AXIS] = Z_MAX_POS-3.f; + if (PRINTER_TYPE == PRINTER_MK25) { + current_position[Z_AXIS] = Z_MAX_POS-3.f; + } + else { + current_position[Z_AXIS] = Z_MAX_POS+4.f; + } plan_set_position(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS]); return true; From 29e156b26dfcc9b3773290dd3bbcc3753ae7197b Mon Sep 17 00:00:00 2001 From: PavelSindler Date: Mon, 28 Jan 2019 19:48:46 +0100 Subject: [PATCH 25/45] printer types updated --- Firmware/ultralcd.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Firmware/ultralcd.cpp b/Firmware/ultralcd.cpp index 41ecc299d..1134c2f23 100644 --- a/Firmware/ultralcd.cpp +++ b/Firmware/ultralcd.cpp @@ -3208,7 +3208,7 @@ bool lcd_calibrate_z_end_stop_manual(bool only_z) calibrated: // Let the machine think the Z axis is a bit higher than it is, so it will not home into the bed // during the search for the induction points. - if (PRINTER_TYPE == PRINTER_MK25) { + if ((PRINTER_TYPE == PRINTER_MK25) || (PRINTER_TYPE == PRINTER_MK2) || (PRINTER_TYPE == PRINTER_MK2_SNMM)) { current_position[Z_AXIS] = Z_MAX_POS-3.f; } else { From 60acdd23c5ac91696c9466763c53953d68d4b88d Mon Sep 17 00:00:00 2001 From: PavelSindler Date: Mon, 28 Jan 2019 21:12:38 +0100 Subject: [PATCH 26/45] variants --- Firmware/printers.h | 2 + .../1_75mm_MK25S-RAMBo10a-E3Dv6full.h | 502 ++++++++++++++ .../1_75mm_MK25S-RAMBo13a-E3Dv6full.h | 503 ++++++++++++++ .../variants/1_75mm_MK3S-EINSy10a-E3Dv6full.h | 628 ++++++++++++++++++ 4 files changed, 1635 insertions(+) create mode 100644 Firmware/variants/1_75mm_MK25S-RAMBo10a-E3Dv6full.h create mode 100644 Firmware/variants/1_75mm_MK25S-RAMBo13a-E3Dv6full.h create mode 100644 Firmware/variants/1_75mm_MK3S-EINSy10a-E3Dv6full.h diff --git a/Firmware/printers.h b/Firmware/printers.h index b0b5e2ba0..8111beb05 100644 --- a/Firmware/printers.h +++ b/Firmware/printers.h @@ -8,7 +8,9 @@ #define PRINTER_MK2_SNMM 201 #define PRINTER_MK25 250 #define PRINTER_MK25_SNMM 251 +#define PRINTER_MK25S 252 #define PRINTER_MK3 300 #define PRINTER_MK3_SNMM 301 +#define PRINTER_MK3S 302 #endif //PRINTERS_H diff --git a/Firmware/variants/1_75mm_MK25S-RAMBo10a-E3Dv6full.h b/Firmware/variants/1_75mm_MK25S-RAMBo10a-E3Dv6full.h new file mode 100644 index 000000000..3e8bb3b23 --- /dev/null +++ b/Firmware/variants/1_75mm_MK25S-RAMBo10a-E3Dv6full.h @@ -0,0 +1,502 @@ +#ifndef CONFIGURATION_PRUSA_H +#define CONFIGURATION_PRUSA_H + +#include +/*------------------------------------ + GENERAL SETTINGS + *------------------------------------*/ + +// Printer revision +#define PRINTER_TYPE PRINTER_MK25S +#define FILAMENT_SIZE "1_75mm_MK25S" +#define NOZZLE_TYPE "E3Dv6full" + +// Developer flag +#define DEVELOPER + +// Printer name +#define CUSTOM_MENDEL_NAME "Prusa i3 MK2.5S" + +// Electronics +#define MOTHERBOARD BOARD_RAMBO_MINI_1_0 + +#define HEATBED_V2 +#define STEEL_SHEET +#define TACH0PULLUP + +// Uncomment the below for the E3D PT100 temperature sensor (with or without PT100 Amplifier) +//#define E3D_PT100_EXTRUDER_WITH_AMP +//#define E3D_PT100_EXTRUDER_NO_AMP +//#define E3D_PT100_BED_WITH_AMP +//#define E3D_PT100_BED_NO_AMP + + +/*------------------------------------ + AXIS SETTINGS + *------------------------------------*/ + +// Steps per unit {X,Y,Z,E} +#define DEFAULT_AXIS_STEPS_PER_UNIT {100,100,3200/8,133} + +// Endstop inverting +#define X_MIN_ENDSTOP_INVERTING 0 // set to 1 to invert the logic of the endstop. +#define Y_MIN_ENDSTOP_INVERTING 0 // set to 1 to invert the logic of the endstop. +#define Z_MIN_ENDSTOP_INVERTING 0 // set to 1 to invert the logic of the endstop. + +// Direction inverting +#define INVERT_X_DIR 0 // for Mendel set to 0, for Orca set to 1 +#define INVERT_Y_DIR 0 // for Mendel set to 1, for Orca set to 0 +#define INVERT_Z_DIR 0 // for Mendel set to 0, for Orca set to 1 +#define INVERT_E0_DIR 1 // for direct drive extruder v9 set to 1, for geared extruder set to 0 +#define INVERT_E1_DIR 1 // for direct drive extruder v9 set to 1, for geared extruder set to 0 +#define INVERT_E2_DIR 1 // for direct drive extruder v9 set to 1, for geared extruder set to 0 + +// Home position +#define MANUAL_X_HOME_POS 0 +#define MANUAL_Y_HOME_POS -2.2 +#define MANUAL_Z_HOME_POS 0.2 + +// Travel limits after homing +#define X_MAX_POS 250 +#define X_MIN_POS 0 +#define Y_MAX_POS 210 +#define Y_MIN_POS -4 +#define Z_MAX_POS 210 +#define Z_MIN_POS 0.15 + +// Canceled home position +#define X_CANCEL_POS 50 +#define Y_CANCEL_POS 190 + +//Pause print position +#define X_PAUSE_POS 50 +#define Y_PAUSE_POS 190 +#define Z_PAUSE_LIFT 20 + +#define NUM_AXIS 4 // The axis order in all axis related arrays is X, Y, Z, E +#define HOMING_FEEDRATE {3000, 3000, 800, 0} // set the homing speeds (mm/min) // 3000 is also valid for stallGuard homing. Valid range: 2200 - 3000 + +/** + * [0,0] steel sheet print area point X coordinate in bed print area coordinates + */ +#define SHEET_PRINT_ZERO_REF_X 0.f +/** + * [0,0] steel sheet print area point Y coordinate in bed print area coordinates + */ +#define SHEET_PRINT_ZERO_REF_Y 0.f + +#define DEFAULT_MAX_FEEDRATE {200, 200, 12, 120} // (mm/sec) max feedrate (M203) +#define DEFAULT_MAX_FEEDRATE_SILENT {172, 172, 12, 120} // (mm/sec) max feedrate (M203), silent mode +#define DEFAULT_MAX_ACCELERATION {1000, 1000, 200, 5000} // (mm/sec^2) max acceleration (M201) +#define DEFAULT_MAX_ACCELERATION_SILENT {960, 960, 200, 5000} // (mm/sec^2) max acceleration (M201), silent mode + +#define DEFAULT_ACCELERATION 1250 // X, Y, Z and E max acceleration in mm/s^2 for printing moves (M204S) +#define DEFAULT_RETRACT_ACCELERATION 1250 // X, Y, Z and E max acceleration in mm/s^2 for retracts (M204T) + +#define MANUAL_FEEDRATE {2700, 2700, 1000, 100} // set the speeds for manual moves (mm/min) + +//number of bytes from end of the file to start check +#define END_FILE_SECTION 20000 + +#define Z_AXIS_ALWAYS_ON 1 + +// New XYZ calibration +#define NEW_XYZCAL + +// Fan check +#define FANCHECK + +// Safety timer +#define SAFETYTIMER +#define DEFAULT_SAFETYTIMER_TIME_MINS 30 + +// Filament sensor +#define FILAMENT_SENSOR +#define IR_SENSOR + + +#define DEBUG_DCODE3 + +//#define DEBUG_BUILD +#ifdef DEBUG_BUILD +//#define _NO_ASM +#define DEBUG_DCODES //D codes +#define DEBUG_STACK_MONITOR //Stack monitor in stepper ISR +//#define DEBUG_FSENSOR_LOG //Reports fsensor status to serial +//#define DEBUG_CRASHDET_COUNTERS //Display crash-detection counters on LCD +//#define DEBUG_RESUME_PRINT //Resume/save print debug enable +//#define DEBUG_UVLO_AUTOMATIC_RECOVER // Power panic automatic recovery debug output +//#define DEBUG_DISABLE_XMINLIMIT //x min limit ignored +//#define DEBUG_DISABLE_XMAXLIMIT //x max limit ignored +//#define DEBUG_DISABLE_YMINLIMIT //y min limit ignored +//#define DEBUG_DISABLE_YMAXLIMIT //y max limit ignored +//#define DEBUG_DISABLE_ZMINLIMIT //z min limit ignored +//#define DEBUG_DISABLE_ZMAXLIMIT //z max limit ignored +//#define DEBUG_DISABLE_STARTMSGS //no startup messages +//#define DEBUG_DISABLE_MINTEMP //mintemp error ignored +//#define DEBUG_DISABLE_SWLIMITS //sw limits ignored +//#define DEBUG_DISABLE_LCD_STATUS_LINE //empty four lcd line +//#define DEBUG_DISABLE_PREVENT_EXTRUDER //cold extrusion and long extrusion allowed +//#define DEBUG_DISABLE_PRUSA_STATISTICS //disable prusa_statistics() mesages +//#define DEBUG_XSTEP_DUP_PIN 21 //duplicate x-step output to pin 21 (SCL on P3) +//#define DEBUG_YSTEP_DUP_PIN 21 //duplicate y-step output to pin 21 (SCL on P3) +//#define DEBUG_DISABLE_FANCHECK //disable fan check (no ISR INT7, check disabled) +//#define DEBUG_DUMP_TO_2ND_SERIAL //dump received characters to 2nd serial line +//#define DEBUG_STEPPER_TIMER_MISSED // Stop on stepper timer overflow, beep and display a message. +//#define PLANNER_DIAGNOSTICS // Show the planner queue status on printer display. +//#define CMD_DIAGNOSTICS //Show cmd queue length on printer display +#endif /* DEBUG_BUILD */ + +//#define FSENSOR_QUALITY + + +/*------------------------------------ + EXTRUDER SETTINGS + *------------------------------------*/ + +// Mintemps +#define HEATER_0_MINTEMP 30 +#define HEATER_1_MINTEMP 5 +#define HEATER_2_MINTEMP 5 +#define HEATER_MINTEMP_DELAY 15000 // [ms] ! if changed, check maximal allowed value @ ShortTimer +#if HEATER_MINTEMP_DELAY>USHRT_MAX +#error "Check maximal allowed value @ ShortTimer (see HEATER_MINTEMP_DELAY definition)" +#endif +#define BED_MINTEMP 30 +#define BED_MINTEMP_DELAY 50000 // [ms] ! if changed, check maximal allowed value @ ShortTimer +#if BED_MINTEMP_DELAY>USHRT_MAX +#error "Check maximal allowed value @ ShortTimer (see BED_MINTEMP_DELAY definition)" +#endif + +// Maxtemps +#if defined(E3D_PT100_EXTRUDER_WITH_AMP) || defined(E3D_PT100_EXTRUDER_NO_AMP) +#define HEATER_0_MAXTEMP 410 +#else +#define HEATER_0_MAXTEMP 305 +#endif +#define HEATER_1_MAXTEMP 305 +#define HEATER_2_MAXTEMP 305 +#define BED_MAXTEMP 125 + +#if defined(E3D_PT100_EXTRUDER_WITH_AMP) || defined(E3D_PT100_EXTRUDER_NO_AMP) +// Define PID constants for extruder with PT100 +#define DEFAULT_Kp 21.70 +#define DEFAULT_Ki 1.60 +#define DEFAULT_Kd 73.76 +#else +// Define PID constants for extruder +//#define DEFAULT_Kp 40.925 +//#define DEFAULT_Ki 4.875 +//#define DEFAULT_Kd 86.085 +#define DEFAULT_Kp 16.13 +#define DEFAULT_Ki 1.1625 +#define DEFAULT_Kd 56.23 +#endif + +// Extrude mintemp +#define EXTRUDE_MINTEMP 175 + +// Extruder cooling fans +#define EXTRUDER_0_AUTO_FAN_PIN 8 +#define EXTRUDER_1_AUTO_FAN_PIN -1 +#define EXTRUDER_2_AUTO_FAN_PIN -1 +#define EXTRUDER_AUTO_FAN_TEMPERATURE 50 +#define EXTRUDER_AUTO_FAN_SPEED 255 // == full speed + + +/*------------------------------------ + LOAD/UNLOAD FILAMENT SETTINGS + *------------------------------------*/ + +// Load filament commands +#define LOAD_FILAMENT_0 "M83" +#define LOAD_FILAMENT_1 "G1 E70 F400" +#define LOAD_FILAMENT_2 "G1 E40 F100" + +// Unload filament commands +#define UNLOAD_FILAMENT_0 "M83" +#define UNLOAD_FILAMENT_1 "G1 E-80 F7000" + +/*------------------------------------ + CHANGE FILAMENT SETTINGS + *------------------------------------*/ + +// Filament change configuration +#define FILAMENTCHANGEENABLE +#ifdef FILAMENTCHANGEENABLE +#define FILAMENTCHANGE_XPOS 211 +#define FILAMENTCHANGE_YPOS 0 +#define FILAMENTCHANGE_ZADD 2 +#define FILAMENTCHANGE_FIRSTRETRACT -2 +#define FILAMENTCHANGE_FINALRETRACT -80 + +#define FILAMENTCHANGE_FIRSTFEED 70 //E distance in mm for fast filament loading sequence used used in filament change (M600) +#define FILAMENTCHANGE_FINALFEED 25 //E distance in mm for slow filament loading sequence used used in filament change (M600) and filament load (M701) +#define FILAMENTCHANGE_RECFEED 5 + +#define FILAMENTCHANGE_XYFEED 50 +#define FILAMENTCHANGE_EFEED_FIRST 20 // feedrate in mm/s for fast filament loading sequence used in filament change (M600) +#define FILAMENTCHANGE_EFEED_FINAL 3.3f // feedrate in mm/s for slow filament loading sequence used in filament change (M600) and filament load (M701) +//#define FILAMENTCHANGE_RFEED 400 +#define FILAMENTCHANGE_RFEED 7000 / 60 +#define FILAMENTCHANGE_EXFEED 2 +#define FILAMENTCHANGE_ZFEED 15 + +#endif + +/*------------------------------------ + ADDITIONAL FEATURES SETTINGS + *------------------------------------*/ + +// Define Prusa filament runout sensor +//#define FILAMENT_RUNOUT_SUPPORT + +#ifdef FILAMENT_RUNOUT_SUPPORT +#define FILAMENT_RUNOUT_SENSOR 1 +#endif + +// temperature runaway +#define TEMP_RUNAWAY_BED_HYSTERESIS 5 +#define TEMP_RUNAWAY_BED_TIMEOUT 360 + +#define TEMP_RUNAWAY_EXTRUDER_HYSTERESIS 15 +#define TEMP_RUNAWAY_EXTRUDER_TIMEOUT 45 + +/*------------------------------------ + MOTOR CURRENT SETTINGS + *------------------------------------*/ + +// Motor Current setting for BIG RAMBo +#define DIGIPOT_MOTOR_CURRENT {135,135,135,135,135} // Values 0-255 (RAMBO 135 = ~0.75A, 185 = ~1A) +#define DIGIPOT_MOTOR_CURRENT_LOUD {135,135,135,135,135} + +// Motor Current settings for RAMBo mini PWM value = MotorCurrentSetting * 255 / range +#if MOTHERBOARD == BOARD_RAMBO_MINI_1_0 || MOTHERBOARD == BOARD_RAMBO_MINI_1_3 +#define MOTOR_CURRENT_PWM_RANGE 2000 +#define DEFAULT_PWM_MOTOR_CURRENT {270, 830, 450} // {XY,Z,E} +#define DEFAULT_PWM_MOTOR_CURRENT_LOUD {540, 830, 500} // {XY,Z,E} +#define Z_SILENT 0 +#define Z_HIGH_POWER 200 +#endif + +/*------------------------------------ + BED SETTINGS + *------------------------------------*/ + +// Define Mesh Bed Leveling system to enable it +#define MESH_BED_LEVELING +#ifdef MESH_BED_LEVELING + +#define MBL_Z_STEP 0.01 + +// Mesh definitions +#define MESH_MIN_X 35 +#define MESH_MAX_X 238 +#define MESH_MIN_Y 6 +#define MESH_MAX_Y 202 + +// Mesh upsample definition +#define MESH_NUM_X_POINTS 7 +#define MESH_NUM_Y_POINTS 7 +// Mesh measure definition +#define MESH_MEAS_NUM_X_POINTS 3 +#define MESH_MEAS_NUM_Y_POINTS 3 + +#define MESH_HOME_Z_CALIB 0.2 +#define MESH_HOME_Z_SEARCH 5 //Z lift for homing, mesh bed leveling etc. + +#define X_PROBE_OFFSET_FROM_EXTRUDER 23 // Z probe to nozzle X offset: -left +right +#define Y_PROBE_OFFSET_FROM_EXTRUDER 5 // Z probe to nozzle Y offset: -front +behind +#define Z_PROBE_OFFSET_FROM_EXTRUDER -0.4 // Z probe to nozzle Z offset: -below (always!) +#endif + +// Bed Temperature Control +// Select PID or bang-bang with PIDTEMPBED. If bang-bang, BED_LIMIT_SWITCHING will enable hysteresis +// +// Uncomment this to enable PID on the bed. It uses the same frequency PWM as the extruder. +// If your PID_dT above is the default, and correct for your hardware/configuration, that means 7.689Hz, +// which is fine for driving a square wave into a resistive load and does not significantly impact you FET heating. +// This also works fine on a Fotek SSR-10DA Solid State Relay into a 250W heater. +// If your configuration is significantly different than this and you don't understand the issues involved, you probably +// shouldn't use bed PID until someone else verifies your hardware works. +// If this is enabled, find your own PID constants below. +#define PIDTEMPBED +// +//#define BED_LIMIT_SWITCHING + +// This sets the max power delivered to the bed, and replaces the HEATER_BED_DUTY_CYCLE_DIVIDER option. +// all forms of bed control obey this (PID, bang-bang, bang-bang with hysteresis) +// setting this to anything other than 255 enables a form of PWM to the bed just like HEATER_BED_DUTY_CYCLE_DIVIDER did, +// so you shouldn't use it unless you are OK with PWM on your bed. (see the comment on enabling PIDTEMPBED) +#define MAX_BED_POWER 255 // limits duty cycle to bed; 255=full current + +// Bed temperature compensation settings +#define BED_OFFSET 10 +#define BED_OFFSET_START 40 +#define BED_OFFSET_CENTER 50 + + +#ifdef PIDTEMPBED +//120v 250W silicone heater into 4mm borosilicate (MendelMax 1.5+) +//from FOPDT model - kp=.39 Tp=405 Tdead=66, Tc set to 79.2, aggressive factor of .15 (vs .1, 1, 10) +#if defined(E3D_PT100_BED_WITH_AMP) || defined(E3D_PT100_BED_NO_AMP) +// Define PID constants for extruder with PT100 +#define DEFAULT_bedKp 21.70 +#define DEFAULT_bedKi 1.60 +#define DEFAULT_bedKd 73.76 +#else +#define DEFAULT_bedKp 126.13 +#define DEFAULT_bedKi 4.30 +#define DEFAULT_bedKd 924.76 +#endif + +//120v 250W silicone heater into 4mm borosilicate (MendelMax 1.5+) +//from pidautotune +// #define DEFAULT_bedKp 97.1 +// #define DEFAULT_bedKi 1.41 +// #define DEFAULT_bedKd 1675.16 + +// FIND YOUR OWN: "M303 E-1 C8 S90" to run autotune on the bed at 90 degreesC for 8 cycles. +#endif // PIDTEMPBED + + +/*----------------------------------- + PREHEAT SETTINGS + *------------------------------------*/ + +#define FARM_PREHEAT_HOTEND_TEMP 250 +#define FARM_PREHEAT_HPB_TEMP 40 +#define FARM_PREHEAT_FAN_SPEED 0 + +#define PLA_PREHEAT_HOTEND_TEMP 215 +#define PLA_PREHEAT_HPB_TEMP 60 +#define PLA_PREHEAT_FAN_SPEED 0 + +#define ABS_PREHEAT_HOTEND_TEMP 255 +#define ABS_PREHEAT_HPB_TEMP 100 +#define ABS_PREHEAT_FAN_SPEED 0 + +#define HIPS_PREHEAT_HOTEND_TEMP 220 +#define HIPS_PREHEAT_HPB_TEMP 100 +#define HIPS_PREHEAT_FAN_SPEED 0 + +#define PP_PREHEAT_HOTEND_TEMP 254 +#define PP_PREHEAT_HPB_TEMP 100 +#define PP_PREHEAT_FAN_SPEED 0 + +#define PET_PREHEAT_HOTEND_TEMP 230 +#define PET_PREHEAT_HPB_TEMP 85 +#define PET_PREHEAT_FAN_SPEED 0 + +#define FLEX_PREHEAT_HOTEND_TEMP 240 +#define FLEX_PREHEAT_HPB_TEMP 50 +#define FLEX_PREHEAT_FAN_SPEED 0 + +/*------------------------------------ + THERMISTORS SETTINGS + *------------------------------------*/ + +// +//--NORMAL IS 4.7kohm PULLUP!-- 1kohm pullup can be used on hotend sensor, using correct resistor and table +// +//// Temperature sensor settings: +// -2 is thermocouple with MAX6675 (only for sensor 0) +// -1 is thermocouple with AD595 +// 0 is not used +// 1 is 100k thermistor - best choice for EPCOS 100k (4.7k pullup) +// 2 is 200k thermistor - ATC Semitec 204GT-2 (4.7k pullup) +// 3 is Mendel-parts thermistor (4.7k pullup) +// 4 is 10k thermistor !! do not use it for a hotend. It gives bad resolution at high temp. !! +// 5 is 100K thermistor - ATC Semitec 104GT-2 (Used in ParCan & J-Head) (4.7k pullup) +// 6 is 100k EPCOS - Not as accurate as table 1 (created using a fluke thermocouple) (4.7k pullup) +// 7 is 100k Honeywell thermistor 135-104LAG-J01 (4.7k pullup) +// 71 is 100k Honeywell thermistor 135-104LAF-J01 (4.7k pullup) +// 8 is 100k 0603 SMD Vishay NTCS0603E3104FXT (4.7k pullup) +// 9 is 100k GE Sensing AL03006-58.2K-97-G1 (4.7k pullup) +// 10 is 100k RS thermistor 198-961 (4.7k pullup) +// 11 is 100k beta 3950 1% thermistor (4.7k pullup) +// 12 is 100k 0603 SMD Vishay NTCS0603E3104FXT (4.7k pullup) (calibrated for Makibox hot bed) +// 13 is 100k Hisens 3950 1% up to 300°C for hotend "Simple ONE " & "Hotend "All In ONE" +// 20 is the PT100 circuit found in the Ultimainboard V2.x +// 60 is 100k Maker's Tool Works Kapton Bed Thermistor beta=3950 +// +// 1k ohm pullup tables - This is not normal, you would have to have changed out your 4.7k for 1k +// (but gives greater accuracy and more stable PID) +// 51 is 100k thermistor - EPCOS (1k pullup) +// 52 is 200k thermistor - ATC Semitec 204GT-2 (1k pullup) +// 55 is 100k thermistor - ATC Semitec 104GT-2 (Used in ParCan & J-Head) (1k pullup) +// +// 1047 is Pt1000 with 4k7 pullup +// 1010 is Pt1000 with 1k pullup (non standard) +// 147 is Pt100 with 4k7 pullup +// 148 is E3D Pt100 with 4k7 pullup and no PT100 Amplifier on a MiniRambo 1.3a +// 247 is Pt100 with 4k7 pullup and PT100 Amplifier +// 110 is Pt100 with 1k pullup (non standard) + +#if defined(E3D_PT100_EXTRUDER_WITH_AMP) +#define TEMP_SENSOR_0 247 +#elif defined(E3D_PT100_EXTRUDER_NO_AMP) +#define TEMP_SENSOR_0 148 +#else +#define TEMP_SENSOR_0 5 +#endif +#define TEMP_SENSOR_1 0 +#define TEMP_SENSOR_2 0 +#if defined(E3D_PT100_BED_WITH_AMP) +#define TEMP_SENSOR_BED 247 +#elif defined(E3D_PT100_BED_NO_AMP) +#define TEMP_SENSOR_BED 148 +#else +#define TEMP_SENSOR_BED 1 +#endif +#define TEMP_SENSOR_PINDA 1 + +#define STACK_GUARD_TEST_VALUE 0xA2A2 + +#define MAX_BED_TEMP_CALIBRATION 50 +#define MAX_HOTEND_TEMP_CALIBRATION 50 + +#define MAX_E_STEPS_PER_UNIT 250 +#define MIN_E_STEPS_PER_UNIT 100 + +#define Z_BABYSTEP_MIN -3999 +#define Z_BABYSTEP_MAX 0 + +#define PINDA_PREHEAT_X 20 +#define PINDA_PREHEAT_Y 60 +#define PINDA_PREHEAT_Z 0.15 +/* +#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 +#define PINDA_STEP_T 10 +#define PINDA_MAX_T 100 + +#define PING_TIME 60 //time in s +#define PING_TIME_LONG 600 //10 min; used when length of commands buffer > 0 to avoid 0 triggering when dealing with long gcodes +#define PING_ALLERT_PERIOD 60 //time in s + +#define NC_TIME 10 //time in s for periodic important status messages sending which needs reponse from monitoring +#define NC_BUTTON_LONG_PRESS 15 //time in s + +#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 DEFAULT_PID_TEMP 210 + +#define MIN_PRINT_FAN_SPEED 75 + + +#define M600_TIMEOUT 600 //seconds + +//#define SUPPORT_VERBOSITY + +#define MMU_REQUIRED_FW_BUILDNR 132 +//#define MMU_DEBUG //print communication between MMU2 and printer on serial + +#define MMU_IDLER_SENSOR_ATTEMPTS_NR 21 //max. number of attempts to load filament if first load failed; value for max bowden length and case when loading fails right at the beginning + +#endif //__CONFIGURATION_PRUSA_H diff --git a/Firmware/variants/1_75mm_MK25S-RAMBo13a-E3Dv6full.h b/Firmware/variants/1_75mm_MK25S-RAMBo13a-E3Dv6full.h new file mode 100644 index 000000000..45bcd8ebc --- /dev/null +++ b/Firmware/variants/1_75mm_MK25S-RAMBo13a-E3Dv6full.h @@ -0,0 +1,503 @@ +#ifndef CONFIGURATION_PRUSA_H +#define CONFIGURATION_PRUSA_H + +#include +/*------------------------------------ + GENERAL SETTINGS + *------------------------------------*/ + +// Printer revision +#define PRINTER_TYPE PRINTER_MK25S +#define FILAMENT_SIZE "1_75mm_MK25" +#define NOZZLE_TYPE "E3Dv6full" + +// Developer flag +#define DEVELOPER + +// Printer name +#define CUSTOM_MENDEL_NAME "Prusa i3 MK2.5S" + +// Electronics +#define MOTHERBOARD BOARD_RAMBO_MINI_1_3 + +#define HEATBED_V2 +#define STEEL_SHEET +#define TACH0PULLUP + +// Uncomment the below for the E3D PT100 temperature sensor (with or without PT100 Amplifier) +//#define E3D_PT100_EXTRUDER_WITH_AMP +//#define E3D_PT100_EXTRUDER_NO_AMP +//#define E3D_PT100_BED_WITH_AMP +//#define E3D_PT100_BED_NO_AMP + + +/*------------------------------------ + AXIS SETTINGS + *------------------------------------*/ + +// Steps per unit {X,Y,Z,E} +#define DEFAULT_AXIS_STEPS_PER_UNIT {100,100,3200/8,133} + +// Endstop inverting +#define X_MIN_ENDSTOP_INVERTING 0 // set to 1 to invert the logic of the endstop. +#define Y_MIN_ENDSTOP_INVERTING 0 // set to 1 to invert the logic of the endstop. +#define Z_MIN_ENDSTOP_INVERTING 0 // set to 1 to invert the logic of the endstop. + +// Direction inverting +#define INVERT_X_DIR 0 // for Mendel set to 0, for Orca set to 1 +#define INVERT_Y_DIR 0 // for Mendel set to 1, for Orca set to 0 +#define INVERT_Z_DIR 0 // for Mendel set to 0, for Orca set to 1 +#define INVERT_E0_DIR 1 // for direct drive extruder v9 set to 1, for geared extruder set to 0 +#define INVERT_E1_DIR 1 // for direct drive extruder v9 set to 1, for geared extruder set to 0 +#define INVERT_E2_DIR 1 // for direct drive extruder v9 set to 1, for geared extruder set to 0 + +// Home position +#define MANUAL_X_HOME_POS 0 +#define MANUAL_Y_HOME_POS -2.2 +#define MANUAL_Z_HOME_POS 0.2 + +// Travel limits after homing +#define X_MAX_POS 250 +#define X_MIN_POS 0 +#define Y_MAX_POS 210 +#define Y_MIN_POS -4 +#define Z_MAX_POS 210 +#define Z_MIN_POS 0.15 + +// Canceled home position +#define X_CANCEL_POS 50 +#define Y_CANCEL_POS 190 + +//Pause print position +#define X_PAUSE_POS 50 +#define Y_PAUSE_POS 190 +#define Z_PAUSE_LIFT 20 + +#define NUM_AXIS 4 // The axis order in all axis related arrays is X, Y, Z, E +#define HOMING_FEEDRATE {3000, 3000, 800, 0} // set the homing speeds (mm/min) // 3000 is also valid for stallGuard homing. Valid range: 2200 - 3000 + +/** + * [0,0] steel sheet print area point X coordinate in bed print area coordinates + */ +#define SHEET_PRINT_ZERO_REF_X 0.f +/** + * [0,0] steel sheet print area point Y coordinate in bed print area coordinates + */ +#define SHEET_PRINT_ZERO_REF_Y 0.f + +#define DEFAULT_MAX_FEEDRATE {200, 200, 12, 120} // (mm/sec) max feedrate (M203) +#define DEFAULT_MAX_FEEDRATE_SILENT {172, 172, 12, 120} // (mm/sec) max feedrate (M203), silent mode +#define DEFAULT_MAX_ACCELERATION {1000, 1000, 200, 5000} // (mm/sec^2) max acceleration (M201) +#define DEFAULT_MAX_ACCELERATION_SILENT {960, 960, 200, 5000} // (mm/sec^2) max acceleration (M201), silent mode + + +#define DEFAULT_ACCELERATION 1250 // X, Y, Z and E max acceleration in mm/s^2 for printing moves (M204S) +#define DEFAULT_RETRACT_ACCELERATION 1250 // X, Y, Z and E max acceleration in mm/s^2 for retracts (M204T) + +#define MANUAL_FEEDRATE {2700, 2700, 1000, 100} // set the speeds for manual moves (mm/min) + +//number of bytes from end of the file to start check +#define END_FILE_SECTION 20000 + +#define Z_AXIS_ALWAYS_ON 1 + +// New XYZ calibration +#define NEW_XYZCAL + +// Fan check +#define FANCHECK + +// Safety timer +#define SAFETYTIMER +#define DEFAULT_SAFETYTIMER_TIME_MINS 30 + +// Filament sensor +#define FILAMENT_SENSOR +#define IR_SENSOR + + +#define DEBUG_DCODE3 + +//#define DEBUG_BUILD +#ifdef DEBUG_BUILD +//#define _NO_ASM +#define DEBUG_DCODES //D codes +#define DEBUG_STACK_MONITOR //Stack monitor in stepper ISR +//#define DEBUG_FSENSOR_LOG //Reports fsensor status to serial +//#define DEBUG_CRASHDET_COUNTERS //Display crash-detection counters on LCD +//#define DEBUG_RESUME_PRINT //Resume/save print debug enable +//#define DEBUG_UVLO_AUTOMATIC_RECOVER // Power panic automatic recovery debug output +//#define DEBUG_DISABLE_XMINLIMIT //x min limit ignored +//#define DEBUG_DISABLE_XMAXLIMIT //x max limit ignored +//#define DEBUG_DISABLE_YMINLIMIT //y min limit ignored +//#define DEBUG_DISABLE_YMAXLIMIT //y max limit ignored +//#define DEBUG_DISABLE_ZMINLIMIT //z min limit ignored +//#define DEBUG_DISABLE_ZMAXLIMIT //z max limit ignored +//#define DEBUG_DISABLE_STARTMSGS //no startup messages +//#define DEBUG_DISABLE_MINTEMP //mintemp error ignored +//#define DEBUG_DISABLE_SWLIMITS //sw limits ignored +//#define DEBUG_DISABLE_LCD_STATUS_LINE //empty four lcd line +//#define DEBUG_DISABLE_PREVENT_EXTRUDER //cold extrusion and long extrusion allowed +//#define DEBUG_DISABLE_PRUSA_STATISTICS //disable prusa_statistics() mesages +//#define DEBUG_XSTEP_DUP_PIN 21 //duplicate x-step output to pin 21 (SCL on P3) +//#define DEBUG_YSTEP_DUP_PIN 21 //duplicate y-step output to pin 21 (SCL on P3) +//#define DEBUG_DISABLE_FANCHECK //disable fan check (no ISR INT7, check disabled) +//#define DEBUG_DUMP_TO_2ND_SERIAL //dump received characters to 2nd serial line +//#define DEBUG_STEPPER_TIMER_MISSED // Stop on stepper timer overflow, beep and display a message. +//#define PLANNER_DIAGNOSTICS // Show the planner queue status on printer display. +//#define CMD_DIAGNOSTICS //Show cmd queue length on printer display +#endif /* DEBUG_BUILD */ + +//#define FSENSOR_QUALITY + + +/*------------------------------------ + EXTRUDER SETTINGS + *------------------------------------*/ + +// Mintemps +#define HEATER_0_MINTEMP 30 +#define HEATER_1_MINTEMP 5 +#define HEATER_2_MINTEMP 5 +#define HEATER_MINTEMP_DELAY 15000 // [ms] ! if changed, check maximal allowed value @ ShortTimer +#if HEATER_MINTEMP_DELAY>USHRT_MAX +#error "Check maximal allowed value @ ShortTimer (see HEATER_MINTEMP_DELAY definition)" +#endif +#define BED_MINTEMP 30 +#define BED_MINTEMP_DELAY 50000 // [ms] ! if changed, check maximal allowed value @ ShortTimer +#if BED_MINTEMP_DELAY>USHRT_MAX +#error "Check maximal allowed value @ ShortTimer (see BED_MINTEMP_DELAY definition)" +#endif + +// Maxtemps +#if defined(E3D_PT100_EXTRUDER_WITH_AMP) || defined(E3D_PT100_EXTRUDER_NO_AMP) +#define HEATER_0_MAXTEMP 410 +#else +#define HEATER_0_MAXTEMP 305 +#endif +#define HEATER_1_MAXTEMP 305 +#define HEATER_2_MAXTEMP 305 +#define BED_MAXTEMP 125 + +#if defined(E3D_PT100_EXTRUDER_WITH_AMP) || defined(E3D_PT100_EXTRUDER_NO_AMP) +// Define PID constants for extruder with PT100 +#define DEFAULT_Kp 21.70 +#define DEFAULT_Ki 1.60 +#define DEFAULT_Kd 73.76 +#else +// Define PID constants for extruder +//#define DEFAULT_Kp 40.925 +//#define DEFAULT_Ki 4.875 +//#define DEFAULT_Kd 86.085 +#define DEFAULT_Kp 16.13 +#define DEFAULT_Ki 1.1625 +#define DEFAULT_Kd 56.23 +#endif + +// Extrude mintemp +#define EXTRUDE_MINTEMP 175 + +// Extruder cooling fans +#define EXTRUDER_0_AUTO_FAN_PIN 8 +#define EXTRUDER_1_AUTO_FAN_PIN -1 +#define EXTRUDER_2_AUTO_FAN_PIN -1 +#define EXTRUDER_AUTO_FAN_TEMPERATURE 50 +#define EXTRUDER_AUTO_FAN_SPEED 255 // == full speed + + +/*------------------------------------ + LOAD/UNLOAD FILAMENT SETTINGS + *------------------------------------*/ + +// Load filament commands +#define LOAD_FILAMENT_0 "M83" +#define LOAD_FILAMENT_1 "G1 E70 F400" +#define LOAD_FILAMENT_2 "G1 E40 F100" + +// Unload filament commands +#define UNLOAD_FILAMENT_0 "M83" +#define UNLOAD_FILAMENT_1 "G1 E-80 F7000" + +/*------------------------------------ + CHANGE FILAMENT SETTINGS + *------------------------------------*/ + +// Filament change configuration +#define FILAMENTCHANGEENABLE +#ifdef FILAMENTCHANGEENABLE +#define FILAMENTCHANGE_XPOS 211 +#define FILAMENTCHANGE_YPOS 0 +#define FILAMENTCHANGE_ZADD 2 +#define FILAMENTCHANGE_FIRSTRETRACT -2 +#define FILAMENTCHANGE_FINALRETRACT -80 + +#define FILAMENTCHANGE_FIRSTFEED 70 //E distance in mm for fast filament loading sequence used used in filament change (M600) +#define FILAMENTCHANGE_FINALFEED 25 //E distance in mm for slow filament loading sequence used used in filament change (M600) and filament load (M701) +#define FILAMENTCHANGE_RECFEED 5 + +#define FILAMENTCHANGE_XYFEED 50 +#define FILAMENTCHANGE_EFEED_FIRST 20 // feedrate in mm/s for fast filament loading sequence used in filament change (M600) +#define FILAMENTCHANGE_EFEED_FINAL 3.3f // feedrate in mm/s for slow filament loading sequence used in filament change (M600) and filament load (M701) +//#define FILAMENTCHANGE_RFEED 400 +#define FILAMENTCHANGE_RFEED 7000 / 60 +#define FILAMENTCHANGE_EXFEED 2 +#define FILAMENTCHANGE_ZFEED 15 + +#endif + +/*------------------------------------ + ADDITIONAL FEATURES SETTINGS + *------------------------------------*/ + +// Define Prusa filament runout sensor +//#define FILAMENT_RUNOUT_SUPPORT + +#ifdef FILAMENT_RUNOUT_SUPPORT +#define FILAMENT_RUNOUT_SENSOR 1 +#endif + +// temperature runaway +#define TEMP_RUNAWAY_BED_HYSTERESIS 5 +#define TEMP_RUNAWAY_BED_TIMEOUT 360 + +#define TEMP_RUNAWAY_EXTRUDER_HYSTERESIS 15 +#define TEMP_RUNAWAY_EXTRUDER_TIMEOUT 45 + +/*------------------------------------ + MOTOR CURRENT SETTINGS + *------------------------------------*/ + +// Motor Current setting for BIG RAMBo +#define DIGIPOT_MOTOR_CURRENT {135,135,135,135,135} // Values 0-255 (RAMBO 135 = ~0.75A, 185 = ~1A) +#define DIGIPOT_MOTOR_CURRENT_LOUD {135,135,135,135,135} + +// Motor Current settings for RAMBo mini PWM value = MotorCurrentSetting * 255 / range +#if MOTHERBOARD == BOARD_RAMBO_MINI_1_0 || MOTHERBOARD == BOARD_RAMBO_MINI_1_3 +#define MOTOR_CURRENT_PWM_RANGE 2000 +#define DEFAULT_PWM_MOTOR_CURRENT {270, 830, 450} // {XY,Z,E} +#define DEFAULT_PWM_MOTOR_CURRENT_LOUD {540, 830, 500} // {XY,Z,E} +#define Z_SILENT 0 +#define Z_HIGH_POWER 200 +#endif + +/*------------------------------------ + BED SETTINGS + *------------------------------------*/ + +// Define Mesh Bed Leveling system to enable it +#define MESH_BED_LEVELING +#ifdef MESH_BED_LEVELING + +#define MBL_Z_STEP 0.01 + +// Mesh definitions +#define MESH_MIN_X 35 +#define MESH_MAX_X 238 +#define MESH_MIN_Y 6 +#define MESH_MAX_Y 202 + +// Mesh upsample definition +#define MESH_NUM_X_POINTS 7 +#define MESH_NUM_Y_POINTS 7 +// Mesh measure definition +#define MESH_MEAS_NUM_X_POINTS 3 +#define MESH_MEAS_NUM_Y_POINTS 3 + +#define MESH_HOME_Z_CALIB 0.2 +#define MESH_HOME_Z_SEARCH 5 //Z lift for homing, mesh bed leveling etc. + +#define X_PROBE_OFFSET_FROM_EXTRUDER 23 // Z probe to nozzle X offset: -left +right +#define Y_PROBE_OFFSET_FROM_EXTRUDER 5 // Z probe to nozzle Y offset: -front +behind +#define Z_PROBE_OFFSET_FROM_EXTRUDER -0.4 // Z probe to nozzle Z offset: -below (always!) +#endif + +// Bed Temperature Control +// Select PID or bang-bang with PIDTEMPBED. If bang-bang, BED_LIMIT_SWITCHING will enable hysteresis +// +// Uncomment this to enable PID on the bed. It uses the same frequency PWM as the extruder. +// If your PID_dT above is the default, and correct for your hardware/configuration, that means 7.689Hz, +// which is fine for driving a square wave into a resistive load and does not significantly impact you FET heating. +// This also works fine on a Fotek SSR-10DA Solid State Relay into a 250W heater. +// If your configuration is significantly different than this and you don't understand the issues involved, you probably +// shouldn't use bed PID until someone else verifies your hardware works. +// If this is enabled, find your own PID constants below. +#define PIDTEMPBED +// +//#define BED_LIMIT_SWITCHING + +// This sets the max power delivered to the bed, and replaces the HEATER_BED_DUTY_CYCLE_DIVIDER option. +// all forms of bed control obey this (PID, bang-bang, bang-bang with hysteresis) +// setting this to anything other than 255 enables a form of PWM to the bed just like HEATER_BED_DUTY_CYCLE_DIVIDER did, +// so you shouldn't use it unless you are OK with PWM on your bed. (see the comment on enabling PIDTEMPBED) +#define MAX_BED_POWER 255 // limits duty cycle to bed; 255=full current + +// Bed temperature compensation settings +#define BED_OFFSET 10 +#define BED_OFFSET_START 40 +#define BED_OFFSET_CENTER 50 + + +#ifdef PIDTEMPBED +//120v 250W silicone heater into 4mm borosilicate (MendelMax 1.5+) +//from FOPDT model - kp=.39 Tp=405 Tdead=66, Tc set to 79.2, aggressive factor of .15 (vs .1, 1, 10) +#if defined(E3D_PT100_BED_WITH_AMP) || defined(E3D_PT100_BED_NO_AMP) +// Define PID constants for extruder with PT100 +#define DEFAULT_bedKp 21.70 +#define DEFAULT_bedKi 1.60 +#define DEFAULT_bedKd 73.76 +#else +#define DEFAULT_bedKp 126.13 +#define DEFAULT_bedKi 4.30 +#define DEFAULT_bedKd 924.76 +#endif + +//120v 250W silicone heater into 4mm borosilicate (MendelMax 1.5+) +//from pidautotune +// #define DEFAULT_bedKp 97.1 +// #define DEFAULT_bedKi 1.41 +// #define DEFAULT_bedKd 1675.16 + +// FIND YOUR OWN: "M303 E-1 C8 S90" to run autotune on the bed at 90 degreesC for 8 cycles. +#endif // PIDTEMPBED + + +/*----------------------------------- + PREHEAT SETTINGS + *------------------------------------*/ + +#define FARM_PREHEAT_HOTEND_TEMP 250 +#define FARM_PREHEAT_HPB_TEMP 40 +#define FARM_PREHEAT_FAN_SPEED 0 + +#define PLA_PREHEAT_HOTEND_TEMP 215 +#define PLA_PREHEAT_HPB_TEMP 60 +#define PLA_PREHEAT_FAN_SPEED 0 + +#define ABS_PREHEAT_HOTEND_TEMP 255 +#define ABS_PREHEAT_HPB_TEMP 100 +#define ABS_PREHEAT_FAN_SPEED 0 + +#define HIPS_PREHEAT_HOTEND_TEMP 220 +#define HIPS_PREHEAT_HPB_TEMP 100 +#define HIPS_PREHEAT_FAN_SPEED 0 + +#define PP_PREHEAT_HOTEND_TEMP 254 +#define PP_PREHEAT_HPB_TEMP 100 +#define PP_PREHEAT_FAN_SPEED 0 + +#define PET_PREHEAT_HOTEND_TEMP 230 +#define PET_PREHEAT_HPB_TEMP 85 +#define PET_PREHEAT_FAN_SPEED 0 + +#define FLEX_PREHEAT_HOTEND_TEMP 240 +#define FLEX_PREHEAT_HPB_TEMP 50 +#define FLEX_PREHEAT_FAN_SPEED 0 + +/*------------------------------------ + THERMISTORS SETTINGS + *------------------------------------*/ + +// +//--NORMAL IS 4.7kohm PULLUP!-- 1kohm pullup can be used on hotend sensor, using correct resistor and table +// +//// Temperature sensor settings: +// -2 is thermocouple with MAX6675 (only for sensor 0) +// -1 is thermocouple with AD595 +// 0 is not used +// 1 is 100k thermistor - best choice for EPCOS 100k (4.7k pullup) +// 2 is 200k thermistor - ATC Semitec 204GT-2 (4.7k pullup) +// 3 is Mendel-parts thermistor (4.7k pullup) +// 4 is 10k thermistor !! do not use it for a hotend. It gives bad resolution at high temp. !! +// 5 is 100K thermistor - ATC Semitec 104GT-2 (Used in ParCan & J-Head) (4.7k pullup) +// 6 is 100k EPCOS - Not as accurate as table 1 (created using a fluke thermocouple) (4.7k pullup) +// 7 is 100k Honeywell thermistor 135-104LAG-J01 (4.7k pullup) +// 71 is 100k Honeywell thermistor 135-104LAF-J01 (4.7k pullup) +// 8 is 100k 0603 SMD Vishay NTCS0603E3104FXT (4.7k pullup) +// 9 is 100k GE Sensing AL03006-58.2K-97-G1 (4.7k pullup) +// 10 is 100k RS thermistor 198-961 (4.7k pullup) +// 11 is 100k beta 3950 1% thermistor (4.7k pullup) +// 12 is 100k 0603 SMD Vishay NTCS0603E3104FXT (4.7k pullup) (calibrated for Makibox hot bed) +// 13 is 100k Hisens 3950 1% up to 300°C for hotend "Simple ONE " & "Hotend "All In ONE" +// 20 is the PT100 circuit found in the Ultimainboard V2.x +// 60 is 100k Maker's Tool Works Kapton Bed Thermistor beta=3950 +// +// 1k ohm pullup tables - This is not normal, you would have to have changed out your 4.7k for 1k +// (but gives greater accuracy and more stable PID) +// 51 is 100k thermistor - EPCOS (1k pullup) +// 52 is 200k thermistor - ATC Semitec 204GT-2 (1k pullup) +// 55 is 100k thermistor - ATC Semitec 104GT-2 (Used in ParCan & J-Head) (1k pullup) +// +// 1047 is Pt1000 with 4k7 pullup +// 1010 is Pt1000 with 1k pullup (non standard) +// 147 is Pt100 with 4k7 pullup +// 148 is E3D Pt100 with 4k7 pullup and no PT100 Amplifier on a MiniRambo 1.3a +// 247 is Pt100 with 4k7 pullup and PT100 Amplifier +// 110 is Pt100 with 1k pullup (non standard) + +#if defined(E3D_PT100_EXTRUDER_WITH_AMP) +#define TEMP_SENSOR_0 247 +#elif defined(E3D_PT100_EXTRUDER_NO_AMP) +#define TEMP_SENSOR_0 148 +#else +#define TEMP_SENSOR_0 5 +#endif +#define TEMP_SENSOR_1 0 +#define TEMP_SENSOR_2 0 +#if defined(E3D_PT100_BED_WITH_AMP) +#define TEMP_SENSOR_BED 247 +#elif defined(E3D_PT100_BED_NO_AMP) +#define TEMP_SENSOR_BED 148 +#else +#define TEMP_SENSOR_BED 1 +#endif +#define TEMP_SENSOR_PINDA 1 + +#define STACK_GUARD_TEST_VALUE 0xA2A2 + +#define MAX_BED_TEMP_CALIBRATION 50 +#define MAX_HOTEND_TEMP_CALIBRATION 50 + +#define MAX_E_STEPS_PER_UNIT 250 +#define MIN_E_STEPS_PER_UNIT 100 + +#define Z_BABYSTEP_MIN -3999 +#define Z_BABYSTEP_MAX 0 + +#define PINDA_PREHEAT_X 20 +#define PINDA_PREHEAT_Y 60 +#define PINDA_PREHEAT_Z 0.15 +/* +#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 +#define PINDA_STEP_T 10 +#define PINDA_MAX_T 100 + +#define PING_TIME 60 //time in s +#define PING_TIME_LONG 600 //10 min; used when length of commands buffer > 0 to avoid 0 triggering when dealing with long gcodes +#define PING_ALLERT_PERIOD 60 //time in s + +#define NC_TIME 10 //time in s for periodic important status messages sending which needs reponse from monitoring +#define NC_BUTTON_LONG_PRESS 15 //time in s + +#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 DEFAULT_PID_TEMP 210 + +#define MIN_PRINT_FAN_SPEED 75 + + +#define M600_TIMEOUT 600 //seconds + +//#define SUPPORT_VERBOSITY + +#define MMU_REQUIRED_FW_BUILDNR 132 +//#define MMU_DEBUG //print communication between MMU2 and printer on serial + +#define MMU_IDLER_SENSOR_ATTEMPTS_NR 21 //max. number of attempts to load filament if first load failed; value for max bowden length and case when loading fails right at the beginning + +#endif //__CONFIGURATION_PRUSA_H diff --git a/Firmware/variants/1_75mm_MK3S-EINSy10a-E3Dv6full.h b/Firmware/variants/1_75mm_MK3S-EINSy10a-E3Dv6full.h new file mode 100644 index 000000000..f64428cbe --- /dev/null +++ b/Firmware/variants/1_75mm_MK3S-EINSy10a-E3Dv6full.h @@ -0,0 +1,628 @@ +#ifndef CONFIGURATION_PRUSA_H +#define CONFIGURATION_PRUSA_H + +#include +/*------------------------------------ + GENERAL SETTINGS + *------------------------------------*/ + +// Printer revision +#define PRINTER_TYPE PRINTER_MK3S +#define FILAMENT_SIZE "1_75mm_MK3" +#define NOZZLE_TYPE "E3Dv6full" + +// Developer flag +#define DEVELOPER + +// Printer name +#define CUSTOM_MENDEL_NAME "Prusa i3 MK3S" + +// Electronics +#define MOTHERBOARD BOARD_EINSY_1_0a +#define STEEL_SHEET +#define HAS_SECOND_SERIAL_PORT + + +// Uncomment the below for the E3D PT100 temperature sensor (with or without PT100 Amplifier) +//#define E3D_PT100_EXTRUDER_WITH_AMP +//#define E3D_PT100_EXTRUDER_NO_AMP +//#define E3D_PT100_BED_WITH_AMP +//#define E3D_PT100_BED_NO_AMP + + +/*------------------------------------ + AXIS SETTINGS + *------------------------------------*/ + +// Steps per unit {X,Y,Z,E} +//#define DEFAULT_AXIS_STEPS_PER_UNIT {100,100,3200/8,140} +#define DEFAULT_AXIS_STEPS_PER_UNIT {100,100,3200/8,280} +//#define DEFAULT_AXIS_STEPS_PER_UNIT {100,100,3200/8,560} + +// Endstop inverting +#define X_MIN_ENDSTOP_INVERTING 0 // set to 1 to invert the logic of the endstop. +#define Y_MIN_ENDSTOP_INVERTING 0 // set to 1 to invert the logic of the endstop. +#define Z_MIN_ENDSTOP_INVERTING 0 // set to 1 to invert the logic of the endstop. + +// Direction inverting +#define INVERT_X_DIR 1 // for Mendel set to 0, for Orca set to 1 +#define INVERT_Y_DIR 0 // for Mendel set to 1, for Orca set to 0 +#define INVERT_Z_DIR 1 // for Mendel set to 0, for Orca set to 1 +#define INVERT_E0_DIR 0 // for direct drive extruder v9 set to 1, for geared extruder set to 0 +#define INVERT_E1_DIR 0 // for direct drive extruder v9 set to 1, for geared extruder set to 0 +#define INVERT_E2_DIR 0 // for direct drive extruder v9 set to 1, for geared extruder set to 0 + +// Home position +#define MANUAL_X_HOME_POS 0 +#define MANUAL_Y_HOME_POS -2.2 +#define MANUAL_Z_HOME_POS 0.2 + +// Travel limits after homing +#define X_MAX_POS 255 +#define X_MIN_POS 0 +#define Y_MAX_POS 212.5 +#define Y_MIN_POS -4 //orig -4 +#define Z_MAX_POS 210 +#define Z_MIN_POS 0.15 + +// Canceled home position +#define X_CANCEL_POS 50 +#define Y_CANCEL_POS 190 + +//Pause print position +#define X_PAUSE_POS 50 +#define Y_PAUSE_POS 190 +#define Z_PAUSE_LIFT 20 + +#define NUM_AXIS 4 // The axis order in all axis related arrays is X, Y, Z, E +#define HOMING_FEEDRATE {3000, 3000, 800, 0} // set the homing speeds (mm/min) // 3000 is also valid for stallGuard homing. Valid range: 2200 - 3000 + +//#define DEFAULT_Y_OFFSET 4.f // Default distance of Y_MIN_POS point from endstop, when the printer is not calibrated. +/** + * [0,0] steel sheet print area point X coordinate in bed print area coordinates + */ +#define SHEET_PRINT_ZERO_REF_X 0.f +/** + * [0,0] steel sheet print area point Y coordinate in bed print area coordinates + */ +#define SHEET_PRINT_ZERO_REF_Y -2.f + +#define DEFAULT_MAX_FEEDRATE {200, 200, 12, 120} // (mm/sec) max feedrate (M203) +#define DEFAULT_MAX_FEEDRATE_SILENT {100, 100, 12, 120} // (mm/sec) max feedrate (M203), silent mode + +#define DEFAULT_MAX_ACCELERATION {1000, 1000, 200, 5000} // (mm/sec^2) max acceleration (M201) +#define DEFAULT_MAX_ACCELERATION_SILENT {960, 960, 200, 5000} // (mm/sec^2) max acceleration (M201), silent mode + + +#define DEFAULT_ACCELERATION 1250 // X, Y, Z and E max acceleration in mm/s^2 for printing moves (M204S) +#define DEFAULT_RETRACT_ACCELERATION 1250 // X, Y, Z and E max acceleration in mm/s^2 for retracts (M204T) + +#define MANUAL_FEEDRATE {2700, 2700, 1000, 100} // set the speeds for manual moves (mm/min) + +//Silent mode limits +#define SILENT_MAX_ACCEL_XY 960ul // max acceleration in silent mode in mm/s^2 +#define SILENT_MAX_FEEDRATE_XY 100 // max feedrate in mm/s + +//Normal mode limits +#define NORMAL_MAX_ACCEL_XY 2500ul // max acceleration in normal mode in mm/s^2 +#define NORMAL_MAX_FEEDRATE_XY 200 // max feedrate in mm/s + +//number of bytes from end of the file to start check +#define END_FILE_SECTION 20000 + +#define Z_AXIS_ALWAYS_ON 1 + +//Crash detection +#define CRASHDET_TIMER 45 //seconds +#define CRASHDET_COUNTER_MAX 3 + +// New XYZ calibration +#define NEW_XYZCAL + +// Watchdog support +#define WATCHDOG + +// Power panic +#define UVLO_SUPPORT + +// Fan check +#define FANCHECK + +// Safety timer +#define SAFETYTIMER +#define DEFAULT_SAFETYTIMER_TIME_MINS 30 + +// Filament sensor +#define FILAMENT_SENSOR +#define IR_SENSOR + +// Backlash - +//#define BACKLASH_X +//#define BACKLASH_Y + + +// Minimum ambient temperature limit to start triggering MINTEMP errors [C] +// this value is litlebit higher that real limit, because ambient termistor is on the board and is temperated from it, +// temperature inside the case is around 31C for ambient temperature 25C, when the printer is powered on long time and idle +// the real limit is 15C (same as MINTEMP limit), this is because 15C is end of scale for both used thermistors (bed, heater) +#define MINTEMP_MINAMBIENT 25 +#define MINTEMP_MINAMBIENT_RAW 978 + +#define DEBUG_DCODE3 + +//#define DEBUG_BUILD +//#define DEBUG_SEC_LANG //secondary language debug output at startup +//#define DEBUG_W25X20CL //debug external spi flash +#ifdef DEBUG_BUILD +//#define _NO_ASM +#define DEBUG_DCODES //D codes +#define DEBUG_STACK_MONITOR //Stack monitor in stepper ISR +//#define DEBUG_FSENSOR_LOG //Reports fsensor status to serial +//#define DEBUG_CRASHDET_COUNTERS //Display crash-detection counters on LCD +//#define DEBUG_RESUME_PRINT //Resume/save print debug enable +//#define DEBUG_UVLO_AUTOMATIC_RECOVER // Power panic automatic recovery debug output +//#define DEBUG_DISABLE_XMINLIMIT //x min limit ignored +//#define DEBUG_DISABLE_XMAXLIMIT //x max limit ignored +//#define DEBUG_DISABLE_YMINLIMIT //y min limit ignored +//#define DEBUG_DISABLE_YMAXLIMIT //y max limit ignored +//#define DEBUG_DISABLE_ZMINLIMIT //z min limit ignored +//#define DEBUG_DISABLE_ZMAXLIMIT //z max limit ignored +#define DEBUG_DISABLE_STARTMSGS //no startup messages +//#define DEBUG_DISABLE_MINTEMP //mintemp error ignored +//#define DEBUG_DISABLE_SWLIMITS //sw limits ignored +//#define DEBUG_DISABLE_LCD_STATUS_LINE //empty four lcd line +//#define DEBUG_DISABLE_PREVENT_EXTRUDER //cold extrusion and long extrusion allowed +//#define DEBUG_DISABLE_PRUSA_STATISTICS //disable prusa_statistics() mesages +//#define DEBUG_DISABLE_FORCE_SELFTEST //disable force selftest +//#define DEBUG_XSTEP_DUP_PIN 21 //duplicate x-step output to pin 21 (SCL on P3) +//#define DEBUG_YSTEP_DUP_PIN 21 //duplicate y-step output to pin 21 (SCL on P3) +//#define DEBUG_DISABLE_FANCHECK //disable fan check (no ISR INT7, check disabled) +//#define DEBUG_DISABLE_FSENSORCHECK //disable fsensor check (no ISR INT7, check disabled) +#define DEBUG_DUMP_TO_2ND_SERIAL //dump received characters to 2nd serial line +#define DEBUG_STEPPER_TIMER_MISSED // Stop on stepper timer overflow, beep and display a message. +#define PLANNER_DIAGNOSTICS // Show the planner queue status on printer display. +#define CMD_DIAGNOSTICS //Show cmd queue length on printer display +#endif /* DEBUG_BUILD */ + +//#define FSENSOR_QUALITY + + +#define LINEARITY_CORRECTION +#define TMC2130_LINEARITY_CORRECTION +#define TMC2130_LINEARITY_CORRECTION_XYZ +//#define TMC2130_VARIABLE_RESOLUTION + + + +/*------------------------------------ + TMC2130 default settings + *------------------------------------*/ + +#define TMC2130_FCLK 12000000 // fclk = 12MHz + +#define TMC2130_USTEPS_XY 16 // microstep resolution for XY axes +#define TMC2130_USTEPS_Z 16 // microstep resolution for Z axis +#define TMC2130_USTEPS_E 32 // microstep resolution for E axis +#define TMC2130_INTPOL_XY 1 // extrapolate 256 for XY axes +#define TMC2130_INTPOL_Z 1 // extrapolate 256 for Z axis +#define TMC2130_INTPOL_E 1 // extrapolate 256 for E axis + +#define TMC2130_PWM_GRAD_X 2 // PWMCONF +#define TMC2130_PWM_AMPL_X 230 // PWMCONF +#define TMC2130_PWM_AUTO_X 1 // PWMCONF +#define TMC2130_PWM_FREQ_X 2 // PWMCONF + +#define TMC2130_PWM_GRAD_Y 2 // PWMCONF +#define TMC2130_PWM_AMPL_Y 235 // PWMCONF +#define TMC2130_PWM_AUTO_Y 1 // PWMCONF +#define TMC2130_PWM_FREQ_Y 2 // PWMCONF + +#define TMC2130_PWM_GRAD_Z 4 // PWMCONF +#define TMC2130_PWM_AMPL_Z 200 // PWMCONF +#define TMC2130_PWM_AUTO_Z 1 // PWMCONF +#define TMC2130_PWM_FREQ_Z 2 // PWMCONF + +#define TMC2130_PWM_GRAD_E 4 // PWMCONF +#define TMC2130_PWM_AMPL_E 240 // PWMCONF +#define TMC2130_PWM_AUTO_E 1 // PWMCONF +#define TMC2130_PWM_FREQ_E 2 // PWMCONF + +#define TMC2130_TOFF_XYZ 3 // CHOPCONF // fchop = 27.778kHz +#define TMC2130_TOFF_E 3 // CHOPCONF // fchop = 27.778kHz +//#define TMC2130_TOFF_E 4 // CHOPCONF // fchop = 21.429kHz +//#define TMC2130_TOFF_E 5 // CHOPCONF // fchop = 17.442kHz + +//#define TMC2130_STEALTH_E // Extruder stealthChop mode +//#define TMC2130_CNSTOFF_E // Extruder constant-off-time mode (similar to MK2) + +//#define TMC2130_PWM_DIV 683 // PWM frequency divider (1024, 683, 512, 410) +#define TMC2130_PWM_DIV 512 // PWM frequency divider (1024, 683, 512, 410) +#define TMC2130_PWM_CLK (2 * TMC2130_FCLK / TMC2130_PWM_DIV) // PWM frequency (23.4kHz, 35.1kHz, 46.9kHz, 58.5kHz for 12MHz fclk) + +#define TMC2130_TPWMTHRS 0 // TPWMTHRS - Sets the switching speed threshold based on TSTEP from stealthChop to spreadCycle mode +#define TMC2130_THIGH 0 // THIGH - unused + +//#define TMC2130_TCOOLTHRS_X 450 // TCOOLTHRS - coolstep treshold +//#define TMC2130_TCOOLTHRS_Y 450 // TCOOLTHRS - coolstep treshold +#define TMC2130_TCOOLTHRS_X 430 // TCOOLTHRS - coolstep treshold +#define TMC2130_TCOOLTHRS_Y 430 // TCOOLTHRS - coolstep treshold +#define TMC2130_TCOOLTHRS_Z 500 // TCOOLTHRS - coolstep treshold +#define TMC2130_TCOOLTHRS_E 500 // TCOOLTHRS - coolstep treshold + +#define TMC2130_SG_HOMING 1 // stallguard homing +#define TMC2130_SG_THRS_X 3 // stallguard sensitivity for X axis +#define TMC2130_SG_THRS_Y 3 // stallguard sensitivity for Y axis +#define TMC2130_SG_THRS_Z 4 // stallguard sensitivity for Z axis +#define TMC2130_SG_THRS_E 3 // stallguard sensitivity for E axis + +//new settings is possible for vsense = 1, running current value > 31 set vsense to zero and shift both currents by 1 bit right (Z axis only) +#define TMC2130_CURRENTS_H {16, 20, 35, 30} // default holding currents for all axes +#define TMC2130_CURRENTS_R {16, 20, 35, 30} // default running currents for all axes +#define TMC2130_UNLOAD_CURRENT_R 12 // lowe current for M600 to protect filament sensor + +#define TMC2130_STEALTH_Z + +//#define TMC2130_SERVICE_CODES_M910_M918 + +//#define TMC2130_DEBUG +//#define TMC2130_DEBUG_WR +//#define TMC2130_DEBUG_RD + + +/*------------------------------------ + EXTRUDER SETTINGS + *------------------------------------*/ + +// Mintemps +#define HEATER_0_MINTEMP 15 +#define HEATER_1_MINTEMP 5 +#define HEATER_2_MINTEMP 5 +#define HEATER_MINTEMP_DELAY 15000 // [ms] ! if changed, check maximal allowed value @ ShortTimer +#if HEATER_MINTEMP_DELAY>USHRT_MAX +#error "Check maximal allowed value @ ShortTimer (see HEATER_MINTEMP_DELAY definition)" +#endif +#define BED_MINTEMP 15 +#define BED_MINTEMP_DELAY 50000 // [ms] ! if changed, check maximal allowed value @ ShortTimer +#if BED_MINTEMP_DELAY>USHRT_MAX +#error "Check maximal allowed value @ ShortTimer (see BED_MINTEMP_DELAY definition)" +#endif + +// Maxtemps +#if defined(E3D_PT100_EXTRUDER_WITH_AMP) || defined(E3D_PT100_EXTRUDER_NO_AMP) +#define HEATER_0_MAXTEMP 410 +#else +#define HEATER_0_MAXTEMP 305 +#endif +#define HEATER_1_MAXTEMP 305 +#define HEATER_2_MAXTEMP 305 +#define BED_MAXTEMP 125 + +#if defined(E3D_PT100_EXTRUDER_WITH_AMP) || defined(E3D_PT100_EXTRUDER_NO_AMP) +// Define PID constants for extruder with PT100 +#define DEFAULT_Kp 21.70 +#define DEFAULT_Ki 1.60 +#define DEFAULT_Kd 73.76 +#else +// Define PID constants for extruder +//#define DEFAULT_Kp 40.925 +//#define DEFAULT_Ki 4.875 +//#define DEFAULT_Kd 86.085 +#define DEFAULT_Kp 16.13 +#define DEFAULT_Ki 1.1625 +#define DEFAULT_Kd 56.23 +#endif + +// Extrude mintemp +#define EXTRUDE_MINTEMP 175 + +// Extruder cooling fans +#define EXTRUDER_0_AUTO_FAN_PIN 8 +#define EXTRUDER_1_AUTO_FAN_PIN -1 +#define EXTRUDER_2_AUTO_FAN_PIN -1 +#define EXTRUDER_AUTO_FAN_TEMPERATURE 50 +#define EXTRUDER_AUTO_FAN_SPEED 255 // == full speed + + + +/*------------------------------------ + LOAD/UNLOAD FILAMENT SETTINGS + *------------------------------------*/ + +// Load filament commands +#define LOAD_FILAMENT_0 "M83" +#define LOAD_FILAMENT_1 "G1 E70 F400" +#define LOAD_FILAMENT_2 "G1 E40 F100" + +// Unload filament commands +#define UNLOAD_FILAMENT_0 "M83" +#define UNLOAD_FILAMENT_1 "G1 E-80 F7000" + +/*------------------------------------ + CHANGE FILAMENT SETTINGS + *------------------------------------*/ + +// Filament change configuration +#define FILAMENTCHANGEENABLE +#ifdef FILAMENTCHANGEENABLE +#define FILAMENTCHANGE_XPOS 211 +#define FILAMENTCHANGE_YPOS 0 +#define FILAMENTCHANGE_ZADD 2 +#define FILAMENTCHANGE_FIRSTRETRACT -2 +#define FILAMENTCHANGE_FINALRETRACT -80 + +#define FILAMENTCHANGE_FIRSTFEED 70 //E distance in mm for fast filament loading sequence used used in filament change (M600) +#define FILAMENTCHANGE_FINALFEED 25 //E distance in mm for slow filament loading sequence used used in filament change (M600) and filament load (M701) +#define FILAMENTCHANGE_RECFEED 5 + +#define FILAMENTCHANGE_XYFEED 50 +#define FILAMENTCHANGE_EFEED_FIRST 20 // feedrate in mm/s for fast filament loading sequence used in filament change (M600) +#define FILAMENTCHANGE_EFEED_FINAL 3.3f // feedrate in mm/s for slow filament loading sequence used in filament change (M600) and filament load (M701) +//#define FILAMENTCHANGE_RFEED 400 +#define FILAMENTCHANGE_RFEED 7000 / 60 +#define FILAMENTCHANGE_EXFEED 2 +#define FILAMENTCHANGE_ZFEED 15 + +#endif + +/*------------------------------------ + ADDITIONAL FEATURES SETTINGS + *------------------------------------*/ + +// Define Prusa filament runout sensor +//#define FILAMENT_RUNOUT_SUPPORT + +#ifdef FILAMENT_RUNOUT_SUPPORT +#define FILAMENT_RUNOUT_SENSOR 1 +#endif + +// temperature runaway +#define TEMP_RUNAWAY_BED_HYSTERESIS 5 +#define TEMP_RUNAWAY_BED_TIMEOUT 360 + +#define TEMP_RUNAWAY_EXTRUDER_HYSTERESIS 15 +#define TEMP_RUNAWAY_EXTRUDER_TIMEOUT 45 + +/*------------------------------------ + MOTOR CURRENT SETTINGS + *------------------------------------*/ + +// Motor Current settings for Einsy/tmc = 0..63 +#define MOTOR_CURRENT_PWM_RANGE 63 + +/*------------------------------------ + BED SETTINGS + *------------------------------------*/ + +// Define Mesh Bed Leveling system to enable it +#define MESH_BED_LEVELING +#ifdef MESH_BED_LEVELING + +#define MBL_Z_STEP 0.01 + +// Mesh definitions +#define MESH_MIN_X 35 +#define MESH_MAX_X 238 +#define MESH_MIN_Y 6 +#define MESH_MAX_Y 202 + +// Mesh upsample definition +#define MESH_NUM_X_POINTS 7 +#define MESH_NUM_Y_POINTS 7 +// Mesh measure definition +#define MESH_MEAS_NUM_X_POINTS 3 +#define MESH_MEAS_NUM_Y_POINTS 3 + +#define MESH_HOME_Z_CALIB 0.2 +#define MESH_HOME_Z_SEARCH 5 //Z lift for homing, mesh bed leveling etc. + +#define X_PROBE_OFFSET_FROM_EXTRUDER 23 // Z probe to nozzle X offset: -left +right +#define Y_PROBE_OFFSET_FROM_EXTRUDER 5 // Z probe to nozzle Y offset: -front +behind +#define Z_PROBE_OFFSET_FROM_EXTRUDER -0.4 // Z probe to nozzle Z offset: -below (always!) +#endif + +// Bed Temperature Control +// Select PID or bang-bang with PIDTEMPBED. If bang-bang, BED_LIMIT_SWITCHING will enable hysteresis +// +// Uncomment this to enable PID on the bed. It uses the same frequency PWM as the extruder. +// If your PID_dT above is the default, and correct for your hardware/configuration, that means 7.689Hz, +// which is fine for driving a square wave into a resistive load and does not significantly impact you FET heating. +// This also works fine on a Fotek SSR-10DA Solid State Relay into a 250W heater. +// If your configuration is significantly different than this and you don't understand the issues involved, you probably +// shouldn't use bed PID until someone else verifies your hardware works. +// If this is enabled, find your own PID constants below. +#define PIDTEMPBED +// +//#define BED_LIMIT_SWITCHING + +// This sets the max power delivered to the bed, and replaces the HEATER_BED_DUTY_CYCLE_DIVIDER option. +// all forms of bed control obey this (PID, bang-bang, bang-bang with hysteresis) +// setting this to anything other than 255 enables a form of PWM to the bed just like HEATER_BED_DUTY_CYCLE_DIVIDER did, +// so you shouldn't use it unless you are OK with PWM on your bed. (see the comment on enabling PIDTEMPBED) +#define MAX_BED_POWER 255 // limits duty cycle to bed; 255=full current + +// Bed temperature compensation settings +#define BED_OFFSET 10 +#define BED_OFFSET_START 40 +#define BED_OFFSET_CENTER 50 + + +#ifdef PIDTEMPBED +//120v 250W silicone heater into 4mm borosilicate (MendelMax 1.5+) +//from FOPDT model - kp=.39 Tp=405 Tdead=66, Tc set to 79.2, aggressive factor of .15 (vs .1, 1, 10) +#if defined(E3D_PT100_BED_WITH_AMP) || defined(E3D_PT100_BED_NO_AMP) +// Define PID constants for extruder with PT100 +#define DEFAULT_bedKp 21.70 +#define DEFAULT_bedKi 1.60 +#define DEFAULT_bedKd 73.76 +#else +#define DEFAULT_bedKp 126.13 +#define DEFAULT_bedKi 4.30 +#define DEFAULT_bedKd 924.76 +#endif + +//120v 250W silicone heater into 4mm borosilicate (MendelMax 1.5+) +//from pidautotune +// #define DEFAULT_bedKp 97.1 +// #define DEFAULT_bedKi 1.41 +// #define DEFAULT_bedKd 1675.16 + +// FIND YOUR OWN: "M303 E-1 C8 S90" to run autotune on the bed at 90 degreesC for 8 cycles. +#endif // PIDTEMPBED + +//connect message when communication with monitoring broken +//#define FARM_CONNECT_MESSAGE + +/*----------------------------------- + PREHEAT SETTINGS + *------------------------------------*/ + +#define FARM_PREHEAT_HOTEND_TEMP 250 +#define FARM_PREHEAT_HPB_TEMP 60 +#define FARM_PREHEAT_FAN_SPEED 0 + +#define PLA_PREHEAT_HOTEND_TEMP 215 +#define PLA_PREHEAT_HPB_TEMP 60 +#define PLA_PREHEAT_FAN_SPEED 0 + +#define ABS_PREHEAT_HOTEND_TEMP 255 +#define ABS_PREHEAT_HPB_TEMP 100 +#define ABS_PREHEAT_FAN_SPEED 0 + +#define HIPS_PREHEAT_HOTEND_TEMP 220 +#define HIPS_PREHEAT_HPB_TEMP 100 +#define HIPS_PREHEAT_FAN_SPEED 0 + +#define PP_PREHEAT_HOTEND_TEMP 254 +#define PP_PREHEAT_HPB_TEMP 100 +#define PP_PREHEAT_FAN_SPEED 0 + +#define PET_PREHEAT_HOTEND_TEMP 230 +#define PET_PREHEAT_HPB_TEMP 85 +#define PET_PREHEAT_FAN_SPEED 0 + +#define FLEX_PREHEAT_HOTEND_TEMP 240 +#define FLEX_PREHEAT_HPB_TEMP 50 +#define FLEX_PREHEAT_FAN_SPEED 0 + +/*------------------------------------ + THERMISTORS SETTINGS + *------------------------------------*/ + +// +//--NORMAL IS 4.7kohm PULLUP!-- 1kohm pullup can be used on hotend sensor, using correct resistor and table +// +//// Temperature sensor settings: +// -2 is thermocouple with MAX6675 (only for sensor 0) +// -1 is thermocouple with AD595 +// 0 is not used +// 1 is 100k thermistor - best choice for EPCOS 100k (4.7k pullup) +// 2 is 200k thermistor - ATC Semitec 204GT-2 (4.7k pullup) +// 3 is Mendel-parts thermistor (4.7k pullup) +// 4 is 10k thermistor !! do not use it for a hotend. It gives bad resolution at high temp. !! +// 5 is 100K thermistor - ATC Semitec 104GT-2 (Used in ParCan & J-Head) (4.7k pullup) +// 6 is 100k EPCOS - Not as accurate as table 1 (created using a fluke thermocouple) (4.7k pullup) +// 7 is 100k Honeywell thermistor 135-104LAG-J01 (4.7k pullup) +// 71 is 100k Honeywell thermistor 135-104LAF-J01 (4.7k pullup) +// 8 is 100k 0603 SMD Vishay NTCS0603E3104FXT (4.7k pullup) +// 9 is 100k GE Sensing AL03006-58.2K-97-G1 (4.7k pullup) +// 10 is 100k RS thermistor 198-961 (4.7k pullup) +// 11 is 100k beta 3950 1% thermistor (4.7k pullup) +// 12 is 100k 0603 SMD Vishay NTCS0603E3104FXT (4.7k pullup) (calibrated for Makibox hot bed) +// 13 is 100k Hisens 3950 1% up to 300°C for hotend "Simple ONE " & "Hotend "All In ONE" +// 20 is the PT100 circuit found in the Ultimainboard V2.x +// 60 is 100k Maker's Tool Works Kapton Bed Thermistor beta=3950 +// +// 1k ohm pullup tables - This is not normal, you would have to have changed out your 4.7k for 1k +// (but gives greater accuracy and more stable PID) +// 51 is 100k thermistor - EPCOS (1k pullup) +// 52 is 200k thermistor - ATC Semitec 204GT-2 (1k pullup) +// 55 is 100k thermistor - ATC Semitec 104GT-2 (Used in ParCan & J-Head) (1k pullup) +// +// 1047 is Pt1000 with 4k7 pullup +// 1010 is Pt1000 with 1k pullup (non standard) +// 147 is Pt100 with 4k7 pullup +// 148 is E3D Pt100 with 4k7 pullup and no PT100 Amplifier on a MiniRambo 1.3a +// 247 is Pt100 with 4k7 pullup and PT100 Amplifier +// 110 is Pt100 with 1k pullup (non standard) + +#if defined(E3D_PT100_EXTRUDER_WITH_AMP) +#define TEMP_SENSOR_0 247 +#elif defined(E3D_PT100_EXTRUDER_NO_AMP) +#define TEMP_SENSOR_0 148 +#else +#define TEMP_SENSOR_0 5 +#endif +#define TEMP_SENSOR_1 0 +#define TEMP_SENSOR_2 0 +#if defined(E3D_PT100_BED_WITH_AMP) +#define TEMP_SENSOR_BED 247 +#elif defined(E3D_PT100_BED_NO_AMP) +#define TEMP_SENSOR_BED 148 +#else +#define TEMP_SENSOR_BED 1 +#endif +#define TEMP_SENSOR_PINDA 1 +#define TEMP_SENSOR_AMBIENT 2000 + +#define STACK_GUARD_TEST_VALUE 0xA2A2 + +#define MAX_BED_TEMP_CALIBRATION 50 +#define MAX_HOTEND_TEMP_CALIBRATION 50 + +#define MAX_E_STEPS_PER_UNIT 250 +#define MIN_E_STEPS_PER_UNIT 100 + +#define Z_BABYSTEP_MIN -3999 +#define Z_BABYSTEP_MAX 0 + +#define PINDA_PREHEAT_X 20 +#define PINDA_PREHEAT_Y 60 +#define PINDA_PREHEAT_Z 0.15 +/* +#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 +#define PINDA_STEP_T 10 +#define PINDA_MAX_T 100 + +#define PING_TIME 60 //time in s +#define PING_TIME_LONG 600 //10 min; used when length of commands buffer > 0 to avoid 0 triggering when dealing with long gcodes +#define PING_ALLERT_PERIOD 60 //time in s + +#define NC_TIME 10 //time in s for periodic important status messages sending which needs reponse from monitoring +#define NC_BUTTON_LONG_PRESS 15 //time in s + +#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 DEFAULT_PID_TEMP 210 + +#define MIN_PRINT_FAN_SPEED 75 + + +// How much shall the print head be lifted on power panic? +// Ideally the Z axis will reach a zero phase of the stepper driver on power outage. To simplify this, +// UVLO_Z_AXIS_SHIFT shall be an integer multiply of the stepper driver cycle, that is 4x full step. +// For example, the Prusa i3 MK2 with 16 microsteps per full step has Z stepping of 400 microsteps per mm. +// At 400 microsteps per mm, a full step lifts the Z axis by 0.04mm, and a stepper driver cycle is 0.16mm. +// The following example, 12 * (4 * 16 / 400) = 12 * 0.16mm = 1.92mm. +//#define UVLO_Z_AXIS_SHIFT 1.92 +#define UVLO_Z_AXIS_SHIFT 0.64 +// If power panic occured, and the current temperature is higher then target temperature before interrupt minus this offset, print will be recovered automatically. +#define AUTOMATIC_UVLO_BED_TEMP_OFFSET 5 + +#define HEATBED_V2 + +#define M600_TIMEOUT 600 //seconds + +//#define SUPPORT_VERBOSITY + +#define MMU_REQUIRED_FW_BUILDNR 83 +#define MMU_HWRESET +#define MMU_DEBUG //print communication between MMU2 and printer on serial +#define MMU_IDLER_SENSOR_ATTEMPTS_NR 21 //max. number of attempts to load filament if first load failed; value for max bowden length and case when loading fails right at the beginning + +#endif //__CONFIGURATION_PRUSA_H From 1fa9913029d3c4a06728b8ac99faf9ab59d414c3 Mon Sep 17 00:00:00 2001 From: PavelSindler Date: Mon, 28 Jan 2019 21:54:44 +0100 Subject: [PATCH 27/45] include printers.h --- Firmware/ultralcd.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/Firmware/ultralcd.cpp b/Firmware/ultralcd.cpp index 1134c2f23..4190c084d 100644 --- a/Firmware/ultralcd.cpp +++ b/Firmware/ultralcd.cpp @@ -9,6 +9,7 @@ #include "temperature.h" #include "stepper.h" #include "ConfigurationStore.h" +#include "printers.h" #include From 4f67a9569cb88f10ae80621fd3a9374803bbbe99 Mon Sep 17 00:00:00 2001 From: PavelSindler Date: Thu, 31 Jan 2019 18:03:56 +0100 Subject: [PATCH 28/45] dont show filament sensor in extruder info menu --- Firmware/ultralcd.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Firmware/ultralcd.cpp b/Firmware/ultralcd.cpp index 4190c084d..9f7266885 100644 --- a/Firmware/ultralcd.cpp +++ b/Firmware/ultralcd.cpp @@ -1919,7 +1919,7 @@ static void lcd_menu_extruder_info() fan_speed_RPM[1] ); -#ifdef FILAMENT_SENSOR +#ifdef PAT9125 // Display X and Y difference from Filament sensor // Display Light intensity from Filament sensor // Frame_Avg register represents the average brightness of all pixels within a frame (324 pixels). This @@ -1945,7 +1945,7 @@ static void lcd_menu_extruder_info() ); } } -#endif //FILAMENT_SENSOR +#endif //PAT9125 menu_back_if_clicked(); } From 79449a8eafd5c9e8a669827cf5103b83501b9f02 Mon Sep 17 00:00:00 2001 From: Robert Pelnar Date: Fri, 1 Feb 2019 13:29:50 +0100 Subject: [PATCH 29/45] Conditional translation for fan control (FAN_SOFT_PWM), temporary disabled lcd backlight control --- Firmware/pins_Einsy_1_0.h | 2 +- Firmware/temperature.cpp | 7 ++++++- Firmware/ultralcd.cpp | 14 +++++++++++++- 3 files changed, 20 insertions(+), 3 deletions(-) diff --git a/Firmware/pins_Einsy_1_0.h b/Firmware/pins_Einsy_1_0.h index 005683c01..33363388a 100644 --- a/Firmware/pins_Einsy_1_0.h +++ b/Firmware/pins_Einsy_1_0.h @@ -99,7 +99,7 @@ //#define KILL_PIN 32 -#define LCD_BL_PIN 5 //backlight control pin +//#define LCD_BL_PIN 5 //backlight control pin #define BEEPER 84 // Beeper on AUX-4 #define LCD_PINS_RS 82 #define LCD_PINS_ENABLE 61 // !!! changed from 18 (EINY03) diff --git a/Firmware/temperature.cpp b/Firmware/temperature.cpp index a4e08945b..8b2d973f0 100644 --- a/Firmware/temperature.cpp +++ b/Firmware/temperature.cpp @@ -462,7 +462,7 @@ void setExtruderAutoFanState(int pin, bool state) // this idiom allows both digital and PWM fan outputs (see M42 handling). pinMode(pin, OUTPUT); digitalWrite(pin, newFanSpeed); - analogWrite(pin, newFanSpeed); + //analogWrite(pin, newFanSpeed); } #if (defined(FANCHECK) && (((defined(TACH_0) && (TACH_0 >-1)) || (defined(TACH_1) && (TACH_1 > -1))))) @@ -1355,7 +1355,12 @@ if((eSoundMode==e_SOUND_MODE_LOUD)||(eSoundMode==e_SOUND_MODE_ONCE)||(eSoundMode SET_OUTPUT(EXTRUDER_0_AUTO_FAN_PIN); SET_OUTPUT(FAN_PIN); WRITE(EXTRUDER_0_AUTO_FAN_PIN, 1); +#ifdef FAN_SOFT_PWM + fanSpeedSoftPwm = 255; +#else //FAN_SOFT_PWM analogWrite(FAN_PIN, 255); +#endif //FAN_SOFT_PWM + fanSpeed = 255; delayMicroseconds(2000); } diff --git a/Firmware/ultralcd.cpp b/Firmware/ultralcd.cpp index eac434ad2..ad05909ab 100644 --- a/Firmware/ultralcd.cpp +++ b/Firmware/ultralcd.cpp @@ -7260,7 +7260,12 @@ static bool lcd_selftest_manual_fan_check(int _fan, bool check_opposite) if (check_opposite == true) lcd_puts_P(_T(MSG_SELFTEST_EXTRUDER_FAN)); else lcd_puts_P(_T(MSG_SELFTEST_COOLING_FAN)); SET_OUTPUT(FAN_PIN); +#ifdef FAN_SOFT_PWM + fanSpeedSoftPwm = 255; +#else //FAN_SOFT_PWM analogWrite(FAN_PIN, 255); +#endif //FAN_SOFT_PWM + break; } _delay(500); @@ -7285,7 +7290,11 @@ static bool lcd_selftest_manual_fan_check(int _fan, bool check_opposite) case 1: // object cooling fan SET_OUTPUT(FAN_PIN); +#ifdef FAN_SOFT_PWM + fanSpeedSoftPwm = 255; +#else //FAN_SOFT_PWM analogWrite(FAN_PIN, 255); +#endif //FAN_SOFT_PWM break; } @@ -7318,8 +7327,11 @@ static bool lcd_selftest_manual_fan_check(int _fan, bool check_opposite) SET_OUTPUT(EXTRUDER_0_AUTO_FAN_PIN); WRITE(EXTRUDER_0_AUTO_FAN_PIN, 0); SET_OUTPUT(FAN_PIN); +#ifdef FAN_SOFT_PWM + fanSpeedSoftPwm = 0; +#else //FAN_SOFT_PWM analogWrite(FAN_PIN, 0); - +#endif //FAN_SOFT_PWM fanSpeed = 0; manage_heater(); From 4444b155f156f37801c73e14986b789cec238278 Mon Sep 17 00:00:00 2001 From: PavelSindler Date: Fri, 1 Feb 2019 21:04:06 +0100 Subject: [PATCH 30/45] M600: prevention of blob; massage changed when autoload is active --- Firmware/Marlin_main.cpp | 5 +++++ Firmware/ultralcd.cpp | 7 ++++--- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/Firmware/Marlin_main.cpp b/Firmware/Marlin_main.cpp index ec82a1053..0b20192c4 100644 --- a/Firmware/Marlin_main.cpp +++ b/Firmware/Marlin_main.cpp @@ -3081,6 +3081,11 @@ static void gcode_M600(bool automatic, float x_position, float y_position, float sprintf_P(cmd, PSTR("M220 S%i"), feedmultiplyBckp); enquecommand(cmd); +#ifdef IR_SENSOR + //this will set fsensor_watch_autoload to correct value and prevent possible M701 gcode enqueuing when M600 is finished + fsensor_check_autoload(); +#endif //IR_SENSOR + lcd_setstatuspgm(_T(WELCOME_MSG)); custom_message_type = CUSTOM_MSG_TYPE_STATUS; } diff --git a/Firmware/ultralcd.cpp b/Firmware/ultralcd.cpp index 0db1f58ca..ae07f1443 100644 --- a/Firmware/ultralcd.cpp +++ b/Firmware/ultralcd.cpp @@ -2442,9 +2442,10 @@ void lcd_wait_interact() { #else lcd_puts_P(_i("Insert filament"));////MSG_INSERT_FILAMENT c=20 r=0 #endif - lcd_set_cursor(0, 2); - lcd_puts_P(_i("and press the knob"));////MSG_PRESS c=20 r=0 - + if (!fsensor_autoload_enabled) { + lcd_set_cursor(0, 2); + lcd_puts_P(_i("and press the knob"));////MSG_PRESS c=20 r=0 + } } From 5324181bf7c11ba84848462a514d9d9a3fd951a3 Mon Sep 17 00:00:00 2001 From: PavelSindler Date: Sun, 3 Feb 2019 20:56:14 +0100 Subject: [PATCH 31/45] maximum bed level correction value enlarged from 50um to 100um and is now used in menus and mesh bed leveling itself --- Firmware/Marlin_main.cpp | 7 ++++--- Firmware/ultralcd.cpp | 2 -- Firmware/variants/1_75mm_MK2-RAMBo10a-E3Dv6full.h | 3 +++ Firmware/variants/1_75mm_MK2-RAMBo13a-E3Dv6full.h | 3 +++ Firmware/variants/1_75mm_MK25-RAMBo10a-E3Dv6full.h | 3 +++ Firmware/variants/1_75mm_MK25-RAMBo13a-E3Dv6full.h | 3 +++ Firmware/variants/1_75mm_MK25S-RAMBo10a-E3Dv6full.h | 3 +++ Firmware/variants/1_75mm_MK25S-RAMBo13a-E3Dv6full.h | 3 +++ Firmware/variants/1_75mm_MK3-EINSy10a-E3Dv6full.h | 3 +++ Firmware/variants/1_75mm_MK3S-EINSy10a-E3Dv6full.h | 3 +++ 10 files changed, 28 insertions(+), 5 deletions(-) diff --git a/Firmware/Marlin_main.cpp b/Firmware/Marlin_main.cpp index 0b20192c4..b517bbabb 100644 --- a/Firmware/Marlin_main.cpp +++ b/Firmware/Marlin_main.cpp @@ -4619,14 +4619,15 @@ if((eSoundMode==e_SOUND_MODE_LOUD)||(eSoundMode==e_SOUND_MODE_ONCE)) } if (correction == 0) continue; - float offset = float(correction) * 0.001f; - if (fabs(offset) > 0.101f) { + + if (labs(correction) > BED_ADJUSTMENT_UM_MAX) { SERIAL_ERROR_START; SERIAL_ECHOPGM("Excessive bed leveling correction: "); - SERIAL_ECHO(offset); + SERIAL_ECHO(correction); SERIAL_ECHOLNPGM(" microns"); } else { + float offset = float(correction) * 0.001f; switch (i) { case 0: for (uint8_t row = 0; row < 3; ++row) { diff --git a/Firmware/ultralcd.cpp b/Firmware/ultralcd.cpp index ae07f1443..5354b3a30 100644 --- a/Firmware/ultralcd.cpp +++ b/Firmware/ultralcd.cpp @@ -3064,8 +3064,6 @@ void lcd_adjust_bed_reset(void) _md->status = 0; } -#define BED_ADJUSTMENT_UM_MAX 50 - void lcd_adjust_bed(void) { _menu_data_adjust_bed_t* _md = (_menu_data_adjust_bed_t*)&(menu_data[0]); diff --git a/Firmware/variants/1_75mm_MK2-RAMBo10a-E3Dv6full.h b/Firmware/variants/1_75mm_MK2-RAMBo10a-E3Dv6full.h index 852275392..3b9f76987 100644 --- a/Firmware/variants/1_75mm_MK2-RAMBo10a-E3Dv6full.h +++ b/Firmware/variants/1_75mm_MK2-RAMBo10a-E3Dv6full.h @@ -246,6 +246,9 @@ BED SETTINGS #define MESH_MEAS_NUM_X_POINTS 3 #define MESH_MEAS_NUM_Y_POINTS 3 +// Maximum bed level correction value +#define BED_ADJUSTMENT_UM_MAX 100 + #define MESH_HOME_Z_CALIB 0.2 #define MESH_HOME_Z_SEARCH 5 //Z lift for homing, mesh bed leveling etc. diff --git a/Firmware/variants/1_75mm_MK2-RAMBo13a-E3Dv6full.h b/Firmware/variants/1_75mm_MK2-RAMBo13a-E3Dv6full.h index d001f37f8..2d00929f3 100644 --- a/Firmware/variants/1_75mm_MK2-RAMBo13a-E3Dv6full.h +++ b/Firmware/variants/1_75mm_MK2-RAMBo13a-E3Dv6full.h @@ -246,6 +246,9 @@ BED SETTINGS #define MESH_MEAS_NUM_X_POINTS 3 #define MESH_MEAS_NUM_Y_POINTS 3 +// Maximum bed level correction value +#define BED_ADJUSTMENT_UM_MAX 100 + #define MESH_HOME_Z_CALIB 0.2 #define MESH_HOME_Z_SEARCH 5 //Z lift for homing, mesh bed leveling etc. diff --git a/Firmware/variants/1_75mm_MK25-RAMBo10a-E3Dv6full.h b/Firmware/variants/1_75mm_MK25-RAMBo10a-E3Dv6full.h index 464ef55c7..a9dcefe41 100644 --- a/Firmware/variants/1_75mm_MK25-RAMBo10a-E3Dv6full.h +++ b/Firmware/variants/1_75mm_MK25-RAMBo10a-E3Dv6full.h @@ -302,6 +302,9 @@ #define MESH_MEAS_NUM_X_POINTS 3 #define MESH_MEAS_NUM_Y_POINTS 3 +// Maximum bed level correction value +#define BED_ADJUSTMENT_UM_MAX 100 + #define MESH_HOME_Z_CALIB 0.2 #define MESH_HOME_Z_SEARCH 5 //Z lift for homing, mesh bed leveling etc. diff --git a/Firmware/variants/1_75mm_MK25-RAMBo13a-E3Dv6full.h b/Firmware/variants/1_75mm_MK25-RAMBo13a-E3Dv6full.h index e1f5ba092..38d181349 100644 --- a/Firmware/variants/1_75mm_MK25-RAMBo13a-E3Dv6full.h +++ b/Firmware/variants/1_75mm_MK25-RAMBo13a-E3Dv6full.h @@ -303,6 +303,9 @@ #define MESH_MEAS_NUM_X_POINTS 3 #define MESH_MEAS_NUM_Y_POINTS 3 +// Maximum bed level correction value +#define BED_ADJUSTMENT_UM_MAX 100 + #define MESH_HOME_Z_CALIB 0.2 #define MESH_HOME_Z_SEARCH 5 //Z lift for homing, mesh bed leveling etc. diff --git a/Firmware/variants/1_75mm_MK25S-RAMBo10a-E3Dv6full.h b/Firmware/variants/1_75mm_MK25S-RAMBo10a-E3Dv6full.h index 3e8bb3b23..53b545e8b 100644 --- a/Firmware/variants/1_75mm_MK25S-RAMBo10a-E3Dv6full.h +++ b/Firmware/variants/1_75mm_MK25S-RAMBo10a-E3Dv6full.h @@ -302,6 +302,9 @@ #define MESH_MEAS_NUM_X_POINTS 3 #define MESH_MEAS_NUM_Y_POINTS 3 +// Maximum bed level correction value +#define BED_ADJUSTMENT_UM_MAX 100 + #define MESH_HOME_Z_CALIB 0.2 #define MESH_HOME_Z_SEARCH 5 //Z lift for homing, mesh bed leveling etc. diff --git a/Firmware/variants/1_75mm_MK25S-RAMBo13a-E3Dv6full.h b/Firmware/variants/1_75mm_MK25S-RAMBo13a-E3Dv6full.h index 45bcd8ebc..e786b70ff 100644 --- a/Firmware/variants/1_75mm_MK25S-RAMBo13a-E3Dv6full.h +++ b/Firmware/variants/1_75mm_MK25S-RAMBo13a-E3Dv6full.h @@ -303,6 +303,9 @@ #define MESH_MEAS_NUM_X_POINTS 3 #define MESH_MEAS_NUM_Y_POINTS 3 +// Maximum bed level correction value +#define BED_ADJUSTMENT_UM_MAX 100 + #define MESH_HOME_Z_CALIB 0.2 #define MESH_HOME_Z_SEARCH 5 //Z lift for homing, mesh bed leveling etc. diff --git a/Firmware/variants/1_75mm_MK3-EINSy10a-E3Dv6full.h b/Firmware/variants/1_75mm_MK3-EINSy10a-E3Dv6full.h index d64436d1f..c400b016f 100644 --- a/Firmware/variants/1_75mm_MK3-EINSy10a-E3Dv6full.h +++ b/Firmware/variants/1_75mm_MK3-EINSy10a-E3Dv6full.h @@ -412,6 +412,9 @@ #define MESH_MEAS_NUM_X_POINTS 3 #define MESH_MEAS_NUM_Y_POINTS 3 +// Maximum bed level correction value +#define BED_ADJUSTMENT_UM_MAX 100 + #define MESH_HOME_Z_CALIB 0.2 #define MESH_HOME_Z_SEARCH 5 //Z lift for homing, mesh bed leveling etc. diff --git a/Firmware/variants/1_75mm_MK3S-EINSy10a-E3Dv6full.h b/Firmware/variants/1_75mm_MK3S-EINSy10a-E3Dv6full.h index f64428cbe..37512071c 100644 --- a/Firmware/variants/1_75mm_MK3S-EINSy10a-E3Dv6full.h +++ b/Firmware/variants/1_75mm_MK3S-EINSy10a-E3Dv6full.h @@ -412,6 +412,9 @@ #define MESH_MEAS_NUM_X_POINTS 3 #define MESH_MEAS_NUM_Y_POINTS 3 +// Maximum bed level correction value +#define BED_ADJUSTMENT_UM_MAX 100 + #define MESH_HOME_Z_CALIB 0.2 #define MESH_HOME_Z_SEARCH 5 //Z lift for homing, mesh bed leveling etc. From fba207e0ece9d8b8bfc94290af9285413634022c Mon Sep 17 00:00:00 2001 From: PavelSindler Date: Mon, 4 Feb 2019 01:09:58 +0100 Subject: [PATCH 32/45] crash detection: don't wait for heater if target temp = 0; new priting type --- Firmware/Marlin_main.cpp | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/Firmware/Marlin_main.cpp b/Firmware/Marlin_main.cpp index 0b20192c4..ce1653be0 100644 --- a/Firmware/Marlin_main.cpp +++ b/Firmware/Marlin_main.cpp @@ -142,6 +142,7 @@ #define PRINTING_TYPE_SD 0 #define PRINTING_TYPE_USB 1 +#define PRINTING_TYPE_NONE 2 //filament types #define FILAMENT_DEFAULT 0 @@ -8777,7 +8778,8 @@ void stop_and_save_print_to_ram(float z_move, float e_move) saved_printing_type = PRINTING_TYPE_USB; } else { - //not sd printing nor usb printing + saved_printing_type = PRINTING_TYPE_NONE; + //not sd printing nor usb printing } #if 0 @@ -8942,10 +8944,12 @@ void restore_print_from_ram_and_continue(float e_move) // for (int axis = X_AXIS; axis <= E_AXIS; axis++) // current_position[axis] = st_get_position_mm(axis); active_extruder = saved_active_extruder; //restore active_extruder - setTargetHotendSafe(saved_extruder_temperature,saved_active_extruder); - heating_status = 1; - wait_for_heater(_millis(),saved_active_extruder); - heating_status = 2; + if (saved_extruder_temperature) { + setTargetHotendSafe(saved_extruder_temperature, saved_active_extruder); + heating_status = 1; + wait_for_heater(_millis(), saved_active_extruder); + heating_status = 2; + } feedrate = saved_feedrate2; //restore feedrate axis_relative_modes[E_AXIS] = saved_extruder_relative_mode; fanSpeed = saved_fanSpeed; From 6bf8611afad6532157c971a535244f8029649648 Mon Sep 17 00:00:00 2001 From: PavelSindler Date: Mon, 4 Feb 2019 01:19:58 +0100 Subject: [PATCH 33/45] mintemp: delay cutting lines removed --- Firmware/temperature.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Firmware/temperature.cpp b/Firmware/temperature.cpp index a4e08945b..71324cb62 100644 --- a/Firmware/temperature.cpp +++ b/Firmware/temperature.cpp @@ -1985,7 +1985,7 @@ if(current_temperature_raw_ambient>(OVERSAMPLENR*MINTEMP_MINAMBIENT_RAW)) // the // * nozzle checking if(target_temperature[active_extruder]>minttemp[active_extruder]) { // ~ nozzle heating is on - bCheckingOnHeater=bCheckingOnHeater||(current_temperature[active_extruder]>=minttemp[active_extruder]); // for eventually delay cutting + //bCheckingOnHeater=bCheckingOnHeater||(current_temperature[active_extruder]>=minttemp[active_extruder]); // for eventually delay cutting if(oTimer4minTempHeater.expired(HEATER_MINTEMP_DELAY)||(!oTimer4minTempHeater.running())||bCheckingOnHeater) { bCheckingOnHeater=true; // not necessary @@ -1999,7 +1999,7 @@ else { // ~ nozzle heating is off // * bed checking if(target_temperature_bed>BED_MINTEMP) { // ~ bed heating is on - bCheckingOnBed=bCheckingOnBed||(current_temperature_bed>=BED_MINTEMP); // for eventually delay cutting + //bCheckingOnBed=bCheckingOnBed||(current_temperature_bed>=BED_MINTEMP); // for eventually delay cutting if(oTimer4minTempBed.expired(BED_MINTEMP_DELAY)||(!oTimer4minTempBed.running())||bCheckingOnBed) { bCheckingOnBed=true; // not necessary From 3244c37435040d1a076d31a047858dc3be948ed8 Mon Sep 17 00:00:00 2001 From: Robert Pelnar Date: Fri, 1 Feb 2019 13:29:50 +0100 Subject: [PATCH 34/45] Conditional translation for fan control (FAN_SOFT_PWM), temporary disabled lcd backlight control --- Firmware/pins_Einsy_1_0.h | 2 +- Firmware/temperature.cpp | 7 ++++++- Firmware/ultralcd.cpp | 14 +++++++++++++- 3 files changed, 20 insertions(+), 3 deletions(-) diff --git a/Firmware/pins_Einsy_1_0.h b/Firmware/pins_Einsy_1_0.h index 005683c01..33363388a 100644 --- a/Firmware/pins_Einsy_1_0.h +++ b/Firmware/pins_Einsy_1_0.h @@ -99,7 +99,7 @@ //#define KILL_PIN 32 -#define LCD_BL_PIN 5 //backlight control pin +//#define LCD_BL_PIN 5 //backlight control pin #define BEEPER 84 // Beeper on AUX-4 #define LCD_PINS_RS 82 #define LCD_PINS_ENABLE 61 // !!! changed from 18 (EINY03) diff --git a/Firmware/temperature.cpp b/Firmware/temperature.cpp index 71324cb62..a6641f856 100644 --- a/Firmware/temperature.cpp +++ b/Firmware/temperature.cpp @@ -462,7 +462,7 @@ void setExtruderAutoFanState(int pin, bool state) // this idiom allows both digital and PWM fan outputs (see M42 handling). pinMode(pin, OUTPUT); digitalWrite(pin, newFanSpeed); - analogWrite(pin, newFanSpeed); + //analogWrite(pin, newFanSpeed); } #if (defined(FANCHECK) && (((defined(TACH_0) && (TACH_0 >-1)) || (defined(TACH_1) && (TACH_1 > -1))))) @@ -1355,7 +1355,12 @@ if((eSoundMode==e_SOUND_MODE_LOUD)||(eSoundMode==e_SOUND_MODE_ONCE)||(eSoundMode SET_OUTPUT(EXTRUDER_0_AUTO_FAN_PIN); SET_OUTPUT(FAN_PIN); WRITE(EXTRUDER_0_AUTO_FAN_PIN, 1); +#ifdef FAN_SOFT_PWM + fanSpeedSoftPwm = 255; +#else //FAN_SOFT_PWM analogWrite(FAN_PIN, 255); +#endif //FAN_SOFT_PWM + fanSpeed = 255; delayMicroseconds(2000); } diff --git a/Firmware/ultralcd.cpp b/Firmware/ultralcd.cpp index ae07f1443..c5cb03bb4 100644 --- a/Firmware/ultralcd.cpp +++ b/Firmware/ultralcd.cpp @@ -7261,7 +7261,12 @@ static bool lcd_selftest_manual_fan_check(int _fan, bool check_opposite) if (check_opposite == true) lcd_puts_P(_T(MSG_SELFTEST_EXTRUDER_FAN)); else lcd_puts_P(_T(MSG_SELFTEST_COOLING_FAN)); SET_OUTPUT(FAN_PIN); +#ifdef FAN_SOFT_PWM + fanSpeedSoftPwm = 255; +#else //FAN_SOFT_PWM analogWrite(FAN_PIN, 255); +#endif //FAN_SOFT_PWM + break; } _delay(500); @@ -7286,7 +7291,11 @@ static bool lcd_selftest_manual_fan_check(int _fan, bool check_opposite) case 1: // object cooling fan SET_OUTPUT(FAN_PIN); +#ifdef FAN_SOFT_PWM + fanSpeedSoftPwm = 255; +#else //FAN_SOFT_PWM analogWrite(FAN_PIN, 255); +#endif //FAN_SOFT_PWM break; } @@ -7319,8 +7328,11 @@ static bool lcd_selftest_manual_fan_check(int _fan, bool check_opposite) SET_OUTPUT(EXTRUDER_0_AUTO_FAN_PIN); WRITE(EXTRUDER_0_AUTO_FAN_PIN, 0); SET_OUTPUT(FAN_PIN); +#ifdef FAN_SOFT_PWM + fanSpeedSoftPwm = 0; +#else //FAN_SOFT_PWM analogWrite(FAN_PIN, 0); - +#endif //FAN_SOFT_PWM fanSpeed = 0; manage_heater(); From f9298b37b802832705009d3c73dbf2994f9a234c Mon Sep 17 00:00:00 2001 From: PavelSindler Date: Tue, 5 Feb 2019 04:02:38 +0100 Subject: [PATCH 35/45] fan check hotfix (selftest, measuring RPM, fan errors) --- Firmware/Marlin_main.cpp | 10 +++++++- Firmware/planner.cpp | 1 + Firmware/temperature.cpp | 51 ++++++++++++++++++++++++++++++++++++---- Firmware/temperature.h | 4 ++++ Firmware/ultralcd.cpp | 30 ++++++++++++++++++++++- 5 files changed, 89 insertions(+), 7 deletions(-) diff --git a/Firmware/Marlin_main.cpp b/Firmware/Marlin_main.cpp index be039f3b9..fc18238f7 100644 --- a/Firmware/Marlin_main.cpp +++ b/Firmware/Marlin_main.cpp @@ -8519,8 +8519,13 @@ void setup_fan_interrupt() { // and it takes 4.24 us to process (the interrupt invocation overhead not taken into account). ISR(INT7_vect) { //measuring speed now works for fanSpeed > 18 (approximately), which is sufficient because MIN_PRINT_FAN_SPEED is higher - +#ifdef FAN_SOFT_PWM + //if (fanSpeedSoftPwm != 255) return; + if ((fanSpeed != 255) || (fanSpeed < MIN_PRINT_FAN_SPEED)) return; +#else //FAN_SOFT_PWM if (fanSpeed < MIN_PRINT_FAN_SPEED) return; +#endif //FAN_SOFT_PWM + if ((1 << 6) & EICRB) { //interrupt was triggered by rising edge t_fan_rising_edge = millis_nc(); } @@ -8887,6 +8892,9 @@ void stop_and_save_print_to_ram(float z_move, float e_move) saved_extruder_under_pressure = extruder_under_pressure; //extruder under pressure flag - currently unused saved_extruder_relative_mode = axis_relative_modes[E_AXIS]; saved_fanSpeed = fanSpeed; +#ifdef FAN_SOFT_PWM + if (fan_measuring) saved_fanSpeed = fanSpeedBckp; +#endif //FAN_SOFT_PWM cmdqueue_reset(); //empty cmdqueue card.sdprinting = false; // card.closefile(); diff --git a/Firmware/planner.cpp b/Firmware/planner.cpp index 37d6e0b7d..c1768a91a 100644 --- a/Firmware/planner.cpp +++ b/Firmware/planner.cpp @@ -546,6 +546,7 @@ void check_axes_activity() #endif//FAN_KICKSTART_TIME #ifdef FAN_SOFT_PWM fanSpeedSoftPwm = tail_fan_speed; + //printf_P(PSTR("fanspeedsoftPWM %d \n"), fanSpeedSoftPwm); #else analogWrite(FAN_PIN,tail_fan_speed); #endif//!FAN_SOFT_PWM diff --git a/Firmware/temperature.cpp b/Firmware/temperature.cpp index c02cf9042..158659046 100644 --- a/Firmware/temperature.cpp +++ b/Firmware/temperature.cpp @@ -142,7 +142,10 @@ static volatile bool temp_meas_ready = false; #if (defined(EXTRUDER_0_AUTO_FAN_PIN) && EXTRUDER_0_AUTO_FAN_PIN > -1) || \ (defined(EXTRUDER_1_AUTO_FAN_PIN) && EXTRUDER_1_AUTO_FAN_PIN > -1) || \ (defined(EXTRUDER_2_AUTO_FAN_PIN) && EXTRUDER_2_AUTO_FAN_PIN > -1) - static unsigned long extruder_autofan_last_check; + unsigned long extruder_autofan_last_check = _millis(); + uint8_t fanSpeedBckp = 255; + bool fan_measuring = false; + #endif @@ -484,6 +487,16 @@ extern bool fans_check_enabled; void checkFanSpeed() { + uint8_t max_print_fan_errors = 0; + uint8_t max_extruder_fan_errors = 0; +#ifdef FAN_SOFT_PWM + max_print_fan_errors = 3; //15 seconds + max_extruder_fan_errors = 2; //10seconds +#else //FAN_SOFT_PWM + max_print_fan_errors = 15; //15 seconds + max_extruder_fan_errors = 5; //5 seconds +#endif //FAN_SOFT_PWM + fans_check_enabled = (eeprom_read_byte((uint8_t*)EEPROM_FAN_CHECK_ENABLED) > 0); static unsigned char fan_speed_errors[2] = { 0,0 }; #if (defined(FANCHECK) && defined(TACH_0) && (TACH_0 >-1)) @@ -491,15 +504,15 @@ void checkFanSpeed() else fan_speed_errors[0] = 0; #endif #if (defined(FANCHECK) && defined(TACH_1) && (TACH_1 >-1)) - if ((fan_speed[1] == 0) && ((blocks_queued() ? block_buffer[block_buffer_tail].fan_speed : fanSpeed) > MIN_PRINT_FAN_SPEED)) fan_speed_errors[1]++; + if ((fan_speed[1] < 5) && ((blocks_queued() ? block_buffer[block_buffer_tail].fan_speed : fanSpeed) > MIN_PRINT_FAN_SPEED)) fan_speed_errors[1]++; else fan_speed_errors[1] = 0; #endif - if ((fan_speed_errors[0] > 5) && fans_check_enabled) { + if ((fan_speed_errors[0] > max_extruder_fan_errors) && fans_check_enabled) { fan_speed_errors[0] = 0; fanSpeedError(0); //extruder fan } - if ((fan_speed_errors[1] > 15) && fans_check_enabled) { + if ((fan_speed_errors[1] > max_print_fan_errors) && fans_check_enabled) { fan_speed_errors[1] = 0; fanSpeedError(1); //print fan } @@ -734,10 +747,36 @@ void manage_heater() #endif } // End extruder for loop +#define FAN_CHECK_PERIOD 5000 //5s +#define FAN_CHECK_DURATION 100 //100ms + #ifndef DEBUG_DISABLE_FANCHECK #if (defined(EXTRUDER_0_AUTO_FAN_PIN) && EXTRUDER_0_AUTO_FAN_PIN > -1) || \ (defined(EXTRUDER_1_AUTO_FAN_PIN) && EXTRUDER_1_AUTO_FAN_PIN > -1) || \ (defined(EXTRUDER_2_AUTO_FAN_PIN) && EXTRUDER_2_AUTO_FAN_PIN > -1) + +#ifdef FAN_SOFT_PWM + if ((_millis() - extruder_autofan_last_check > FAN_CHECK_PERIOD) && (!fan_measuring)) { + extruder_autofan_last_check = _millis(); + fanSpeedBckp = fanSpeed; + if (fanSpeed > MIN_PRINT_FAN_SPEED) { + fanSpeed = 255; + } + // fanSpeedBckp = fanSpeedSoftPwm; + // fanSpeedSoftPwm = 255; + fan_measuring = true; + } + if ((_millis() - extruder_autofan_last_check > FAN_CHECK_DURATION) && (fan_measuring)) { + countFanSpeed(); + checkFanSpeed(); + fanSpeed = fanSpeedBckp; + // fanSpeedSoftPwm = fanSpeedBckp; + printf_P(PSTR("fan PWM: %d; extr fanSpeed measured: %d; print fan speed measured: %d \n"), fanSpeedBckp, fan_speed[0], fan_speed[1]); + extruder_autofan_last_check = _millis(); + fan_measuring = false; + } + checkExtruderAutoFans(); +#else //FAN_SOFT_PWM if(_millis() - extruder_autofan_last_check > 1000) // only need to check fan state very infrequently { #if (defined(FANCHECK) && ((defined(TACH_0) && (TACH_0 >-1)) || (defined(TACH_1) && (TACH_1 > -1)))) @@ -747,7 +786,9 @@ void manage_heater() checkExtruderAutoFans(); extruder_autofan_last_check = _millis(); } - #endif +#endif //FAN_SOFT_PWM + + #endif #endif //DEBUG_DISABLE_FANCHECK #ifndef PIDTEMPBED diff --git a/Firmware/temperature.h b/Firmware/temperature.h index 9be54e912..daee5c080 100644 --- a/Firmware/temperature.h +++ b/Firmware/temperature.h @@ -252,3 +252,7 @@ void check_max_temp(); #endif +extern unsigned long extruder_autofan_last_check; +extern uint8_t fanSpeedBckp; +extern bool fan_measuring; + diff --git a/Firmware/ultralcd.cpp b/Firmware/ultralcd.cpp index a2c260083..bd8746c46 100644 --- a/Firmware/ultralcd.cpp +++ b/Firmware/ultralcd.cpp @@ -7350,9 +7350,21 @@ static bool lcd_selftest_fan_dialog(int _fan) fanSpeed = 0; manage_heater(); //turn off fan setExtruderAutoFanState(EXTRUDER_0_AUTO_FAN_PIN, 1); //extruder fan +#ifdef FAN_SOFT_PWM + extruder_autofan_last_check = _millis(); +#endif //FAN_SOFT_PWM _delay(2000); //delay_keep_alive would turn off extruder fan, because temerature is too low +#ifdef FAN_SOFT_PWM + countFanSpeed(); + if (!fan_speed[0]) _result = false; +#else //FAN_SOFT_PWM manage_heater(); //count average fan speed from 2s delay and turn off fans if (!fan_speed[0]) _result = false; +#endif //FAN_SOFT_PWM + + printf_P(PSTR("Test 1:\n")); + printf_P(PSTR("Print fan speed: %d \n"), fan_speed[1]); + printf_P(PSTR("Extr fan speed: %d \n"), fan_speed[0]); //SERIAL_ECHOPGM("Extruder fan speed: "); //MYSERIAL.println(fan_speed[0]); //SERIAL_ECHOPGM("Print fan speed: "); @@ -7361,7 +7373,12 @@ static bool lcd_selftest_fan_dialog(int _fan) case 1: //will it work with Thotend > 50 C ? +#ifdef FAN_SOFT_PWM + extruder_autofan_last_check = _millis(); + fanSpeed = 255; +#else //FAN_SOFT_PWM fanSpeed = 150; //print fan +#endif //FAN_SOFT_PWM for (uint8_t i = 0; i < 5; i++) { delay_keep_alive(1000); lcd_set_cursor(18, 3); @@ -7370,15 +7387,26 @@ static bool lcd_selftest_fan_dialog(int _fan) lcd_set_cursor(18, 3); lcd_print("|"); } +#ifdef FAN_SOFT_PWM + countFanSpeed(); + fanSpeed = 0; +#else //FAN_SOFT_PWM fanSpeed = 0; manage_heater(); //turn off fan manage_inactivity(true); //to turn off print fan +#endif //FAN_SOFT_PWM + printf_P(PSTR("Test 2:\n")); + printf_P(PSTR("Print fan speed: %d \n"), fan_speed[1]); + printf_P(PSTR("Extr fan speed: %d \n"), fan_speed[0]); if (!fan_speed[1]) { _result = false; _errno = 6; //print fan not spinning } +#ifdef FAN_SOFT_PWM + else { +#else //FAN_SOFT_PWM else if (fan_speed[1] < 34) { //fan is spinning, but measured RPM are too low for print fan, it must be left extruder fan +#endif //FAN_SOFT_PWM //check fans manually - _result = lcd_selftest_manual_fan_check(1, true); //turn on print fan and check that left extruder fan is not spinning if (_result) { _result = lcd_selftest_manual_fan_check(1, false); //print fan is stil turned on; check that it is spinning From 91b12ff64bcfcb5e9e90c2d26b4e2a5e375eba4d Mon Sep 17 00:00:00 2001 From: PavelSindler Date: Tue, 5 Feb 2019 16:49:29 +0100 Subject: [PATCH 36/45] bed level correction menu fix (menu_item_edit for negative integers) --- Firmware/menu.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Firmware/menu.cpp b/Firmware/menu.cpp index 89fadb663..eef792952 100644 --- a/Firmware/menu.cpp +++ b/Firmware/menu.cpp @@ -284,7 +284,8 @@ void menu_draw_P(char chr, const char* str, int16_t val) if (text_len > 15) text_len = 15; char spaces[21]; strcpy_P(spaces, menu_20x_space); - spaces[15 - text_len] = 0; + if (val <= -100) spaces[15 - text_len - 1] = 0; + else spaces[15 - text_len] = 0; lcd_printf_P(menu_fmt_int3, chr, str, spaces, val); } From 903028e5749d4318e1674dae916e2955a1bb2116 Mon Sep 17 00:00:00 2001 From: PavelSindler Date: Tue, 5 Feb 2019 17:46:31 +0100 Subject: [PATCH 37/45] fix fan speed measuring for PWM = 255 --- Firmware/Marlin_main.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Firmware/Marlin_main.cpp b/Firmware/Marlin_main.cpp index fc18238f7..0509f6349 100644 --- a/Firmware/Marlin_main.cpp +++ b/Firmware/Marlin_main.cpp @@ -8521,7 +8521,7 @@ ISR(INT7_vect) { //measuring speed now works for fanSpeed > 18 (approximately), which is sufficient because MIN_PRINT_FAN_SPEED is higher #ifdef FAN_SOFT_PWM //if (fanSpeedSoftPwm != 255) return; - if ((fanSpeed != 255) || (fanSpeed < MIN_PRINT_FAN_SPEED)) return; + if (!fan_measuring || (fanSpeed < MIN_PRINT_FAN_SPEED)) return; #else //FAN_SOFT_PWM if (fanSpeed < MIN_PRINT_FAN_SPEED) return; #endif //FAN_SOFT_PWM From 62e253edd08a638e1a15908c224b885dc0f4863a Mon Sep 17 00:00:00 2001 From: PavelSindler Date: Tue, 5 Feb 2019 18:21:44 +0100 Subject: [PATCH 38/45] fanSpeed -> fanSpeedSoftPwm (fixes fan speed menu) --- Firmware/Marlin_main.cpp | 6 +----- Firmware/temperature.cpp | 11 ++++------- 2 files changed, 5 insertions(+), 12 deletions(-) diff --git a/Firmware/Marlin_main.cpp b/Firmware/Marlin_main.cpp index 0509f6349..8ca06b5bc 100644 --- a/Firmware/Marlin_main.cpp +++ b/Firmware/Marlin_main.cpp @@ -8520,8 +8520,7 @@ void setup_fan_interrupt() { ISR(INT7_vect) { //measuring speed now works for fanSpeed > 18 (approximately), which is sufficient because MIN_PRINT_FAN_SPEED is higher #ifdef FAN_SOFT_PWM - //if (fanSpeedSoftPwm != 255) return; - if (!fan_measuring || (fanSpeed < MIN_PRINT_FAN_SPEED)) return; + if (!fan_measuring || (fanSpeedSoftPwm < MIN_PRINT_FAN_SPEED)) return; #else //FAN_SOFT_PWM if (fanSpeed < MIN_PRINT_FAN_SPEED) return; #endif //FAN_SOFT_PWM @@ -8892,9 +8891,6 @@ void stop_and_save_print_to_ram(float z_move, float e_move) saved_extruder_under_pressure = extruder_under_pressure; //extruder under pressure flag - currently unused saved_extruder_relative_mode = axis_relative_modes[E_AXIS]; saved_fanSpeed = fanSpeed; -#ifdef FAN_SOFT_PWM - if (fan_measuring) saved_fanSpeed = fanSpeedBckp; -#endif //FAN_SOFT_PWM cmdqueue_reset(); //empty cmdqueue card.sdprinting = false; // card.closefile(); diff --git a/Firmware/temperature.cpp b/Firmware/temperature.cpp index 158659046..00e606150 100644 --- a/Firmware/temperature.cpp +++ b/Firmware/temperature.cpp @@ -758,19 +758,16 @@ void manage_heater() #ifdef FAN_SOFT_PWM if ((_millis() - extruder_autofan_last_check > FAN_CHECK_PERIOD) && (!fan_measuring)) { extruder_autofan_last_check = _millis(); - fanSpeedBckp = fanSpeed; - if (fanSpeed > MIN_PRINT_FAN_SPEED) { - fanSpeed = 255; + fanSpeedBckp = fanSpeedSoftPwm; + if (fanSpeedSoftPwm > MIN_PRINT_FAN_SPEED) { + fanSpeedSoftPwm = 255; } - // fanSpeedBckp = fanSpeedSoftPwm; - // fanSpeedSoftPwm = 255; fan_measuring = true; } if ((_millis() - extruder_autofan_last_check > FAN_CHECK_DURATION) && (fan_measuring)) { countFanSpeed(); checkFanSpeed(); - fanSpeed = fanSpeedBckp; - // fanSpeedSoftPwm = fanSpeedBckp; + fanSpeedSoftPwm = fanSpeedBckp; printf_P(PSTR("fan PWM: %d; extr fanSpeed measured: %d; print fan speed measured: %d \n"), fanSpeedBckp, fan_speed[0], fan_speed[1]); extruder_autofan_last_check = _millis(); fan_measuring = false; From 93d412816308b085982ef6d69734c1ee16cbc8d4 Mon Sep 17 00:00:00 2001 From: Robert Pelnar Date: Tue, 5 Feb 2019 19:08:57 +0100 Subject: [PATCH 39/45] Fixed timer2 colission with arduino framework around "tone" function. --- Firmware/Marlin_main.cpp | 28 ++++++++++++++-------------- Firmware/system_timer.h | 4 ++++ Firmware/timer02.c | 14 +++++++++++++- Firmware/timer02.h | 4 ++++ Firmware/util.cpp | 8 ++++---- 5 files changed, 39 insertions(+), 19 deletions(-) diff --git a/Firmware/Marlin_main.cpp b/Firmware/Marlin_main.cpp index fc18238f7..457fbfd4f 100644 --- a/Firmware/Marlin_main.cpp +++ b/Firmware/Marlin_main.cpp @@ -2325,9 +2325,9 @@ void refresh_cmd_timeout(void) void trace() { //if((eSoundMode==e_SOUND_MODE_LOUD)||(eSoundMode==e_SOUND_MODE_ONCE)) - tone(BEEPER, 440); + _tone(BEEPER, 440); _delay(25); - noTone(BEEPER); + _noTone(BEEPER); _delay(20); } /* @@ -3124,9 +3124,9 @@ void gcode_M701() load_filament_final_feed(); //slow sequence st_synchronize(); - if((eSoundMode==e_SOUND_MODE_LOUD)||(eSoundMode==e_SOUND_MODE_ONCE)) tone(BEEPER, 500); + if((eSoundMode==e_SOUND_MODE_LOUD)||(eSoundMode==e_SOUND_MODE_ONCE)) _tone(BEEPER, 500); delay_keep_alive(50); - noTone(BEEPER); + _noTone(BEEPER); if (!farm_mode && loading_flag) { lcd_load_filament_color_check(); @@ -3189,9 +3189,9 @@ static void gcode_PRUSA_SN() putchar('\n'); #if 0 for (int b = 0; b < 3; b++) { - tone(BEEPER, 110); + _tone(BEEPER, 110); _delay(50); - noTone(BEEPER); + _noTone(BEEPER); _delay(50); } #endif @@ -6268,9 +6268,9 @@ Sigma_Exit: { #if BEEPER > 0 if((eSoundMode==e_SOUND_MODE_LOUD)||(eSoundMode==e_SOUND_MODE_ONCE)) - tone(BEEPER, beepS); + _tone(BEEPER, beepS); _delay(beepP); - noTone(BEEPER); + _noTone(BEEPER); #endif } else @@ -7494,9 +7494,9 @@ void manage_inactivity(bool ignore_stepper_queue/*=false*/) //default argument s if (degHotend0() > EXTRUDE_MINTEMP) { if ((eSoundMode == e_SOUND_MODE_LOUD) || (eSoundMode == e_SOUND_MODE_ONCE)) - tone(BEEPER, 1000); + _tone(BEEPER, 1000); delay_keep_alive(50); - noTone(BEEPER); + _noTone(BEEPER); loading_flag = true; enquecommand_front_P((PSTR("M701"))); } @@ -9227,9 +9227,9 @@ void M600_load_filament() { if (fsensor_check_autoload()) { if((eSoundMode==e_SOUND_MODE_LOUD)||(eSoundMode==e_SOUND_MODE_ONCE)) - tone(BEEPER, 1000); + _tone(BEEPER, 1000); delay_keep_alive(50); - noTone(BEEPER); + _noTone(BEEPER); break; } #endif //FILAMENT_SENSOR @@ -9246,9 +9246,9 @@ if((eSoundMode==e_SOUND_MODE_LOUD)||(eSoundMode==e_SOUND_MODE_ONCE)) M600_load_filament_movements(); if((eSoundMode==e_SOUND_MODE_LOUD)||(eSoundMode==e_SOUND_MODE_ONCE)) - tone(BEEPER, 500); + _tone(BEEPER, 500); delay_keep_alive(50); - noTone(BEEPER); + _noTone(BEEPER); #ifdef FSENSOR_QUALITY fsensor_oq_meassure_stop(); diff --git a/Firmware/system_timer.h b/Firmware/system_timer.h index 045ce728d..98647660d 100644 --- a/Firmware/system_timer.h +++ b/Firmware/system_timer.h @@ -11,10 +11,14 @@ #define _millis millis2 #define _micros micros2 #define _delay delay2 +#define _tone tone2 +#define _noTone noTone2 #else //SYSTEM_TIMER_2 #define _millis millis #define _micros micros #define _delay delay +#define _tone tone +#define _noTone noTone #define timer02_set_pwm0(pwm0) #endif //SYSTEM_TIMER_2 diff --git a/Firmware/timer02.c b/Firmware/timer02.c index 162b4e845..827299be1 100644 --- a/Firmware/timer02.c +++ b/Firmware/timer02.c @@ -4,8 +4,10 @@ // original OVF handler is disabled #include #include -#include +#include "Arduino.h" +#include "io_atmega2560.h" +#define BEEPER 84 uint8_t timer02_pwm0 = 0; @@ -154,3 +156,13 @@ void delay2(unsigned long ms) } } } + +void tone2(uint8_t _pin, unsigned int frequency/*, unsigned long duration*/) +{ + PIN_SET(BEEPER); +} + +void noTone2(uint8_t _pin) +{ + PIN_CLR(BEEPER); +} diff --git a/Firmware/timer02.h b/Firmware/timer02.h index 3bbaa9ce3..103360b9c 100644 --- a/Firmware/timer02.h +++ b/Firmware/timer02.h @@ -24,6 +24,10 @@ extern unsigned long micros2(void); extern void delay2(unsigned long ms); +extern void tone2(uint8_t _pin, unsigned int frequency/*, unsigned long duration*/); + +extern void noTone2(uint8_t _pin); + #if defined(__cplusplus) } diff --git a/Firmware/util.cpp b/Firmware/util.cpp index 15f3f4c5f..2499b513f 100644 --- a/Firmware/util.cpp +++ b/Firmware/util.cpp @@ -296,14 +296,14 @@ bool show_upgrade_dialog_if_version_newer(const char *version_string) lcd_putc(*c); lcd_puts_at_P(0, 3, _i("Please upgrade."));////MSG_NEW_FIRMWARE_PLEASE_UPGRADE c=20 r=0 if((eSoundMode==e_SOUND_MODE_LOUD)||(eSoundMode==e_SOUND_MODE_ONCE)) - tone(BEEPER, 1000); + _tone(BEEPER, 1000); delay_keep_alive(50); - noTone(BEEPER); + _noTone(BEEPER); delay_keep_alive(500); if((eSoundMode==e_SOUND_MODE_LOUD)||(eSoundMode==e_SOUND_MODE_ONCE)) - tone(BEEPER, 1000); + _tone(BEEPER, 1000); delay_keep_alive(50); - noTone(BEEPER); + _noTone(BEEPER); lcd_wait_for_click(); lcd_update_enable(true); lcd_clear(); From 1ba046395e98251b21e564fd0b35f9eb0fc19899 Mon Sep 17 00:00:00 2001 From: PavelSindler Date: Wed, 6 Feb 2019 12:37:18 +0100 Subject: [PATCH 40/45] fan measurements fix: keep fanSpeedSoftPwm = 255 during measurements, selftest changes --- Firmware/planner.cpp | 7 ++++++- Firmware/temperature.cpp | 7 +++++-- Firmware/ultralcd.cpp | 10 ++++++---- 3 files changed, 17 insertions(+), 7 deletions(-) diff --git a/Firmware/planner.cpp b/Firmware/planner.cpp index c1768a91a..5008288a6 100644 --- a/Firmware/planner.cpp +++ b/Firmware/planner.cpp @@ -545,7 +545,12 @@ void check_axes_activity() } #endif//FAN_KICKSTART_TIME #ifdef FAN_SOFT_PWM - fanSpeedSoftPwm = tail_fan_speed; + if (fan_measuring) { //if measurement is currently in process, fanSpeedSoftPwm must remain set to 255, but we must update fanSpeedBckp value + fanSpeedBckp = tail_fan_speed; + } + else { + fanSpeedSoftPwm = tail_fan_speed; + } //printf_P(PSTR("fanspeedsoftPWM %d \n"), fanSpeedSoftPwm); #else analogWrite(FAN_PIN,tail_fan_speed); diff --git a/Firmware/temperature.cpp b/Firmware/temperature.cpp index 00e606150..fef6cbc98 100644 --- a/Firmware/temperature.cpp +++ b/Firmware/temperature.cpp @@ -759,7 +759,9 @@ void manage_heater() if ((_millis() - extruder_autofan_last_check > FAN_CHECK_PERIOD) && (!fan_measuring)) { extruder_autofan_last_check = _millis(); fanSpeedBckp = fanSpeedSoftPwm; - if (fanSpeedSoftPwm > MIN_PRINT_FAN_SPEED) { + + if (fanSpeedSoftPwm >= MIN_PRINT_FAN_SPEED) { //if we are in rage where we are doing fan check, set full PWM range for a short time to measure fan RPM by reading tacho signal without modulation by PWM signal + // printf_P(PSTR("fanSpeedSoftPwm 1: %d\n"), fanSpeedSoftPwm); fanSpeedSoftPwm = 255; } fan_measuring = true; @@ -767,8 +769,9 @@ void manage_heater() if ((_millis() - extruder_autofan_last_check > FAN_CHECK_DURATION) && (fan_measuring)) { countFanSpeed(); checkFanSpeed(); + //printf_P(PSTR("fanSpeedSoftPwm 1: %d\n"), fanSpeedSoftPwm); fanSpeedSoftPwm = fanSpeedBckp; - printf_P(PSTR("fan PWM: %d; extr fanSpeed measured: %d; print fan speed measured: %d \n"), fanSpeedBckp, fan_speed[0], fan_speed[1]); + //printf_P(PSTR("fan PWM: %d; extr fanSpeed measured: %d; print fan speed measured: %d \n"), fanSpeedBckp, fan_speed[0], fan_speed[1]); extruder_autofan_last_check = _millis(); fan_measuring = false; } diff --git a/Firmware/ultralcd.cpp b/Firmware/ultralcd.cpp index 034ecde6c..1f1df66df 100644 --- a/Firmware/ultralcd.cpp +++ b/Firmware/ultralcd.cpp @@ -7372,9 +7372,11 @@ static bool lcd_selftest_fan_dialog(int _fan) case 1: //will it work with Thotend > 50 C ? -#ifdef FAN_SOFT_PWM - extruder_autofan_last_check = _millis(); - fanSpeed = 255; +#ifdef FAN_SOFT_PWM + fanSpeed = 255; + fanSpeedSoftPwm = 255; + extruder_autofan_last_check = _millis(); //store time when measurement starts + fan_measuring = true; //start fan measuring, rest is on manage_heater #else //FAN_SOFT_PWM fanSpeed = 150; //print fan #endif //FAN_SOFT_PWM @@ -7387,8 +7389,8 @@ static bool lcd_selftest_fan_dialog(int _fan) lcd_print("|"); } #ifdef FAN_SOFT_PWM - countFanSpeed(); fanSpeed = 0; + fanSpeedSoftPwm = 0; #else //FAN_SOFT_PWM fanSpeed = 0; manage_heater(); //turn off fan From ef86c78f254927a891939ef299a16e5e4180d873 Mon Sep 17 00:00:00 2001 From: PavelSindler Date: Wed, 6 Feb 2019 14:24:47 +0100 Subject: [PATCH 41/45] menu item text changed --- Firmware/ultralcd.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Firmware/ultralcd.cpp b/Firmware/ultralcd.cpp index 1f1df66df..364f1a3d8 100644 --- a/Firmware/ultralcd.cpp +++ b/Firmware/ultralcd.cpp @@ -2262,7 +2262,7 @@ static void lcd_support_menu() MENU_ITEM_BACK_P(STR_SEPARATOR); MENU_ITEM_SUBMENU_P(_i("XYZ cal. details"), lcd_menu_xyz_y_min);////MSG_XYZ_DETAILS c=19 r=1 MENU_ITEM_SUBMENU_P(_i("Extruder info"), lcd_menu_extruder_info);////MSG_INFO_EXTRUDER c=18 r=1 - MENU_ITEM_SUBMENU_P(_i("Show sensors"), lcd_menu_show_sensors_state);////MSG_INFO_SENSORS c=18 r=1 + MENU_ITEM_SUBMENU_P(_i("Sensors info"), lcd_menu_show_sensors_state);////MSG_INFO_SENSORS c=18 r=1 #ifdef TMC2130 MENU_ITEM_SUBMENU_P(_i("Belt status"), lcd_menu_belt_status);////MSG_MENU_BELT_STATUS c=18 r=1 From 850d3316b6ab048bfa869383628d5b2fd7f3b75b Mon Sep 17 00:00:00 2001 From: PavelSindler Date: Wed, 6 Feb 2019 15:18:12 +0100 Subject: [PATCH 42/45] variant files --- .../1_75mm_MK25S-RAMBo10a-E3Dv6full.h | 505 -------------- .../1_75mm_MK25S-RAMBo13a-E3Dv6full.h | 506 -------------- .../variants/1_75mm_MK3S-EINSy10a-E3Dv6full.h | 631 ------------------ 3 files changed, 1642 deletions(-) delete mode 100644 Firmware/variants/1_75mm_MK25S-RAMBo10a-E3Dv6full.h delete mode 100644 Firmware/variants/1_75mm_MK25S-RAMBo13a-E3Dv6full.h delete mode 100644 Firmware/variants/1_75mm_MK3S-EINSy10a-E3Dv6full.h diff --git a/Firmware/variants/1_75mm_MK25S-RAMBo10a-E3Dv6full.h b/Firmware/variants/1_75mm_MK25S-RAMBo10a-E3Dv6full.h deleted file mode 100644 index 53b545e8b..000000000 --- a/Firmware/variants/1_75mm_MK25S-RAMBo10a-E3Dv6full.h +++ /dev/null @@ -1,505 +0,0 @@ -#ifndef CONFIGURATION_PRUSA_H -#define CONFIGURATION_PRUSA_H - -#include -/*------------------------------------ - GENERAL SETTINGS - *------------------------------------*/ - -// Printer revision -#define PRINTER_TYPE PRINTER_MK25S -#define FILAMENT_SIZE "1_75mm_MK25S" -#define NOZZLE_TYPE "E3Dv6full" - -// Developer flag -#define DEVELOPER - -// Printer name -#define CUSTOM_MENDEL_NAME "Prusa i3 MK2.5S" - -// Electronics -#define MOTHERBOARD BOARD_RAMBO_MINI_1_0 - -#define HEATBED_V2 -#define STEEL_SHEET -#define TACH0PULLUP - -// Uncomment the below for the E3D PT100 temperature sensor (with or without PT100 Amplifier) -//#define E3D_PT100_EXTRUDER_WITH_AMP -//#define E3D_PT100_EXTRUDER_NO_AMP -//#define E3D_PT100_BED_WITH_AMP -//#define E3D_PT100_BED_NO_AMP - - -/*------------------------------------ - AXIS SETTINGS - *------------------------------------*/ - -// Steps per unit {X,Y,Z,E} -#define DEFAULT_AXIS_STEPS_PER_UNIT {100,100,3200/8,133} - -// Endstop inverting -#define X_MIN_ENDSTOP_INVERTING 0 // set to 1 to invert the logic of the endstop. -#define Y_MIN_ENDSTOP_INVERTING 0 // set to 1 to invert the logic of the endstop. -#define Z_MIN_ENDSTOP_INVERTING 0 // set to 1 to invert the logic of the endstop. - -// Direction inverting -#define INVERT_X_DIR 0 // for Mendel set to 0, for Orca set to 1 -#define INVERT_Y_DIR 0 // for Mendel set to 1, for Orca set to 0 -#define INVERT_Z_DIR 0 // for Mendel set to 0, for Orca set to 1 -#define INVERT_E0_DIR 1 // for direct drive extruder v9 set to 1, for geared extruder set to 0 -#define INVERT_E1_DIR 1 // for direct drive extruder v9 set to 1, for geared extruder set to 0 -#define INVERT_E2_DIR 1 // for direct drive extruder v9 set to 1, for geared extruder set to 0 - -// Home position -#define MANUAL_X_HOME_POS 0 -#define MANUAL_Y_HOME_POS -2.2 -#define MANUAL_Z_HOME_POS 0.2 - -// Travel limits after homing -#define X_MAX_POS 250 -#define X_MIN_POS 0 -#define Y_MAX_POS 210 -#define Y_MIN_POS -4 -#define Z_MAX_POS 210 -#define Z_MIN_POS 0.15 - -// Canceled home position -#define X_CANCEL_POS 50 -#define Y_CANCEL_POS 190 - -//Pause print position -#define X_PAUSE_POS 50 -#define Y_PAUSE_POS 190 -#define Z_PAUSE_LIFT 20 - -#define NUM_AXIS 4 // The axis order in all axis related arrays is X, Y, Z, E -#define HOMING_FEEDRATE {3000, 3000, 800, 0} // set the homing speeds (mm/min) // 3000 is also valid for stallGuard homing. Valid range: 2200 - 3000 - -/** - * [0,0] steel sheet print area point X coordinate in bed print area coordinates - */ -#define SHEET_PRINT_ZERO_REF_X 0.f -/** - * [0,0] steel sheet print area point Y coordinate in bed print area coordinates - */ -#define SHEET_PRINT_ZERO_REF_Y 0.f - -#define DEFAULT_MAX_FEEDRATE {200, 200, 12, 120} // (mm/sec) max feedrate (M203) -#define DEFAULT_MAX_FEEDRATE_SILENT {172, 172, 12, 120} // (mm/sec) max feedrate (M203), silent mode -#define DEFAULT_MAX_ACCELERATION {1000, 1000, 200, 5000} // (mm/sec^2) max acceleration (M201) -#define DEFAULT_MAX_ACCELERATION_SILENT {960, 960, 200, 5000} // (mm/sec^2) max acceleration (M201), silent mode - -#define DEFAULT_ACCELERATION 1250 // X, Y, Z and E max acceleration in mm/s^2 for printing moves (M204S) -#define DEFAULT_RETRACT_ACCELERATION 1250 // X, Y, Z and E max acceleration in mm/s^2 for retracts (M204T) - -#define MANUAL_FEEDRATE {2700, 2700, 1000, 100} // set the speeds for manual moves (mm/min) - -//number of bytes from end of the file to start check -#define END_FILE_SECTION 20000 - -#define Z_AXIS_ALWAYS_ON 1 - -// New XYZ calibration -#define NEW_XYZCAL - -// Fan check -#define FANCHECK - -// Safety timer -#define SAFETYTIMER -#define DEFAULT_SAFETYTIMER_TIME_MINS 30 - -// Filament sensor -#define FILAMENT_SENSOR -#define IR_SENSOR - - -#define DEBUG_DCODE3 - -//#define DEBUG_BUILD -#ifdef DEBUG_BUILD -//#define _NO_ASM -#define DEBUG_DCODES //D codes -#define DEBUG_STACK_MONITOR //Stack monitor in stepper ISR -//#define DEBUG_FSENSOR_LOG //Reports fsensor status to serial -//#define DEBUG_CRASHDET_COUNTERS //Display crash-detection counters on LCD -//#define DEBUG_RESUME_PRINT //Resume/save print debug enable -//#define DEBUG_UVLO_AUTOMATIC_RECOVER // Power panic automatic recovery debug output -//#define DEBUG_DISABLE_XMINLIMIT //x min limit ignored -//#define DEBUG_DISABLE_XMAXLIMIT //x max limit ignored -//#define DEBUG_DISABLE_YMINLIMIT //y min limit ignored -//#define DEBUG_DISABLE_YMAXLIMIT //y max limit ignored -//#define DEBUG_DISABLE_ZMINLIMIT //z min limit ignored -//#define DEBUG_DISABLE_ZMAXLIMIT //z max limit ignored -//#define DEBUG_DISABLE_STARTMSGS //no startup messages -//#define DEBUG_DISABLE_MINTEMP //mintemp error ignored -//#define DEBUG_DISABLE_SWLIMITS //sw limits ignored -//#define DEBUG_DISABLE_LCD_STATUS_LINE //empty four lcd line -//#define DEBUG_DISABLE_PREVENT_EXTRUDER //cold extrusion and long extrusion allowed -//#define DEBUG_DISABLE_PRUSA_STATISTICS //disable prusa_statistics() mesages -//#define DEBUG_XSTEP_DUP_PIN 21 //duplicate x-step output to pin 21 (SCL on P3) -//#define DEBUG_YSTEP_DUP_PIN 21 //duplicate y-step output to pin 21 (SCL on P3) -//#define DEBUG_DISABLE_FANCHECK //disable fan check (no ISR INT7, check disabled) -//#define DEBUG_DUMP_TO_2ND_SERIAL //dump received characters to 2nd serial line -//#define DEBUG_STEPPER_TIMER_MISSED // Stop on stepper timer overflow, beep and display a message. -//#define PLANNER_DIAGNOSTICS // Show the planner queue status on printer display. -//#define CMD_DIAGNOSTICS //Show cmd queue length on printer display -#endif /* DEBUG_BUILD */ - -//#define FSENSOR_QUALITY - - -/*------------------------------------ - EXTRUDER SETTINGS - *------------------------------------*/ - -// Mintemps -#define HEATER_0_MINTEMP 30 -#define HEATER_1_MINTEMP 5 -#define HEATER_2_MINTEMP 5 -#define HEATER_MINTEMP_DELAY 15000 // [ms] ! if changed, check maximal allowed value @ ShortTimer -#if HEATER_MINTEMP_DELAY>USHRT_MAX -#error "Check maximal allowed value @ ShortTimer (see HEATER_MINTEMP_DELAY definition)" -#endif -#define BED_MINTEMP 30 -#define BED_MINTEMP_DELAY 50000 // [ms] ! if changed, check maximal allowed value @ ShortTimer -#if BED_MINTEMP_DELAY>USHRT_MAX -#error "Check maximal allowed value @ ShortTimer (see BED_MINTEMP_DELAY definition)" -#endif - -// Maxtemps -#if defined(E3D_PT100_EXTRUDER_WITH_AMP) || defined(E3D_PT100_EXTRUDER_NO_AMP) -#define HEATER_0_MAXTEMP 410 -#else -#define HEATER_0_MAXTEMP 305 -#endif -#define HEATER_1_MAXTEMP 305 -#define HEATER_2_MAXTEMP 305 -#define BED_MAXTEMP 125 - -#if defined(E3D_PT100_EXTRUDER_WITH_AMP) || defined(E3D_PT100_EXTRUDER_NO_AMP) -// Define PID constants for extruder with PT100 -#define DEFAULT_Kp 21.70 -#define DEFAULT_Ki 1.60 -#define DEFAULT_Kd 73.76 -#else -// Define PID constants for extruder -//#define DEFAULT_Kp 40.925 -//#define DEFAULT_Ki 4.875 -//#define DEFAULT_Kd 86.085 -#define DEFAULT_Kp 16.13 -#define DEFAULT_Ki 1.1625 -#define DEFAULT_Kd 56.23 -#endif - -// Extrude mintemp -#define EXTRUDE_MINTEMP 175 - -// Extruder cooling fans -#define EXTRUDER_0_AUTO_FAN_PIN 8 -#define EXTRUDER_1_AUTO_FAN_PIN -1 -#define EXTRUDER_2_AUTO_FAN_PIN -1 -#define EXTRUDER_AUTO_FAN_TEMPERATURE 50 -#define EXTRUDER_AUTO_FAN_SPEED 255 // == full speed - - -/*------------------------------------ - LOAD/UNLOAD FILAMENT SETTINGS - *------------------------------------*/ - -// Load filament commands -#define LOAD_FILAMENT_0 "M83" -#define LOAD_FILAMENT_1 "G1 E70 F400" -#define LOAD_FILAMENT_2 "G1 E40 F100" - -// Unload filament commands -#define UNLOAD_FILAMENT_0 "M83" -#define UNLOAD_FILAMENT_1 "G1 E-80 F7000" - -/*------------------------------------ - CHANGE FILAMENT SETTINGS - *------------------------------------*/ - -// Filament change configuration -#define FILAMENTCHANGEENABLE -#ifdef FILAMENTCHANGEENABLE -#define FILAMENTCHANGE_XPOS 211 -#define FILAMENTCHANGE_YPOS 0 -#define FILAMENTCHANGE_ZADD 2 -#define FILAMENTCHANGE_FIRSTRETRACT -2 -#define FILAMENTCHANGE_FINALRETRACT -80 - -#define FILAMENTCHANGE_FIRSTFEED 70 //E distance in mm for fast filament loading sequence used used in filament change (M600) -#define FILAMENTCHANGE_FINALFEED 25 //E distance in mm for slow filament loading sequence used used in filament change (M600) and filament load (M701) -#define FILAMENTCHANGE_RECFEED 5 - -#define FILAMENTCHANGE_XYFEED 50 -#define FILAMENTCHANGE_EFEED_FIRST 20 // feedrate in mm/s for fast filament loading sequence used in filament change (M600) -#define FILAMENTCHANGE_EFEED_FINAL 3.3f // feedrate in mm/s for slow filament loading sequence used in filament change (M600) and filament load (M701) -//#define FILAMENTCHANGE_RFEED 400 -#define FILAMENTCHANGE_RFEED 7000 / 60 -#define FILAMENTCHANGE_EXFEED 2 -#define FILAMENTCHANGE_ZFEED 15 - -#endif - -/*------------------------------------ - ADDITIONAL FEATURES SETTINGS - *------------------------------------*/ - -// Define Prusa filament runout sensor -//#define FILAMENT_RUNOUT_SUPPORT - -#ifdef FILAMENT_RUNOUT_SUPPORT -#define FILAMENT_RUNOUT_SENSOR 1 -#endif - -// temperature runaway -#define TEMP_RUNAWAY_BED_HYSTERESIS 5 -#define TEMP_RUNAWAY_BED_TIMEOUT 360 - -#define TEMP_RUNAWAY_EXTRUDER_HYSTERESIS 15 -#define TEMP_RUNAWAY_EXTRUDER_TIMEOUT 45 - -/*------------------------------------ - MOTOR CURRENT SETTINGS - *------------------------------------*/ - -// Motor Current setting for BIG RAMBo -#define DIGIPOT_MOTOR_CURRENT {135,135,135,135,135} // Values 0-255 (RAMBO 135 = ~0.75A, 185 = ~1A) -#define DIGIPOT_MOTOR_CURRENT_LOUD {135,135,135,135,135} - -// Motor Current settings for RAMBo mini PWM value = MotorCurrentSetting * 255 / range -#if MOTHERBOARD == BOARD_RAMBO_MINI_1_0 || MOTHERBOARD == BOARD_RAMBO_MINI_1_3 -#define MOTOR_CURRENT_PWM_RANGE 2000 -#define DEFAULT_PWM_MOTOR_CURRENT {270, 830, 450} // {XY,Z,E} -#define DEFAULT_PWM_MOTOR_CURRENT_LOUD {540, 830, 500} // {XY,Z,E} -#define Z_SILENT 0 -#define Z_HIGH_POWER 200 -#endif - -/*------------------------------------ - BED SETTINGS - *------------------------------------*/ - -// Define Mesh Bed Leveling system to enable it -#define MESH_BED_LEVELING -#ifdef MESH_BED_LEVELING - -#define MBL_Z_STEP 0.01 - -// Mesh definitions -#define MESH_MIN_X 35 -#define MESH_MAX_X 238 -#define MESH_MIN_Y 6 -#define MESH_MAX_Y 202 - -// Mesh upsample definition -#define MESH_NUM_X_POINTS 7 -#define MESH_NUM_Y_POINTS 7 -// Mesh measure definition -#define MESH_MEAS_NUM_X_POINTS 3 -#define MESH_MEAS_NUM_Y_POINTS 3 - -// Maximum bed level correction value -#define BED_ADJUSTMENT_UM_MAX 100 - -#define MESH_HOME_Z_CALIB 0.2 -#define MESH_HOME_Z_SEARCH 5 //Z lift for homing, mesh bed leveling etc. - -#define X_PROBE_OFFSET_FROM_EXTRUDER 23 // Z probe to nozzle X offset: -left +right -#define Y_PROBE_OFFSET_FROM_EXTRUDER 5 // Z probe to nozzle Y offset: -front +behind -#define Z_PROBE_OFFSET_FROM_EXTRUDER -0.4 // Z probe to nozzle Z offset: -below (always!) -#endif - -// Bed Temperature Control -// Select PID or bang-bang with PIDTEMPBED. If bang-bang, BED_LIMIT_SWITCHING will enable hysteresis -// -// Uncomment this to enable PID on the bed. It uses the same frequency PWM as the extruder. -// If your PID_dT above is the default, and correct for your hardware/configuration, that means 7.689Hz, -// which is fine for driving a square wave into a resistive load and does not significantly impact you FET heating. -// This also works fine on a Fotek SSR-10DA Solid State Relay into a 250W heater. -// If your configuration is significantly different than this and you don't understand the issues involved, you probably -// shouldn't use bed PID until someone else verifies your hardware works. -// If this is enabled, find your own PID constants below. -#define PIDTEMPBED -// -//#define BED_LIMIT_SWITCHING - -// This sets the max power delivered to the bed, and replaces the HEATER_BED_DUTY_CYCLE_DIVIDER option. -// all forms of bed control obey this (PID, bang-bang, bang-bang with hysteresis) -// setting this to anything other than 255 enables a form of PWM to the bed just like HEATER_BED_DUTY_CYCLE_DIVIDER did, -// so you shouldn't use it unless you are OK with PWM on your bed. (see the comment on enabling PIDTEMPBED) -#define MAX_BED_POWER 255 // limits duty cycle to bed; 255=full current - -// Bed temperature compensation settings -#define BED_OFFSET 10 -#define BED_OFFSET_START 40 -#define BED_OFFSET_CENTER 50 - - -#ifdef PIDTEMPBED -//120v 250W silicone heater into 4mm borosilicate (MendelMax 1.5+) -//from FOPDT model - kp=.39 Tp=405 Tdead=66, Tc set to 79.2, aggressive factor of .15 (vs .1, 1, 10) -#if defined(E3D_PT100_BED_WITH_AMP) || defined(E3D_PT100_BED_NO_AMP) -// Define PID constants for extruder with PT100 -#define DEFAULT_bedKp 21.70 -#define DEFAULT_bedKi 1.60 -#define DEFAULT_bedKd 73.76 -#else -#define DEFAULT_bedKp 126.13 -#define DEFAULT_bedKi 4.30 -#define DEFAULT_bedKd 924.76 -#endif - -//120v 250W silicone heater into 4mm borosilicate (MendelMax 1.5+) -//from pidautotune -// #define DEFAULT_bedKp 97.1 -// #define DEFAULT_bedKi 1.41 -// #define DEFAULT_bedKd 1675.16 - -// FIND YOUR OWN: "M303 E-1 C8 S90" to run autotune on the bed at 90 degreesC for 8 cycles. -#endif // PIDTEMPBED - - -/*----------------------------------- - PREHEAT SETTINGS - *------------------------------------*/ - -#define FARM_PREHEAT_HOTEND_TEMP 250 -#define FARM_PREHEAT_HPB_TEMP 40 -#define FARM_PREHEAT_FAN_SPEED 0 - -#define PLA_PREHEAT_HOTEND_TEMP 215 -#define PLA_PREHEAT_HPB_TEMP 60 -#define PLA_PREHEAT_FAN_SPEED 0 - -#define ABS_PREHEAT_HOTEND_TEMP 255 -#define ABS_PREHEAT_HPB_TEMP 100 -#define ABS_PREHEAT_FAN_SPEED 0 - -#define HIPS_PREHEAT_HOTEND_TEMP 220 -#define HIPS_PREHEAT_HPB_TEMP 100 -#define HIPS_PREHEAT_FAN_SPEED 0 - -#define PP_PREHEAT_HOTEND_TEMP 254 -#define PP_PREHEAT_HPB_TEMP 100 -#define PP_PREHEAT_FAN_SPEED 0 - -#define PET_PREHEAT_HOTEND_TEMP 230 -#define PET_PREHEAT_HPB_TEMP 85 -#define PET_PREHEAT_FAN_SPEED 0 - -#define FLEX_PREHEAT_HOTEND_TEMP 240 -#define FLEX_PREHEAT_HPB_TEMP 50 -#define FLEX_PREHEAT_FAN_SPEED 0 - -/*------------------------------------ - THERMISTORS SETTINGS - *------------------------------------*/ - -// -//--NORMAL IS 4.7kohm PULLUP!-- 1kohm pullup can be used on hotend sensor, using correct resistor and table -// -//// Temperature sensor settings: -// -2 is thermocouple with MAX6675 (only for sensor 0) -// -1 is thermocouple with AD595 -// 0 is not used -// 1 is 100k thermistor - best choice for EPCOS 100k (4.7k pullup) -// 2 is 200k thermistor - ATC Semitec 204GT-2 (4.7k pullup) -// 3 is Mendel-parts thermistor (4.7k pullup) -// 4 is 10k thermistor !! do not use it for a hotend. It gives bad resolution at high temp. !! -// 5 is 100K thermistor - ATC Semitec 104GT-2 (Used in ParCan & J-Head) (4.7k pullup) -// 6 is 100k EPCOS - Not as accurate as table 1 (created using a fluke thermocouple) (4.7k pullup) -// 7 is 100k Honeywell thermistor 135-104LAG-J01 (4.7k pullup) -// 71 is 100k Honeywell thermistor 135-104LAF-J01 (4.7k pullup) -// 8 is 100k 0603 SMD Vishay NTCS0603E3104FXT (4.7k pullup) -// 9 is 100k GE Sensing AL03006-58.2K-97-G1 (4.7k pullup) -// 10 is 100k RS thermistor 198-961 (4.7k pullup) -// 11 is 100k beta 3950 1% thermistor (4.7k pullup) -// 12 is 100k 0603 SMD Vishay NTCS0603E3104FXT (4.7k pullup) (calibrated for Makibox hot bed) -// 13 is 100k Hisens 3950 1% up to 300°C for hotend "Simple ONE " & "Hotend "All In ONE" -// 20 is the PT100 circuit found in the Ultimainboard V2.x -// 60 is 100k Maker's Tool Works Kapton Bed Thermistor beta=3950 -// -// 1k ohm pullup tables - This is not normal, you would have to have changed out your 4.7k for 1k -// (but gives greater accuracy and more stable PID) -// 51 is 100k thermistor - EPCOS (1k pullup) -// 52 is 200k thermistor - ATC Semitec 204GT-2 (1k pullup) -// 55 is 100k thermistor - ATC Semitec 104GT-2 (Used in ParCan & J-Head) (1k pullup) -// -// 1047 is Pt1000 with 4k7 pullup -// 1010 is Pt1000 with 1k pullup (non standard) -// 147 is Pt100 with 4k7 pullup -// 148 is E3D Pt100 with 4k7 pullup and no PT100 Amplifier on a MiniRambo 1.3a -// 247 is Pt100 with 4k7 pullup and PT100 Amplifier -// 110 is Pt100 with 1k pullup (non standard) - -#if defined(E3D_PT100_EXTRUDER_WITH_AMP) -#define TEMP_SENSOR_0 247 -#elif defined(E3D_PT100_EXTRUDER_NO_AMP) -#define TEMP_SENSOR_0 148 -#else -#define TEMP_SENSOR_0 5 -#endif -#define TEMP_SENSOR_1 0 -#define TEMP_SENSOR_2 0 -#if defined(E3D_PT100_BED_WITH_AMP) -#define TEMP_SENSOR_BED 247 -#elif defined(E3D_PT100_BED_NO_AMP) -#define TEMP_SENSOR_BED 148 -#else -#define TEMP_SENSOR_BED 1 -#endif -#define TEMP_SENSOR_PINDA 1 - -#define STACK_GUARD_TEST_VALUE 0xA2A2 - -#define MAX_BED_TEMP_CALIBRATION 50 -#define MAX_HOTEND_TEMP_CALIBRATION 50 - -#define MAX_E_STEPS_PER_UNIT 250 -#define MIN_E_STEPS_PER_UNIT 100 - -#define Z_BABYSTEP_MIN -3999 -#define Z_BABYSTEP_MAX 0 - -#define PINDA_PREHEAT_X 20 -#define PINDA_PREHEAT_Y 60 -#define PINDA_PREHEAT_Z 0.15 -/* -#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 -#define PINDA_STEP_T 10 -#define PINDA_MAX_T 100 - -#define PING_TIME 60 //time in s -#define PING_TIME_LONG 600 //10 min; used when length of commands buffer > 0 to avoid 0 triggering when dealing with long gcodes -#define PING_ALLERT_PERIOD 60 //time in s - -#define NC_TIME 10 //time in s for periodic important status messages sending which needs reponse from monitoring -#define NC_BUTTON_LONG_PRESS 15 //time in s - -#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 DEFAULT_PID_TEMP 210 - -#define MIN_PRINT_FAN_SPEED 75 - - -#define M600_TIMEOUT 600 //seconds - -//#define SUPPORT_VERBOSITY - -#define MMU_REQUIRED_FW_BUILDNR 132 -//#define MMU_DEBUG //print communication between MMU2 and printer on serial - -#define MMU_IDLER_SENSOR_ATTEMPTS_NR 21 //max. number of attempts to load filament if first load failed; value for max bowden length and case when loading fails right at the beginning - -#endif //__CONFIGURATION_PRUSA_H diff --git a/Firmware/variants/1_75mm_MK25S-RAMBo13a-E3Dv6full.h b/Firmware/variants/1_75mm_MK25S-RAMBo13a-E3Dv6full.h deleted file mode 100644 index e786b70ff..000000000 --- a/Firmware/variants/1_75mm_MK25S-RAMBo13a-E3Dv6full.h +++ /dev/null @@ -1,506 +0,0 @@ -#ifndef CONFIGURATION_PRUSA_H -#define CONFIGURATION_PRUSA_H - -#include -/*------------------------------------ - GENERAL SETTINGS - *------------------------------------*/ - -// Printer revision -#define PRINTER_TYPE PRINTER_MK25S -#define FILAMENT_SIZE "1_75mm_MK25" -#define NOZZLE_TYPE "E3Dv6full" - -// Developer flag -#define DEVELOPER - -// Printer name -#define CUSTOM_MENDEL_NAME "Prusa i3 MK2.5S" - -// Electronics -#define MOTHERBOARD BOARD_RAMBO_MINI_1_3 - -#define HEATBED_V2 -#define STEEL_SHEET -#define TACH0PULLUP - -// Uncomment the below for the E3D PT100 temperature sensor (with or without PT100 Amplifier) -//#define E3D_PT100_EXTRUDER_WITH_AMP -//#define E3D_PT100_EXTRUDER_NO_AMP -//#define E3D_PT100_BED_WITH_AMP -//#define E3D_PT100_BED_NO_AMP - - -/*------------------------------------ - AXIS SETTINGS - *------------------------------------*/ - -// Steps per unit {X,Y,Z,E} -#define DEFAULT_AXIS_STEPS_PER_UNIT {100,100,3200/8,133} - -// Endstop inverting -#define X_MIN_ENDSTOP_INVERTING 0 // set to 1 to invert the logic of the endstop. -#define Y_MIN_ENDSTOP_INVERTING 0 // set to 1 to invert the logic of the endstop. -#define Z_MIN_ENDSTOP_INVERTING 0 // set to 1 to invert the logic of the endstop. - -// Direction inverting -#define INVERT_X_DIR 0 // for Mendel set to 0, for Orca set to 1 -#define INVERT_Y_DIR 0 // for Mendel set to 1, for Orca set to 0 -#define INVERT_Z_DIR 0 // for Mendel set to 0, for Orca set to 1 -#define INVERT_E0_DIR 1 // for direct drive extruder v9 set to 1, for geared extruder set to 0 -#define INVERT_E1_DIR 1 // for direct drive extruder v9 set to 1, for geared extruder set to 0 -#define INVERT_E2_DIR 1 // for direct drive extruder v9 set to 1, for geared extruder set to 0 - -// Home position -#define MANUAL_X_HOME_POS 0 -#define MANUAL_Y_HOME_POS -2.2 -#define MANUAL_Z_HOME_POS 0.2 - -// Travel limits after homing -#define X_MAX_POS 250 -#define X_MIN_POS 0 -#define Y_MAX_POS 210 -#define Y_MIN_POS -4 -#define Z_MAX_POS 210 -#define Z_MIN_POS 0.15 - -// Canceled home position -#define X_CANCEL_POS 50 -#define Y_CANCEL_POS 190 - -//Pause print position -#define X_PAUSE_POS 50 -#define Y_PAUSE_POS 190 -#define Z_PAUSE_LIFT 20 - -#define NUM_AXIS 4 // The axis order in all axis related arrays is X, Y, Z, E -#define HOMING_FEEDRATE {3000, 3000, 800, 0} // set the homing speeds (mm/min) // 3000 is also valid for stallGuard homing. Valid range: 2200 - 3000 - -/** - * [0,0] steel sheet print area point X coordinate in bed print area coordinates - */ -#define SHEET_PRINT_ZERO_REF_X 0.f -/** - * [0,0] steel sheet print area point Y coordinate in bed print area coordinates - */ -#define SHEET_PRINT_ZERO_REF_Y 0.f - -#define DEFAULT_MAX_FEEDRATE {200, 200, 12, 120} // (mm/sec) max feedrate (M203) -#define DEFAULT_MAX_FEEDRATE_SILENT {172, 172, 12, 120} // (mm/sec) max feedrate (M203), silent mode -#define DEFAULT_MAX_ACCELERATION {1000, 1000, 200, 5000} // (mm/sec^2) max acceleration (M201) -#define DEFAULT_MAX_ACCELERATION_SILENT {960, 960, 200, 5000} // (mm/sec^2) max acceleration (M201), silent mode - - -#define DEFAULT_ACCELERATION 1250 // X, Y, Z and E max acceleration in mm/s^2 for printing moves (M204S) -#define DEFAULT_RETRACT_ACCELERATION 1250 // X, Y, Z and E max acceleration in mm/s^2 for retracts (M204T) - -#define MANUAL_FEEDRATE {2700, 2700, 1000, 100} // set the speeds for manual moves (mm/min) - -//number of bytes from end of the file to start check -#define END_FILE_SECTION 20000 - -#define Z_AXIS_ALWAYS_ON 1 - -// New XYZ calibration -#define NEW_XYZCAL - -// Fan check -#define FANCHECK - -// Safety timer -#define SAFETYTIMER -#define DEFAULT_SAFETYTIMER_TIME_MINS 30 - -// Filament sensor -#define FILAMENT_SENSOR -#define IR_SENSOR - - -#define DEBUG_DCODE3 - -//#define DEBUG_BUILD -#ifdef DEBUG_BUILD -//#define _NO_ASM -#define DEBUG_DCODES //D codes -#define DEBUG_STACK_MONITOR //Stack monitor in stepper ISR -//#define DEBUG_FSENSOR_LOG //Reports fsensor status to serial -//#define DEBUG_CRASHDET_COUNTERS //Display crash-detection counters on LCD -//#define DEBUG_RESUME_PRINT //Resume/save print debug enable -//#define DEBUG_UVLO_AUTOMATIC_RECOVER // Power panic automatic recovery debug output -//#define DEBUG_DISABLE_XMINLIMIT //x min limit ignored -//#define DEBUG_DISABLE_XMAXLIMIT //x max limit ignored -//#define DEBUG_DISABLE_YMINLIMIT //y min limit ignored -//#define DEBUG_DISABLE_YMAXLIMIT //y max limit ignored -//#define DEBUG_DISABLE_ZMINLIMIT //z min limit ignored -//#define DEBUG_DISABLE_ZMAXLIMIT //z max limit ignored -//#define DEBUG_DISABLE_STARTMSGS //no startup messages -//#define DEBUG_DISABLE_MINTEMP //mintemp error ignored -//#define DEBUG_DISABLE_SWLIMITS //sw limits ignored -//#define DEBUG_DISABLE_LCD_STATUS_LINE //empty four lcd line -//#define DEBUG_DISABLE_PREVENT_EXTRUDER //cold extrusion and long extrusion allowed -//#define DEBUG_DISABLE_PRUSA_STATISTICS //disable prusa_statistics() mesages -//#define DEBUG_XSTEP_DUP_PIN 21 //duplicate x-step output to pin 21 (SCL on P3) -//#define DEBUG_YSTEP_DUP_PIN 21 //duplicate y-step output to pin 21 (SCL on P3) -//#define DEBUG_DISABLE_FANCHECK //disable fan check (no ISR INT7, check disabled) -//#define DEBUG_DUMP_TO_2ND_SERIAL //dump received characters to 2nd serial line -//#define DEBUG_STEPPER_TIMER_MISSED // Stop on stepper timer overflow, beep and display a message. -//#define PLANNER_DIAGNOSTICS // Show the planner queue status on printer display. -//#define CMD_DIAGNOSTICS //Show cmd queue length on printer display -#endif /* DEBUG_BUILD */ - -//#define FSENSOR_QUALITY - - -/*------------------------------------ - EXTRUDER SETTINGS - *------------------------------------*/ - -// Mintemps -#define HEATER_0_MINTEMP 30 -#define HEATER_1_MINTEMP 5 -#define HEATER_2_MINTEMP 5 -#define HEATER_MINTEMP_DELAY 15000 // [ms] ! if changed, check maximal allowed value @ ShortTimer -#if HEATER_MINTEMP_DELAY>USHRT_MAX -#error "Check maximal allowed value @ ShortTimer (see HEATER_MINTEMP_DELAY definition)" -#endif -#define BED_MINTEMP 30 -#define BED_MINTEMP_DELAY 50000 // [ms] ! if changed, check maximal allowed value @ ShortTimer -#if BED_MINTEMP_DELAY>USHRT_MAX -#error "Check maximal allowed value @ ShortTimer (see BED_MINTEMP_DELAY definition)" -#endif - -// Maxtemps -#if defined(E3D_PT100_EXTRUDER_WITH_AMP) || defined(E3D_PT100_EXTRUDER_NO_AMP) -#define HEATER_0_MAXTEMP 410 -#else -#define HEATER_0_MAXTEMP 305 -#endif -#define HEATER_1_MAXTEMP 305 -#define HEATER_2_MAXTEMP 305 -#define BED_MAXTEMP 125 - -#if defined(E3D_PT100_EXTRUDER_WITH_AMP) || defined(E3D_PT100_EXTRUDER_NO_AMP) -// Define PID constants for extruder with PT100 -#define DEFAULT_Kp 21.70 -#define DEFAULT_Ki 1.60 -#define DEFAULT_Kd 73.76 -#else -// Define PID constants for extruder -//#define DEFAULT_Kp 40.925 -//#define DEFAULT_Ki 4.875 -//#define DEFAULT_Kd 86.085 -#define DEFAULT_Kp 16.13 -#define DEFAULT_Ki 1.1625 -#define DEFAULT_Kd 56.23 -#endif - -// Extrude mintemp -#define EXTRUDE_MINTEMP 175 - -// Extruder cooling fans -#define EXTRUDER_0_AUTO_FAN_PIN 8 -#define EXTRUDER_1_AUTO_FAN_PIN -1 -#define EXTRUDER_2_AUTO_FAN_PIN -1 -#define EXTRUDER_AUTO_FAN_TEMPERATURE 50 -#define EXTRUDER_AUTO_FAN_SPEED 255 // == full speed - - -/*------------------------------------ - LOAD/UNLOAD FILAMENT SETTINGS - *------------------------------------*/ - -// Load filament commands -#define LOAD_FILAMENT_0 "M83" -#define LOAD_FILAMENT_1 "G1 E70 F400" -#define LOAD_FILAMENT_2 "G1 E40 F100" - -// Unload filament commands -#define UNLOAD_FILAMENT_0 "M83" -#define UNLOAD_FILAMENT_1 "G1 E-80 F7000" - -/*------------------------------------ - CHANGE FILAMENT SETTINGS - *------------------------------------*/ - -// Filament change configuration -#define FILAMENTCHANGEENABLE -#ifdef FILAMENTCHANGEENABLE -#define FILAMENTCHANGE_XPOS 211 -#define FILAMENTCHANGE_YPOS 0 -#define FILAMENTCHANGE_ZADD 2 -#define FILAMENTCHANGE_FIRSTRETRACT -2 -#define FILAMENTCHANGE_FINALRETRACT -80 - -#define FILAMENTCHANGE_FIRSTFEED 70 //E distance in mm for fast filament loading sequence used used in filament change (M600) -#define FILAMENTCHANGE_FINALFEED 25 //E distance in mm for slow filament loading sequence used used in filament change (M600) and filament load (M701) -#define FILAMENTCHANGE_RECFEED 5 - -#define FILAMENTCHANGE_XYFEED 50 -#define FILAMENTCHANGE_EFEED_FIRST 20 // feedrate in mm/s for fast filament loading sequence used in filament change (M600) -#define FILAMENTCHANGE_EFEED_FINAL 3.3f // feedrate in mm/s for slow filament loading sequence used in filament change (M600) and filament load (M701) -//#define FILAMENTCHANGE_RFEED 400 -#define FILAMENTCHANGE_RFEED 7000 / 60 -#define FILAMENTCHANGE_EXFEED 2 -#define FILAMENTCHANGE_ZFEED 15 - -#endif - -/*------------------------------------ - ADDITIONAL FEATURES SETTINGS - *------------------------------------*/ - -// Define Prusa filament runout sensor -//#define FILAMENT_RUNOUT_SUPPORT - -#ifdef FILAMENT_RUNOUT_SUPPORT -#define FILAMENT_RUNOUT_SENSOR 1 -#endif - -// temperature runaway -#define TEMP_RUNAWAY_BED_HYSTERESIS 5 -#define TEMP_RUNAWAY_BED_TIMEOUT 360 - -#define TEMP_RUNAWAY_EXTRUDER_HYSTERESIS 15 -#define TEMP_RUNAWAY_EXTRUDER_TIMEOUT 45 - -/*------------------------------------ - MOTOR CURRENT SETTINGS - *------------------------------------*/ - -// Motor Current setting for BIG RAMBo -#define DIGIPOT_MOTOR_CURRENT {135,135,135,135,135} // Values 0-255 (RAMBO 135 = ~0.75A, 185 = ~1A) -#define DIGIPOT_MOTOR_CURRENT_LOUD {135,135,135,135,135} - -// Motor Current settings for RAMBo mini PWM value = MotorCurrentSetting * 255 / range -#if MOTHERBOARD == BOARD_RAMBO_MINI_1_0 || MOTHERBOARD == BOARD_RAMBO_MINI_1_3 -#define MOTOR_CURRENT_PWM_RANGE 2000 -#define DEFAULT_PWM_MOTOR_CURRENT {270, 830, 450} // {XY,Z,E} -#define DEFAULT_PWM_MOTOR_CURRENT_LOUD {540, 830, 500} // {XY,Z,E} -#define Z_SILENT 0 -#define Z_HIGH_POWER 200 -#endif - -/*------------------------------------ - BED SETTINGS - *------------------------------------*/ - -// Define Mesh Bed Leveling system to enable it -#define MESH_BED_LEVELING -#ifdef MESH_BED_LEVELING - -#define MBL_Z_STEP 0.01 - -// Mesh definitions -#define MESH_MIN_X 35 -#define MESH_MAX_X 238 -#define MESH_MIN_Y 6 -#define MESH_MAX_Y 202 - -// Mesh upsample definition -#define MESH_NUM_X_POINTS 7 -#define MESH_NUM_Y_POINTS 7 -// Mesh measure definition -#define MESH_MEAS_NUM_X_POINTS 3 -#define MESH_MEAS_NUM_Y_POINTS 3 - -// Maximum bed level correction value -#define BED_ADJUSTMENT_UM_MAX 100 - -#define MESH_HOME_Z_CALIB 0.2 -#define MESH_HOME_Z_SEARCH 5 //Z lift for homing, mesh bed leveling etc. - -#define X_PROBE_OFFSET_FROM_EXTRUDER 23 // Z probe to nozzle X offset: -left +right -#define Y_PROBE_OFFSET_FROM_EXTRUDER 5 // Z probe to nozzle Y offset: -front +behind -#define Z_PROBE_OFFSET_FROM_EXTRUDER -0.4 // Z probe to nozzle Z offset: -below (always!) -#endif - -// Bed Temperature Control -// Select PID or bang-bang with PIDTEMPBED. If bang-bang, BED_LIMIT_SWITCHING will enable hysteresis -// -// Uncomment this to enable PID on the bed. It uses the same frequency PWM as the extruder. -// If your PID_dT above is the default, and correct for your hardware/configuration, that means 7.689Hz, -// which is fine for driving a square wave into a resistive load and does not significantly impact you FET heating. -// This also works fine on a Fotek SSR-10DA Solid State Relay into a 250W heater. -// If your configuration is significantly different than this and you don't understand the issues involved, you probably -// shouldn't use bed PID until someone else verifies your hardware works. -// If this is enabled, find your own PID constants below. -#define PIDTEMPBED -// -//#define BED_LIMIT_SWITCHING - -// This sets the max power delivered to the bed, and replaces the HEATER_BED_DUTY_CYCLE_DIVIDER option. -// all forms of bed control obey this (PID, bang-bang, bang-bang with hysteresis) -// setting this to anything other than 255 enables a form of PWM to the bed just like HEATER_BED_DUTY_CYCLE_DIVIDER did, -// so you shouldn't use it unless you are OK with PWM on your bed. (see the comment on enabling PIDTEMPBED) -#define MAX_BED_POWER 255 // limits duty cycle to bed; 255=full current - -// Bed temperature compensation settings -#define BED_OFFSET 10 -#define BED_OFFSET_START 40 -#define BED_OFFSET_CENTER 50 - - -#ifdef PIDTEMPBED -//120v 250W silicone heater into 4mm borosilicate (MendelMax 1.5+) -//from FOPDT model - kp=.39 Tp=405 Tdead=66, Tc set to 79.2, aggressive factor of .15 (vs .1, 1, 10) -#if defined(E3D_PT100_BED_WITH_AMP) || defined(E3D_PT100_BED_NO_AMP) -// Define PID constants for extruder with PT100 -#define DEFAULT_bedKp 21.70 -#define DEFAULT_bedKi 1.60 -#define DEFAULT_bedKd 73.76 -#else -#define DEFAULT_bedKp 126.13 -#define DEFAULT_bedKi 4.30 -#define DEFAULT_bedKd 924.76 -#endif - -//120v 250W silicone heater into 4mm borosilicate (MendelMax 1.5+) -//from pidautotune -// #define DEFAULT_bedKp 97.1 -// #define DEFAULT_bedKi 1.41 -// #define DEFAULT_bedKd 1675.16 - -// FIND YOUR OWN: "M303 E-1 C8 S90" to run autotune on the bed at 90 degreesC for 8 cycles. -#endif // PIDTEMPBED - - -/*----------------------------------- - PREHEAT SETTINGS - *------------------------------------*/ - -#define FARM_PREHEAT_HOTEND_TEMP 250 -#define FARM_PREHEAT_HPB_TEMP 40 -#define FARM_PREHEAT_FAN_SPEED 0 - -#define PLA_PREHEAT_HOTEND_TEMP 215 -#define PLA_PREHEAT_HPB_TEMP 60 -#define PLA_PREHEAT_FAN_SPEED 0 - -#define ABS_PREHEAT_HOTEND_TEMP 255 -#define ABS_PREHEAT_HPB_TEMP 100 -#define ABS_PREHEAT_FAN_SPEED 0 - -#define HIPS_PREHEAT_HOTEND_TEMP 220 -#define HIPS_PREHEAT_HPB_TEMP 100 -#define HIPS_PREHEAT_FAN_SPEED 0 - -#define PP_PREHEAT_HOTEND_TEMP 254 -#define PP_PREHEAT_HPB_TEMP 100 -#define PP_PREHEAT_FAN_SPEED 0 - -#define PET_PREHEAT_HOTEND_TEMP 230 -#define PET_PREHEAT_HPB_TEMP 85 -#define PET_PREHEAT_FAN_SPEED 0 - -#define FLEX_PREHEAT_HOTEND_TEMP 240 -#define FLEX_PREHEAT_HPB_TEMP 50 -#define FLEX_PREHEAT_FAN_SPEED 0 - -/*------------------------------------ - THERMISTORS SETTINGS - *------------------------------------*/ - -// -//--NORMAL IS 4.7kohm PULLUP!-- 1kohm pullup can be used on hotend sensor, using correct resistor and table -// -//// Temperature sensor settings: -// -2 is thermocouple with MAX6675 (only for sensor 0) -// -1 is thermocouple with AD595 -// 0 is not used -// 1 is 100k thermistor - best choice for EPCOS 100k (4.7k pullup) -// 2 is 200k thermistor - ATC Semitec 204GT-2 (4.7k pullup) -// 3 is Mendel-parts thermistor (4.7k pullup) -// 4 is 10k thermistor !! do not use it for a hotend. It gives bad resolution at high temp. !! -// 5 is 100K thermistor - ATC Semitec 104GT-2 (Used in ParCan & J-Head) (4.7k pullup) -// 6 is 100k EPCOS - Not as accurate as table 1 (created using a fluke thermocouple) (4.7k pullup) -// 7 is 100k Honeywell thermistor 135-104LAG-J01 (4.7k pullup) -// 71 is 100k Honeywell thermistor 135-104LAF-J01 (4.7k pullup) -// 8 is 100k 0603 SMD Vishay NTCS0603E3104FXT (4.7k pullup) -// 9 is 100k GE Sensing AL03006-58.2K-97-G1 (4.7k pullup) -// 10 is 100k RS thermistor 198-961 (4.7k pullup) -// 11 is 100k beta 3950 1% thermistor (4.7k pullup) -// 12 is 100k 0603 SMD Vishay NTCS0603E3104FXT (4.7k pullup) (calibrated for Makibox hot bed) -// 13 is 100k Hisens 3950 1% up to 300°C for hotend "Simple ONE " & "Hotend "All In ONE" -// 20 is the PT100 circuit found in the Ultimainboard V2.x -// 60 is 100k Maker's Tool Works Kapton Bed Thermistor beta=3950 -// -// 1k ohm pullup tables - This is not normal, you would have to have changed out your 4.7k for 1k -// (but gives greater accuracy and more stable PID) -// 51 is 100k thermistor - EPCOS (1k pullup) -// 52 is 200k thermistor - ATC Semitec 204GT-2 (1k pullup) -// 55 is 100k thermistor - ATC Semitec 104GT-2 (Used in ParCan & J-Head) (1k pullup) -// -// 1047 is Pt1000 with 4k7 pullup -// 1010 is Pt1000 with 1k pullup (non standard) -// 147 is Pt100 with 4k7 pullup -// 148 is E3D Pt100 with 4k7 pullup and no PT100 Amplifier on a MiniRambo 1.3a -// 247 is Pt100 with 4k7 pullup and PT100 Amplifier -// 110 is Pt100 with 1k pullup (non standard) - -#if defined(E3D_PT100_EXTRUDER_WITH_AMP) -#define TEMP_SENSOR_0 247 -#elif defined(E3D_PT100_EXTRUDER_NO_AMP) -#define TEMP_SENSOR_0 148 -#else -#define TEMP_SENSOR_0 5 -#endif -#define TEMP_SENSOR_1 0 -#define TEMP_SENSOR_2 0 -#if defined(E3D_PT100_BED_WITH_AMP) -#define TEMP_SENSOR_BED 247 -#elif defined(E3D_PT100_BED_NO_AMP) -#define TEMP_SENSOR_BED 148 -#else -#define TEMP_SENSOR_BED 1 -#endif -#define TEMP_SENSOR_PINDA 1 - -#define STACK_GUARD_TEST_VALUE 0xA2A2 - -#define MAX_BED_TEMP_CALIBRATION 50 -#define MAX_HOTEND_TEMP_CALIBRATION 50 - -#define MAX_E_STEPS_PER_UNIT 250 -#define MIN_E_STEPS_PER_UNIT 100 - -#define Z_BABYSTEP_MIN -3999 -#define Z_BABYSTEP_MAX 0 - -#define PINDA_PREHEAT_X 20 -#define PINDA_PREHEAT_Y 60 -#define PINDA_PREHEAT_Z 0.15 -/* -#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 -#define PINDA_STEP_T 10 -#define PINDA_MAX_T 100 - -#define PING_TIME 60 //time in s -#define PING_TIME_LONG 600 //10 min; used when length of commands buffer > 0 to avoid 0 triggering when dealing with long gcodes -#define PING_ALLERT_PERIOD 60 //time in s - -#define NC_TIME 10 //time in s for periodic important status messages sending which needs reponse from monitoring -#define NC_BUTTON_LONG_PRESS 15 //time in s - -#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 DEFAULT_PID_TEMP 210 - -#define MIN_PRINT_FAN_SPEED 75 - - -#define M600_TIMEOUT 600 //seconds - -//#define SUPPORT_VERBOSITY - -#define MMU_REQUIRED_FW_BUILDNR 132 -//#define MMU_DEBUG //print communication between MMU2 and printer on serial - -#define MMU_IDLER_SENSOR_ATTEMPTS_NR 21 //max. number of attempts to load filament if first load failed; value for max bowden length and case when loading fails right at the beginning - -#endif //__CONFIGURATION_PRUSA_H diff --git a/Firmware/variants/1_75mm_MK3S-EINSy10a-E3Dv6full.h b/Firmware/variants/1_75mm_MK3S-EINSy10a-E3Dv6full.h deleted file mode 100644 index 37512071c..000000000 --- a/Firmware/variants/1_75mm_MK3S-EINSy10a-E3Dv6full.h +++ /dev/null @@ -1,631 +0,0 @@ -#ifndef CONFIGURATION_PRUSA_H -#define CONFIGURATION_PRUSA_H - -#include -/*------------------------------------ - GENERAL SETTINGS - *------------------------------------*/ - -// Printer revision -#define PRINTER_TYPE PRINTER_MK3S -#define FILAMENT_SIZE "1_75mm_MK3" -#define NOZZLE_TYPE "E3Dv6full" - -// Developer flag -#define DEVELOPER - -// Printer name -#define CUSTOM_MENDEL_NAME "Prusa i3 MK3S" - -// Electronics -#define MOTHERBOARD BOARD_EINSY_1_0a -#define STEEL_SHEET -#define HAS_SECOND_SERIAL_PORT - - -// Uncomment the below for the E3D PT100 temperature sensor (with or without PT100 Amplifier) -//#define E3D_PT100_EXTRUDER_WITH_AMP -//#define E3D_PT100_EXTRUDER_NO_AMP -//#define E3D_PT100_BED_WITH_AMP -//#define E3D_PT100_BED_NO_AMP - - -/*------------------------------------ - AXIS SETTINGS - *------------------------------------*/ - -// Steps per unit {X,Y,Z,E} -//#define DEFAULT_AXIS_STEPS_PER_UNIT {100,100,3200/8,140} -#define DEFAULT_AXIS_STEPS_PER_UNIT {100,100,3200/8,280} -//#define DEFAULT_AXIS_STEPS_PER_UNIT {100,100,3200/8,560} - -// Endstop inverting -#define X_MIN_ENDSTOP_INVERTING 0 // set to 1 to invert the logic of the endstop. -#define Y_MIN_ENDSTOP_INVERTING 0 // set to 1 to invert the logic of the endstop. -#define Z_MIN_ENDSTOP_INVERTING 0 // set to 1 to invert the logic of the endstop. - -// Direction inverting -#define INVERT_X_DIR 1 // for Mendel set to 0, for Orca set to 1 -#define INVERT_Y_DIR 0 // for Mendel set to 1, for Orca set to 0 -#define INVERT_Z_DIR 1 // for Mendel set to 0, for Orca set to 1 -#define INVERT_E0_DIR 0 // for direct drive extruder v9 set to 1, for geared extruder set to 0 -#define INVERT_E1_DIR 0 // for direct drive extruder v9 set to 1, for geared extruder set to 0 -#define INVERT_E2_DIR 0 // for direct drive extruder v9 set to 1, for geared extruder set to 0 - -// Home position -#define MANUAL_X_HOME_POS 0 -#define MANUAL_Y_HOME_POS -2.2 -#define MANUAL_Z_HOME_POS 0.2 - -// Travel limits after homing -#define X_MAX_POS 255 -#define X_MIN_POS 0 -#define Y_MAX_POS 212.5 -#define Y_MIN_POS -4 //orig -4 -#define Z_MAX_POS 210 -#define Z_MIN_POS 0.15 - -// Canceled home position -#define X_CANCEL_POS 50 -#define Y_CANCEL_POS 190 - -//Pause print position -#define X_PAUSE_POS 50 -#define Y_PAUSE_POS 190 -#define Z_PAUSE_LIFT 20 - -#define NUM_AXIS 4 // The axis order in all axis related arrays is X, Y, Z, E -#define HOMING_FEEDRATE {3000, 3000, 800, 0} // set the homing speeds (mm/min) // 3000 is also valid for stallGuard homing. Valid range: 2200 - 3000 - -//#define DEFAULT_Y_OFFSET 4.f // Default distance of Y_MIN_POS point from endstop, when the printer is not calibrated. -/** - * [0,0] steel sheet print area point X coordinate in bed print area coordinates - */ -#define SHEET_PRINT_ZERO_REF_X 0.f -/** - * [0,0] steel sheet print area point Y coordinate in bed print area coordinates - */ -#define SHEET_PRINT_ZERO_REF_Y -2.f - -#define DEFAULT_MAX_FEEDRATE {200, 200, 12, 120} // (mm/sec) max feedrate (M203) -#define DEFAULT_MAX_FEEDRATE_SILENT {100, 100, 12, 120} // (mm/sec) max feedrate (M203), silent mode - -#define DEFAULT_MAX_ACCELERATION {1000, 1000, 200, 5000} // (mm/sec^2) max acceleration (M201) -#define DEFAULT_MAX_ACCELERATION_SILENT {960, 960, 200, 5000} // (mm/sec^2) max acceleration (M201), silent mode - - -#define DEFAULT_ACCELERATION 1250 // X, Y, Z and E max acceleration in mm/s^2 for printing moves (M204S) -#define DEFAULT_RETRACT_ACCELERATION 1250 // X, Y, Z and E max acceleration in mm/s^2 for retracts (M204T) - -#define MANUAL_FEEDRATE {2700, 2700, 1000, 100} // set the speeds for manual moves (mm/min) - -//Silent mode limits -#define SILENT_MAX_ACCEL_XY 960ul // max acceleration in silent mode in mm/s^2 -#define SILENT_MAX_FEEDRATE_XY 100 // max feedrate in mm/s - -//Normal mode limits -#define NORMAL_MAX_ACCEL_XY 2500ul // max acceleration in normal mode in mm/s^2 -#define NORMAL_MAX_FEEDRATE_XY 200 // max feedrate in mm/s - -//number of bytes from end of the file to start check -#define END_FILE_SECTION 20000 - -#define Z_AXIS_ALWAYS_ON 1 - -//Crash detection -#define CRASHDET_TIMER 45 //seconds -#define CRASHDET_COUNTER_MAX 3 - -// New XYZ calibration -#define NEW_XYZCAL - -// Watchdog support -#define WATCHDOG - -// Power panic -#define UVLO_SUPPORT - -// Fan check -#define FANCHECK - -// Safety timer -#define SAFETYTIMER -#define DEFAULT_SAFETYTIMER_TIME_MINS 30 - -// Filament sensor -#define FILAMENT_SENSOR -#define IR_SENSOR - -// Backlash - -//#define BACKLASH_X -//#define BACKLASH_Y - - -// Minimum ambient temperature limit to start triggering MINTEMP errors [C] -// this value is litlebit higher that real limit, because ambient termistor is on the board and is temperated from it, -// temperature inside the case is around 31C for ambient temperature 25C, when the printer is powered on long time and idle -// the real limit is 15C (same as MINTEMP limit), this is because 15C is end of scale for both used thermistors (bed, heater) -#define MINTEMP_MINAMBIENT 25 -#define MINTEMP_MINAMBIENT_RAW 978 - -#define DEBUG_DCODE3 - -//#define DEBUG_BUILD -//#define DEBUG_SEC_LANG //secondary language debug output at startup -//#define DEBUG_W25X20CL //debug external spi flash -#ifdef DEBUG_BUILD -//#define _NO_ASM -#define DEBUG_DCODES //D codes -#define DEBUG_STACK_MONITOR //Stack monitor in stepper ISR -//#define DEBUG_FSENSOR_LOG //Reports fsensor status to serial -//#define DEBUG_CRASHDET_COUNTERS //Display crash-detection counters on LCD -//#define DEBUG_RESUME_PRINT //Resume/save print debug enable -//#define DEBUG_UVLO_AUTOMATIC_RECOVER // Power panic automatic recovery debug output -//#define DEBUG_DISABLE_XMINLIMIT //x min limit ignored -//#define DEBUG_DISABLE_XMAXLIMIT //x max limit ignored -//#define DEBUG_DISABLE_YMINLIMIT //y min limit ignored -//#define DEBUG_DISABLE_YMAXLIMIT //y max limit ignored -//#define DEBUG_DISABLE_ZMINLIMIT //z min limit ignored -//#define DEBUG_DISABLE_ZMAXLIMIT //z max limit ignored -#define DEBUG_DISABLE_STARTMSGS //no startup messages -//#define DEBUG_DISABLE_MINTEMP //mintemp error ignored -//#define DEBUG_DISABLE_SWLIMITS //sw limits ignored -//#define DEBUG_DISABLE_LCD_STATUS_LINE //empty four lcd line -//#define DEBUG_DISABLE_PREVENT_EXTRUDER //cold extrusion and long extrusion allowed -//#define DEBUG_DISABLE_PRUSA_STATISTICS //disable prusa_statistics() mesages -//#define DEBUG_DISABLE_FORCE_SELFTEST //disable force selftest -//#define DEBUG_XSTEP_DUP_PIN 21 //duplicate x-step output to pin 21 (SCL on P3) -//#define DEBUG_YSTEP_DUP_PIN 21 //duplicate y-step output to pin 21 (SCL on P3) -//#define DEBUG_DISABLE_FANCHECK //disable fan check (no ISR INT7, check disabled) -//#define DEBUG_DISABLE_FSENSORCHECK //disable fsensor check (no ISR INT7, check disabled) -#define DEBUG_DUMP_TO_2ND_SERIAL //dump received characters to 2nd serial line -#define DEBUG_STEPPER_TIMER_MISSED // Stop on stepper timer overflow, beep and display a message. -#define PLANNER_DIAGNOSTICS // Show the planner queue status on printer display. -#define CMD_DIAGNOSTICS //Show cmd queue length on printer display -#endif /* DEBUG_BUILD */ - -//#define FSENSOR_QUALITY - - -#define LINEARITY_CORRECTION -#define TMC2130_LINEARITY_CORRECTION -#define TMC2130_LINEARITY_CORRECTION_XYZ -//#define TMC2130_VARIABLE_RESOLUTION - - - -/*------------------------------------ - TMC2130 default settings - *------------------------------------*/ - -#define TMC2130_FCLK 12000000 // fclk = 12MHz - -#define TMC2130_USTEPS_XY 16 // microstep resolution for XY axes -#define TMC2130_USTEPS_Z 16 // microstep resolution for Z axis -#define TMC2130_USTEPS_E 32 // microstep resolution for E axis -#define TMC2130_INTPOL_XY 1 // extrapolate 256 for XY axes -#define TMC2130_INTPOL_Z 1 // extrapolate 256 for Z axis -#define TMC2130_INTPOL_E 1 // extrapolate 256 for E axis - -#define TMC2130_PWM_GRAD_X 2 // PWMCONF -#define TMC2130_PWM_AMPL_X 230 // PWMCONF -#define TMC2130_PWM_AUTO_X 1 // PWMCONF -#define TMC2130_PWM_FREQ_X 2 // PWMCONF - -#define TMC2130_PWM_GRAD_Y 2 // PWMCONF -#define TMC2130_PWM_AMPL_Y 235 // PWMCONF -#define TMC2130_PWM_AUTO_Y 1 // PWMCONF -#define TMC2130_PWM_FREQ_Y 2 // PWMCONF - -#define TMC2130_PWM_GRAD_Z 4 // PWMCONF -#define TMC2130_PWM_AMPL_Z 200 // PWMCONF -#define TMC2130_PWM_AUTO_Z 1 // PWMCONF -#define TMC2130_PWM_FREQ_Z 2 // PWMCONF - -#define TMC2130_PWM_GRAD_E 4 // PWMCONF -#define TMC2130_PWM_AMPL_E 240 // PWMCONF -#define TMC2130_PWM_AUTO_E 1 // PWMCONF -#define TMC2130_PWM_FREQ_E 2 // PWMCONF - -#define TMC2130_TOFF_XYZ 3 // CHOPCONF // fchop = 27.778kHz -#define TMC2130_TOFF_E 3 // CHOPCONF // fchop = 27.778kHz -//#define TMC2130_TOFF_E 4 // CHOPCONF // fchop = 21.429kHz -//#define TMC2130_TOFF_E 5 // CHOPCONF // fchop = 17.442kHz - -//#define TMC2130_STEALTH_E // Extruder stealthChop mode -//#define TMC2130_CNSTOFF_E // Extruder constant-off-time mode (similar to MK2) - -//#define TMC2130_PWM_DIV 683 // PWM frequency divider (1024, 683, 512, 410) -#define TMC2130_PWM_DIV 512 // PWM frequency divider (1024, 683, 512, 410) -#define TMC2130_PWM_CLK (2 * TMC2130_FCLK / TMC2130_PWM_DIV) // PWM frequency (23.4kHz, 35.1kHz, 46.9kHz, 58.5kHz for 12MHz fclk) - -#define TMC2130_TPWMTHRS 0 // TPWMTHRS - Sets the switching speed threshold based on TSTEP from stealthChop to spreadCycle mode -#define TMC2130_THIGH 0 // THIGH - unused - -//#define TMC2130_TCOOLTHRS_X 450 // TCOOLTHRS - coolstep treshold -//#define TMC2130_TCOOLTHRS_Y 450 // TCOOLTHRS - coolstep treshold -#define TMC2130_TCOOLTHRS_X 430 // TCOOLTHRS - coolstep treshold -#define TMC2130_TCOOLTHRS_Y 430 // TCOOLTHRS - coolstep treshold -#define TMC2130_TCOOLTHRS_Z 500 // TCOOLTHRS - coolstep treshold -#define TMC2130_TCOOLTHRS_E 500 // TCOOLTHRS - coolstep treshold - -#define TMC2130_SG_HOMING 1 // stallguard homing -#define TMC2130_SG_THRS_X 3 // stallguard sensitivity for X axis -#define TMC2130_SG_THRS_Y 3 // stallguard sensitivity for Y axis -#define TMC2130_SG_THRS_Z 4 // stallguard sensitivity for Z axis -#define TMC2130_SG_THRS_E 3 // stallguard sensitivity for E axis - -//new settings is possible for vsense = 1, running current value > 31 set vsense to zero and shift both currents by 1 bit right (Z axis only) -#define TMC2130_CURRENTS_H {16, 20, 35, 30} // default holding currents for all axes -#define TMC2130_CURRENTS_R {16, 20, 35, 30} // default running currents for all axes -#define TMC2130_UNLOAD_CURRENT_R 12 // lowe current for M600 to protect filament sensor - -#define TMC2130_STEALTH_Z - -//#define TMC2130_SERVICE_CODES_M910_M918 - -//#define TMC2130_DEBUG -//#define TMC2130_DEBUG_WR -//#define TMC2130_DEBUG_RD - - -/*------------------------------------ - EXTRUDER SETTINGS - *------------------------------------*/ - -// Mintemps -#define HEATER_0_MINTEMP 15 -#define HEATER_1_MINTEMP 5 -#define HEATER_2_MINTEMP 5 -#define HEATER_MINTEMP_DELAY 15000 // [ms] ! if changed, check maximal allowed value @ ShortTimer -#if HEATER_MINTEMP_DELAY>USHRT_MAX -#error "Check maximal allowed value @ ShortTimer (see HEATER_MINTEMP_DELAY definition)" -#endif -#define BED_MINTEMP 15 -#define BED_MINTEMP_DELAY 50000 // [ms] ! if changed, check maximal allowed value @ ShortTimer -#if BED_MINTEMP_DELAY>USHRT_MAX -#error "Check maximal allowed value @ ShortTimer (see BED_MINTEMP_DELAY definition)" -#endif - -// Maxtemps -#if defined(E3D_PT100_EXTRUDER_WITH_AMP) || defined(E3D_PT100_EXTRUDER_NO_AMP) -#define HEATER_0_MAXTEMP 410 -#else -#define HEATER_0_MAXTEMP 305 -#endif -#define HEATER_1_MAXTEMP 305 -#define HEATER_2_MAXTEMP 305 -#define BED_MAXTEMP 125 - -#if defined(E3D_PT100_EXTRUDER_WITH_AMP) || defined(E3D_PT100_EXTRUDER_NO_AMP) -// Define PID constants for extruder with PT100 -#define DEFAULT_Kp 21.70 -#define DEFAULT_Ki 1.60 -#define DEFAULT_Kd 73.76 -#else -// Define PID constants for extruder -//#define DEFAULT_Kp 40.925 -//#define DEFAULT_Ki 4.875 -//#define DEFAULT_Kd 86.085 -#define DEFAULT_Kp 16.13 -#define DEFAULT_Ki 1.1625 -#define DEFAULT_Kd 56.23 -#endif - -// Extrude mintemp -#define EXTRUDE_MINTEMP 175 - -// Extruder cooling fans -#define EXTRUDER_0_AUTO_FAN_PIN 8 -#define EXTRUDER_1_AUTO_FAN_PIN -1 -#define EXTRUDER_2_AUTO_FAN_PIN -1 -#define EXTRUDER_AUTO_FAN_TEMPERATURE 50 -#define EXTRUDER_AUTO_FAN_SPEED 255 // == full speed - - - -/*------------------------------------ - LOAD/UNLOAD FILAMENT SETTINGS - *------------------------------------*/ - -// Load filament commands -#define LOAD_FILAMENT_0 "M83" -#define LOAD_FILAMENT_1 "G1 E70 F400" -#define LOAD_FILAMENT_2 "G1 E40 F100" - -// Unload filament commands -#define UNLOAD_FILAMENT_0 "M83" -#define UNLOAD_FILAMENT_1 "G1 E-80 F7000" - -/*------------------------------------ - CHANGE FILAMENT SETTINGS - *------------------------------------*/ - -// Filament change configuration -#define FILAMENTCHANGEENABLE -#ifdef FILAMENTCHANGEENABLE -#define FILAMENTCHANGE_XPOS 211 -#define FILAMENTCHANGE_YPOS 0 -#define FILAMENTCHANGE_ZADD 2 -#define FILAMENTCHANGE_FIRSTRETRACT -2 -#define FILAMENTCHANGE_FINALRETRACT -80 - -#define FILAMENTCHANGE_FIRSTFEED 70 //E distance in mm for fast filament loading sequence used used in filament change (M600) -#define FILAMENTCHANGE_FINALFEED 25 //E distance in mm for slow filament loading sequence used used in filament change (M600) and filament load (M701) -#define FILAMENTCHANGE_RECFEED 5 - -#define FILAMENTCHANGE_XYFEED 50 -#define FILAMENTCHANGE_EFEED_FIRST 20 // feedrate in mm/s for fast filament loading sequence used in filament change (M600) -#define FILAMENTCHANGE_EFEED_FINAL 3.3f // feedrate in mm/s for slow filament loading sequence used in filament change (M600) and filament load (M701) -//#define FILAMENTCHANGE_RFEED 400 -#define FILAMENTCHANGE_RFEED 7000 / 60 -#define FILAMENTCHANGE_EXFEED 2 -#define FILAMENTCHANGE_ZFEED 15 - -#endif - -/*------------------------------------ - ADDITIONAL FEATURES SETTINGS - *------------------------------------*/ - -// Define Prusa filament runout sensor -//#define FILAMENT_RUNOUT_SUPPORT - -#ifdef FILAMENT_RUNOUT_SUPPORT -#define FILAMENT_RUNOUT_SENSOR 1 -#endif - -// temperature runaway -#define TEMP_RUNAWAY_BED_HYSTERESIS 5 -#define TEMP_RUNAWAY_BED_TIMEOUT 360 - -#define TEMP_RUNAWAY_EXTRUDER_HYSTERESIS 15 -#define TEMP_RUNAWAY_EXTRUDER_TIMEOUT 45 - -/*------------------------------------ - MOTOR CURRENT SETTINGS - *------------------------------------*/ - -// Motor Current settings for Einsy/tmc = 0..63 -#define MOTOR_CURRENT_PWM_RANGE 63 - -/*------------------------------------ - BED SETTINGS - *------------------------------------*/ - -// Define Mesh Bed Leveling system to enable it -#define MESH_BED_LEVELING -#ifdef MESH_BED_LEVELING - -#define MBL_Z_STEP 0.01 - -// Mesh definitions -#define MESH_MIN_X 35 -#define MESH_MAX_X 238 -#define MESH_MIN_Y 6 -#define MESH_MAX_Y 202 - -// Mesh upsample definition -#define MESH_NUM_X_POINTS 7 -#define MESH_NUM_Y_POINTS 7 -// Mesh measure definition -#define MESH_MEAS_NUM_X_POINTS 3 -#define MESH_MEAS_NUM_Y_POINTS 3 - -// Maximum bed level correction value -#define BED_ADJUSTMENT_UM_MAX 100 - -#define MESH_HOME_Z_CALIB 0.2 -#define MESH_HOME_Z_SEARCH 5 //Z lift for homing, mesh bed leveling etc. - -#define X_PROBE_OFFSET_FROM_EXTRUDER 23 // Z probe to nozzle X offset: -left +right -#define Y_PROBE_OFFSET_FROM_EXTRUDER 5 // Z probe to nozzle Y offset: -front +behind -#define Z_PROBE_OFFSET_FROM_EXTRUDER -0.4 // Z probe to nozzle Z offset: -below (always!) -#endif - -// Bed Temperature Control -// Select PID or bang-bang with PIDTEMPBED. If bang-bang, BED_LIMIT_SWITCHING will enable hysteresis -// -// Uncomment this to enable PID on the bed. It uses the same frequency PWM as the extruder. -// If your PID_dT above is the default, and correct for your hardware/configuration, that means 7.689Hz, -// which is fine for driving a square wave into a resistive load and does not significantly impact you FET heating. -// This also works fine on a Fotek SSR-10DA Solid State Relay into a 250W heater. -// If your configuration is significantly different than this and you don't understand the issues involved, you probably -// shouldn't use bed PID until someone else verifies your hardware works. -// If this is enabled, find your own PID constants below. -#define PIDTEMPBED -// -//#define BED_LIMIT_SWITCHING - -// This sets the max power delivered to the bed, and replaces the HEATER_BED_DUTY_CYCLE_DIVIDER option. -// all forms of bed control obey this (PID, bang-bang, bang-bang with hysteresis) -// setting this to anything other than 255 enables a form of PWM to the bed just like HEATER_BED_DUTY_CYCLE_DIVIDER did, -// so you shouldn't use it unless you are OK with PWM on your bed. (see the comment on enabling PIDTEMPBED) -#define MAX_BED_POWER 255 // limits duty cycle to bed; 255=full current - -// Bed temperature compensation settings -#define BED_OFFSET 10 -#define BED_OFFSET_START 40 -#define BED_OFFSET_CENTER 50 - - -#ifdef PIDTEMPBED -//120v 250W silicone heater into 4mm borosilicate (MendelMax 1.5+) -//from FOPDT model - kp=.39 Tp=405 Tdead=66, Tc set to 79.2, aggressive factor of .15 (vs .1, 1, 10) -#if defined(E3D_PT100_BED_WITH_AMP) || defined(E3D_PT100_BED_NO_AMP) -// Define PID constants for extruder with PT100 -#define DEFAULT_bedKp 21.70 -#define DEFAULT_bedKi 1.60 -#define DEFAULT_bedKd 73.76 -#else -#define DEFAULT_bedKp 126.13 -#define DEFAULT_bedKi 4.30 -#define DEFAULT_bedKd 924.76 -#endif - -//120v 250W silicone heater into 4mm borosilicate (MendelMax 1.5+) -//from pidautotune -// #define DEFAULT_bedKp 97.1 -// #define DEFAULT_bedKi 1.41 -// #define DEFAULT_bedKd 1675.16 - -// FIND YOUR OWN: "M303 E-1 C8 S90" to run autotune on the bed at 90 degreesC for 8 cycles. -#endif // PIDTEMPBED - -//connect message when communication with monitoring broken -//#define FARM_CONNECT_MESSAGE - -/*----------------------------------- - PREHEAT SETTINGS - *------------------------------------*/ - -#define FARM_PREHEAT_HOTEND_TEMP 250 -#define FARM_PREHEAT_HPB_TEMP 60 -#define FARM_PREHEAT_FAN_SPEED 0 - -#define PLA_PREHEAT_HOTEND_TEMP 215 -#define PLA_PREHEAT_HPB_TEMP 60 -#define PLA_PREHEAT_FAN_SPEED 0 - -#define ABS_PREHEAT_HOTEND_TEMP 255 -#define ABS_PREHEAT_HPB_TEMP 100 -#define ABS_PREHEAT_FAN_SPEED 0 - -#define HIPS_PREHEAT_HOTEND_TEMP 220 -#define HIPS_PREHEAT_HPB_TEMP 100 -#define HIPS_PREHEAT_FAN_SPEED 0 - -#define PP_PREHEAT_HOTEND_TEMP 254 -#define PP_PREHEAT_HPB_TEMP 100 -#define PP_PREHEAT_FAN_SPEED 0 - -#define PET_PREHEAT_HOTEND_TEMP 230 -#define PET_PREHEAT_HPB_TEMP 85 -#define PET_PREHEAT_FAN_SPEED 0 - -#define FLEX_PREHEAT_HOTEND_TEMP 240 -#define FLEX_PREHEAT_HPB_TEMP 50 -#define FLEX_PREHEAT_FAN_SPEED 0 - -/*------------------------------------ - THERMISTORS SETTINGS - *------------------------------------*/ - -// -//--NORMAL IS 4.7kohm PULLUP!-- 1kohm pullup can be used on hotend sensor, using correct resistor and table -// -//// Temperature sensor settings: -// -2 is thermocouple with MAX6675 (only for sensor 0) -// -1 is thermocouple with AD595 -// 0 is not used -// 1 is 100k thermistor - best choice for EPCOS 100k (4.7k pullup) -// 2 is 200k thermistor - ATC Semitec 204GT-2 (4.7k pullup) -// 3 is Mendel-parts thermistor (4.7k pullup) -// 4 is 10k thermistor !! do not use it for a hotend. It gives bad resolution at high temp. !! -// 5 is 100K thermistor - ATC Semitec 104GT-2 (Used in ParCan & J-Head) (4.7k pullup) -// 6 is 100k EPCOS - Not as accurate as table 1 (created using a fluke thermocouple) (4.7k pullup) -// 7 is 100k Honeywell thermistor 135-104LAG-J01 (4.7k pullup) -// 71 is 100k Honeywell thermistor 135-104LAF-J01 (4.7k pullup) -// 8 is 100k 0603 SMD Vishay NTCS0603E3104FXT (4.7k pullup) -// 9 is 100k GE Sensing AL03006-58.2K-97-G1 (4.7k pullup) -// 10 is 100k RS thermistor 198-961 (4.7k pullup) -// 11 is 100k beta 3950 1% thermistor (4.7k pullup) -// 12 is 100k 0603 SMD Vishay NTCS0603E3104FXT (4.7k pullup) (calibrated for Makibox hot bed) -// 13 is 100k Hisens 3950 1% up to 300°C for hotend "Simple ONE " & "Hotend "All In ONE" -// 20 is the PT100 circuit found in the Ultimainboard V2.x -// 60 is 100k Maker's Tool Works Kapton Bed Thermistor beta=3950 -// -// 1k ohm pullup tables - This is not normal, you would have to have changed out your 4.7k for 1k -// (but gives greater accuracy and more stable PID) -// 51 is 100k thermistor - EPCOS (1k pullup) -// 52 is 200k thermistor - ATC Semitec 204GT-2 (1k pullup) -// 55 is 100k thermistor - ATC Semitec 104GT-2 (Used in ParCan & J-Head) (1k pullup) -// -// 1047 is Pt1000 with 4k7 pullup -// 1010 is Pt1000 with 1k pullup (non standard) -// 147 is Pt100 with 4k7 pullup -// 148 is E3D Pt100 with 4k7 pullup and no PT100 Amplifier on a MiniRambo 1.3a -// 247 is Pt100 with 4k7 pullup and PT100 Amplifier -// 110 is Pt100 with 1k pullup (non standard) - -#if defined(E3D_PT100_EXTRUDER_WITH_AMP) -#define TEMP_SENSOR_0 247 -#elif defined(E3D_PT100_EXTRUDER_NO_AMP) -#define TEMP_SENSOR_0 148 -#else -#define TEMP_SENSOR_0 5 -#endif -#define TEMP_SENSOR_1 0 -#define TEMP_SENSOR_2 0 -#if defined(E3D_PT100_BED_WITH_AMP) -#define TEMP_SENSOR_BED 247 -#elif defined(E3D_PT100_BED_NO_AMP) -#define TEMP_SENSOR_BED 148 -#else -#define TEMP_SENSOR_BED 1 -#endif -#define TEMP_SENSOR_PINDA 1 -#define TEMP_SENSOR_AMBIENT 2000 - -#define STACK_GUARD_TEST_VALUE 0xA2A2 - -#define MAX_BED_TEMP_CALIBRATION 50 -#define MAX_HOTEND_TEMP_CALIBRATION 50 - -#define MAX_E_STEPS_PER_UNIT 250 -#define MIN_E_STEPS_PER_UNIT 100 - -#define Z_BABYSTEP_MIN -3999 -#define Z_BABYSTEP_MAX 0 - -#define PINDA_PREHEAT_X 20 -#define PINDA_PREHEAT_Y 60 -#define PINDA_PREHEAT_Z 0.15 -/* -#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 -#define PINDA_STEP_T 10 -#define PINDA_MAX_T 100 - -#define PING_TIME 60 //time in s -#define PING_TIME_LONG 600 //10 min; used when length of commands buffer > 0 to avoid 0 triggering when dealing with long gcodes -#define PING_ALLERT_PERIOD 60 //time in s - -#define NC_TIME 10 //time in s for periodic important status messages sending which needs reponse from monitoring -#define NC_BUTTON_LONG_PRESS 15 //time in s - -#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 DEFAULT_PID_TEMP 210 - -#define MIN_PRINT_FAN_SPEED 75 - - -// How much shall the print head be lifted on power panic? -// Ideally the Z axis will reach a zero phase of the stepper driver on power outage. To simplify this, -// UVLO_Z_AXIS_SHIFT shall be an integer multiply of the stepper driver cycle, that is 4x full step. -// For example, the Prusa i3 MK2 with 16 microsteps per full step has Z stepping of 400 microsteps per mm. -// At 400 microsteps per mm, a full step lifts the Z axis by 0.04mm, and a stepper driver cycle is 0.16mm. -// The following example, 12 * (4 * 16 / 400) = 12 * 0.16mm = 1.92mm. -//#define UVLO_Z_AXIS_SHIFT 1.92 -#define UVLO_Z_AXIS_SHIFT 0.64 -// If power panic occured, and the current temperature is higher then target temperature before interrupt minus this offset, print will be recovered automatically. -#define AUTOMATIC_UVLO_BED_TEMP_OFFSET 5 - -#define HEATBED_V2 - -#define M600_TIMEOUT 600 //seconds - -//#define SUPPORT_VERBOSITY - -#define MMU_REQUIRED_FW_BUILDNR 83 -#define MMU_HWRESET -#define MMU_DEBUG //print communication between MMU2 and printer on serial -#define MMU_IDLER_SENSOR_ATTEMPTS_NR 21 //max. number of attempts to load filament if first load failed; value for max bowden length and case when loading fails right at the beginning - -#endif //__CONFIGURATION_PRUSA_H From 2fe8e0670a4c644e9bccdd7e1e54c22531a90f15 Mon Sep 17 00:00:00 2001 From: PavelSindler Date: Wed, 6 Feb 2019 16:15:19 +0100 Subject: [PATCH 43/45] MK2 build fail fixed --- Firmware/temperature.cpp | 2 ++ Firmware/ultralcd.cpp | 7 +++++-- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/Firmware/temperature.cpp b/Firmware/temperature.cpp index fef6cbc98..8dcfc9a9c 100644 --- a/Firmware/temperature.cpp +++ b/Firmware/temperature.cpp @@ -756,6 +756,7 @@ void manage_heater() (defined(EXTRUDER_2_AUTO_FAN_PIN) && EXTRUDER_2_AUTO_FAN_PIN > -1) #ifdef FAN_SOFT_PWM +#ifdef FANCHECK if ((_millis() - extruder_autofan_last_check > FAN_CHECK_PERIOD) && (!fan_measuring)) { extruder_autofan_last_check = _millis(); fanSpeedBckp = fanSpeedSoftPwm; @@ -775,6 +776,7 @@ void manage_heater() extruder_autofan_last_check = _millis(); fan_measuring = false; } +#endif //FANCHECK checkExtruderAutoFans(); #else //FAN_SOFT_PWM if(_millis() - extruder_autofan_last_check > 1000) // only need to check fan state very infrequently diff --git a/Firmware/ultralcd.cpp b/Firmware/ultralcd.cpp index 364f1a3d8..16b077dae 100644 --- a/Firmware/ultralcd.cpp +++ b/Firmware/ultralcd.cpp @@ -181,7 +181,9 @@ enum class testScreen static int lcd_selftest_screen(testScreen screen, int _progress, int _progress_scale, bool _clear, int _delay); static void lcd_selftest_screen_step(int _row, int _col, int _state, const char *_name, const char *_indicator); static bool lcd_selftest_manual_fan_check(int _fan, bool check_opposite); +#ifdef FAN_CHECK static bool lcd_selftest_fan_dialog(int _fan); +#endif //FAN_CHECk static bool lcd_selftest_fsensor(); static bool selftest_irsensor(); static void lcd_selftest_error(int _error_no, const char *_error_1, const char *_error_2); @@ -7338,12 +7340,11 @@ static bool lcd_selftest_manual_fan_check(int _fan, bool check_opposite) } - +#ifdef FANCHECK static bool lcd_selftest_fan_dialog(int _fan) { bool _result = true; int _errno = 7; - switch (_fan) { case 0: fanSpeed = 0; @@ -7431,6 +7432,8 @@ static bool lcd_selftest_fan_dialog(int _fan) return _result; } +#endif //FANCHECK + static int lcd_selftest_screen(testScreen screen, int _progress, int _progress_scale, bool _clear, int _delay) { From 726d5aa3c3594464e1e5c17c2cbe9197a95611ab Mon Sep 17 00:00:00 2001 From: PavelSindler Date: Wed, 6 Feb 2019 16:27:44 +0100 Subject: [PATCH 44/45] typo fixed --- Firmware/ultralcd.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Firmware/ultralcd.cpp b/Firmware/ultralcd.cpp index 16b077dae..b26b1c96c 100644 --- a/Firmware/ultralcd.cpp +++ b/Firmware/ultralcd.cpp @@ -181,9 +181,9 @@ enum class testScreen static int lcd_selftest_screen(testScreen screen, int _progress, int _progress_scale, bool _clear, int _delay); static void lcd_selftest_screen_step(int _row, int _col, int _state, const char *_name, const char *_indicator); static bool lcd_selftest_manual_fan_check(int _fan, bool check_opposite); -#ifdef FAN_CHECK +#ifdef FANCHECK static bool lcd_selftest_fan_dialog(int _fan); -#endif //FAN_CHECk +#endif //FANCHECK static bool lcd_selftest_fsensor(); static bool selftest_irsensor(); static void lcd_selftest_error(int _error_no, const char *_error_1, const char *_error_2); From d19c92bca8bf1982e61374306094e36153cb5ba4 Mon Sep 17 00:00:00 2001 From: PavelSindler Date: Wed, 6 Feb 2019 19:38:52 +0100 Subject: [PATCH 45/45] welcome message changed --- Firmware/messages.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Firmware/messages.c b/Firmware/messages.c index 4cac4f2d0..7943d2208 100644 --- a/Firmware/messages.c +++ b/Firmware/messages.c @@ -96,7 +96,7 @@ const char MSG_WIZARD_DONE[] PROGMEM_I1 = ISTR("All is done. Happy printing!"); const char MSG_WIZARD_HEATING[] PROGMEM_I1 = ISTR("Preheating nozzle. Please wait."); ////c=20 r=3 const char MSG_WIZARD_QUIT[] PROGMEM_I1 = ISTR("You can always resume the Wizard from Calibration -> Wizard."); ////c=20 r=8 const char MSG_YES[] PROGMEM_I1 = ISTR("Yes"); ////c=0 r=0 -const char WELCOME_MSG[] PROGMEM_I1 = ISTR(CUSTOM_MENDEL_NAME " ready."); ////c=20 r=0 +const char WELCOME_MSG[] PROGMEM_I1 = ISTR(CUSTOM_MENDEL_NAME " OK."); ////c=20 r=0 //not internationalized messages const char MSG_SD_WORKDIR_FAIL[] PROGMEM_N1 = "workDir open failed"; ////c=0 r=0 const char MSG_BROWNOUT_RESET[] PROGMEM_N1 = " Brown out Reset"; ////c=0 r=0