|
|
@ -37,6 +37,36 @@
|
|
|
|
|
|
|
|
|
|
|
|
#include "Sd2PinMap.h"
|
|
|
|
#include "Sd2PinMap.h"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//===========================================================================
|
|
|
|
|
|
|
|
//================================== macros =================================
|
|
|
|
|
|
|
|
//===========================================================================
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#if EXTRUDERS > 4
|
|
|
|
|
|
|
|
#error Unsupported number of extruders
|
|
|
|
|
|
|
|
#elif EXTRUDERS > 3
|
|
|
|
|
|
|
|
#define ARRAY_BY_EXTRUDERS(v1, v2, v3, v4) { v1, v2, v3, v4 }
|
|
|
|
|
|
|
|
#elif EXTRUDERS > 2
|
|
|
|
|
|
|
|
#define ARRAY_BY_EXTRUDERS(v1, v2, v3, v4) { v1, v2, v3 }
|
|
|
|
|
|
|
|
#elif EXTRUDERS > 1
|
|
|
|
|
|
|
|
#define ARRAY_BY_EXTRUDERS(v1, v2, v3, v4) { v1, v2 }
|
|
|
|
|
|
|
|
#else
|
|
|
|
|
|
|
|
#define ARRAY_BY_EXTRUDERS(v1, v2, v3, v4) { v1 }
|
|
|
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#define PIN_EXISTS(PIN) (defined(PIN) && PIN >= 0)
|
|
|
|
|
|
|
|
#define HAS_TEMP_0 PIN_EXISTS(TEMP_0_PIN)
|
|
|
|
|
|
|
|
#define HAS_TEMP_1 PIN_EXISTS(TEMP_1_PIN)
|
|
|
|
|
|
|
|
#define HAS_TEMP_2 PIN_EXISTS(TEMP_2_PIN)
|
|
|
|
|
|
|
|
#define HAS_TEMP_3 PIN_EXISTS(TEMP_3_PIN)
|
|
|
|
|
|
|
|
#define HAS_TEMP_BED PIN_EXISTS(TEMP_BED_PIN)
|
|
|
|
|
|
|
|
#define HAS_FILAMENT_SENSOR (defined(FILAMENT_SENSOR) && PIN_EXISTS(FILWIDTH_PIN))
|
|
|
|
|
|
|
|
#define HAS_HEATER_0 PIN_EXISTS(HEATER_0_PIN)
|
|
|
|
|
|
|
|
#define HAS_HEATER_1 PIN_EXISTS(HEATER_1_PIN)
|
|
|
|
|
|
|
|
#define HAS_HEATER_2 PIN_EXISTS(HEATER_2_PIN)
|
|
|
|
|
|
|
|
#define HAS_HEATER_3 PIN_EXISTS(HEATER_3_PIN)
|
|
|
|
|
|
|
|
#define HAS_HEATER_BED PIN_EXISTS(HEATER_BED_PIN)
|
|
|
|
|
|
|
|
#define HAS_AUTO_FAN PIN_EXISTS(EXTRUDER_0_AUTO_FAN_PIN) || PIN_EXISTS(EXTRUDER_1_AUTO_FAN_PIN) || \
|
|
|
|
|
|
|
|
PIN_EXISTS(EXTRUDER_2_AUTO_FAN_PIN) || PIN_EXISTS(EXTRUDER_3_AUTO_FAN_PIN)
|
|
|
|
|
|
|
|
|
|
|
|
//===========================================================================
|
|
|
|
//===========================================================================
|
|
|
|
//============================= public variables ============================
|
|
|
|
//============================= public variables ============================
|
|
|
@ -117,24 +147,11 @@ static volatile bool temp_meas_ready = false;
|
|
|
|
#ifdef FAN_SOFT_PWM
|
|
|
|
#ifdef FAN_SOFT_PWM
|
|
|
|
static unsigned char soft_pwm_fan;
|
|
|
|
static unsigned char soft_pwm_fan;
|
|
|
|
#endif
|
|
|
|
#endif
|
|
|
|
#if (defined(EXTRUDER_0_AUTO_FAN_PIN) && EXTRUDER_0_AUTO_FAN_PIN > -1) || \
|
|
|
|
#if PIN_EXISTS(EXTRUDER_0_AUTO_FAN_PIN) || PIN_EXISTS(EXTRUDER_1_AUTO_FAN_PIN) || \
|
|
|
|
(defined(EXTRUDER_1_AUTO_FAN_PIN) && EXTRUDER_1_AUTO_FAN_PIN > -1) || \
|
|
|
|
PIN_EXISTS(EXTRUDER_2_AUTO_FAN_PIN) || PIN_EXISTS(EXTRUDER_3_AUTO_FAN_PIN)
|
|
|
|
(defined(EXTRUDER_2_AUTO_FAN_PIN) && EXTRUDER_2_AUTO_FAN_PIN > -1)
|
|
|
|
|
|
|
|
static unsigned long extruder_autofan_last_check;
|
|
|
|
static unsigned long extruder_autofan_last_check;
|
|
|
|
#endif
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
|
|
#if EXTRUDERS > 4
|
|
|
|
|
|
|
|
#error Unsupported number of extruders
|
|
|
|
|
|
|
|
#elif EXTRUDERS > 3
|
|
|
|
|
|
|
|
#define ARRAY_BY_EXTRUDERS(v1, v2, v3, v4) { v1, v2, v3, v4 }
|
|
|
|
|
|
|
|
#elif EXTRUDERS > 2
|
|
|
|
|
|
|
|
#define ARRAY_BY_EXTRUDERS(v1, v2, v3, v4) { v1, v2, v3 }
|
|
|
|
|
|
|
|
#elif EXTRUDERS > 1
|
|
|
|
|
|
|
|
#define ARRAY_BY_EXTRUDERS(v1, v2, v3, v4) { v1, v2 }
|
|
|
|
|
|
|
|
#else
|
|
|
|
|
|
|
|
#define ARRAY_BY_EXTRUDERS(v1, v2, v3, v4) { v1 }
|
|
|
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#ifdef PIDTEMP
|
|
|
|
#ifdef PIDTEMP
|
|
|
|
#ifdef PID_PARAMS_PER_EXTRUDER
|
|
|
|
#ifdef PID_PARAMS_PER_EXTRUDER
|
|
|
|
float Kp[EXTRUDERS] = ARRAY_BY_EXTRUDERS(DEFAULT_Kp, DEFAULT_Kp, DEFAULT_Kp, DEFAULT_Kp);
|
|
|
|
float Kp[EXTRUDERS] = ARRAY_BY_EXTRUDERS(DEFAULT_Kp, DEFAULT_Kp, DEFAULT_Kp, DEFAULT_Kp);
|
|
|
@ -192,13 +209,6 @@ static void updateTemperaturesFromRawValues();
|
|
|
|
static int read_max6675();
|
|
|
|
static int read_max6675();
|
|
|
|
#endif
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
|
|
#define HAS_TEMP_0 (defined(TEMP_0_PIN) && TEMP_0_PIN > -1)
|
|
|
|
|
|
|
|
#define HAS_TEMP_1 (defined(TEMP_1_PIN) && TEMP_1_PIN > -1)
|
|
|
|
|
|
|
|
#define HAS_TEMP_2 (defined(TEMP_2_PIN) && TEMP_2_PIN > -1)
|
|
|
|
|
|
|
|
#define HAS_TEMP_3 (defined(TEMP_3_PIN) && TEMP_3_PIN > -1)
|
|
|
|
|
|
|
|
#define HAS_TEMP_BED (defined(TEMP_BED_PIN) && TEMP_BED_PIN > -1)
|
|
|
|
|
|
|
|
#define HAS_FILAMENT_SENSOR (defined(FILAMENT_SENSOR) && defined(FILWIDTH_PIN) && FILWIDTH_PIN > -1)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//===========================================================================
|
|
|
|
//===========================================================================
|
|
|
|
//============================= functions ============================
|
|
|
|
//============================= functions ============================
|
|
|
|
//===========================================================================
|
|
|
|
//===========================================================================
|
|
|
@ -217,10 +227,8 @@ void PID_autotune(float temp, int extruder, int ncycles)
|
|
|
|
float Kp, Ki, Kd;
|
|
|
|
float Kp, Ki, Kd;
|
|
|
|
float max = 0, min = 10000;
|
|
|
|
float max = 0, min = 10000;
|
|
|
|
|
|
|
|
|
|
|
|
#if (defined(EXTRUDER_0_AUTO_FAN_PIN) && EXTRUDER_0_AUTO_FAN_PIN > -1) || \
|
|
|
|
#if PIN_EXISTS(EXTRUDER_0_AUTO_FAN_PIN) || PIN_EXISTS(EXTRUDER_1_AUTO_FAN_PIN) || \
|
|
|
|
(defined(EXTRUDER_1_AUTO_FAN_PIN) && EXTRUDER_1_AUTO_FAN_PIN > -1) || \
|
|
|
|
PIN_EXISTS(EXTRUDER_2_AUTO_FAN_PIN) || PIN_EXISTS(EXTRUDER_3_AUTO_FAN_PIN)
|
|
|
|
(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 = temp_millis;
|
|
|
|
unsigned long extruder_autofan_last_check = temp_millis;
|
|
|
|
#endif
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
|
@ -255,10 +263,8 @@ void PID_autotune(float temp, int extruder, int ncycles)
|
|
|
|
max = max(max, input);
|
|
|
|
max = max(max, input);
|
|
|
|
min = min(min, input);
|
|
|
|
min = min(min, input);
|
|
|
|
|
|
|
|
|
|
|
|
#if (defined(EXTRUDER_0_AUTO_FAN_PIN) && EXTRUDER_0_AUTO_FAN_PIN > -1) || \
|
|
|
|
#if PIN_EXISTS(EXTRUDER_0_AUTO_FAN_PIN) || PIN_EXISTS(EXTRUDER_1_AUTO_FAN_PIN) || \
|
|
|
|
(defined(EXTRUDER_1_AUTO_FAN_PIN) && EXTRUDER_1_AUTO_FAN_PIN > -1) || \
|
|
|
|
PIN_EXISTS(EXTRUDER_2_AUTO_FAN_PIN) || PIN_EXISTS(EXTRUDER_3_AUTO_FAN_PIN)
|
|
|
|
(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 (ms > extruder_autofan_last_check + 2500) {
|
|
|
|
if (ms > extruder_autofan_last_check + 2500) {
|
|
|
|
checkExtruderAutoFans();
|
|
|
|
checkExtruderAutoFans();
|
|
|
|
extruder_autofan_last_check = ms;
|
|
|
|
extruder_autofan_last_check = ms;
|
|
|
@ -336,7 +342,7 @@ void PID_autotune(float temp, int extruder, int ncycles)
|
|
|
|
return;
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
// Every 2 seconds...
|
|
|
|
// Every 2 seconds...
|
|
|
|
if (ms - temp_millis > 2000) {
|
|
|
|
if (ms > temp_millis + 2000) {
|
|
|
|
int p;
|
|
|
|
int p;
|
|
|
|
if (extruder < 0) {
|
|
|
|
if (extruder < 0) {
|
|
|
|
p = soft_pwm_bed;
|
|
|
|
p = soft_pwm_bed;
|
|
|
@ -381,11 +387,10 @@ int getHeaterPower(int heater) {
|
|
|
|
return heater < 0 ? soft_pwm_bed : soft_pwm[heater];
|
|
|
|
return heater < 0 ? soft_pwm_bed : soft_pwm[heater];
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
#if (defined(EXTRUDER_0_AUTO_FAN_PIN) && EXTRUDER_0_AUTO_FAN_PIN > -1) || \
|
|
|
|
#if PIN_EXISTS(EXTRUDER_0_AUTO_FAN_PIN) || PIN_EXISTS(EXTRUDER_1_AUTO_FAN_PIN) || \
|
|
|
|
(defined(EXTRUDER_1_AUTO_FAN_PIN) && EXTRUDER_1_AUTO_FAN_PIN > -1) || \
|
|
|
|
PIN_EXISTS(EXTRUDER_2_AUTO_FAN_PIN)
|
|
|
|
(defined(EXTRUDER_2_AUTO_FAN_PIN) && EXTRUDER_2_AUTO_FAN_PIN > -1)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#if defined(FAN_PIN) && FAN_PIN > -1
|
|
|
|
#if PIN_EXISTS(FAN_PIN)
|
|
|
|
#if EXTRUDER_0_AUTO_FAN_PIN == FAN_PIN
|
|
|
|
#if EXTRUDER_0_AUTO_FAN_PIN == FAN_PIN
|
|
|
|
#error "You cannot set EXTRUDER_0_AUTO_FAN_PIN equal to FAN_PIN"
|
|
|
|
#error "You cannot set EXTRUDER_0_AUTO_FAN_PIN equal to FAN_PIN"
|
|
|
|
#endif
|
|
|
|
#endif
|
|
|
@ -411,11 +416,11 @@ void checkExtruderAutoFans()
|
|
|
|
uint8_t fanState = 0;
|
|
|
|
uint8_t fanState = 0;
|
|
|
|
|
|
|
|
|
|
|
|
// which fan pins need to be turned on?
|
|
|
|
// which fan pins need to be turned on?
|
|
|
|
#if defined(EXTRUDER_0_AUTO_FAN_PIN) && EXTRUDER_0_AUTO_FAN_PIN > -1
|
|
|
|
#if PIN_EXISTS(EXTRUDER_0_AUTO_FAN_PIN)
|
|
|
|
if (current_temperature[0] > EXTRUDER_AUTO_FAN_TEMPERATURE)
|
|
|
|
if (current_temperature[0] > EXTRUDER_AUTO_FAN_TEMPERATURE)
|
|
|
|
fanState |= 1;
|
|
|
|
fanState |= 1;
|
|
|
|
#endif
|
|
|
|
#endif
|
|
|
|
#if defined(EXTRUDER_1_AUTO_FAN_PIN) && EXTRUDER_1_AUTO_FAN_PIN > -1
|
|
|
|
#if PIN_EXISTS(EXTRUDER_1_AUTO_FAN_PIN)
|
|
|
|
if (current_temperature[1] > EXTRUDER_AUTO_FAN_TEMPERATURE)
|
|
|
|
if (current_temperature[1] > EXTRUDER_AUTO_FAN_TEMPERATURE)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
if (EXTRUDER_1_AUTO_FAN_PIN == EXTRUDER_0_AUTO_FAN_PIN)
|
|
|
|
if (EXTRUDER_1_AUTO_FAN_PIN == EXTRUDER_0_AUTO_FAN_PIN)
|
|
|
@ -424,7 +429,7 @@ void checkExtruderAutoFans()
|
|
|
|
fanState |= 2;
|
|
|
|
fanState |= 2;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
#endif
|
|
|
|
#endif
|
|
|
|
#if defined(EXTRUDER_2_AUTO_FAN_PIN) && EXTRUDER_2_AUTO_FAN_PIN > -1
|
|
|
|
#if PIN_EXISTS(EXTRUDER_2_AUTO_FAN_PIN)
|
|
|
|
if (current_temperature[2] > EXTRUDER_AUTO_FAN_TEMPERATURE)
|
|
|
|
if (current_temperature[2] > EXTRUDER_AUTO_FAN_TEMPERATURE)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
if (EXTRUDER_2_AUTO_FAN_PIN == EXTRUDER_0_AUTO_FAN_PIN)
|
|
|
|
if (EXTRUDER_2_AUTO_FAN_PIN == EXTRUDER_0_AUTO_FAN_PIN)
|
|
|
@ -435,7 +440,7 @@ void checkExtruderAutoFans()
|
|
|
|
fanState |= 4;
|
|
|
|
fanState |= 4;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
#endif
|
|
|
|
#endif
|
|
|
|
#if defined(EXTRUDER_3_AUTO_FAN_PIN) && EXTRUDER_3_AUTO_FAN_PIN > -1
|
|
|
|
#if PIN_EXISTS(EXTRUDER_3_AUTO_FAN_PIN)
|
|
|
|
if (current_temperature[3] > EXTRUDER_AUTO_FAN_TEMPERATURE)
|
|
|
|
if (current_temperature[3] > EXTRUDER_AUTO_FAN_TEMPERATURE)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
if (EXTRUDER_3_AUTO_FAN_PIN == EXTRUDER_0_AUTO_FAN_PIN)
|
|
|
|
if (EXTRUDER_3_AUTO_FAN_PIN == EXTRUDER_0_AUTO_FAN_PIN)
|
|
|
@ -450,19 +455,19 @@ void checkExtruderAutoFans()
|
|
|
|
#endif
|
|
|
|
#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 PIN_EXISTS(EXTRUDER_0_AUTO_FAN_PIN)
|
|
|
|
setExtruderAutoFanState(EXTRUDER_0_AUTO_FAN_PIN, (fanState & 1) != 0);
|
|
|
|
setExtruderAutoFanState(EXTRUDER_0_AUTO_FAN_PIN, (fanState & 1) != 0);
|
|
|
|
#endif
|
|
|
|
#endif
|
|
|
|
#if defined(EXTRUDER_1_AUTO_FAN_PIN) && EXTRUDER_1_AUTO_FAN_PIN > -1
|
|
|
|
#if PIN_EXISTS(EXTRUDER_1_AUTO_FAN_PIN)
|
|
|
|
if (EXTRUDER_1_AUTO_FAN_PIN != EXTRUDER_0_AUTO_FAN_PIN)
|
|
|
|
if (EXTRUDER_1_AUTO_FAN_PIN != EXTRUDER_0_AUTO_FAN_PIN)
|
|
|
|
setExtruderAutoFanState(EXTRUDER_1_AUTO_FAN_PIN, (fanState & 2) != 0);
|
|
|
|
setExtruderAutoFanState(EXTRUDER_1_AUTO_FAN_PIN, (fanState & 2) != 0);
|
|
|
|
#endif
|
|
|
|
#endif
|
|
|
|
#if defined(EXTRUDER_2_AUTO_FAN_PIN) && EXTRUDER_2_AUTO_FAN_PIN > -1
|
|
|
|
#if PIN_EXISTS(EXTRUDER_2_AUTO_FAN_PIN)
|
|
|
|
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 PIN_EXISTS(EXTRUDER_3_AUTO_FAN_PIN)
|
|
|
|
if (EXTRUDER_3_AUTO_FAN_PIN != EXTRUDER_0_AUTO_FAN_PIN
|
|
|
|
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_1_AUTO_FAN_PIN
|
|
|
|
&& EXTRUDER_3_AUTO_FAN_PIN != EXTRUDER_2_AUTO_FAN_PIN)
|
|
|
|
&& EXTRUDER_3_AUTO_FAN_PIN != EXTRUDER_2_AUTO_FAN_PIN)
|
|
|
@ -475,22 +480,22 @@ void checkExtruderAutoFans()
|
|
|
|
//
|
|
|
|
//
|
|
|
|
// Error checking and Write Routines
|
|
|
|
// Error checking and Write Routines
|
|
|
|
//
|
|
|
|
//
|
|
|
|
#if !defined(HEATER_0_PIN) || HEATER_0_PIN < 0
|
|
|
|
#if !HAS_HEATER_0
|
|
|
|
#error HEATER_0_PIN not defined for this board
|
|
|
|
#error HEATER_0_PIN not defined for this board
|
|
|
|
#endif
|
|
|
|
#endif
|
|
|
|
#define WRITE_HEATER_0P(v) WRITE(HEATER_0_PIN, v)
|
|
|
|
#define WRITE_HEATER_0P(v) WRITE(HEATER_0_PIN, v)
|
|
|
|
#if EXTRUDERS > 1 || defined(HEATERS_PARALLEL)
|
|
|
|
#if EXTRUDERS > 1 || defined(HEATERS_PARALLEL)
|
|
|
|
#if !defined(HEATER_1_PIN) || HEATER_1_PIN < 0
|
|
|
|
#if !HAS_HEATER_1
|
|
|
|
#error HEATER_1_PIN not defined for this board
|
|
|
|
#error HEATER_1_PIN not defined for this board
|
|
|
|
#endif
|
|
|
|
#endif
|
|
|
|
#define WRITE_HEATER_1(v) WRITE(HEATER_1_PIN, v)
|
|
|
|
#define WRITE_HEATER_1(v) WRITE(HEATER_1_PIN, v)
|
|
|
|
#if EXTRUDERS > 2
|
|
|
|
#if EXTRUDERS > 2
|
|
|
|
#if !defined(HEATER_2_PIN) || HEATER_2_PIN < 0
|
|
|
|
#if !HAS_HEATER_2
|
|
|
|
#error HEATER_2_PIN not defined for this board
|
|
|
|
#error HEATER_2_PIN not defined for this board
|
|
|
|
#endif
|
|
|
|
#endif
|
|
|
|
#define WRITE_HEATER_2(v) WRITE(HEATER_2_PIN, v)
|
|
|
|
#define WRITE_HEATER_2(v) WRITE(HEATER_2_PIN, v)
|
|
|
|
#if EXTRUDERS > 3
|
|
|
|
#if EXTRUDERS > 3
|
|
|
|
#if !defined(HEATER_3_PIN) || HEATER_3_PIN < 0
|
|
|
|
#if !HAS_HEATER_3
|
|
|
|
#error HEATER_3_PIN not defined for this board
|
|
|
|
#error HEATER_3_PIN not defined for this board
|
|
|
|
#endif
|
|
|
|
#endif
|
|
|
|
#define WRITE_HEATER_3(v) WRITE(HEATER_3_PIN, v)
|
|
|
|
#define WRITE_HEATER_3(v) WRITE(HEATER_3_PIN, v)
|
|
|
@ -502,7 +507,7 @@ void checkExtruderAutoFans()
|
|
|
|
#else
|
|
|
|
#else
|
|
|
|
#define WRITE_HEATER_0(v) WRITE_HEATER_0P(v)
|
|
|
|
#define WRITE_HEATER_0(v) WRITE_HEATER_0P(v)
|
|
|
|
#endif
|
|
|
|
#endif
|
|
|
|
#if defined(HEATER_BED_PIN) && HEATER_BED_PIN > -1
|
|
|
|
#if HAS_HEATER_BED
|
|
|
|
#define WRITE_HEATER_BED(v) WRITE(HEATER_BED_PIN, v)
|
|
|
|
#define WRITE_HEATER_BED(v) WRITE(HEATER_BED_PIN, v)
|
|
|
|
#endif
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
|
@ -626,9 +631,8 @@ void manage_heater() {
|
|
|
|
|
|
|
|
|
|
|
|
} // Extruders Loop
|
|
|
|
} // Extruders Loop
|
|
|
|
|
|
|
|
|
|
|
|
#if (defined(EXTRUDER_0_AUTO_FAN_PIN) && EXTRUDER_0_AUTO_FAN_PIN > -1) || \
|
|
|
|
#if PIN_EXISTS(EXTRUDER_0_AUTO_FAN_PIN) || PIN_EXISTS(EXTRUDER_1_AUTO_FAN_PIN) || \
|
|
|
|
(defined(EXTRUDER_1_AUTO_FAN_PIN) && EXTRUDER_1_AUTO_FAN_PIN > -1) || \
|
|
|
|
PIN_EXISTS(EXTRUDER_2_AUTO_FAN_PIN) || PIN_EXISTS(EXTRUDER_3_AUTO_FAN_PIN)
|
|
|
|
(defined(EXTRUDER_2_AUTO_FAN_PIN) && EXTRUDER_2_AUTO_FAN_PIN > -1)
|
|
|
|
|
|
|
|
if (ms > extruder_autofan_last_check + 2500) { // only need to check fan state very infrequently
|
|
|
|
if (ms > extruder_autofan_last_check + 2500) { // only need to check fan state very infrequently
|
|
|
|
checkExtruderAutoFans();
|
|
|
|
checkExtruderAutoFans();
|
|
|
|
extruder_autofan_last_check = ms;
|
|
|
|
extruder_autofan_last_check = ms;
|
|
|
@ -680,7 +684,7 @@ void manage_heater() {
|
|
|
|
#elif !defined(BED_LIMIT_SWITCHING)
|
|
|
|
#elif !defined(BED_LIMIT_SWITCHING)
|
|
|
|
// Check if temperature is within the correct range
|
|
|
|
// Check if temperature is within the correct range
|
|
|
|
if (current_temperature_bed > BED_MINTEMP && current_temperature_bed < BED_MAXTEMP) {
|
|
|
|
if (current_temperature_bed > BED_MINTEMP && current_temperature_bed < BED_MAXTEMP) {
|
|
|
|
soft_pwm_bed = current_temperature_bed >= target_temperature_bed ? 0 : MAX_BED_POWER >> 1;
|
|
|
|
soft_pwm_bed = current_temperature_bed < target_temperature_bed ? MAX_BED_POWER >> 1 : 0;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
else {
|
|
|
|
soft_pwm_bed = 0;
|
|
|
|
soft_pwm_bed = 0;
|
|
|
@ -707,9 +711,9 @@ void manage_heater() {
|
|
|
|
meas_shift_index = delay_index1 - meas_delay_cm;
|
|
|
|
meas_shift_index = delay_index1 - meas_delay_cm;
|
|
|
|
if (meas_shift_index < 0) meas_shift_index += MAX_MEASUREMENT_DELAY + 1; //loop around buffer if needed
|
|
|
|
if (meas_shift_index < 0) meas_shift_index += MAX_MEASUREMENT_DELAY + 1; //loop around buffer if needed
|
|
|
|
|
|
|
|
|
|
|
|
// Get the delayed info and add 100 to reconstitute to a percent of
|
|
|
|
// Get the delayed info and add 100 to reconstitute to a percent of
|
|
|
|
// the nominal filament diameter then square it to get an area
|
|
|
|
// the nominal filament diameter then square it to get an area
|
|
|
|
meas_shift_index = constrain(meas_shift_index, 0, MAX_MEASUREMENT_DELAY);
|
|
|
|
meas_shift_index = constrain(meas_shift_index, 0, MAX_MEASUREMENT_DELAY);
|
|
|
|
float vm = pow((measurement_delay[meas_shift_index] + 100.0) / 100.0, 2);
|
|
|
|
float vm = pow((measurement_delay[meas_shift_index] + 100.0) / 100.0, 2);
|
|
|
|
if (vm < 0.01) vm = 0.01;
|
|
|
|
if (vm < 0.01) vm = 0.01;
|
|
|
|
volumetric_multiplier[FILAMENT_SENSOR_EXTRUDER_NUM] = vm;
|
|
|
|
volumetric_multiplier[FILAMENT_SENSOR_EXTRUDER_NUM] = vm;
|
|
|
@ -722,9 +726,9 @@ void manage_heater() {
|
|
|
|
// For hot end temperature measurement.
|
|
|
|
// For hot end temperature measurement.
|
|
|
|
static float analog2temp(int raw, uint8_t e) {
|
|
|
|
static float analog2temp(int raw, uint8_t e) {
|
|
|
|
#ifdef TEMP_SENSOR_1_AS_REDUNDANT
|
|
|
|
#ifdef TEMP_SENSOR_1_AS_REDUNDANT
|
|
|
|
if(e > EXTRUDERS)
|
|
|
|
if (e > EXTRUDERS)
|
|
|
|
#else
|
|
|
|
#else
|
|
|
|
if(e >= EXTRUDERS)
|
|
|
|
if (e >= EXTRUDERS)
|
|
|
|
#endif
|
|
|
|
#endif
|
|
|
|
{
|
|
|
|
{
|
|
|
|
SERIAL_ERROR_START;
|
|
|
|
SERIAL_ERROR_START;
|
|
|
@ -798,28 +802,26 @@ static float analog2tempBed(int raw) {
|
|
|
|
|
|
|
|
|
|
|
|
/* Called to get the raw values into the the actual temperatures. The raw values are created in interrupt context,
|
|
|
|
/* Called to get the raw values into the the actual temperatures. The raw values are created in interrupt context,
|
|
|
|
and this function is called from normal context as it is too slow to run in interrupts and will block the stepper routine otherwise */
|
|
|
|
and this function is called from normal context as it is too slow to run in interrupts and will block the stepper routine otherwise */
|
|
|
|
static void updateTemperaturesFromRawValues()
|
|
|
|
static void updateTemperaturesFromRawValues() {
|
|
|
|
{
|
|
|
|
#ifdef HEATER_0_USES_MAX6675
|
|
|
|
#ifdef HEATER_0_USES_MAX6675
|
|
|
|
current_temperature_raw[0] = read_max6675();
|
|
|
|
current_temperature_raw[0] = read_max6675();
|
|
|
|
#endif
|
|
|
|
#endif
|
|
|
|
for(uint8_t e = 0; e < EXTRUDERS; e++) {
|
|
|
|
for(uint8_t e=0;e<EXTRUDERS;e++)
|
|
|
|
current_temperature[e] = analog2temp(current_temperature_raw[e], e);
|
|
|
|
{
|
|
|
|
}
|
|
|
|
current_temperature[e] = analog2temp(current_temperature_raw[e], e);
|
|
|
|
current_temperature_bed = analog2tempBed(current_temperature_bed_raw);
|
|
|
|
}
|
|
|
|
#ifdef TEMP_SENSOR_1_AS_REDUNDANT
|
|
|
|
current_temperature_bed = analog2tempBed(current_temperature_bed_raw);
|
|
|
|
redundant_temperature = analog2temp(redundant_temperature_raw, 1);
|
|
|
|
#ifdef TEMP_SENSOR_1_AS_REDUNDANT
|
|
|
|
#endif
|
|
|
|
redundant_temperature = analog2temp(redundant_temperature_raw, 1);
|
|
|
|
#if HAS_FILAMENT_SENSOR
|
|
|
|
#endif
|
|
|
|
filament_width_meas = analog2widthFil();
|
|
|
|
#if HAS_FILAMENT_SENSOR
|
|
|
|
#endif
|
|
|
|
filament_width_meas = analog2widthFil();
|
|
|
|
//Reset the watchdog after we know we have a temperature measurement.
|
|
|
|
#endif
|
|
|
|
watchdog_reset();
|
|
|
|
//Reset the watchdog after we know we have a temperature measurement.
|
|
|
|
|
|
|
|
watchdog_reset();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
CRITICAL_SECTION_START;
|
|
|
|
CRITICAL_SECTION_START;
|
|
|
|
temp_meas_ready = false;
|
|
|
|
temp_meas_ready = false;
|
|
|
|
CRITICAL_SECTION_END;
|
|
|
|
CRITICAL_SECTION_END;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@ -867,22 +869,22 @@ void tp_init()
|
|
|
|
#endif //PIDTEMPBED
|
|
|
|
#endif //PIDTEMPBED
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
#if defined(HEATER_0_PIN) && (HEATER_0_PIN > -1)
|
|
|
|
#if HAS_HEATER_0
|
|
|
|
SET_OUTPUT(HEATER_0_PIN);
|
|
|
|
SET_OUTPUT(HEATER_0_PIN);
|
|
|
|
#endif
|
|
|
|
#endif
|
|
|
|
#if defined(HEATER_1_PIN) && (HEATER_1_PIN > -1)
|
|
|
|
#if HAS_HEATER_1
|
|
|
|
SET_OUTPUT(HEATER_1_PIN);
|
|
|
|
SET_OUTPUT(HEATER_1_PIN);
|
|
|
|
#endif
|
|
|
|
#endif
|
|
|
|
#if defined(HEATER_2_PIN) && (HEATER_2_PIN > -1)
|
|
|
|
#if HAS_HEATER_2
|
|
|
|
SET_OUTPUT(HEATER_2_PIN);
|
|
|
|
SET_OUTPUT(HEATER_2_PIN);
|
|
|
|
#endif
|
|
|
|
#endif
|
|
|
|
#if defined(HEATER_3_PIN) && (HEATER_3_PIN > -1)
|
|
|
|
#if HAS_HEATER_3
|
|
|
|
SET_OUTPUT(HEATER_3_PIN);
|
|
|
|
SET_OUTPUT(HEATER_3_PIN);
|
|
|
|
#endif
|
|
|
|
#endif
|
|
|
|
#if defined(HEATER_BED_PIN) && (HEATER_BED_PIN > -1)
|
|
|
|
#if HAS_HEATER_BED
|
|
|
|
SET_OUTPUT(HEATER_BED_PIN);
|
|
|
|
SET_OUTPUT(HEATER_BED_PIN);
|
|
|
|
#endif
|
|
|
|
#endif
|
|
|
|
#if defined(FAN_PIN) && (FAN_PIN > -1)
|
|
|
|
#if PIN_EXISTS(FAN_PIN)
|
|
|
|
SET_OUTPUT(FAN_PIN);
|
|
|
|
SET_OUTPUT(FAN_PIN);
|
|
|
|
#ifdef FAST_PWM_FAN
|
|
|
|
#ifdef FAST_PWM_FAN
|
|
|
|
setPwmFrequency(FAN_PIN, 1); // No prescaling. Pwm frequency = F_CPU/256/8
|
|
|
|
setPwmFrequency(FAN_PIN, 1); // No prescaling. Pwm frequency = F_CPU/256/8
|
|
|
@ -1130,7 +1132,7 @@ void disable_heater() {
|
|
|
|
#if HAS_TEMP_BED
|
|
|
|
#if HAS_TEMP_BED
|
|
|
|
target_temperature_bed = 0;
|
|
|
|
target_temperature_bed = 0;
|
|
|
|
soft_pwm_bed = 0;
|
|
|
|
soft_pwm_bed = 0;
|
|
|
|
#if defined(HEATER_BED_PIN) && HEATER_BED_PIN > -1
|
|
|
|
#if HAS_HEATER_BED
|
|
|
|
WRITE_HEATER_BED(LOW);
|
|
|
|
WRITE_HEATER_BED(LOW);
|
|
|
|
#endif
|
|
|
|
#endif
|
|
|
|
#endif
|
|
|
|
#endif
|
|
|
@ -1163,7 +1165,7 @@ void min_temp_error(uint8_t e) {
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void bed_max_temp_error(void) {
|
|
|
|
void bed_max_temp_error(void) {
|
|
|
|
#if defined(HEATER_BED_PIN) && HEATER_BED_PIN > -1
|
|
|
|
#if HAS_HEATER_BED
|
|
|
|
WRITE_HEATER_BED(0);
|
|
|
|
WRITE_HEATER_BED(0);
|
|
|
|
#endif
|
|
|
|
#endif
|
|
|
|
if (IsStopped() == false) {
|
|
|
|
if (IsStopped() == false) {
|
|
|
@ -1232,6 +1234,9 @@ void bed_max_temp_error(void) {
|
|
|
|
|
|
|
|
|
|
|
|
#endif //HEATER_0_USES_MAX6675
|
|
|
|
#endif //HEATER_0_USES_MAX6675
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
|
|
* Stages in the ISR loop
|
|
|
|
|
|
|
|
*/
|
|
|
|
enum TempState {
|
|
|
|
enum TempState {
|
|
|
|
PrepareTemp_0,
|
|
|
|
PrepareTemp_0,
|
|
|
|
MeasureTemp_0,
|
|
|
|
MeasureTemp_0,
|
|
|
@ -1284,7 +1289,7 @@ ISR(TIMER0_COMPB_vect) {
|
|
|
|
#endif
|
|
|
|
#endif
|
|
|
|
#endif
|
|
|
|
#endif
|
|
|
|
#endif
|
|
|
|
#endif
|
|
|
|
#if defined(HEATER_BED_PIN) && HEATER_BED_PIN > -1
|
|
|
|
#if HAS_HEATER_BED
|
|
|
|
ISR_STATICS(BED);
|
|
|
|
ISR_STATICS(BED);
|
|
|
|
#endif
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
|
@ -1316,7 +1321,7 @@ ISR(TIMER0_COMPB_vect) {
|
|
|
|
#endif
|
|
|
|
#endif
|
|
|
|
#endif
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
|
|
#if defined(HEATER_BED_PIN) && HEATER_BED_PIN > -1
|
|
|
|
#if HAS_HEATER_BED
|
|
|
|
soft_pwm_BED = soft_pwm_bed;
|
|
|
|
soft_pwm_BED = soft_pwm_bed;
|
|
|
|
WRITE_HEATER_BED(soft_pwm_BED > 0 ? 1 : 0);
|
|
|
|
WRITE_HEATER_BED(soft_pwm_BED > 0 ? 1 : 0);
|
|
|
|
#endif
|
|
|
|
#endif
|
|
|
@ -1337,7 +1342,7 @@ ISR(TIMER0_COMPB_vect) {
|
|
|
|
#endif
|
|
|
|
#endif
|
|
|
|
#endif
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
|
|
#if defined(HEATER_BED_PIN) && HEATER_BED_PIN > -1
|
|
|
|
#if HAS_HEATER_BED
|
|
|
|
if (soft_pwm_BED < pwm_count) WRITE_HEATER_BED(0);
|
|
|
|
if (soft_pwm_BED < pwm_count) WRITE_HEATER_BED(0);
|
|
|
|
#endif
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
|
@ -1398,7 +1403,7 @@ ISR(TIMER0_COMPB_vect) {
|
|
|
|
#endif
|
|
|
|
#endif
|
|
|
|
#endif
|
|
|
|
#endif
|
|
|
|
#endif
|
|
|
|
#endif
|
|
|
|
#if defined(HEATER_BED_PIN) && HEATER_BED_PIN > -1
|
|
|
|
#if HAS_HEATER_BED
|
|
|
|
_SLOW_PWM_ROUTINE(BED, soft_pwm_bed); // BED
|
|
|
|
_SLOW_PWM_ROUTINE(BED, soft_pwm_bed); // BED
|
|
|
|
#endif
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
|
@ -1414,7 +1419,7 @@ ISR(TIMER0_COMPB_vect) {
|
|
|
|
#endif
|
|
|
|
#endif
|
|
|
|
#endif
|
|
|
|
#endif
|
|
|
|
#endif
|
|
|
|
#endif
|
|
|
|
#if defined(HEATER_BED_PIN) && HEATER_BED_PIN > -1
|
|
|
|
#if HAS_HEATER_BED
|
|
|
|
PWM_OFF_ROUTINE(BED); // BED
|
|
|
|
PWM_OFF_ROUTINE(BED); // BED
|
|
|
|
#endif
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
|
@ -1445,7 +1450,7 @@ ISR(TIMER0_COMPB_vect) {
|
|
|
|
#endif
|
|
|
|
#endif
|
|
|
|
#endif
|
|
|
|
#endif
|
|
|
|
#endif
|
|
|
|
#endif
|
|
|
|
#if defined(HEATER_BED_PIN) && HEATER_BED_PIN > -1 // BED
|
|
|
|
#if HAS_HEATER_BED
|
|
|
|
if (state_timer_heater_BED > 0) state_timer_heater_BED--;
|
|
|
|
if (state_timer_heater_BED > 0) state_timer_heater_BED--;
|
|
|
|
#endif
|
|
|
|
#endif
|
|
|
|
} // (pwm_count % 64) == 0
|
|
|
|
} // (pwm_count % 64) == 0
|
|
|
|