From 62c36f718b30037095ab43aa4da680bed9f3480c Mon Sep 17 00:00:00 2001 From: 3d-gussner <3d.gussner@gmail.com> Date: Mon, 7 Dec 2020 15:32:19 +0100 Subject: [PATCH 1/6] =?UTF-8?q?Add=20SuperPINDA=20support=20for=20MK2.5/S?= =?UTF-8?q?=20-=20Changed=20DETECT=5FSUPERPINDA=20to=20SUPERPINDA=5FSUPPOR?= =?UTF-8?q?T=20as=20on=20miniRAMo=20the=20thermistor=20readings=20below=20?= =?UTF-8?q?30=C2=B0C=20=20=20aren't=20accurate=20egnough=20to=20determine?= =?UTF-8?q?=20if=20SUPERPINDA=20is=20connected=20or=20not=20-=20Add=20LCD?= =?UTF-8?q?=20toggle=20menu=20Settings=20->=20HW=20Setup=20->=20SuperPINDA?= =?UTF-8?q?=20[Yes/No]=20to=20overwrite=20SuperPINDA=20detection=20=20=20-?= =?UTF-8?q?=20If=20EEPROM=5FPINDA=5FTEMP=5FCOMPENSTATION=20is=20empty=20?= =?UTF-8?q?=3D=200xff=20then=20detect=20SuperPINDA=20by=20checking=20therm?= =?UTF-8?q?istor=20=20=20-=20If=20EEPROM=5FPINDA=5FTEMP=5FCOMPENSTAION=20i?= =?UTF-8?q?s=200=20then=20forec=20enable=20for=20temperature=20compensatio?= =?UTF-8?q?n=20menues=20and=20functions=20=20=20-=20If=20EEPROM=5FPINDA=5F?= =?UTF-8?q?TEMP=5FCOMPENSATION=20is=201=20then=20force=20disable=20for=20t?= =?UTF-8?q?emperature=20compensation=20menues=20and=20functions?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Firmware/Marlin_main.cpp | 8 ++++---- Firmware/eeprom.h | 7 +++++-- Firmware/temperature.cpp | 14 ++++++++++++-- Firmware/ultralcd.cpp | 19 +++++++++++++++++++ Firmware/ultralcd.h | 2 ++ .../variants/1_75mm_MK25-RAMBo10a-E3Dv6full.h | 2 ++ .../variants/1_75mm_MK25-RAMBo13a-E3Dv6full.h | 2 ++ .../1_75mm_MK25S-RAMBo10a-E3Dv6full.h | 2 ++ .../1_75mm_MK25S-RAMBo13a-E3Dv6full.h | 2 ++ .../variants/1_75mm_MK3-EINSy10a-E3Dv6full.h | 2 +- .../variants/1_75mm_MK3S-EINSy10a-E3Dv6full.h | 2 +- 11 files changed, 52 insertions(+), 10 deletions(-) diff --git a/Firmware/Marlin_main.cpp b/Firmware/Marlin_main.cpp index a83d64b82..f6509cdcb 100755 --- a/Firmware/Marlin_main.cpp +++ b/Firmware/Marlin_main.cpp @@ -4572,7 +4572,7 @@ if(eSoundMode!=e_SOUND_MODE_SILENT) The Original i3 Prusa MK2/s uses PINDAv1 and this calibration improves the temperature drift, but not as good as the PINDAv2. superPINDA sensor has internal temperature compensation and no thermistor output. There is no point of doing temperature calibration in such case. - If PINDA_THERMISTOR and DETECT_SUPERPINDA is defined during compilation, calibration is skipped with serial message "No PINDA thermistor". + If PINDA_THERMISTOR and SUPERPINDA_SUPPORT is defined during compilation, calibration is skipped with serial message "No PINDA thermistor". This can be caused also if PINDA thermistor connection is broken or PINDA temperature is lower than PINDA_MINTEMP. #### Example @@ -10502,9 +10502,9 @@ float temp_comp_interpolation(float inp_temperature) { #ifdef PINDA_THERMISTOR constexpr int start_compensating_temp = 35; temp_C[i] = start_compensating_temp + i * 5; //temperature in degrees C -#ifdef DETECT_SUPERPINDA - static_assert(start_compensating_temp >= PINDA_MINTEMP, "Temperature compensation start point is lower than PINDA_MINTEMP."); -#endif //DETECT_SUPERPINDA +#ifdef SUPERPINDA_SUPPORT + static_assert(start_compensating_temp >= PINDA_MINTEMP, "Temperature compensation start point is lower than PINDA_MINTEMP."); +#endif //SUPERPINDA_SUPPORT #else temp_C[i] = 50 + i * 10; //temperature in C #endif diff --git a/Firmware/eeprom.h b/Firmware/eeprom.h index 5cb7ddb85..f234bb715 100644 --- a/Firmware/eeprom.h +++ b/Firmware/eeprom.h @@ -365,6 +365,9 @@ static_assert(sizeof(Sheets) == EEPROM_SHEETS_SIZEOF, "Sizeof(Sheets) is not EEP | 0x0D2A 3370 | uint8 | EEPROM_EXPERIMENTAL_VISIBILITY | ffh 255 | ffh 255 | Experimental menu visibility unknown state | LCD menu | D3 Ax0d2a C1 | ^ | ^ | ^ | 00h 0 | ^ | Experimental menu visibility hidden | ^ | ^ | ^ | ^ | ^ | 01h 1 | ^ | Experimental menu visibility visible | ^ | ^ +| 0x0D29 3369 | uint8 | EEPROM_PINDA_TEMP_COMPENSATION | ffh 255 | ffh 255 | PINDA temp compensation unknown state | LCD menu | D3 Ax0d29 C1 +| ^ | ^ | ^ | 00h 0 | ^ | PINDA has no temp compensation PINDA v1/2 | ^ | ^ +| ^ | ^ | ^ | 01h 1 | ^ | PINDA has temp compensation aka SuperPINDA | ^ | ^ | Address begin | Bit/Type | Name | Valid values | Default/FactoryReset | Description | Gcode/Function| Debug code @@ -569,9 +572,9 @@ static Sheets * const EEPROM_Sheets_base = (Sheets*)(EEPROM_SHEETS_BASE); #define EEPROM_ALTFAN_OVERRIDE (EEPROM_UVLO_LA_K-1) //uint8 #define EEPROM_EXPERIMENTAL_VISIBILITY (EEPROM_ALTFAN_OVERRIDE-1) //uint8 - +#define EEPROM_PINDA_TEMP_COMPENSATION (EEPROM_EXPERIMENTAL_VISIBILITY-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_EXPERIMENTAL_VISIBILITY +#define EEPROM_LAST_ITEM EEPROM_PINDA_TEMP_COMPENSATION // !!!!! // !!!!! 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 cb4fc8aee..a7ff4dff3 100755 --- a/Firmware/temperature.cpp +++ b/Firmware/temperature.cpp @@ -2325,11 +2325,21 @@ float unscalePID_d(float d) //! //! @retval true firmware should do temperature compensation and allow calibration //! @retval false PINDA thermistor is not detected, disable temperature compensation and calibration +//! @retval true/false when overwritten in LCD menu Settings->HW Setup->SuperPINDA //! bool has_temperature_compensation() { -#ifdef DETECT_SUPERPINDA - return (current_temperature_pinda >= PINDA_MINTEMP) ? true : false; +#ifdef SUPERPINDA_SUPPORT + uint8_t pinda_temp_compensation = eeprom_read_byte((uint8_t*)EEPROM_PINDA_TEMP_COMPENSATION); + if (pinda_temp_compensation == EEPROM_EMPTY_VALUE) //Unkown PINDA temp compenstation, so check it. + { + //SERIAL_ECHOLNPGM("Current PINDATEMP:"); + //SERIAL_ECHO(current_temperature_pinda); + //SERIAL_ECHOLN(PINDA_MINTEMP); + return (current_temperature_pinda >= PINDA_MINTEMP) ? true : false; + } + else if (pinda_temp_compensation == 0) return true; //Overwritten via LCD menu SuperPINDA [No] + else return false; //Overwritten via LCD menu SuperPINDA [YES] #else return true; #endif diff --git a/Firmware/ultralcd.cpp b/Firmware/ultralcd.cpp index 44c2dff77..e20180b6d 100755 --- a/Firmware/ultralcd.cpp +++ b/Firmware/ultralcd.cpp @@ -5753,6 +5753,15 @@ void lcd_hw_setup_menu(void) // can not be "static" MENU_ITEM_SUBMENU_P(PSTR("Experimental"), lcd_experimental_menu);////MSG_MENU_EXPERIMENTAL c=18 } +#ifdef SUPERPINDA_SUPPORT + //! The SuperPINDA is detected when the PINDA temp is below its defined limit. + //! This works well on the EINSY board but not on the miniRAMBo board as + //! as a disconnected SuperPINDA will show higher temps compared to an EINSY board. + //! + //! This menu allows the user to en-/disable the SuperPINDA manualy + MENU_ITEM_TOGGLE_P(_N("SuperPINDA"), eeprom_read_byte((unsigned char *)EEPROM_PINDA_TEMP_COMPENSATION) ? _T(MSG_YES) : _T(MSG_NO), lcd_pinda_temp_compensation_toggle); +#endif //SUPERPINDA_SUPPORT + MENU_END(); } @@ -9235,3 +9244,13 @@ void lcd_experimental_menu() MENU_END(); } + +void lcd_pinda_temp_compensation_toggle() +{ + uint8_t pinda_temp_compensation = eeprom_read_byte((uint8_t*)EEPROM_PINDA_TEMP_COMPENSATION); + if (pinda_temp_compensation == EEPROM_EMPTY_VALUE) + pinda_temp_compensation = 1; + else + pinda_temp_compensation = !pinda_temp_compensation; + eeprom_update_byte((uint8_t*)EEPROM_PINDA_TEMP_COMPENSATION, pinda_temp_compensation); +} \ No newline at end of file diff --git a/Firmware/ultralcd.h b/Firmware/ultralcd.h index 7c3613328..e45daaa15 100755 --- a/Firmware/ultralcd.h +++ b/Firmware/ultralcd.h @@ -262,4 +262,6 @@ void lcd_wizard(WizState state); extern void lcd_experimental_toggle(); extern void lcd_experimental_menu(); +extern void lcd_pinda_temp_compensation_toggle(); + #endif //ULTRALCD_H diff --git a/Firmware/variants/1_75mm_MK25-RAMBo10a-E3Dv6full.h b/Firmware/variants/1_75mm_MK25-RAMBo10a-E3Dv6full.h index f2ef69e99..19f54b48a 100644 --- a/Firmware/variants/1_75mm_MK25-RAMBo10a-E3Dv6full.h +++ b/Firmware/variants/1_75mm_MK25-RAMBo10a-E3Dv6full.h @@ -175,6 +175,8 @@ #if BED_MINTEMP_DELAY>USHRT_MAX #error "Check maximal allowed value @ ShortTimer (see BED_MINTEMP_DELAY definition)" #endif +#define SUPERPINDA_SUPPORT +#define PINDA_MINTEMP BED_MINTEMP //The miniRAMBo thermistor readings below 30°C aren't very accurate // Maxtemps #if defined(E3D_PT100_EXTRUDER_WITH_AMP) || defined(E3D_PT100_EXTRUDER_NO_AMP) diff --git a/Firmware/variants/1_75mm_MK25-RAMBo13a-E3Dv6full.h b/Firmware/variants/1_75mm_MK25-RAMBo13a-E3Dv6full.h index 7eaba3d6c..42f604541 100644 --- a/Firmware/variants/1_75mm_MK25-RAMBo13a-E3Dv6full.h +++ b/Firmware/variants/1_75mm_MK25-RAMBo13a-E3Dv6full.h @@ -176,6 +176,8 @@ #if BED_MINTEMP_DELAY>USHRT_MAX #error "Check maximal allowed value @ ShortTimer (see BED_MINTEMP_DELAY definition)" #endif +#define SUPERPINDA_SUPPORT +#define PINDA_MINTEMP BED_MINTEMP //The miniRAMBo thermistor readings below 30°C aren't very accurate // Maxtemps #if defined(E3D_PT100_EXTRUDER_WITH_AMP) || defined(E3D_PT100_EXTRUDER_NO_AMP) diff --git a/Firmware/variants/1_75mm_MK25S-RAMBo10a-E3Dv6full.h b/Firmware/variants/1_75mm_MK25S-RAMBo10a-E3Dv6full.h index ee245bd4b..2e5fc6381 100644 --- a/Firmware/variants/1_75mm_MK25S-RAMBo10a-E3Dv6full.h +++ b/Firmware/variants/1_75mm_MK25S-RAMBo10a-E3Dv6full.h @@ -175,6 +175,8 @@ #if BED_MINTEMP_DELAY>USHRT_MAX #error "Check maximal allowed value @ ShortTimer (see BED_MINTEMP_DELAY definition)" #endif +#define SUPERPINDA_SUPPORT +#define PINDA_MINTEMP BED_MINTEMP //The miniRAMBo thermistor readings below 30°C aren't very accurate // Maxtemps #if defined(E3D_PT100_EXTRUDER_WITH_AMP) || defined(E3D_PT100_EXTRUDER_NO_AMP) diff --git a/Firmware/variants/1_75mm_MK25S-RAMBo13a-E3Dv6full.h b/Firmware/variants/1_75mm_MK25S-RAMBo13a-E3Dv6full.h index 6bf30f192..55b899a4a 100644 --- a/Firmware/variants/1_75mm_MK25S-RAMBo13a-E3Dv6full.h +++ b/Firmware/variants/1_75mm_MK25S-RAMBo13a-E3Dv6full.h @@ -176,6 +176,8 @@ #if BED_MINTEMP_DELAY>USHRT_MAX #error "Check maximal allowed value @ ShortTimer (see BED_MINTEMP_DELAY definition)" #endif +#define SUPERPINDA_SUPPORT +#define PINDA_MINTEMP BED_MINTEMP //The miniRAMBo thermistor readings below 30°C aren't very accurate // Maxtemps #if defined(E3D_PT100_EXTRUDER_WITH_AMP) || defined(E3D_PT100_EXTRUDER_NO_AMP) diff --git a/Firmware/variants/1_75mm_MK3-EINSy10a-E3Dv6full.h b/Firmware/variants/1_75mm_MK3-EINSy10a-E3Dv6full.h index 04b4c5266..4f8bacf24 100644 --- a/Firmware/variants/1_75mm_MK3-EINSy10a-E3Dv6full.h +++ b/Firmware/variants/1_75mm_MK3-EINSy10a-E3Dv6full.h @@ -294,7 +294,7 @@ #if BED_MINTEMP_DELAY>USHRT_MAX #error "Check maximal allowed value @ ShortTimer (see BED_MINTEMP_DELAY definition)" #endif -#define DETECT_SUPERPINDA +#define SUPERPINDA_SUPPORT #define PINDA_MINTEMP BED_MINTEMP #define AMBIENT_MINTEMP -30 diff --git a/Firmware/variants/1_75mm_MK3S-EINSy10a-E3Dv6full.h b/Firmware/variants/1_75mm_MK3S-EINSy10a-E3Dv6full.h index c869ec517..f4a53be12 100644 --- a/Firmware/variants/1_75mm_MK3S-EINSy10a-E3Dv6full.h +++ b/Firmware/variants/1_75mm_MK3S-EINSy10a-E3Dv6full.h @@ -296,7 +296,7 @@ #if BED_MINTEMP_DELAY>USHRT_MAX #error "Check maximal allowed value @ ShortTimer (see BED_MINTEMP_DELAY definition)" #endif -#define DETECT_SUPERPINDA +#define SUPERPINDA_SUPPORT #define PINDA_MINTEMP BED_MINTEMP #define AMBIENT_MINTEMP -30 From 732b6e0cad10fe2d05fe642078bce3406dd2e40e Mon Sep 17 00:00:00 2001 From: 3d-gussner <3d.gussner@gmail.com> Date: Mon, 7 Dec 2020 15:44:49 +0100 Subject: [PATCH 2/6] Cleanup --- Firmware/temperature.cpp | 5 +---- Firmware/ultralcd.cpp | 4 +++- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/Firmware/temperature.cpp b/Firmware/temperature.cpp index a7ff4dff3..dbd5fd9d3 100755 --- a/Firmware/temperature.cpp +++ b/Firmware/temperature.cpp @@ -2325,7 +2325,7 @@ float unscalePID_d(float d) //! //! @retval true firmware should do temperature compensation and allow calibration //! @retval false PINDA thermistor is not detected, disable temperature compensation and calibration -//! @retval true/false when overwritten in LCD menu Settings->HW Setup->SuperPINDA +//! @retval true/false when forced via LCD menu Settings->HW Setup->SuperPINDA //! bool has_temperature_compensation() { @@ -2333,9 +2333,6 @@ bool has_temperature_compensation() uint8_t pinda_temp_compensation = eeprom_read_byte((uint8_t*)EEPROM_PINDA_TEMP_COMPENSATION); if (pinda_temp_compensation == EEPROM_EMPTY_VALUE) //Unkown PINDA temp compenstation, so check it. { - //SERIAL_ECHOLNPGM("Current PINDATEMP:"); - //SERIAL_ECHO(current_temperature_pinda); - //SERIAL_ECHOLN(PINDA_MINTEMP); return (current_temperature_pinda >= PINDA_MINTEMP) ? true : false; } else if (pinda_temp_compensation == 0) return true; //Overwritten via LCD menu SuperPINDA [No] diff --git a/Firmware/ultralcd.cpp b/Firmware/ultralcd.cpp index e20180b6d..d721e0442 100755 --- a/Firmware/ultralcd.cpp +++ b/Firmware/ultralcd.cpp @@ -9253,4 +9253,6 @@ void lcd_pinda_temp_compensation_toggle() else pinda_temp_compensation = !pinda_temp_compensation; eeprom_update_byte((uint8_t*)EEPROM_PINDA_TEMP_COMPENSATION, pinda_temp_compensation); -} \ No newline at end of file + SERIAL_ECHOLNPGM("LCD U SuperPINDA:"); + SERIAL_ECHOLN(pinda_temp_compensation); +} From a97587f373eda83e862a70e14f85a2ae3a7b6baf Mon Sep 17 00:00:00 2001 From: 3d-gussner <3d.gussner@gmail.com> Date: Tue, 8 Dec 2020 17:27:00 +0100 Subject: [PATCH 3/6] Changed PINDA_MINTEMP having own value Prevent bad readings/issues if someone changes the bed thermistor that is "better" with lower min values and creates a custom firmware. The firmware will now be in the range of the PINDAv2 thermistor independant from the bed thermistor (which may change and need adjustments) --- Firmware/variants/1_75mm_MK25-RAMBo10a-E3Dv6full.h | 2 +- Firmware/variants/1_75mm_MK25-RAMBo13a-E3Dv6full.h | 2 +- Firmware/variants/1_75mm_MK25S-RAMBo10a-E3Dv6full.h | 2 +- Firmware/variants/1_75mm_MK25S-RAMBo13a-E3Dv6full.h | 2 +- Firmware/variants/1_75mm_MK3-EINSy10a-E3Dv6full.h | 2 +- Firmware/variants/1_75mm_MK3S-EINSy10a-E3Dv6full.h | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-) diff --git a/Firmware/variants/1_75mm_MK25-RAMBo10a-E3Dv6full.h b/Firmware/variants/1_75mm_MK25-RAMBo10a-E3Dv6full.h index 19f54b48a..fedb1c047 100644 --- a/Firmware/variants/1_75mm_MK25-RAMBo10a-E3Dv6full.h +++ b/Firmware/variants/1_75mm_MK25-RAMBo10a-E3Dv6full.h @@ -176,7 +176,7 @@ #error "Check maximal allowed value @ ShortTimer (see BED_MINTEMP_DELAY definition)" #endif #define SUPERPINDA_SUPPORT -#define PINDA_MINTEMP BED_MINTEMP //The miniRAMBo thermistor readings below 30°C aren't very accurate +#define PINDA_MINTEMP 30 //The miniRAMBo thermistor readings below 30°C aren't very accurate // Maxtemps #if defined(E3D_PT100_EXTRUDER_WITH_AMP) || defined(E3D_PT100_EXTRUDER_NO_AMP) diff --git a/Firmware/variants/1_75mm_MK25-RAMBo13a-E3Dv6full.h b/Firmware/variants/1_75mm_MK25-RAMBo13a-E3Dv6full.h index 42f604541..314aaf6ec 100644 --- a/Firmware/variants/1_75mm_MK25-RAMBo13a-E3Dv6full.h +++ b/Firmware/variants/1_75mm_MK25-RAMBo13a-E3Dv6full.h @@ -177,7 +177,7 @@ #error "Check maximal allowed value @ ShortTimer (see BED_MINTEMP_DELAY definition)" #endif #define SUPERPINDA_SUPPORT -#define PINDA_MINTEMP BED_MINTEMP //The miniRAMBo thermistor readings below 30°C aren't very accurate +#define PINDA_MINTEMP 30 //The miniRAMBo thermistor readings below 30°C aren't very accurate // Maxtemps #if defined(E3D_PT100_EXTRUDER_WITH_AMP) || defined(E3D_PT100_EXTRUDER_NO_AMP) diff --git a/Firmware/variants/1_75mm_MK25S-RAMBo10a-E3Dv6full.h b/Firmware/variants/1_75mm_MK25S-RAMBo10a-E3Dv6full.h index 2e5fc6381..ba05843dd 100644 --- a/Firmware/variants/1_75mm_MK25S-RAMBo10a-E3Dv6full.h +++ b/Firmware/variants/1_75mm_MK25S-RAMBo10a-E3Dv6full.h @@ -176,7 +176,7 @@ #error "Check maximal allowed value @ ShortTimer (see BED_MINTEMP_DELAY definition)" #endif #define SUPERPINDA_SUPPORT -#define PINDA_MINTEMP BED_MINTEMP //The miniRAMBo thermistor readings below 30°C aren't very accurate +#define PINDA_MINTEMP 30 //The miniRAMBo thermistor readings below 30°C aren't very accurate // Maxtemps #if defined(E3D_PT100_EXTRUDER_WITH_AMP) || defined(E3D_PT100_EXTRUDER_NO_AMP) diff --git a/Firmware/variants/1_75mm_MK25S-RAMBo13a-E3Dv6full.h b/Firmware/variants/1_75mm_MK25S-RAMBo13a-E3Dv6full.h index 55b899a4a..857acbab9 100644 --- a/Firmware/variants/1_75mm_MK25S-RAMBo13a-E3Dv6full.h +++ b/Firmware/variants/1_75mm_MK25S-RAMBo13a-E3Dv6full.h @@ -177,7 +177,7 @@ #error "Check maximal allowed value @ ShortTimer (see BED_MINTEMP_DELAY definition)" #endif #define SUPERPINDA_SUPPORT -#define PINDA_MINTEMP BED_MINTEMP //The miniRAMBo thermistor readings below 30°C aren't very accurate +#define PINDA_MINTEMP 30 //The miniRAMBo thermistor readings below 30°C aren't very accurate // Maxtemps #if defined(E3D_PT100_EXTRUDER_WITH_AMP) || defined(E3D_PT100_EXTRUDER_NO_AMP) diff --git a/Firmware/variants/1_75mm_MK3-EINSy10a-E3Dv6full.h b/Firmware/variants/1_75mm_MK3-EINSy10a-E3Dv6full.h index 4f8bacf24..f2b302aef 100644 --- a/Firmware/variants/1_75mm_MK3-EINSy10a-E3Dv6full.h +++ b/Firmware/variants/1_75mm_MK3-EINSy10a-E3Dv6full.h @@ -295,7 +295,7 @@ #error "Check maximal allowed value @ ShortTimer (see BED_MINTEMP_DELAY definition)" #endif #define SUPERPINDA_SUPPORT -#define PINDA_MINTEMP BED_MINTEMP +#define PINDA_MINTEMP 10 #define AMBIENT_MINTEMP -30 // Maxtemps diff --git a/Firmware/variants/1_75mm_MK3S-EINSy10a-E3Dv6full.h b/Firmware/variants/1_75mm_MK3S-EINSy10a-E3Dv6full.h index f4a53be12..668f30002 100644 --- a/Firmware/variants/1_75mm_MK3S-EINSy10a-E3Dv6full.h +++ b/Firmware/variants/1_75mm_MK3S-EINSy10a-E3Dv6full.h @@ -297,7 +297,7 @@ #error "Check maximal allowed value @ ShortTimer (see BED_MINTEMP_DELAY definition)" #endif #define SUPERPINDA_SUPPORT -#define PINDA_MINTEMP BED_MINTEMP +#define PINDA_MINTEMP 10 #define AMBIENT_MINTEMP -30 // Maxtemps From 4b510fef0aec47b9eb5cae97bd5a16a117201b0e Mon Sep 17 00:00:00 2001 From: 3d-gussner <3d.gussner@gmail.com> Date: Tue, 8 Dec 2020 17:50:04 +0100 Subject: [PATCH 4/6] Add PINDA_TEMP_COMP variable to enable SuperPINDA toggle menu/function --- Firmware/temperature.cpp | 4 ++++ Firmware/ultralcd.cpp | 8 +++++--- Firmware/ultralcd.h | 2 ++ Firmware/variants/1_75mm_MK25-RAMBo10a-E3Dv6full.h | 1 + Firmware/variants/1_75mm_MK25-RAMBo13a-E3Dv6full.h | 1 + Firmware/variants/1_75mm_MK25S-RAMBo10a-E3Dv6full.h | 1 + Firmware/variants/1_75mm_MK25S-RAMBo13a-E3Dv6full.h | 1 + Firmware/variants/1_75mm_MK3-EINSy10a-E3Dv6full.h | 1 + Firmware/variants/1_75mm_MK3S-EINSy10a-E3Dv6full.h | 1 + 9 files changed, 17 insertions(+), 3 deletions(-) diff --git a/Firmware/temperature.cpp b/Firmware/temperature.cpp index dbd5fd9d3..d429bb88b 100755 --- a/Firmware/temperature.cpp +++ b/Firmware/temperature.cpp @@ -2330,13 +2330,17 @@ float unscalePID_d(float d) bool has_temperature_compensation() { #ifdef SUPERPINDA_SUPPORT +#ifdef PINDA_TEMP_COMP uint8_t pinda_temp_compensation = eeprom_read_byte((uint8_t*)EEPROM_PINDA_TEMP_COMPENSATION); if (pinda_temp_compensation == EEPROM_EMPTY_VALUE) //Unkown PINDA temp compenstation, so check it. { +#endif //PINDA_TEMP_COMP return (current_temperature_pinda >= PINDA_MINTEMP) ? true : false; +#ifdef PINDA_TEMP_COMP } else if (pinda_temp_compensation == 0) return true; //Overwritten via LCD menu SuperPINDA [No] else return false; //Overwritten via LCD menu SuperPINDA [YES] +#endif //PINDA_TEMP_COMP #else return true; #endif diff --git a/Firmware/ultralcd.cpp b/Firmware/ultralcd.cpp index d721e0442..7dca76bef 100755 --- a/Firmware/ultralcd.cpp +++ b/Firmware/ultralcd.cpp @@ -5753,14 +5753,14 @@ void lcd_hw_setup_menu(void) // can not be "static" MENU_ITEM_SUBMENU_P(PSTR("Experimental"), lcd_experimental_menu);////MSG_MENU_EXPERIMENTAL c=18 } -#ifdef SUPERPINDA_SUPPORT +#ifdef PINDA_TEMP_COMP //! The SuperPINDA is detected when the PINDA temp is below its defined limit. //! This works well on the EINSY board but not on the miniRAMBo board as //! as a disconnected SuperPINDA will show higher temps compared to an EINSY board. //! //! This menu allows the user to en-/disable the SuperPINDA manualy MENU_ITEM_TOGGLE_P(_N("SuperPINDA"), eeprom_read_byte((unsigned char *)EEPROM_PINDA_TEMP_COMPENSATION) ? _T(MSG_YES) : _T(MSG_NO), lcd_pinda_temp_compensation_toggle); -#endif //SUPERPINDA_SUPPORT +#endif //PINDA_TEMP_COMP MENU_END(); } @@ -9245,6 +9245,7 @@ void lcd_experimental_menu() MENU_END(); } +#ifdef PINDA_TEMP_COMP void lcd_pinda_temp_compensation_toggle() { uint8_t pinda_temp_compensation = eeprom_read_byte((uint8_t*)EEPROM_PINDA_TEMP_COMPENSATION); @@ -9253,6 +9254,7 @@ void lcd_pinda_temp_compensation_toggle() else pinda_temp_compensation = !pinda_temp_compensation; eeprom_update_byte((uint8_t*)EEPROM_PINDA_TEMP_COMPENSATION, pinda_temp_compensation); - SERIAL_ECHOLNPGM("LCD U SuperPINDA:"); + SERIAL_ECHOLNPGM("SuperPINDA:"); SERIAL_ECHOLN(pinda_temp_compensation); } +#endif //PINDA_TEMP_COMP diff --git a/Firmware/ultralcd.h b/Firmware/ultralcd.h index e45daaa15..cca4eced3 100755 --- a/Firmware/ultralcd.h +++ b/Firmware/ultralcd.h @@ -262,6 +262,8 @@ void lcd_wizard(WizState state); extern void lcd_experimental_toggle(); extern void lcd_experimental_menu(); +#ifdef PINDA_TEMP_COMP extern void lcd_pinda_temp_compensation_toggle(); +#endif //PINDA_TEMP_COMP #endif //ULTRALCD_H diff --git a/Firmware/variants/1_75mm_MK25-RAMBo10a-E3Dv6full.h b/Firmware/variants/1_75mm_MK25-RAMBo10a-E3Dv6full.h index fedb1c047..1e77dce81 100644 --- a/Firmware/variants/1_75mm_MK25-RAMBo10a-E3Dv6full.h +++ b/Firmware/variants/1_75mm_MK25-RAMBo10a-E3Dv6full.h @@ -177,6 +177,7 @@ #endif #define SUPERPINDA_SUPPORT #define PINDA_MINTEMP 30 //The miniRAMBo thermistor readings below 30°C aren't very accurate +#define PINDA_TEMP_COMP //Used to enable SuperPINDA toggle menu/function // Maxtemps #if defined(E3D_PT100_EXTRUDER_WITH_AMP) || defined(E3D_PT100_EXTRUDER_NO_AMP) diff --git a/Firmware/variants/1_75mm_MK25-RAMBo13a-E3Dv6full.h b/Firmware/variants/1_75mm_MK25-RAMBo13a-E3Dv6full.h index 314aaf6ec..2d4d73c24 100644 --- a/Firmware/variants/1_75mm_MK25-RAMBo13a-E3Dv6full.h +++ b/Firmware/variants/1_75mm_MK25-RAMBo13a-E3Dv6full.h @@ -178,6 +178,7 @@ #endif #define SUPERPINDA_SUPPORT #define PINDA_MINTEMP 30 //The miniRAMBo thermistor readings below 30°C aren't very accurate +#define PINDA_TEMP_COMP //Used to enable SuperPINDA toggle menu/function // Maxtemps #if defined(E3D_PT100_EXTRUDER_WITH_AMP) || defined(E3D_PT100_EXTRUDER_NO_AMP) diff --git a/Firmware/variants/1_75mm_MK25S-RAMBo10a-E3Dv6full.h b/Firmware/variants/1_75mm_MK25S-RAMBo10a-E3Dv6full.h index ba05843dd..4670d2188 100644 --- a/Firmware/variants/1_75mm_MK25S-RAMBo10a-E3Dv6full.h +++ b/Firmware/variants/1_75mm_MK25S-RAMBo10a-E3Dv6full.h @@ -177,6 +177,7 @@ #endif #define SUPERPINDA_SUPPORT #define PINDA_MINTEMP 30 //The miniRAMBo thermistor readings below 30°C aren't very accurate +#define PINDA_TEMP_COMP //Used to enable SuperPINDA toggle menu/function // Maxtemps #if defined(E3D_PT100_EXTRUDER_WITH_AMP) || defined(E3D_PT100_EXTRUDER_NO_AMP) diff --git a/Firmware/variants/1_75mm_MK25S-RAMBo13a-E3Dv6full.h b/Firmware/variants/1_75mm_MK25S-RAMBo13a-E3Dv6full.h index 857acbab9..22af43416 100644 --- a/Firmware/variants/1_75mm_MK25S-RAMBo13a-E3Dv6full.h +++ b/Firmware/variants/1_75mm_MK25S-RAMBo13a-E3Dv6full.h @@ -178,6 +178,7 @@ #endif #define SUPERPINDA_SUPPORT #define PINDA_MINTEMP 30 //The miniRAMBo thermistor readings below 30°C aren't very accurate +#define PINDA_TEMP_COMP //Used to enable SuperPINDA toggle menu/function // Maxtemps #if defined(E3D_PT100_EXTRUDER_WITH_AMP) || defined(E3D_PT100_EXTRUDER_NO_AMP) diff --git a/Firmware/variants/1_75mm_MK3-EINSy10a-E3Dv6full.h b/Firmware/variants/1_75mm_MK3-EINSy10a-E3Dv6full.h index f2b302aef..b7c5d54cd 100644 --- a/Firmware/variants/1_75mm_MK3-EINSy10a-E3Dv6full.h +++ b/Firmware/variants/1_75mm_MK3-EINSy10a-E3Dv6full.h @@ -297,6 +297,7 @@ #define SUPERPINDA_SUPPORT #define PINDA_MINTEMP 10 #define AMBIENT_MINTEMP -30 +//#define PINDA_TEMP_COMP //Used to enable SuperPINDA toggle menu/function // Maxtemps #if defined(E3D_PT100_EXTRUDER_WITH_AMP) || defined(E3D_PT100_EXTRUDER_NO_AMP) diff --git a/Firmware/variants/1_75mm_MK3S-EINSy10a-E3Dv6full.h b/Firmware/variants/1_75mm_MK3S-EINSy10a-E3Dv6full.h index 668f30002..b278ab00e 100644 --- a/Firmware/variants/1_75mm_MK3S-EINSy10a-E3Dv6full.h +++ b/Firmware/variants/1_75mm_MK3S-EINSy10a-E3Dv6full.h @@ -299,6 +299,7 @@ #define SUPERPINDA_SUPPORT #define PINDA_MINTEMP 10 #define AMBIENT_MINTEMP -30 +//#define PINDA_TEMP_COMP //Used to enable SuperPINDA toggle menu/function // Maxtemps #if defined(E3D_PT100_EXTRUDER_WITH_AMP) || defined(E3D_PT100_EXTRUDER_NO_AMP) From 76eb7431392aa509ec9668509dc2f209c7697914 Mon Sep 17 00:00:00 2001 From: 3d-gussner <3d.gussner@gmail.com> Date: Tue, 8 Dec 2020 18:39:54 +0100 Subject: [PATCH 5/6] Set default SuperPINDA toggle on MK2.5/S to NO --- Firmware/eeprom.cpp | 4 ++++ Firmware/ultralcd.cpp | 6 +++--- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/Firmware/eeprom.cpp b/Firmware/eeprom.cpp index 93098e93b..4f519cae5 100644 --- a/Firmware/eeprom.cpp +++ b/Firmware/eeprom.cpp @@ -93,6 +93,10 @@ void eeprom_init() eeprom_switch_to_next_sheet(); } check_babystep(); + +#ifdef PINDA_TEMP_COMP +if (eeprom_read_byte((uint8_t*)EEPROM_PINDA_TEMP_COMPENSATION) == 0xff) eeprom_update_byte((uint8_t *)EEPROM_PINDA_TEMP_COMPENSATION, 0); +#endif //PINDA_TEMP_COMP } //! @brief Get default sheet name for index diff --git a/Firmware/ultralcd.cpp b/Firmware/ultralcd.cpp index 7dca76bef..27466d0d1 100755 --- a/Firmware/ultralcd.cpp +++ b/Firmware/ultralcd.cpp @@ -5759,7 +5759,7 @@ void lcd_hw_setup_menu(void) // can not be "static" //! as a disconnected SuperPINDA will show higher temps compared to an EINSY board. //! //! This menu allows the user to en-/disable the SuperPINDA manualy - MENU_ITEM_TOGGLE_P(_N("SuperPINDA"), eeprom_read_byte((unsigned char *)EEPROM_PINDA_TEMP_COMPENSATION) ? _T(MSG_YES) : _T(MSG_NO), lcd_pinda_temp_compensation_toggle); + MENU_ITEM_TOGGLE_P(_N("SuperPINDA"), eeprom_read_byte((uint8_t *)EEPROM_PINDA_TEMP_COMPENSATION) ? _T(MSG_YES) : _T(MSG_NO), lcd_pinda_temp_compensation_toggle); #endif //PINDA_TEMP_COMP MENU_END(); @@ -9249,8 +9249,8 @@ void lcd_experimental_menu() void lcd_pinda_temp_compensation_toggle() { uint8_t pinda_temp_compensation = eeprom_read_byte((uint8_t*)EEPROM_PINDA_TEMP_COMPENSATION); - if (pinda_temp_compensation == EEPROM_EMPTY_VALUE) - pinda_temp_compensation = 1; + if (pinda_temp_compensation == EEPROM_EMPTY_VALUE) // On MK2.5/S the EEPROM_EMPTY_VALUE will be set to 0 during eeprom_init. + pinda_temp_compensation = 1; // But for MK3/S it should be 1 so SuperPINDA is "active" else pinda_temp_compensation = !pinda_temp_compensation; eeprom_update_byte((uint8_t*)EEPROM_PINDA_TEMP_COMPENSATION, pinda_temp_compensation); From 12f41022720a84b2ef6d5286669f4b6e42503fd3 Mon Sep 17 00:00:00 2001 From: 3d-gussner <3d.gussner@gmail.com> Date: Tue, 8 Dec 2020 18:45:34 +0100 Subject: [PATCH 6/6] Group PINDA defines --- Firmware/variants/1_75mm_MK3-EINSy10a-E3Dv6full.h | 2 +- Firmware/variants/1_75mm_MK3S-EINSy10a-E3Dv6full.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Firmware/variants/1_75mm_MK3-EINSy10a-E3Dv6full.h b/Firmware/variants/1_75mm_MK3-EINSy10a-E3Dv6full.h index b7c5d54cd..7bd7be43e 100644 --- a/Firmware/variants/1_75mm_MK3-EINSy10a-E3Dv6full.h +++ b/Firmware/variants/1_75mm_MK3-EINSy10a-E3Dv6full.h @@ -296,8 +296,8 @@ #endif #define SUPERPINDA_SUPPORT #define PINDA_MINTEMP 10 -#define AMBIENT_MINTEMP -30 //#define PINDA_TEMP_COMP //Used to enable SuperPINDA toggle menu/function +#define AMBIENT_MINTEMP -30 // Maxtemps #if defined(E3D_PT100_EXTRUDER_WITH_AMP) || defined(E3D_PT100_EXTRUDER_NO_AMP) diff --git a/Firmware/variants/1_75mm_MK3S-EINSy10a-E3Dv6full.h b/Firmware/variants/1_75mm_MK3S-EINSy10a-E3Dv6full.h index b278ab00e..3056c4366 100644 --- a/Firmware/variants/1_75mm_MK3S-EINSy10a-E3Dv6full.h +++ b/Firmware/variants/1_75mm_MK3S-EINSy10a-E3Dv6full.h @@ -298,8 +298,8 @@ #endif #define SUPERPINDA_SUPPORT #define PINDA_MINTEMP 10 -#define AMBIENT_MINTEMP -30 //#define PINDA_TEMP_COMP //Used to enable SuperPINDA toggle menu/function +#define AMBIENT_MINTEMP -30 // Maxtemps #if defined(E3D_PT100_EXTRUDER_WITH_AMP) || defined(E3D_PT100_EXTRUDER_NO_AMP)