From a95feb56d9cc9bccc185d989272c2c6e258fc553 Mon Sep 17 00:00:00 2001 From: Alex Voinea Date: Mon, 20 Jul 2020 19:35:25 +0300 Subject: [PATCH] ALTFAN override --- Firmware/Marlin_main.cpp | 10 +++++++++- Firmware/eeprom.h | 4 +++- Firmware/temperature.cpp | 27 ++++++++++++++++++++++++--- Firmware/temperature.h | 2 ++ Firmware/ultralcd.cpp | 12 ++++++++++++ Firmware/ultralcd.h | 2 ++ 6 files changed, 52 insertions(+), 5 deletions(-) diff --git a/Firmware/Marlin_main.cpp b/Firmware/Marlin_main.cpp index 8dbc0d84..f3528ca9 100755 --- a/Firmware/Marlin_main.cpp +++ b/Firmware/Marlin_main.cpp @@ -8570,7 +8570,15 @@ Sigma_Exit: break; /*! - ### M999 - Restart after being stopped M999: Restart after being stopped by error + ### M666 - Enter experimental menu + Only used by Prusa + */ + case 666: + menu_submenu(lcd_experimental_menu); + break; + + /*! + ### M999 - Restart after being stopped M999: Restart after being stopped by error @todo Usually doesn't work. Should be fixed or removed. Most of the time, if `Stopped` it set, the print fails and is unrecoverable. */ case 999: diff --git a/Firmware/eeprom.h b/Firmware/eeprom.h index 89d7e7f9..bfc81d82 100644 --- a/Firmware/eeprom.h +++ b/Firmware/eeprom.h @@ -561,8 +561,10 @@ static Sheets * const EEPROM_Sheets_base = (Sheets*)(EEPROM_SHEETS_BASE); #define EEPROM_UVLO_LA_K (EEPROM_BACKLIGHT_TIMEOUT-4) // float +#define EEPROM_ALTFAN_OVERRIDE (EEPROM_UVLO_LA_K-1) //uint8 + //This is supposed to point to last item to allow EEPROM overrun check. Please update when adding new items. -#define EEPROM_LAST_ITEM EEPROM_UVLO_LA_K +#define EEPROM_LAST_ITEM EEPROM_ALTFAN_OVERRIDE // !!!!! // !!!!! this is end of EEPROM section ... all updates MUST BE inserted before this mark !!!!! // !!!!! diff --git a/Firmware/temperature.cpp b/Firmware/temperature.cpp index 6e9b6985..084ed272 100755 --- a/Firmware/temperature.cpp +++ b/Firmware/temperature.cpp @@ -153,6 +153,7 @@ uint8_t fanSpeedBckp = 255; uint8_t fanState = 0; #ifdef EXTRUDER_ALTFAN_DETECT bool extruderFanIsAltfan = false; //set to Noctua + uint8_t altfanOverride = 0; #endif //EXTRUDER_ALTFAN_DETECT #endif @@ -224,6 +225,14 @@ bool extruder_altfan_detect() setExtruderAutoFanState(3); SET_INPUT(TACH_0); + + altfanOverride = eeprom_read_byte((uint8_t *)EEPROM_ALTFAN_OVERRIDE); + if (altfanOverride == EEPROM_EMPTY_VALUE) + { + altfanOverride = 0; + eeprom_update_byte((uint8_t *)EEPROM_ALTFAN_OVERRIDE, altfanOverride); + } + CRITICAL_SECTION_START; EICRB &= ~(1 << ISC61); EICRB |= (1 << ISC60); @@ -241,6 +250,18 @@ bool extruder_altfan_detect() setExtruderAutoFanState(1); return extruderFanIsAltfan; } + +void altfanOverride_toggle() +{ + altfanOverride = !altfanOverride; + eeprom_update_byte((uint8_t *)EEPROM_ALTFAN_OVERRIDE, altfanOverride); +} + +bool altfanOverride_get() +{ + return altfanOverride; +} + #endif //EXTRUDER_ALTFAN_DETECT // return "false", if all extruder-heaters are 'off' (ie. "true", if any heater is 'on') @@ -494,7 +515,7 @@ void setExtruderAutoFanState(uint8_t state) if (fanState & 0x01) { #ifdef EXTRUDER_ALTFAN_DETECT - if (extruderFanIsAltfan) newFanSpeed = EXTRUDER_ALTFAN_SPEED_SILENT; + if (extruderFanIsAltfan && !altfanOverride) newFanSpeed = EXTRUDER_ALTFAN_SPEED_SILENT; else newFanSpeed = EXTRUDER_AUTO_FAN_SPEED; #else //EXTRUDER_ALTFAN_DETECT newFanSpeed = EXTRUDER_AUTO_FAN_SPEED; @@ -1356,7 +1377,7 @@ void temp_runaway_stop(bool isPreheat, bool isBed) SERIAL_ERROR_START; isBed ? SERIAL_ERRORLNPGM(" THERMAL RUNAWAY ( PREHEAT HEATBED)") : SERIAL_ERRORLNPGM(" THERMAL RUNAWAY ( PREHEAT HOTEND)"); #ifdef EXTRUDER_ALTFAN_DETECT - extruderFanIsAltfan = false; //full speed + altfanOverride = true; //full speed #endif //EXTRUDER_ALTFAN_DETECT setExtruderAutoFanState(3); SET_OUTPUT(FAN_PIN); @@ -1446,7 +1467,7 @@ void max_temp_error(uint8_t e) { WRITE(FAN_PIN, 1); WRITE(BEEPER, 1); #ifdef EXTRUDER_ALTFAN_DETECT - extruderFanIsAltfan = false; //full speed + altfanOverride = true; //full speed #endif //EXTRUDER_ALTFAN_DETECT setExtruderAutoFanState(3); // fanSpeed will consumed by the check_axes_activity() routine. diff --git a/Firmware/temperature.h b/Firmware/temperature.h index 32ff6961..da88a53c 100755 --- a/Firmware/temperature.h +++ b/Firmware/temperature.h @@ -273,6 +273,8 @@ void check_max_temp(); #ifdef EXTRUDER_ALTFAN_DETECT extern bool extruder_altfan_detect(); + extern void altfanOverride_toggle(); + extern bool altfanOverride_get(); #endif //EXTRUDER_ALTFAN_DETECT extern unsigned long extruder_autofan_last_check; diff --git a/Firmware/ultralcd.cpp b/Firmware/ultralcd.cpp index 87266914..bb1d2c71 100755 --- a/Firmware/ultralcd.cpp +++ b/Firmware/ultralcd.cpp @@ -9160,3 +9160,15 @@ void lcd_crash_detect_disable() eeprom_update_byte((uint8_t*)EEPROM_CRASH_DET, 0x00); } #endif + +void lcd_experimental_menu() +{ + MENU_BEGIN(); + MENU_ITEM_BACK_P(_T(MSG_BACK)); + +#ifdef EXTRUDER_ALTFAN_DETECT + MENU_ITEM_TOGGLE_P(_N("ALTFAN det."), altfanOverride_get()?_T(MSG_OFF):_T(MSG_ON), altfanOverride_toggle); +#endif //EXTRUDER_ALTFAN_DETECT + + MENU_END(); +} diff --git a/Firmware/ultralcd.h b/Firmware/ultralcd.h index 844c7c7d..971c07b6 100755 --- a/Firmware/ultralcd.h +++ b/Firmware/ultralcd.h @@ -257,4 +257,6 @@ enum class WizState : uint8_t void lcd_wizard(WizState state); +extern void lcd_experimental_menu(); + #endif //ULTRALCD_H