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