|
|
|
@ -497,7 +497,7 @@ void manage_heater()
|
|
|
|
|
SERIAL_ECHO(" iTerm ");
|
|
|
|
|
SERIAL_ECHO(iTerm[e]);
|
|
|
|
|
SERIAL_ECHO(" dTerm ");
|
|
|
|
|
SERIAL_ECHOLN(dTerm[e]);
|
|
|
|
|
SERIAL_ECHOLN(dTerm[e]);
|
|
|
|
|
#endif //PID_DEBUG
|
|
|
|
|
#else /* PID off */
|
|
|
|
|
pid_output = 0;
|
|
|
|
@ -1221,68 +1221,311 @@ ISR(TIMER0_COMPB_vect)
|
|
|
|
|
static unsigned char temp_state = 10;
|
|
|
|
|
static unsigned char pwm_count = (1 << SOFT_PWM_SCALE);
|
|
|
|
|
static unsigned char soft_pwm_0;
|
|
|
|
|
#if (EXTRUDERS > 1) || defined(HEATERS_PARALLEL)
|
|
|
|
|
#ifdef SLOW_PWM_HEATERS
|
|
|
|
|
static unsigned char slow_pwm_count = 0;
|
|
|
|
|
static unsigned char state_heater_0 = 0;
|
|
|
|
|
static unsigned char state_timer_heater_0 = 0;
|
|
|
|
|
#endif
|
|
|
|
|
#if (EXTRUDERS > 1) || defined(HEATERS_PARALLEL)
|
|
|
|
|
static unsigned char soft_pwm_1;
|
|
|
|
|
#endif
|
|
|
|
|
#if EXTRUDERS > 2
|
|
|
|
|
#ifdef SLOW_PWM_HEATERS
|
|
|
|
|
static unsigned char state_heater_1 = 0;
|
|
|
|
|
static unsigned char state_timer_heater_1 = 0;
|
|
|
|
|
#endif
|
|
|
|
|
#endif
|
|
|
|
|
#if EXTRUDERS > 2
|
|
|
|
|
static unsigned char soft_pwm_2;
|
|
|
|
|
#endif
|
|
|
|
|
#if HEATER_BED_PIN > -1
|
|
|
|
|
#ifdef SLOW_PWM_HEATERS
|
|
|
|
|
static unsigned char state_heater_2 = 0;
|
|
|
|
|
static unsigned char state_timer_heater_2 = 0;
|
|
|
|
|
#endif
|
|
|
|
|
#endif
|
|
|
|
|
#if HEATER_BED_PIN > -1
|
|
|
|
|
static unsigned char soft_pwm_b;
|
|
|
|
|
#endif
|
|
|
|
|
#ifdef SLOW_PWM_HEATERS
|
|
|
|
|
static unsigned char state_heater_b = 0;
|
|
|
|
|
static unsigned char state_timer_heater_b = 0;
|
|
|
|
|
#endif
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
#if defined(FILWIDTH_PIN) &&(FILWIDTH_PIN > -1)
|
|
|
|
|
static unsigned long raw_filwidth_value = 0; //added for filament width sensor
|
|
|
|
|
#endif
|
|
|
|
|
#if defined(FILWIDTH_PIN) &&(FILWIDTH_PIN > -1)
|
|
|
|
|
static unsigned long raw_filwidth_value = 0; //added for filament width sensor
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
#ifndef SLOW_PWM_HEATERS
|
|
|
|
|
/*
|
|
|
|
|
* standard PWM modulation
|
|
|
|
|
*/
|
|
|
|
|
if(pwm_count == 0){
|
|
|
|
|
soft_pwm_0 = soft_pwm[0];
|
|
|
|
|
if(soft_pwm_0 > 0) {
|
|
|
|
|
WRITE(HEATER_0_PIN,1);
|
|
|
|
|
#ifdef HEATERS_PARALLEL
|
|
|
|
|
#ifdef HEATERS_PARALLEL
|
|
|
|
|
WRITE(HEATER_1_PIN,1);
|
|
|
|
|
#endif
|
|
|
|
|
#endif
|
|
|
|
|
} else WRITE(HEATER_0_PIN,0);
|
|
|
|
|
|
|
|
|
|
#if EXTRUDERS > 1
|
|
|
|
|
|
|
|
|
|
#if EXTRUDERS > 1
|
|
|
|
|
soft_pwm_1 = soft_pwm[1];
|
|
|
|
|
if(soft_pwm_1 > 0) WRITE(HEATER_1_PIN,1); else WRITE(HEATER_1_PIN,0);
|
|
|
|
|
#endif
|
|
|
|
|
#if EXTRUDERS > 2
|
|
|
|
|
#endif
|
|
|
|
|
#if EXTRUDERS > 2
|
|
|
|
|
soft_pwm_2 = soft_pwm[2];
|
|
|
|
|
if(soft_pwm_2 > 0) WRITE(HEATER_2_PIN,1); else WRITE(HEATER_2_PIN,0);
|
|
|
|
|
#endif
|
|
|
|
|
#if defined(HEATER_BED_PIN) && HEATER_BED_PIN > -1
|
|
|
|
|
#endif
|
|
|
|
|
#if defined(HEATER_BED_PIN) && HEATER_BED_PIN > -1
|
|
|
|
|
soft_pwm_b = soft_pwm_bed;
|
|
|
|
|
if(soft_pwm_b > 0) WRITE(HEATER_BED_PIN,1); else WRITE(HEATER_BED_PIN,0);
|
|
|
|
|
#endif
|
|
|
|
|
#ifdef FAN_SOFT_PWM
|
|
|
|
|
#endif
|
|
|
|
|
#ifdef FAN_SOFT_PWM
|
|
|
|
|
soft_pwm_fan = fanSpeedSoftPwm / 2;
|
|
|
|
|
if(soft_pwm_fan > 0) WRITE(FAN_PIN,1); else WRITE(FAN_PIN,0);
|
|
|
|
|
#endif
|
|
|
|
|
#endif
|
|
|
|
|
}
|
|
|
|
|
if(soft_pwm_0 < pwm_count) {
|
|
|
|
|
WRITE(HEATER_0_PIN,0);
|
|
|
|
|
#ifdef HEATERS_PARALLEL
|
|
|
|
|
WRITE(HEATER_1_PIN,0);
|
|
|
|
|
#endif
|
|
|
|
|
}
|
|
|
|
|
#if EXTRUDERS > 1
|
|
|
|
|
WRITE(HEATER_0_PIN,0);
|
|
|
|
|
#ifdef HEATERS_PARALLEL
|
|
|
|
|
WRITE(HEATER_1_PIN,0);
|
|
|
|
|
#endif
|
|
|
|
|
}
|
|
|
|
|
#if EXTRUDERS > 1
|
|
|
|
|
if(soft_pwm_1 < pwm_count) WRITE(HEATER_1_PIN,0);
|
|
|
|
|
#endif
|
|
|
|
|
#if EXTRUDERS > 2
|
|
|
|
|
#endif
|
|
|
|
|
#if EXTRUDERS > 2
|
|
|
|
|
if(soft_pwm_2 < pwm_count) WRITE(HEATER_2_PIN,0);
|
|
|
|
|
#endif
|
|
|
|
|
#if defined(HEATER_BED_PIN) && HEATER_BED_PIN > -1
|
|
|
|
|
#endif
|
|
|
|
|
#if defined(HEATER_BED_PIN) && HEATER_BED_PIN > -1
|
|
|
|
|
if(soft_pwm_b < pwm_count) WRITE(HEATER_BED_PIN,0);
|
|
|
|
|
#endif
|
|
|
|
|
#ifdef FAN_SOFT_PWM
|
|
|
|
|
#endif
|
|
|
|
|
#ifdef FAN_SOFT_PWM
|
|
|
|
|
if(soft_pwm_fan < pwm_count) WRITE(FAN_PIN,0);
|
|
|
|
|
#endif
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
pwm_count += (1 << SOFT_PWM_SCALE);
|
|
|
|
|
pwm_count &= 0x7f;
|
|
|
|
|
|
|
|
|
|
#else //ifndef SLOW_PWM_HEATERS
|
|
|
|
|
/*
|
|
|
|
|
* SLOW PWM HEATERS
|
|
|
|
|
*
|
|
|
|
|
* for heaters drived by relay
|
|
|
|
|
*/
|
|
|
|
|
#ifndef MIN_STATE_TIME
|
|
|
|
|
#define MIN_STATE_TIME 16 // MIN_STATE_TIME * 65.5 = time in milliseconds
|
|
|
|
|
#endif
|
|
|
|
|
if (slow_pwm_count == 0) {
|
|
|
|
|
// EXTRUDER 0
|
|
|
|
|
soft_pwm_0 = soft_pwm[0];
|
|
|
|
|
if (soft_pwm_0 > 0) {
|
|
|
|
|
// turn ON heather only if the minimum time is up
|
|
|
|
|
if (state_timer_heater_0 == 0) {
|
|
|
|
|
// if change state set timer
|
|
|
|
|
if (state_heater_0 == 0) {
|
|
|
|
|
state_timer_heater_0 = MIN_STATE_TIME;
|
|
|
|
|
}
|
|
|
|
|
state_heater_0 = 1;
|
|
|
|
|
WRITE(HEATER_0_PIN, 1);
|
|
|
|
|
#ifdef HEATERS_PARALLEL
|
|
|
|
|
WRITE(HEATER_1_PIN, 1);
|
|
|
|
|
#endif
|
|
|
|
|
}
|
|
|
|
|
} else {
|
|
|
|
|
// turn OFF heather only if the minimum time is up
|
|
|
|
|
if (state_timer_heater_0 == 0) {
|
|
|
|
|
// if change state set timer
|
|
|
|
|
if (state_heater_0 == 1) {
|
|
|
|
|
state_timer_heater_0 = MIN_STATE_TIME;
|
|
|
|
|
}
|
|
|
|
|
state_heater_0 = 0;
|
|
|
|
|
WRITE(HEATER_0_PIN, 0);
|
|
|
|
|
#ifdef HEATERS_PARALLEL
|
|
|
|
|
WRITE(HEATER_1_PIN, 0);
|
|
|
|
|
#endif
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#if EXTRUDERS > 1
|
|
|
|
|
// EXTRUDER 1
|
|
|
|
|
soft_pwm_1 = soft_pwm[1];
|
|
|
|
|
if (soft_pwm_1 > 0) {
|
|
|
|
|
// turn ON heather only if the minimum time is up
|
|
|
|
|
if (state_timer_heater_1 == 0) {
|
|
|
|
|
// if change state set timer
|
|
|
|
|
if (state_heater_1 == 0) {
|
|
|
|
|
state_timer_heater_1 = MIN_STATE_TIME;
|
|
|
|
|
}
|
|
|
|
|
state_heater_1 = 1;
|
|
|
|
|
WRITE(HEATER_1_PIN, 1);
|
|
|
|
|
}
|
|
|
|
|
} else {
|
|
|
|
|
// turn OFF heather only if the minimum time is up
|
|
|
|
|
if (state_timer_heater_1 == 0) {
|
|
|
|
|
// if change state set timer
|
|
|
|
|
if (state_heater_1 == 1) {
|
|
|
|
|
state_timer_heater_1 = MIN_STATE_TIME;
|
|
|
|
|
}
|
|
|
|
|
state_heater_1 = 0;
|
|
|
|
|
WRITE(HEATER_1_PIN, 0);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
#if EXTRUDERS > 2
|
|
|
|
|
// EXTRUDER 2
|
|
|
|
|
soft_pwm_2 = soft_pwm[2];
|
|
|
|
|
if (soft_pwm_2 > 0) {
|
|
|
|
|
// turn ON heather only if the minimum time is up
|
|
|
|
|
if (state_timer_heater_2 == 0) {
|
|
|
|
|
// if change state set timer
|
|
|
|
|
if (state_heater_2 == 0) {
|
|
|
|
|
state_timer_heater_2 = MIN_STATE_TIME;
|
|
|
|
|
}
|
|
|
|
|
state_heater_2 = 1;
|
|
|
|
|
WRITE(HEATER_2_PIN, 1);
|
|
|
|
|
}
|
|
|
|
|
} else {
|
|
|
|
|
// turn OFF heather only if the minimum time is up
|
|
|
|
|
if (state_timer_heater_2 == 0) {
|
|
|
|
|
// if change state set timer
|
|
|
|
|
if (state_heater_2 == 1) {
|
|
|
|
|
state_timer_heater_2 = MIN_STATE_TIME;
|
|
|
|
|
}
|
|
|
|
|
state_heater_2 = 0;
|
|
|
|
|
WRITE(HEATER_2_PIN, 0);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
#if defined(HEATER_BED_PIN) && HEATER_BED_PIN > -1
|
|
|
|
|
// BED
|
|
|
|
|
soft_pwm_b = soft_pwm_bed;
|
|
|
|
|
if (soft_pwm_b > 0) {
|
|
|
|
|
// turn ON heather only if the minimum time is up
|
|
|
|
|
if (state_timer_heater_b == 0) {
|
|
|
|
|
// if change state set timer
|
|
|
|
|
if (state_heater_b == 0) {
|
|
|
|
|
state_timer_heater_b = MIN_STATE_TIME;
|
|
|
|
|
}
|
|
|
|
|
state_heater_b = 1;
|
|
|
|
|
WRITE(HEATER_BED_PIN, 1);
|
|
|
|
|
}
|
|
|
|
|
} else {
|
|
|
|
|
// turn OFF heather only if the minimum time is up
|
|
|
|
|
if (state_timer_heater_b == 0) {
|
|
|
|
|
// if change state set timer
|
|
|
|
|
if (state_heater_b == 1) {
|
|
|
|
|
state_timer_heater_b = MIN_STATE_TIME;
|
|
|
|
|
}
|
|
|
|
|
state_heater_b = 0;
|
|
|
|
|
WRITE(HEATER_BED_PIN, 0);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
#endif
|
|
|
|
|
} // if (slow_pwm_count == 0)
|
|
|
|
|
|
|
|
|
|
// EXTRUDER 0
|
|
|
|
|
if (soft_pwm_0 < slow_pwm_count) {
|
|
|
|
|
// turn OFF heather only if the minimum time is up
|
|
|
|
|
if (state_timer_heater_0 == 0) {
|
|
|
|
|
// if change state set timer
|
|
|
|
|
if (state_heater_0 == 1) {
|
|
|
|
|
state_timer_heater_0 = MIN_STATE_TIME;
|
|
|
|
|
}
|
|
|
|
|
state_heater_0 = 0;
|
|
|
|
|
WRITE(HEATER_0_PIN, 0);
|
|
|
|
|
#ifdef HEATERS_PARALLEL
|
|
|
|
|
WRITE(HEATER_1_PIN, 0);
|
|
|
|
|
#endif
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#if EXTRUDERS > 1
|
|
|
|
|
// EXTRUDER 1
|
|
|
|
|
if (soft_pwm_1 < slow_pwm_count) {
|
|
|
|
|
// turn OFF heather only if the minimum time is up
|
|
|
|
|
if (state_timer_heater_1 == 0) {
|
|
|
|
|
// if change state set timer
|
|
|
|
|
if (state_heater_1 == 1) {
|
|
|
|
|
state_timer_heater_1 = MIN_STATE_TIME;
|
|
|
|
|
}
|
|
|
|
|
state_heater_1 = 0;
|
|
|
|
|
WRITE(HEATER_1_PIN, 0);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
#if EXTRUDERS > 2
|
|
|
|
|
// EXTRUDER 2
|
|
|
|
|
if (soft_pwm_2 < slow_pwm_count) {
|
|
|
|
|
// turn OFF heather only if the minimum time is up
|
|
|
|
|
if (state_timer_heater_2 == 0) {
|
|
|
|
|
// if change state set timer
|
|
|
|
|
if (state_heater_2 == 1) {
|
|
|
|
|
state_timer_heater_2 = MIN_STATE_TIME;
|
|
|
|
|
}
|
|
|
|
|
state_heater_2 = 0;
|
|
|
|
|
WRITE(HEATER_2_PIN, 0);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
#if defined(HEATER_BED_PIN) && HEATER_BED_PIN > -1
|
|
|
|
|
// BED
|
|
|
|
|
if (soft_pwm_b < slow_pwm_count) {
|
|
|
|
|
// turn OFF heather only if the minimum time is up
|
|
|
|
|
if (state_timer_heater_b == 0) {
|
|
|
|
|
// if change state set timer
|
|
|
|
|
if (state_heater_b == 1) {
|
|
|
|
|
state_timer_heater_b = MIN_STATE_TIME;
|
|
|
|
|
}
|
|
|
|
|
state_heater_b = 0;
|
|
|
|
|
WRITE(HEATER_BED_PIN, 0);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
#ifdef FAN_SOFT_PWM
|
|
|
|
|
if (pwm_count == 0){
|
|
|
|
|
soft_pwm_fan = fanSpeedSoftPwm / 2;
|
|
|
|
|
if (soft_pwm_fan > 0) WRITE(FAN_PIN,1); else WRITE(FAN_PIN,0);
|
|
|
|
|
}
|
|
|
|
|
if (soft_pwm_fan < pwm_count) WRITE(FAN_PIN,0);
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
pwm_count += (1 << SOFT_PWM_SCALE);
|
|
|
|
|
pwm_count &= 0x7f;
|
|
|
|
|
|
|
|
|
|
// increment slow_pwm_count only every 64 pwm_count circa 65.5ms
|
|
|
|
|
if ((pwm_count % 64) == 0) {
|
|
|
|
|
slow_pwm_count++;
|
|
|
|
|
slow_pwm_count &= 0x7f;
|
|
|
|
|
|
|
|
|
|
// Extruder 0
|
|
|
|
|
if (state_timer_heater_0 > 0) {
|
|
|
|
|
state_timer_heater_0--;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#if EXTRUDERS > 1
|
|
|
|
|
// Extruder 1
|
|
|
|
|
if (state_timer_heater_1 > 0)
|
|
|
|
|
state_timer_heater_1--;
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
#if EXTRUDERS > 2
|
|
|
|
|
// Extruder 2
|
|
|
|
|
if (state_timer_heater_2 > 0)
|
|
|
|
|
state_timer_heater_2--;
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
#if defined(HEATER_BED_PIN) && HEATER_BED_PIN > -1
|
|
|
|
|
// Bed
|
|
|
|
|
if (state_timer_heater_b > 0)
|
|
|
|
|
state_timer_heater_b--;
|
|
|
|
|
#endif
|
|
|
|
|
} //if ((pwm_count % 64) == 0) {
|
|
|
|
|
|
|
|
|
|
#endif //ifndef SLOW_PWM_HEATERS
|
|
|
|
|
|
|
|
|
|
switch(temp_state) {
|
|
|
|
|
case 0: // Prepare TEMP_0
|
|
|
|
|
#if defined(TEMP_0_PIN) && (TEMP_0_PIN > -1)
|
|
|
|
|