diff options
-rw-r--r-- | Tonokip_Firmware/Tonokip_Firmware.pde | 40 | ||||
-rw-r--r-- | Tonokip_Firmware/configuration.h | 7 |
2 files changed, 45 insertions, 2 deletions
diff --git a/Tonokip_Firmware/Tonokip_Firmware.pde b/Tonokip_Firmware/Tonokip_Firmware.pde index 802f8a5..87935c1 100644 --- a/Tonokip_Firmware/Tonokip_Firmware.pde +++ b/Tonokip_Firmware/Tonokip_Firmware.pde @@ -111,8 +111,13 @@ int temp_iState_max = 100*PID_INTEGRAL_DRIVE_MAX/PID_IGAIN; #ifdef SMOOTHING uint32_t nma=SMOOTHFACTOR*analogRead(TEMP_0_PIN); #endif - - +#ifdef WATCHPERIOD +int watch_raw=-1000; +unsigned long watchmillis=0; +#endif +#ifdef MINTEMP +int minttemp=temp2analog(MINTEMP); +#endif //Inactivity shutdown variables unsigned long previous_millis_cmd=0; @@ -623,6 +628,14 @@ inline void process_commands() #endif case 104: // M104 if (code_seen('S')) target_raw = temp2analog(code_value()); + #ifdef WATCHPERIOD + if(target_raw>current_raw){ + watchmillis=max(1,millis()); + watch_raw=current_raw; + }else{ + watchmillis=0; + } + #endif break; case 140: // M140 set bed temp if (code_seen('S')) target_bed_raw = temp2analogBed(code_value()); @@ -651,6 +664,14 @@ inline void process_commands() //break; case 109: // M109 - Wait for heater to reach target. if (code_seen('S')) target_raw = temp2analog(code_value()); + #ifdef WATCHPERIOD + if(target_raw>current_raw){ + watchmillis=max(1,millis()); + watch_raw=current_raw; + }else{ + watchmillis=0; + } + #endif previous_millis_heater = millis(); while(current_raw < target_raw) { if( (millis()-previous_millis_heater) > 1000 ) //Print Temp Reading every 1 second while heating up. @@ -1121,6 +1142,21 @@ inline void manage_heater() nma=(nma+current_raw)-(nma/SMOOTHFACTOR); current_raw=nma/SMOOTHFACTOR; #endif + #ifdef WATCHPERIOD + if(watchmillis && millis()-watchmillis>WATCHPERIOD){ + if(watch_raw+1>=current_raw){ + target_raw=0; + digitalWrite(HEATER_0_PIN,LOW); + digitalWrite(LED_PIN,LOW); + }else{ + watchmillis=0; + } + } + #endif + #ifdef MINTEMP + if(current_raw<=minttemp) + target_raw=0; + #endif #if (TEMP_0_PIN > -1) || defined (HEATER_USES_MAX66675) #ifdef PIDTEMP error = target_raw - current_raw; diff --git a/Tonokip_Firmware/configuration.h b/Tonokip_Firmware/configuration.h index d4e5231..2e1820d 100644 --- a/Tonokip_Firmware/configuration.h +++ b/Tonokip_Firmware/configuration.h @@ -41,6 +41,13 @@ float min_constant_speed_units = 2; // the minimum units of an accelerated move //#define SMOOTHING 1 //#define SMOOTHFACTOR 16 //best to use a power of two here - determines how many values are averaged together by the smoothing algorithm +//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 +//#define WATCHPERIOD 5000 //5 seconds +//The minimal temperature defines the temperature below which the heater will not be enabled +//#define MINTEMP + // Select one of these only to define how the nozzle temp is read. #define HEATER_USES_THERMISTOR //#define HEATER_USES_AD595 |