Macros to the top, a few HAS_* macros

This commit is contained in:
Scott Lahteine 2015-02-26 00:33:30 -08:00
parent fd1ea9d56f
commit 864dddc878

View File

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