@ -38,8 +38,15 @@
//===========================================================================
//===========================================================================
//============================= public variables============================
//============================= public variables ============================
//===========================================================================
//===========================================================================
// Sampling period of the temperature routine
# ifdef PID_dT
# undef PID_dT
# endif
# define PID_dT ((OVERSAMPLENR * 12.0) / (F_CPU / 64.0 / 256.0))
int target_temperature [ EXTRUDERS ] = { 0 } ;
int target_temperature [ EXTRUDERS ] = { 0 } ;
int target_temperature_bed = 0 ;
int target_temperature_bed = 0 ;
int current_temperature_raw [ EXTRUDERS ] = { 0 } ;
int current_temperature_raw [ EXTRUDERS ] = { 0 } ;
@ -115,14 +122,16 @@ static volatile bool temp_meas_ready = false;
static unsigned long extruder_autofan_last_check ;
static unsigned long extruder_autofan_last_check ;
# endif
# endif
# if EXTRUDERS > 3
# if EXTRUDERS > 4
# error Unsupported number of extruders
# error Unsupported number of extruders
# elif EXTRUDERS > 3
# define ARRAY_BY_EXTRUDERS(v1, v2, v3, v4) { v1, v2, v3, v4 }
# elif EXTRUDERS > 2
# elif EXTRUDERS > 2
# define ARRAY_BY_EXTRUDERS(v1, v2, v3) { v1, v2, v3 }
# define ARRAY_BY_EXTRUDERS(v1, v2, v3 , v4 ) { v1, v2, v3 }
# elif EXTRUDERS > 1
# elif EXTRUDERS > 1
# define ARRAY_BY_EXTRUDERS(v1, v2, v3 ) { v1, v2 }
# define ARRAY_BY_EXTRUDERS(v1, v2, v3 , v4 ) { v1, v2 }
# else
# else
# define ARRAY_BY_EXTRUDERS(v1, v2, v3 ) { v1 }
# define ARRAY_BY_EXTRUDERS(v1, v2, v3 , v4 ) { v1 }
# endif
# endif
# ifdef PIDTEMP
# ifdef PIDTEMP
@ -144,10 +153,10 @@ static volatile bool temp_meas_ready = false;
# endif //PIDTEMP
# endif //PIDTEMP
// Init min and max temp with extreme values to prevent false errors during startup
// Init min and max temp with extreme values to prevent false errors during startup
static int minttemp_raw [ EXTRUDERS ] = ARRAY_BY_EXTRUDERS ( HEATER_0_RAW_LO_TEMP , HEATER_1_RAW_LO_TEMP , HEATER_2_RAW_LO_TEMP ) ;
static int minttemp_raw [ EXTRUDERS ] = ARRAY_BY_EXTRUDERS ( HEATER_0_RAW_LO_TEMP , HEATER_1_RAW_LO_TEMP , HEATER_2_RAW_LO_TEMP , HEATER_3_RAW_LO_TEMP ) ;
static int maxttemp_raw [ EXTRUDERS ] = ARRAY_BY_EXTRUDERS ( HEATER_0_RAW_HI_TEMP , HEATER_1_RAW_HI_TEMP , HEATER_2_RAW_HI_TEMP ) ;
static int maxttemp_raw [ EXTRUDERS ] = ARRAY_BY_EXTRUDERS ( HEATER_0_RAW_HI_TEMP , HEATER_1_RAW_HI_TEMP , HEATER_2_RAW_HI_TEMP , HEATER_3_RAW_HI_TEMP ) ;
static int minttemp [ EXTRUDERS ] = ARRAY_BY_EXTRUDERS ( 0 , 0 , 0 ) ;
static int minttemp [ EXTRUDERS ] = ARRAY_BY_EXTRUDERS ( 0 , 0 , 0 , 0 ) ;
static int maxttemp [ EXTRUDERS ] = ARRAY_BY_EXTRUDERS ( 16383 , 16383 , 16383 ) ;
static int maxttemp [ EXTRUDERS ] = ARRAY_BY_EXTRUDERS ( 16383 , 16383 , 16383 , 16383 ) ;
//static int bed_minttemp_raw = HEATER_BED_RAW_LO_TEMP; /* No bed mintemp error implemented?!? */
//static int bed_minttemp_raw = HEATER_BED_RAW_LO_TEMP; /* No bed mintemp error implemented?!? */
# ifdef BED_MAXTEMP
# ifdef BED_MAXTEMP
static int bed_maxttemp_raw = HEATER_BED_RAW_HI_TEMP ;
static int bed_maxttemp_raw = HEATER_BED_RAW_HI_TEMP ;
@ -157,8 +166,8 @@ static int bed_maxttemp_raw = HEATER_BED_RAW_HI_TEMP;
static void * heater_ttbl_map [ 2 ] = { ( void * ) HEATER_0_TEMPTABLE , ( void * ) HEATER_1_TEMPTABLE } ;
static void * heater_ttbl_map [ 2 ] = { ( void * ) HEATER_0_TEMPTABLE , ( void * ) HEATER_1_TEMPTABLE } ;
static uint8_t heater_ttbllen_map [ 2 ] = { HEATER_0_TEMPTABLE_LEN , HEATER_1_TEMPTABLE_LEN } ;
static uint8_t heater_ttbllen_map [ 2 ] = { HEATER_0_TEMPTABLE_LEN , HEATER_1_TEMPTABLE_LEN } ;
# else
# else
static void * heater_ttbl_map [ EXTRUDERS ] = ARRAY_BY_EXTRUDERS ( ( void * ) HEATER_0_TEMPTABLE , ( void * ) HEATER_1_TEMPTABLE , ( void * ) HEATER_2_TEMPTABLE ) ;
static void * heater_ttbl_map [ EXTRUDERS ] = ARRAY_BY_EXTRUDERS ( ( void * ) HEATER_0_TEMPTABLE , ( void * ) HEATER_1_TEMPTABLE , ( void * ) HEATER_2_TEMPTABLE , ( void * ) HEATER_3_TEMPTABLE ) ;
static uint8_t heater_ttbllen_map [ EXTRUDERS ] = ARRAY_BY_EXTRUDERS ( HEATER_0_TEMPTABLE_LEN , HEATER_1_TEMPTABLE_LEN , HEATER_2_TEMPTABLE_LEN ) ;
static uint8_t heater_ttbllen_map [ EXTRUDERS ] = ARRAY_BY_EXTRUDERS ( HEATER_0_TEMPTABLE_LEN , HEATER_1_TEMPTABLE_LEN , HEATER_2_TEMPTABLE_LEN , HEATER_3_TEMPTABLE_LEN ) ;
# endif
# endif
static float analog2temp ( int raw , uint8_t e ) ;
static float analog2temp ( int raw , uint8_t e ) ;
@ -166,8 +175,8 @@ static float analog2tempBed(int raw);
static void updateTemperaturesFromRawValues ( ) ;
static void updateTemperaturesFromRawValues ( ) ;
# ifdef WATCH_TEMP_PERIOD
# ifdef WATCH_TEMP_PERIOD
int watch_start_temp [ EXTRUDERS ] = ARRAY_BY_EXTRUDERS ( 0 , 0 , 0 );
int watch_start_temp [ EXTRUDERS ] = ARRAY_BY_EXTRUDERS ( 0 , 0 , 0 ,0 );
unsigned long watchmillis [ EXTRUDERS ] = ARRAY_BY_EXTRUDERS ( 0 , 0 , 0 );
unsigned long watchmillis [ EXTRUDERS ] = ARRAY_BY_EXTRUDERS ( 0 , 0 , 0 ,0 );
# endif //WATCH_TEMP_PERIOD
# endif //WATCH_TEMP_PERIOD
# ifndef SOFT_PWM_SCALE
# ifndef SOFT_PWM_SCALE
@ -205,7 +214,8 @@ void PID_autotune(float temp, int extruder, int ncycles)
# if (defined(EXTRUDER_0_AUTO_FAN_PIN) && EXTRUDER_0_AUTO_FAN_PIN > -1) || \
# 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_1_AUTO_FAN_PIN ) & & EXTRUDER_1_AUTO_FAN_PIN > - 1 ) | | \
( defined ( EXTRUDER_2_AUTO_FAN_PIN ) & & EXTRUDER_2_AUTO_FAN_PIN > - 1 )
( defined ( EXTRUDER_2_AUTO_FAN_PIN ) & & EXTRUDER_2_AUTO_FAN_PIN > - 1 ) | | \
( defined ( EXTRUDER_3_AUTO_FAN_PIN ) & & EXTRUDER_3_AUTO_FAN_PIN > - 1 )
unsigned long extruder_autofan_last_check = millis ( ) ;
unsigned long extruder_autofan_last_check = millis ( ) ;
# endif
# endif
@ -248,7 +258,8 @@ void PID_autotune(float temp, int extruder, int ncycles)
# if (defined(EXTRUDER_0_AUTO_FAN_PIN) && EXTRUDER_0_AUTO_FAN_PIN > -1) || \
# 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_1_AUTO_FAN_PIN ) & & EXTRUDER_1_AUTO_FAN_PIN > - 1 ) | | \
( defined ( EXTRUDER_2_AUTO_FAN_PIN ) & & EXTRUDER_2_AUTO_FAN_PIN > - 1 )
( defined ( EXTRUDER_2_AUTO_FAN_PIN ) & & EXTRUDER_2_AUTO_FAN_PIN > - 1 ) | | \
( defined ( EXTRUDER_3_AUTO_FAN_PIN ) & & EXTRUDER_3_AUTO_FAN_PIN > - 1 )
if ( millis ( ) - extruder_autofan_last_check > 2500 ) {
if ( millis ( ) - extruder_autofan_last_check > 2500 ) {
checkExtruderAutoFans ( ) ;
checkExtruderAutoFans ( ) ;
extruder_autofan_last_check = millis ( ) ;
extruder_autofan_last_check = millis ( ) ;
@ -425,6 +436,19 @@ void checkExtruderAutoFans()
fanState | = 4 ;
fanState | = 4 ;
}
}
# endif
# endif
# if defined(EXTRUDER_3_AUTO_FAN_PIN) && EXTRUDER_3_AUTO_FAN_PIN > -1
if ( current_temperature [ 3 ] > EXTRUDER_AUTO_FAN_TEMPERATURE )
{
if ( EXTRUDER_3_AUTO_FAN_PIN = = EXTRUDER_0_AUTO_FAN_PIN )
fanState | = 1 ;
else if ( EXTRUDER_3_AUTO_FAN_PIN = = EXTRUDER_1_AUTO_FAN_PIN )
fanState | = 2 ;
else if ( EXTRUDER_3_AUTO_FAN_PIN = = EXTRUDER_2_AUTO_FAN_PIN )
fanState | = 4 ;
else
fanState | = 8 ;
}
# endif
// update extruder auto fan states
// update extruder auto fan states
# if defined(EXTRUDER_0_AUTO_FAN_PIN) && EXTRUDER_0_AUTO_FAN_PIN > -1
# if defined(EXTRUDER_0_AUTO_FAN_PIN) && EXTRUDER_0_AUTO_FAN_PIN > -1
@ -438,7 +462,13 @@ void checkExtruderAutoFans()
if ( EXTRUDER_2_AUTO_FAN_PIN ! = EXTRUDER_0_AUTO_FAN_PIN
if ( EXTRUDER_2_AUTO_FAN_PIN ! = EXTRUDER_0_AUTO_FAN_PIN
& & EXTRUDER_2_AUTO_FAN_PIN ! = EXTRUDER_1_AUTO_FAN_PIN )
& & EXTRUDER_2_AUTO_FAN_PIN ! = EXTRUDER_1_AUTO_FAN_PIN )
setExtruderAutoFanState ( EXTRUDER_2_AUTO_FAN_PIN , ( fanState & 4 ) ! = 0 ) ;
setExtruderAutoFanState ( EXTRUDER_2_AUTO_FAN_PIN , ( fanState & 4 ) ! = 0 ) ;
# endif
# endif
# if defined(EXTRUDER_3_AUTO_FAN_PIN) && EXTRUDER_3_AUTO_FAN_PIN > -1
if ( EXTRUDER_3_AUTO_FAN_PIN ! = EXTRUDER_0_AUTO_FAN_PIN
& & EXTRUDER_3_AUTO_FAN_PIN ! = EXTRUDER_1_AUTO_FAN_PIN )
& & EXTRUDER_3_AUTO_FAN_PIN ! = EXTRUDER_0_AUTO_FAN_PIN )
setExtruderAutoFanState ( EXTRUDER_3_AUTO_FAN_PIN , ( fanState & 8 ) ! = 0 ) ;
# endif
}
}
# endif // any extruder auto fan pins set
# endif // any extruder auto fan pins set
@ -606,13 +636,13 @@ void manage_heater()
temp_dState_bed = pid_input ;
temp_dState_bed = pid_input ;
pid_output = pTerm_bed + iTerm_bed - dTerm_bed ;
pid_output = pTerm_bed + iTerm_bed - dTerm_bed ;
if ( pid_output > MAX_BED_POWER ) {
if ( pid_output > MAX_BED_POWER ) {
if ( pid_error_bed > 0 ) temp_iState_bed - = pid_error_bed ; // conditional un-integration
if ( pid_error_bed > 0 ) temp_iState_bed - = pid_error_bed ; // conditional un-integration
pid_output = MAX_BED_POWER ;
pid_output = MAX_BED_POWER ;
} else if ( pid_output < 0 ) {
} else if ( pid_output < 0 ) {
if ( pid_error_bed < 0 ) temp_iState_bed - = pid_error_bed ; // conditional un-integration
if ( pid_error_bed < 0 ) temp_iState_bed - = pid_error_bed ; // conditional un-integration
pid_output = 0 ;
pid_output = 0 ;
}
}
# else
# else
pid_output = constrain ( target_temperature_bed , 0 , MAX_BED_POWER ) ;
pid_output = constrain ( target_temperature_bed , 0 , MAX_BED_POWER ) ;
@ -847,13 +877,16 @@ void tp_init()
# if defined(HEATER_0_PIN) && (HEATER_0_PIN > -1)
# if defined(HEATER_0_PIN) && (HEATER_0_PIN > -1)
SET_OUTPUT ( HEATER_0_PIN ) ;
SET_OUTPUT ( HEATER_0_PIN ) ;
# endif
# endif
# if defined(HEATER_1_PIN) && (HEATER_1_PIN > -1)
# if defined(HEATER_1_PIN) && (HEATER_1_PIN > -1)
SET_OUTPUT ( HEATER_1_PIN ) ;
SET_OUTPUT ( HEATER_1_PIN ) ;
# endif
# endif
# if defined(HEATER_2_PIN) && (HEATER_2_PIN > -1)
# if defined(HEATER_2_PIN) && (HEATER_2_PIN > -1)
SET_OUTPUT ( HEATER_2_PIN ) ;
SET_OUTPUT ( HEATER_2_PIN ) ;
# endif
# endif
# if defined(HEATER_3_PIN) && (HEATER_3_PIN > -1)
SET_OUTPUT ( HEATER_3_PIN ) ;
# endif
# if defined(HEATER_BED_PIN) && (HEATER_BED_PIN > -1)
# if defined(HEATER_BED_PIN) && (HEATER_BED_PIN > -1)
SET_OUTPUT ( HEATER_BED_PIN ) ;
SET_OUTPUT ( HEATER_BED_PIN ) ;
# endif
# endif
@ -903,16 +936,23 @@ void tp_init()
# endif
# endif
# if defined(TEMP_1_PIN) && (TEMP_1_PIN > -1)
# if defined(TEMP_1_PIN) && (TEMP_1_PIN > -1)
# if TEMP_1_PIN < 8
# if TEMP_1_PIN < 8
DIDR0 | = 1 < < TEMP_1_PIN ;
DIDR0 | = 1 < < TEMP_1_PIN ;
# else
# else
DIDR2 | = 1 < < ( TEMP_1_PIN - 8 ) ;
DIDR2 | = 1 < < ( TEMP_1_PIN - 8 ) ;
# endif
# endif
# endif
# endif
# if defined(TEMP_2_PIN) && (TEMP_2_PIN > -1)
# if defined(TEMP_2_PIN) && (TEMP_2_PIN > -1)
# if TEMP_2_PIN < 8
# if TEMP_2_PIN < 8
DIDR0 | = 1 < < TEMP_2_PIN ;
DIDR0 | = 1 < < TEMP_2_PIN ;
# else
# else
DIDR2 | = 1 < < ( TEMP_2_PIN - 8 ) ;
DIDR2 | = 1 < < ( TEMP_2_PIN - 8 ) ;
# endif
# endif
# if defined(TEMP_3_PIN) && (TEMP_3_PIN > -1)
# if TEMP_3_PIN < 8
DIDR0 | = 1 < < TEMP_3_PIN ;
# else
DIDR2 | = 1 < < ( TEMP_3_PIN - 8 ) ;
# endif
# endif
# endif
# endif
# if defined(TEMP_BED_PIN) && (TEMP_BED_PIN > -1)
# if defined(TEMP_BED_PIN) && (TEMP_BED_PIN > -1)
@ -925,13 +965,13 @@ void tp_init()
//Added for Filament Sensor
//Added for Filament Sensor
# ifdef FILAMENT_SENSOR
# ifdef FILAMENT_SENSOR
# if defined(FILWIDTH_PIN) && (FILWIDTH_PIN > -1)
# if defined(FILWIDTH_PIN) && (FILWIDTH_PIN > -1)
# if FILWIDTH_PIN < 8
# if FILWIDTH_PIN < 8
DIDR0 | = 1 < < FILWIDTH_PIN ;
DIDR0 | = 1 < < FILWIDTH_PIN ;
# else
# else
DIDR2 | = 1 < < ( FILWIDTH_PIN - 8 ) ;
DIDR2 | = 1 < < ( FILWIDTH_PIN - 8 ) ;
# endif
# endif
# endif
# endif
# endif
# endif
// Use timer0 for temperature measurement
// Use timer0 for temperature measurement
@ -1005,6 +1045,28 @@ void tp_init()
}
}
# endif //MAXTEMP 2
# endif //MAXTEMP 2
# if (EXTRUDERS > 3) && defined(HEATER_3_MINTEMP)
minttemp [ 3 ] = HEATER_3_MINTEMP ;
while ( analog2temp ( minttemp_raw [ 3 ] , 3 ) < HEATER_3_MINTEMP ) {
# if HEATER_3_RAW_LO_TEMP < HEATER_3_RAW_HI_TEMP
minttemp_raw [ 3 ] + = OVERSAMPLENR ;
# else
minttemp_raw [ 3 ] - = OVERSAMPLENR ;
# endif
}
# endif //MINTEMP 3
# if (EXTRUDERS > 3) && defined(HEATER_3_MAXTEMP)
maxttemp [ 3 ] = HEATER_3_MAXTEMP ;
while ( analog2temp ( maxttemp_raw [ 3 ] , 3 ) > HEATER_3_MAXTEMP ) {
# if HEATER_3_RAW_LO_TEMP < HEATER_3_RAW_HI_TEMP
maxttemp_raw [ 3 ] - = OVERSAMPLENR ;
# else
maxttemp_raw [ 3 ] + = OVERSAMPLENR ;
# endif
}
# endif // MAXTEMP 3
# ifdef BED_MINTEMP
# ifdef BED_MINTEMP
/* No bed MINTEMP error implemented?!? */ /*
/* No bed MINTEMP error implemented?!? */ /*
while ( analog2tempBed ( bed_minttemp_raw ) < BED_MINTEMP ) {
while ( analog2tempBed ( bed_minttemp_raw ) < BED_MINTEMP ) {
@ -1093,6 +1155,7 @@ void thermal_runaway_protection(int *state, unsigned long *timer, float temperat
disable_e0 ( ) ;
disable_e0 ( ) ;
disable_e1 ( ) ;
disable_e1 ( ) ;
disable_e2 ( ) ;
disable_e2 ( ) ;
disable_e3 ( ) ;
manage_heater ( ) ;
manage_heater ( ) ;
lcd_update ( ) ;
lcd_update ( ) ;
}
}
@ -1129,8 +1192,17 @@ void disable_heater()
# if defined(HEATER_2_PIN) && HEATER_2_PIN > -1
# if defined(HEATER_2_PIN) && HEATER_2_PIN > -1
WRITE ( HEATER_2_PIN , LOW ) ;
WRITE ( HEATER_2_PIN , LOW ) ;
# endif
# endif
# endif
# if defined(TEMP_3_PIN) && TEMP_3_PIN > -1 && EXTRUDERS > 3
target_temperature [ 3 ] = 0 ;
soft_pwm [ 3 ] = 0 ;
# if defined(HEATER_3_PIN) && HEATER_3_PIN > -1
WRITE ( HEATER_3_PIN , LOW ) ;
# endif
# endif
# endif
# if defined(TEMP_BED_PIN) && TEMP_BED_PIN > -1
# if defined(TEMP_BED_PIN) && TEMP_BED_PIN > -1
target_temperature_bed = 0 ;
target_temperature_bed = 0 ;
soft_pwm_bed = 0 ;
soft_pwm_bed = 0 ;
@ -1246,8 +1318,9 @@ ISR(TIMER0_COMPB_vect)
static unsigned long raw_temp_0_value = 0 ;
static unsigned long raw_temp_0_value = 0 ;
static unsigned long raw_temp_1_value = 0 ;
static unsigned long raw_temp_1_value = 0 ;
static unsigned long raw_temp_2_value = 0 ;
static unsigned long raw_temp_2_value = 0 ;
static unsigned long raw_temp_3_value = 0 ;
static unsigned long raw_temp_bed_value = 0 ;
static unsigned long raw_temp_bed_value = 0 ;
static unsigned char temp_state = 1 0 ;
static unsigned char temp_state = 1 2 ;
static unsigned char pwm_count = ( 1 < < SOFT_PWM_SCALE ) ;
static unsigned char pwm_count = ( 1 < < SOFT_PWM_SCALE ) ;
static unsigned char soft_pwm_0 ;
static unsigned char soft_pwm_0 ;
# ifdef SLOW_PWM_HEATERS
# ifdef SLOW_PWM_HEATERS
@ -1255,6 +1328,7 @@ ISR(TIMER0_COMPB_vect)
static unsigned char state_heater_0 = 0 ;
static unsigned char state_heater_0 = 0 ;
static unsigned char state_timer_heater_0 = 0 ;
static unsigned char state_timer_heater_0 = 0 ;
# endif
# endif
# if (EXTRUDERS > 1) || defined(HEATERS_PARALLEL)
# if (EXTRUDERS > 1) || defined(HEATERS_PARALLEL)
static unsigned char soft_pwm_1 ;
static unsigned char soft_pwm_1 ;
# ifdef SLOW_PWM_HEATERS
# ifdef SLOW_PWM_HEATERS
@ -1269,6 +1343,14 @@ ISR(TIMER0_COMPB_vect)
static unsigned char state_timer_heater_2 = 0 ;
static unsigned char state_timer_heater_2 = 0 ;
# endif
# endif
# endif
# endif
# if EXTRUDERS > 3
static unsigned char soft_pwm_3 ;
# ifdef SLOW_PWM_HEATERS
static unsigned char state_heater_3 = 0 ;
static unsigned char state_timer_heater_3 = 0 ;
# endif
# endif
# if HEATER_BED_PIN > -1
# if HEATER_BED_PIN > -1
static unsigned char soft_pwm_b ;
static unsigned char soft_pwm_b ;
# ifdef SLOW_PWM_HEATERS
# ifdef SLOW_PWM_HEATERS
@ -1293,7 +1375,7 @@ ISR(TIMER0_COMPB_vect)
WRITE ( HEATER_1_PIN , 1 ) ;
WRITE ( HEATER_1_PIN , 1 ) ;
# endif
# endif
} else WRITE ( HEATER_0_PIN , 0 ) ;
} else WRITE ( HEATER_0_PIN , 0 ) ;
# if EXTRUDERS > 1
# if EXTRUDERS > 1
soft_pwm_1 = soft_pwm [ 1 ] ;
soft_pwm_1 = soft_pwm [ 1 ] ;
if ( soft_pwm_1 > 0 ) WRITE ( HEATER_1_PIN , 1 ) ; else WRITE ( HEATER_1_PIN , 0 ) ;
if ( soft_pwm_1 > 0 ) WRITE ( HEATER_1_PIN , 1 ) ; else WRITE ( HEATER_1_PIN , 0 ) ;
@ -1302,6 +1384,12 @@ ISR(TIMER0_COMPB_vect)
soft_pwm_2 = soft_pwm [ 2 ] ;
soft_pwm_2 = soft_pwm [ 2 ] ;
if ( soft_pwm_2 > 0 ) WRITE ( HEATER_2_PIN , 1 ) ; else WRITE ( HEATER_2_PIN , 0 ) ;
if ( soft_pwm_2 > 0 ) WRITE ( HEATER_2_PIN , 1 ) ; else WRITE ( HEATER_2_PIN , 0 ) ;
# endif
# endif
# if EXTRUDERS > 3
soft_pwm_3 = soft_pwm [ 3 ] ;
if ( soft_pwm_3 > 0 ) WRITE ( HEATER_3_PIN , 1 ) ; else WRITE ( HEATER_3_PIN , 0 ) ;
# endif
# if defined(HEATER_BED_PIN) && HEATER_BED_PIN > -1
# if defined(HEATER_BED_PIN) && HEATER_BED_PIN > -1
soft_pwm_b = soft_pwm_bed ;
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 ) ;
@ -1317,12 +1405,17 @@ ISR(TIMER0_COMPB_vect)
WRITE ( HEATER_1_PIN , 0 ) ;
WRITE ( HEATER_1_PIN , 0 ) ;
# endif
# endif
}
}
# if EXTRUDERS > 1
# if EXTRUDERS > 1
if ( soft_pwm_1 < pwm_count ) WRITE ( HEATER_1_PIN , 0 ) ;
if ( soft_pwm_1 < pwm_count ) WRITE ( HEATER_1_PIN , 0 ) ;
# endif
# endif
# if EXTRUDERS > 2
# if EXTRUDERS > 2
if ( soft_pwm_2 < pwm_count ) WRITE ( HEATER_2_PIN , 0 ) ;
if ( soft_pwm_2 < pwm_count ) WRITE ( HEATER_2_PIN , 0 ) ;
# endif
# endif
# if EXTRUDERS > 3
if ( soft_pwm_3 < pwm_count ) WRITE ( HEATER_3_PIN , 0 ) ;
# endif
# if defined(HEATER_BED_PIN) && HEATER_BED_PIN > -1
# if defined(HEATER_BED_PIN) && HEATER_BED_PIN > -1
if ( soft_pwm_b < pwm_count ) WRITE ( HEATER_BED_PIN , 0 ) ;
if ( soft_pwm_b < pwm_count ) WRITE ( HEATER_BED_PIN , 0 ) ;
# endif
# endif
@ -1424,7 +1517,33 @@ ISR(TIMER0_COMPB_vect)
}
}
}
}
# endif
# endif
# if EXTRUDERS > 3
// EXTRUDER 3
soft_pwm_3 = soft_pwm [ 3 ] ;
if ( soft_pwm_3 > 0 ) {
// turn ON heather only if the minimum time is up
if ( state_timer_heater_3 = = 0 ) {
// if change state set timer
if ( state_heater_3 = = 0 ) {
state_timer_heater_3 = MIN_STATE_TIME ;
}
state_heater_3 = 1 ;
WRITE ( HEATER_3_PIN , 1 ) ;
}
} else {
// turn OFF heather only if the minimum time is up
if ( state_timer_heater_3 = = 0 ) {
// if change state set timer
if ( state_heater_3 = = 1 ) {
state_timer_heater_3 = MIN_STATE_TIME ;
}
state_heater_3 = 0 ;
WRITE ( HEATER_3_PIN , 0 ) ;
}
}
# endif
# if defined(HEATER_BED_PIN) && HEATER_BED_PIN > -1
# if defined(HEATER_BED_PIN) && HEATER_BED_PIN > -1
// BED
// BED
soft_pwm_b = soft_pwm_bed ;
soft_pwm_b = soft_pwm_bed ;
@ -1497,6 +1616,21 @@ ISR(TIMER0_COMPB_vect)
}
}
}
}
# endif
# endif
# if EXTRUDERS > 3
// EXTRUDER 3
if ( soft_pwm_3 < slow_pwm_count ) {
// turn OFF heather only if the minimum time is up
if ( state_timer_heater_3 = = 0 ) {
// if change state set timer
if ( state_heater_3 = = 1 ) {
state_timer_heater_3 = MIN_STATE_TIME ;
}
state_heater_3 = 0 ;
WRITE ( HEATER_3_PIN , 0 ) ;
}
}
# endif
# if defined(HEATER_BED_PIN) && HEATER_BED_PIN > -1
# if defined(HEATER_BED_PIN) && HEATER_BED_PIN > -1
// BED
// BED
@ -1545,6 +1679,12 @@ ISR(TIMER0_COMPB_vect)
if ( state_timer_heater_2 > 0 )
if ( state_timer_heater_2 > 0 )
state_timer_heater_2 - - ;
state_timer_heater_2 - - ;
# endif
# endif
# if EXTRUDERS > 3
// Extruder 3
if ( state_timer_heater_3 > 0 )
state_timer_heater_3 - - ;
# endif
# if defined(HEATER_BED_PIN) && HEATER_BED_PIN > -1
# if defined(HEATER_BED_PIN) && HEATER_BED_PIN > -1
// Bed
// Bed
@ -1630,10 +1770,28 @@ ISR(TIMER0_COMPB_vect)
# if defined(TEMP_2_PIN) && (TEMP_2_PIN > -1)
# if defined(TEMP_2_PIN) && (TEMP_2_PIN > -1)
raw_temp_2_value + = ADC ;
raw_temp_2_value + = ADC ;
# endif
# endif
temp_state = 8 ; //change so that Filament Width is also measured
temp_state = 8 ;
break ;
break ;
case 8 : //Prepare FILWIDTH
case 8 : // Prepare TEMP_3
# if defined(TEMP_3_PIN) && (TEMP_3_PIN > -1)
# if TEMP_3_PIN > 7
ADCSRB = 1 < < MUX5 ;
# else
ADCSRB = 0 ;
# endif
ADMUX = ( ( 1 < < REFS0 ) | ( TEMP_3_PIN & 0x07 ) ) ;
ADCSRA | = 1 < < ADSC ; // Start conversion
# endif
lcd_buttons_update ( ) ;
temp_state = 9 ;
break ;
case 9 : // Measure TEMP_3
# if defined(TEMP_3_PIN) && (TEMP_3_PIN > -1)
raw_temp_3_value + = ADC ;
# endif
temp_state = 10 ; //change so that Filament Width is also measured
break ;
case 10 : //Prepare FILWIDTH
# if defined(FILWIDTH_PIN) && (FILWIDTH_PIN> -1)
# if defined(FILWIDTH_PIN) && (FILWIDTH_PIN> -1)
# if FILWIDTH_PIN>7
# if FILWIDTH_PIN>7
ADCSRB = 1 < < MUX5 ;
ADCSRB = 1 < < MUX5 ;
@ -1644,9 +1802,9 @@ ISR(TIMER0_COMPB_vect)
ADCSRA | = 1 < < ADSC ; // Start conversion
ADCSRA | = 1 < < ADSC ; // Start conversion
# endif
# endif
lcd_buttons_update ( ) ;
lcd_buttons_update ( ) ;
temp_state = 9 ;
temp_state = 11 ;
break ;
break ;
case 9 : //Measure FILWIDTH
case 11 : //Measure FILWIDTH
# if defined(FILWIDTH_PIN) &&(FILWIDTH_PIN > -1)
# if defined(FILWIDTH_PIN) &&(FILWIDTH_PIN > -1)
//raw_filwidth_value += ADC; //remove to use an IIR filter approach
//raw_filwidth_value += ADC; //remove to use an IIR filter approach
if ( ADC > 102 ) //check that ADC is reading a voltage > 0.5 volts, otherwise don't take in the data.
if ( ADC > 102 ) //check that ADC is reading a voltage > 0.5 volts, otherwise don't take in the data.
@ -1662,7 +1820,7 @@ ISR(TIMER0_COMPB_vect)
break ;
break ;
case 1 0 : //Startup, delay initial temp reading a tiny bit so the hardware can settle.
case 1 2 : //Startup, delay initial temp reading a tiny bit so the hardware can settle.
temp_state = 0 ;
temp_state = 0 ;
break ;
break ;
// default:
// default:
@ -1686,6 +1844,9 @@ ISR(TIMER0_COMPB_vect)
# endif
# endif
# if EXTRUDERS > 2
# if EXTRUDERS > 2
current_temperature_raw [ 2 ] = raw_temp_2_value ;
current_temperature_raw [ 2 ] = raw_temp_2_value ;
# endif
# if EXTRUDERS > 3
current_temperature_raw [ 3 ] = raw_temp_3_value ;
# endif
# endif
current_temperature_bed_raw = raw_temp_bed_value ;
current_temperature_bed_raw = raw_temp_bed_value ;
}
}
@ -1701,6 +1862,7 @@ ISR(TIMER0_COMPB_vect)
raw_temp_0_value = 0 ;
raw_temp_0_value = 0 ;
raw_temp_1_value = 0 ;
raw_temp_1_value = 0 ;
raw_temp_2_value = 0 ;
raw_temp_2_value = 0 ;
raw_temp_3_value = 0 ;
raw_temp_bed_value = 0 ;
raw_temp_bed_value = 0 ;
# if HEATER_0_RAW_LO_TEMP > HEATER_0_RAW_HI_TEMP
# if HEATER_0_RAW_LO_TEMP > HEATER_0_RAW_HI_TEMP
@ -1721,6 +1883,8 @@ ISR(TIMER0_COMPB_vect)
min_temp_error ( 0 ) ;
min_temp_error ( 0 ) ;
# endif
# endif
}
}
# if EXTRUDERS > 1
# if EXTRUDERS > 1
# if HEATER_1_RAW_LO_TEMP > HEATER_1_RAW_HI_TEMP
# if HEATER_1_RAW_LO_TEMP > HEATER_1_RAW_HI_TEMP
if ( current_temperature_raw [ 1 ] < = maxttemp_raw [ 1 ] ) {
if ( current_temperature_raw [ 1 ] < = maxttemp_raw [ 1 ] ) {
@ -1753,7 +1917,24 @@ ISR(TIMER0_COMPB_vect)
min_temp_error ( 2 ) ;
min_temp_error ( 2 ) ;
}
}
# endif
# endif
# if EXTRUDERS > 3
# if HEATER_3_RAW_LO_TEMP > HEATER_3_RAW_HI_TEMP
if ( current_temperature_raw [ 3 ] < = maxttemp_raw [ 3 ] ) {
# else
if ( current_temperature_raw [ 3 ] > = maxttemp_raw [ 3 ] ) {
# endif
max_temp_error ( 3 ) ;
}
# if HEATER_3_RAW_LO_TEMP > HEATER_3_RAW_HI_TEMP
if ( current_temperature_raw [ 3 ] > = minttemp_raw [ 3 ] ) {
# else
if ( current_temperature_raw [ 3 ] < = minttemp_raw [ 3 ] ) {
# endif
min_temp_error ( 3 ) ;
}
# endif
/* No bed MINTEMP error? */
/* No bed MINTEMP error? */
# if defined(BED_MAXTEMP) && (TEMP_SENSOR_BED != 0)
# if defined(BED_MAXTEMP) && (TEMP_SENSOR_BED != 0)
# if HEATER_BED_RAW_LO_TEMP > HEATER_BED_RAW_HI_TEMP
# if HEATER_BED_RAW_LO_TEMP > HEATER_BED_RAW_HI_TEMP
@ -1812,5 +1993,3 @@ float unscalePID_d(float d)
}
}
# endif //PIDTEMP
# endif //PIDTEMP