|
SKR 1.3 Bed Enable Pin (Extra failsafe for the failsafe) June 18, 2024 09:28PM |
Registered: 5 years ago Posts: 5 |
void Temperature::_temp_error(const heater_id_t heater_id, FSTR_P const serial_msg, FSTR_P const lcd_msg) {
static uint8_t killed = 0;
if (IsRunning() && TERN1(BOGUS_TEMPERATURE_GRACE_PERIOD, killed == 2)) {
SERIAL_ERROR_START();
SERIAL_ECHOF(serial_msg);
SERIAL_ECHOPGM(STR_STOPPED_HEATER);
heater_id_t real_heater_id = heater_id;
#if HAS_TEMP_REDUNDANT
if (heater_id == H_REDUNDANT) {
SERIAL_ECHOPGM(STR_REDUNDANT); // print redundant and cascade to print target, too.
real_heater_id = (heater_id_t)HEATER_ID(TEMP_SENSOR_REDUNDANT_TARGET);
}
#endif
switch (real_heater_id) {
OPTCODE(HAS_TEMP_COOLER, case H_COOLER: SERIAL_ECHOPGM(STR_COOLER); break)
OPTCODE(HAS_TEMP_PROBE, case H_PROBE: SERIAL_ECHOPGM(STR_PROBE); break)
OPTCODE(HAS_TEMP_BOARD, case H_BOARD: SERIAL_ECHOPGM(STR_MOTHERBOARD); break)
OPTCODE(HAS_TEMP_CHAMBER, case H_CHAMBER: SERIAL_ECHOPGM(STR_HEATER_CHAMBER); break)
OPTCODE(HAS_TEMP_BED, case H_BED: SERIAL_ECHOPGM(STR_HEATER_BED); break)
default:
if (real_heater_id >= 0) SERIAL_ECHOLNPGM("E", real_heater_id);
}
SERIAL_EOL();
}
disable_all_heaters(); // always disable (even for bogus temp)
hal.watchdog_refresh();
#if BOGUS_TEMPERATURE_GRACE_PERIOD
const millis_t ms = millis();
static millis_t expire_ms;
switch (killed) {
case 0:
expire_ms = ms + BOGUS_TEMPERATURE_GRACE_PERIOD;
++killed;
break;
case 1:
if (ELAPSED(ms, expire_ms)) ++killed;
break;
case 2:
loud_kill(lcd_msg, heater_id);
++killed;
break;
}
#elif defined(BOGUS_TEMPERATURE_GRACE_PERIOD)
UNUSED(killed);
#else
if (!killed) { killed = 1; loud_kill(lcd_msg, heater_id); }
#endif
}
void Temperature::disable_all_heaters() {
// Disable autotemp, unpause and reset everything
TERN_(AUTOTEMP, planner.autotemp_enabled = false);
TERN_(PROBING_HEATERS_OFF, pause_heaters(false));
#if HAS_HOTEND
HOTEND_LOOP() {
setTargetHotend(0, e);
temp_hotend[e].soft_pwm_amount = 0;
}
#endif
#if HAS_TEMP_HOTEND
#define DISABLE_HEATER(N) WRITE_HEATER_##N(LOW);
REPEAT(HOTENDS, DISABLE_HEATER);
#endif
#if HAS_HEATED_BED
setTargetBed(0);
temp_bed.soft_pwm_amount = 0;
WRITE_HEATER_BED(LOW);
#endif
#if HAS_HEATED_CHAMBER
setTargetChamber(0);
temp_chamber.soft_pwm_amount = 0;
WRITE_HEATER_CHAMBER(LOW);
#endif
#if HAS_COOLER
setTargetCooler(0);
temp_cooler.soft_pwm_amount = 0;
WRITE_HEATER_COOLER(LOW);
#endif
}
static void setTargetBed(const celsius_t celsius) {
TERN_(AUTO_POWER_CONTROL, if (celsius) powerManager.power_on());
temp_bed.target = _MIN(celsius, BED_MAX_TARGET);
start_watching_bed();
}
|
Re: SKR 1.3 Bed Relay Enable Pin (Extra failsafe for SSR) August 22, 2024 01:03AM |
Registered: 5 years ago Posts: 5 |
#define HEATED_BED_RELAY #define HEATED_BED_RELAY_PIN P1_10
#define HEATED_BED_RELAY_PIN P1_10
void Temperature::disable_all_heaters() {
. #if HAS_HEATED_BED
setTargetBed(0);
temp_bed.soft_pwm_amount = 0;
WRITE_HEATER_BED(LOW);
//TURN OFF BED RELAY
#if ENABLED(HEATED_BED_RELAY)
WRITE(HEATED_BED_RELAY_PIN, LOW); // Turn off the heated bed relay
#endif
//BED RELAY
temperature.h
static void setTargetBed(const celsius_t celsius) {
TERN_(AUTO_POWER_CONTROL, if (celsius) powerManager.power_on());
temp_bed.target = _MIN(celsius, BED_MAX_TARGET);
//BED RELAY CONTROL ADDED HERE
#if ENABLED(HEATED_BED_RELAY)
if (celsius > 0) {
WRITE(HEATED_BED_RELAY_PIN, HIGH); // Turn on the relay when bed is heating
} else {
WRITE(HEATED_BED_RELAY_PIN, LOW); // Turn off the relay when bed heating is off
}
#endif
//BED RELAY CONTROL
start_watching_bed();
}
void setup() {
#ifdef FASTIO_INIT
FASTIO_INIT();
#endif
//MAKE SURE BED RELAY IS OFF ON START
SET_OUTPUT(HEATED_BED_RELAY_PIN);
WRITE(HEATED_BED_RELAY_PIN,0);