From 54deb9eea366295100ab9c0c9105dbb841cc826e Mon Sep 17 00:00:00 2001 From: Scott Lahteine Date: Fri, 8 May 2015 22:36:02 -0700 Subject: [PATCH] Enable WATCH_TEMP_PERIOD by default --- Marlin/Configuration_adv.h | 4 +- Marlin/Marlin_main.cpp | 9 ++++- .../configurator/config/Configuration_adv.h | 4 +- .../Felix/Configuration_adv.h | 4 +- .../Hephestos/Configuration_adv.h | 4 +- .../K8200/Configuration_adv.h | 4 +- .../SCARA/Configuration_adv.h | 4 +- .../WITBOX/Configuration_adv.h | 4 +- .../delta/generic/Configuration_adv.h | 4 +- .../delta/kossel_mini/Configuration_adv.h | 4 +- .../makibox/Configuration_adv.h | 4 +- .../tvrrug/Round2/Configuration_adv.h | 4 +- Marlin/temperature.cpp | 39 ++++++++++--------- Marlin/temperature.h | 5 ++- Marlin/ultralcd.cpp | 4 +- 15 files changed, 56 insertions(+), 45 deletions(-) diff --git a/Marlin/Configuration_adv.h b/Marlin/Configuration_adv.h index dafb271b5..b5e5ef5b1 100644 --- a/Marlin/Configuration_adv.h +++ b/Marlin/Configuration_adv.h @@ -19,8 +19,8 @@ // If the temperature has not increased at the end of that period, the target temperature is set to zero. // It can be reset with another M104/M109. This check is also only triggered if the target temperature and // the current temperature differ by at least 2x WATCH_TEMP_INCREASE -//#define WATCH_TEMP_PERIOD 40000 //40 seconds -//#define WATCH_TEMP_INCREASE 10 //Heat up at least 10 degree in 20 seconds +#define WATCH_TEMP_PERIOD 10000 // 10 seconds +#define WATCH_TEMP_INCREASE 2 // Heat up at least 2 degrees in 10 seconds #ifdef PIDTEMP // this adds an experimental additional term to the heating power, proportional to the extrusion speed. diff --git a/Marlin/Marlin_main.cpp b/Marlin/Marlin_main.cpp index 8b719bd49..4f4e18b58 100644 --- a/Marlin/Marlin_main.cpp +++ b/Marlin/Marlin_main.cpp @@ -3166,7 +3166,10 @@ inline void gcode_M104() { if (dual_x_carriage_mode == DXC_DUPLICATION_MODE && target_extruder == 0) setTargetHotend1(temp == 0.0 ? 0.0 : temp + duplicate_extruder_temp_offset); #endif - setWatch(); + + #ifdef WATCH_TEMP_PERIOD + start_watching_heaters(); + #endif } } @@ -3278,7 +3281,9 @@ inline void gcode_M109() { if (code_seen('B')) autotemp_max = code_value(); #endif - setWatch(); + #ifdef WATCH_TEMP_PERIOD + start_watching_heaters(); + #endif millis_t temp_ms = millis(); diff --git a/Marlin/configurator/config/Configuration_adv.h b/Marlin/configurator/config/Configuration_adv.h index dafb271b5..b5e5ef5b1 100644 --- a/Marlin/configurator/config/Configuration_adv.h +++ b/Marlin/configurator/config/Configuration_adv.h @@ -19,8 +19,8 @@ // If the temperature has not increased at the end of that period, the target temperature is set to zero. // It can be reset with another M104/M109. This check is also only triggered if the target temperature and // the current temperature differ by at least 2x WATCH_TEMP_INCREASE -//#define WATCH_TEMP_PERIOD 40000 //40 seconds -//#define WATCH_TEMP_INCREASE 10 //Heat up at least 10 degree in 20 seconds +#define WATCH_TEMP_PERIOD 10000 // 10 seconds +#define WATCH_TEMP_INCREASE 2 // Heat up at least 2 degrees in 10 seconds #ifdef PIDTEMP // this adds an experimental additional term to the heating power, proportional to the extrusion speed. diff --git a/Marlin/example_configurations/Felix/Configuration_adv.h b/Marlin/example_configurations/Felix/Configuration_adv.h index 52cb51bfe..ef80384b1 100644 --- a/Marlin/example_configurations/Felix/Configuration_adv.h +++ b/Marlin/example_configurations/Felix/Configuration_adv.h @@ -19,8 +19,8 @@ // If the temperature has not increased at the end of that period, the target temperature is set to zero. // It can be reset with another M104/M109. This check is also only triggered if the target temperature and // the current temperature differ by at least 2x WATCH_TEMP_INCREASE -//#define WATCH_TEMP_PERIOD 40000 //40 seconds -//#define WATCH_TEMP_INCREASE 10 //Heat up at least 10 degree in 20 seconds +#define WATCH_TEMP_PERIOD 10000 // 10 seconds +#define WATCH_TEMP_INCREASE 2 // Heat up at least 2 degrees in 10 seconds #ifdef PIDTEMP // this adds an experimental additional term to the heating power, proportional to the extrusion speed. diff --git a/Marlin/example_configurations/Hephestos/Configuration_adv.h b/Marlin/example_configurations/Hephestos/Configuration_adv.h index cb736f2cb..14cb8b8b8 100644 --- a/Marlin/example_configurations/Hephestos/Configuration_adv.h +++ b/Marlin/example_configurations/Hephestos/Configuration_adv.h @@ -19,8 +19,8 @@ // If the temperature has not increased at the end of that period, the target temperature is set to zero. // It can be reset with another M104/M109. This check is also only triggered if the target temperature and // the current temperature differ by at least 2x WATCH_TEMP_INCREASE -//#define WATCH_TEMP_PERIOD 40000 //40 seconds -//#define WATCH_TEMP_INCREASE 10 //Heat up at least 10 degree in 20 seconds +#define WATCH_TEMP_PERIOD 10000 // 10 seconds +#define WATCH_TEMP_INCREASE 2 // Heat up at least 2 degrees in 10 seconds #ifdef PIDTEMP // this adds an experimental additional term to the heating power, proportional to the extrusion speed. diff --git a/Marlin/example_configurations/K8200/Configuration_adv.h b/Marlin/example_configurations/K8200/Configuration_adv.h index 52cb51bfe..ef80384b1 100644 --- a/Marlin/example_configurations/K8200/Configuration_adv.h +++ b/Marlin/example_configurations/K8200/Configuration_adv.h @@ -19,8 +19,8 @@ // If the temperature has not increased at the end of that period, the target temperature is set to zero. // It can be reset with another M104/M109. This check is also only triggered if the target temperature and // the current temperature differ by at least 2x WATCH_TEMP_INCREASE -//#define WATCH_TEMP_PERIOD 40000 //40 seconds -//#define WATCH_TEMP_INCREASE 10 //Heat up at least 10 degree in 20 seconds +#define WATCH_TEMP_PERIOD 10000 // 10 seconds +#define WATCH_TEMP_INCREASE 2 // Heat up at least 2 degrees in 10 seconds #ifdef PIDTEMP // this adds an experimental additional term to the heating power, proportional to the extrusion speed. diff --git a/Marlin/example_configurations/SCARA/Configuration_adv.h b/Marlin/example_configurations/SCARA/Configuration_adv.h index 4e90b004b..70c33413a 100644 --- a/Marlin/example_configurations/SCARA/Configuration_adv.h +++ b/Marlin/example_configurations/SCARA/Configuration_adv.h @@ -19,8 +19,8 @@ // If the temperature has not increased at the end of that period, the target temperature is set to zero. // It can be reset with another M104/M109. This check is also only triggered if the target temperature and // the current temperature differ by at least 2x WATCH_TEMP_INCREASE -//#define WATCH_TEMP_PERIOD 40000 //40 seconds -//#define WATCH_TEMP_INCREASE 10 //Heat up at least 10 degree in 20 seconds +#define WATCH_TEMP_PERIOD 10000 // 10 seconds +#define WATCH_TEMP_INCREASE 2 // Heat up at least 2 degrees in 10 seconds #ifdef PIDTEMP // this adds an experimental additional term to the heating power, proportional to the extrusion speed. diff --git a/Marlin/example_configurations/WITBOX/Configuration_adv.h b/Marlin/example_configurations/WITBOX/Configuration_adv.h index f3778a715..652041bd1 100644 --- a/Marlin/example_configurations/WITBOX/Configuration_adv.h +++ b/Marlin/example_configurations/WITBOX/Configuration_adv.h @@ -19,8 +19,8 @@ // If the temperature has not increased at the end of that period, the target temperature is set to zero. // It can be reset with another M104/M109. This check is also only triggered if the target temperature and // the current temperature differ by at least 2x WATCH_TEMP_INCREASE -//#define WATCH_TEMP_PERIOD 40000 //40 seconds -//#define WATCH_TEMP_INCREASE 10 //Heat up at least 10 degree in 20 seconds +#define WATCH_TEMP_PERIOD 10000 // 10 seconds +#define WATCH_TEMP_INCREASE 2 // Heat up at least 2 degrees in 10 seconds #ifdef PIDTEMP // this adds an experimental additional term to the heating power, proportional to the extrusion speed. diff --git a/Marlin/example_configurations/delta/generic/Configuration_adv.h b/Marlin/example_configurations/delta/generic/Configuration_adv.h index d90b0d5c0..f5fbb1b34 100644 --- a/Marlin/example_configurations/delta/generic/Configuration_adv.h +++ b/Marlin/example_configurations/delta/generic/Configuration_adv.h @@ -19,8 +19,8 @@ // If the temperature has not increased at the end of that period, the target temperature is set to zero. // It can be reset with another M104/M109. This check is also only triggered if the target temperature and // the current temperature differ by at least 2x WATCH_TEMP_INCREASE -//#define WATCH_TEMP_PERIOD 40000 //40 seconds -//#define WATCH_TEMP_INCREASE 10 //Heat up at least 10 degree in 20 seconds +#define WATCH_TEMP_PERIOD 10000 // 10 seconds +#define WATCH_TEMP_INCREASE 2 // Heat up at least 2 degrees in 10 seconds #ifdef PIDTEMP // this adds an experimental additional term to the heating power, proportional to the extrusion speed. diff --git a/Marlin/example_configurations/delta/kossel_mini/Configuration_adv.h b/Marlin/example_configurations/delta/kossel_mini/Configuration_adv.h index e3b87902f..6d76091a4 100644 --- a/Marlin/example_configurations/delta/kossel_mini/Configuration_adv.h +++ b/Marlin/example_configurations/delta/kossel_mini/Configuration_adv.h @@ -19,8 +19,8 @@ // If the temperature has not increased at the end of that period, the target temperature is set to zero. // It can be reset with another M104/M109. This check is also only triggered if the target temperature and // the current temperature differ by at least 2x WATCH_TEMP_INCREASE -//#define WATCH_TEMP_PERIOD 40000 //40 seconds -//#define WATCH_TEMP_INCREASE 10 //Heat up at least 10 degree in 20 seconds +#define WATCH_TEMP_PERIOD 10000 // 10 seconds +#define WATCH_TEMP_INCREASE 2 // Heat up at least 2 degrees in 10 seconds #ifdef PIDTEMP // this adds an experimental additional term to the heating power, proportional to the extrusion speed. diff --git a/Marlin/example_configurations/makibox/Configuration_adv.h b/Marlin/example_configurations/makibox/Configuration_adv.h index e762a09e7..f0662dc8b 100644 --- a/Marlin/example_configurations/makibox/Configuration_adv.h +++ b/Marlin/example_configurations/makibox/Configuration_adv.h @@ -19,8 +19,8 @@ // If the temperature has not increased at the end of that period, the target temperature is set to zero. // It can be reset with another M104/M109. This check is also only triggered if the target temperature and // the current temperature differ by at least 2x WATCH_TEMP_INCREASE -//#define WATCH_TEMP_PERIOD 40000 //40 seconds -//#define WATCH_TEMP_INCREASE 10 //Heat up at least 10 degree in 20 seconds +#define WATCH_TEMP_PERIOD 10000 // 10 seconds +#define WATCH_TEMP_INCREASE 2 // Heat up at least 2 degrees in 10 seconds #ifdef PIDTEMP // this adds an experimental additional term to the heating power, proportional to the extrusion speed. diff --git a/Marlin/example_configurations/tvrrug/Round2/Configuration_adv.h b/Marlin/example_configurations/tvrrug/Round2/Configuration_adv.h index e13987b83..4a31b86c7 100644 --- a/Marlin/example_configurations/tvrrug/Round2/Configuration_adv.h +++ b/Marlin/example_configurations/tvrrug/Round2/Configuration_adv.h @@ -19,8 +19,8 @@ // If the temperature has not increased at the end of that period, the target temperature is set to zero. // It can be reset with another M104/M109. This check is also only triggered if the target temperature and // the current temperature differ by at least 2x WATCH_TEMP_INCREASE -//#define WATCH_TEMP_PERIOD 40000 //40 seconds -//#define WATCH_TEMP_INCREASE 10 //Heat up at least 10 degree in 20 seconds +#define WATCH_TEMP_PERIOD 10000 // 10 seconds +#define WATCH_TEMP_INCREASE 2 // Heat up at least 2 degrees in 10 seconds #ifdef PIDTEMP // this adds an experimental additional term to the heating power, proportional to the extrusion speed. diff --git a/Marlin/temperature.cpp b/Marlin/temperature.cpp index 587b29b0c..68a1d6942 100644 --- a/Marlin/temperature.cpp +++ b/Marlin/temperature.cpp @@ -171,7 +171,7 @@ static float analog2tempBed(int raw); static void updateTemperaturesFromRawValues(); #ifdef WATCH_TEMP_PERIOD - int watch_start_temp[EXTRUDERS] = { 0 }; + int watch_target_temp[EXTRUDERS] = { 0 }; millis_t watch_heater_next_ms[EXTRUDERS] = { 0 }; #endif @@ -625,11 +625,12 @@ void manage_heater() { // Is it time to check this extruder's heater? if (watch_heater_next_ms[e] && ms > watch_heater_next_ms[e]) { // Has it failed to increase enough? - if (degHotend(e) < watch_start_temp[e] + WATCH_TEMP_INCREASE) { + if (degHotend(e) < watch_target_temp[e]) { // Stop! _temp_error(e, MSG_HEATING_FAILED, MSG_HEATING_FAILED_LCD); } else { + // Only check once per M104/M109 watch_heater_next_ms[e] = 0; } } @@ -997,24 +998,24 @@ void tp_init() { #endif //BED_MAXTEMP } -/** - * Start Heating Sanity Check for hotends that are below - * their target temperature by a configurable margin. - * This is called when the temperature is set. (M104, M109) - */ -void setWatch() { - #ifdef WATCH_TEMP_PERIOD - millis_t ms = millis() + WATCH_TEMP_PERIOD; - for (int e = 0; e < EXTRUDERS; e++) { - if (degHotend(e) < degTargetHotend(e) - (WATCH_TEMP_INCREASE * 2)) { - watch_start_temp[e] = degHotend(e); - watch_heater_next_ms[e] = ms; +#ifdef WATCH_TEMP_PERIOD + /** + * Start Heating Sanity Check for hotends that are below + * their target temperature by a configurable margin. + * This is called when the temperature is set. (M104, M109) + */ + void start_watching_heaters() { + millis_t ms = millis() + WATCH_TEMP_PERIOD; + for (int e = 0; e < EXTRUDERS; e++) { + if (degHotend(e) < degTargetHotend(e) - (WATCH_TEMP_INCREASE * 2)) { + watch_target_temp[e] = degHotend(e) + WATCH_TEMP_INCREASE; + watch_heater_next_ms[e] = ms; + } + else + watch_heater_next_ms[e] = 0; } - else - watch_heater_next_ms[e] = 0; - } - #endif -} + } +#endif #if HAS_HEATER_THERMAL_PROTECTION || HAS_BED_THERMAL_PROTECTION diff --git a/Marlin/temperature.h b/Marlin/temperature.h index f9effaa9e..1616d0d11 100644 --- a/Marlin/temperature.h +++ b/Marlin/temperature.h @@ -130,7 +130,6 @@ HOTEND_ROUTINES(0); int getHeaterPower(int heater); void disable_all_heaters(); -void setWatch(); void updatePID(); void PID_autotune(float temp, int extruder, int ncycles); @@ -138,6 +137,10 @@ void PID_autotune(float temp, int extruder, int ncycles); void setExtruderAutoFanState(int pin, bool state); void checkExtruderAutoFans(); +#ifdef WATCH_TEMP_PERIOD + void start_watching_heaters(); +#endif + FORCE_INLINE void autotempShutdown() { #ifdef AUTOTEMP if (autotemp_enabled) { diff --git a/Marlin/ultralcd.cpp b/Marlin/ultralcd.cpp index 15c20fff3..739e54c07 100644 --- a/Marlin/ultralcd.cpp +++ b/Marlin/ultralcd.cpp @@ -521,7 +521,9 @@ void _lcd_preheat(int endnum, const float temph, const float tempb, const int fa setTargetBed(tempb); fanSpeed = fan; lcd_return_to_status(); - setWatch(); // heater sanity check timer + #ifdef WATCH_TEMP_PERIOD + start_watching_heaters(); + #endif } void lcd_preheat_pla0() { _lcd_preheat(0, plaPreheatHotendTemp, plaPreheatHPBTemp, plaPreheatFanSpeed); } void lcd_preheat_abs0() { _lcd_preheat(0, absPreheatHotendTemp, absPreheatHPBTemp, absPreheatFanSpeed); }