chiark / gitweb /
heating up santity, formarly knows as "watchdog", but renamed due to the existance...
authorBernhard <bkubicek@x201.(none)>
Fri, 9 Dec 2011 16:06:56 +0000 (17:06 +0100)
committerBernhard <bkubicek@x201.(none)>
Fri, 9 Dec 2011 16:07:44 +0000 (17:07 +0100)
Marlin/Configuration.h
Marlin/temperature.cpp
Marlin/temperature.h

index 2b60c3602aa22fcde326465224e543cad7a38693..e2fe8403e7a42c042ba56a1d76882c419180f758 100644 (file)
 
 #define BED_CHECK_INTERVAL 5000 //ms
 
-//// Experimental watchdog and minimal temp
-// The watchdog waits for the watchperiod in milliseconds whenever an M104 or M109 increases the target temperature
-// 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
-/// CURRENTLY NOT IMPLEMENTED AND UNUSEABLE
-//#define WATCHPERIOD 5000 //5 seconds
+//// Heating sanity check:
+// This waits for the watchperiod in milliseconds whenever an M104 or M109 increases the target temperature
+// 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
+//#define WATCHPERIOD 20000 //20 seconds
 
 // Actual temperature must be close to target for this long before M109 returns success
 //#define TEMP_RESIDENCY_TIME 20  // (seconds)
index ac5aeaa3e58145cbe5688c23230fe6ea7afbf760..785da6c92648a4fec9d12ab0afb0aad444ce35b7 100644 (file)
@@ -88,7 +88,7 @@ static unsigned long  previous_millis_bed_heater;
 #endif //PIDTEMP
   
 #ifdef WATCHPERIOD
-  static int watch_raw[3] = {-1000,-1000,-1000};
+  static int watch_oldtemp[3] = {0,0,0};
   static unsigned long watchmillis = 0;
 #endif //WATCHPERIOD
 
@@ -186,7 +186,20 @@ void manage_heater()
       WRITE(HEATER_0_PIN,LOW);
     }    
   #endif
-    
+  
+  #ifdef WATCHPERIOD
+    if(watchmillis && millis() - watchmillis > WATCHPERIOD){
+        if(watch_oldtemp[TEMPSENSOR_HOTEND_0] >= degHotend(active_extruder)){
+            setTargetHotend(0,active_extruder);
+            LCD_MESSAGEPGM("Heating failed");
+            SERIAL_ECHO_START;
+            SERIAL_ECHOLN("Heating failed");
+        }else{
+            watchmillis = 0;
+        }
+    }
+  #endif
+  
   if(millis() - previous_millis_bed_heater < BED_CHECK_INTERVAL)
     return;
   previous_millis_bed_heater = millis();
@@ -426,7 +439,7 @@ void setWatch()
   if(isHeatingHotend0())
   {
     watchmillis = max(1,millis());
-    watch_raw[TEMPSENSOR_HOTEND_0] = current_raw[TEMPSENSOR_HOTEND_0];
+    watch_oldtemp[TEMPSENSOR_HOTEND_0] = degHotend(0);
   }
   else
   {
index 623f890bb04792fa88f051bbb722239604dd9b54..fae27f734cb5e73d0597cc76cc949442699a9a3a 100644 (file)
@@ -49,10 +49,10 @@ extern float Kp,Ki,Kd,Kc;
   extern float pid_setpoint ;\r
 #endif\r
   \r
-#ifdef WATCHPERIOD\r
-  extern int watch_raw[3] ;\r
-  extern unsigned long watchmillis;\r
-#endif\r
+// #ifdef WATCHPERIOD\r
+//   extern int watch_raw[3] ;\r
+//   extern unsigned long watchmillis;\r
+// #endif\r
 \r
 \r
 \r