Merge remote branch 'origin/master'

This commit is contained in:
Emanuele Caruso 2011-05-02 16:27:18 +02:00
commit 3c67e2b0e0
2 changed files with 45 additions and 2 deletions

View file

@ -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;

View file

@ -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