From 5090c56651bf18ea45a7453f5fccfe6a09d13062 Mon Sep 17 00:00:00 2001 From: Erik van der Zalm Date: Wed, 29 May 2013 19:29:30 +0200 Subject: [PATCH] More redundant temp sensor changes. (After testing and debugging by reifsnderb) --- Marlin/Configuration.h | 4 +- Marlin/Configuration_adv.h | 6 +- Marlin/Marlin_main.cpp | 4 +- Marlin/pins.h | 327 +++++++++++++++++++------------------ Marlin/temperature.cpp | 30 ++-- 5 files changed, 196 insertions(+), 175 deletions(-) diff --git a/Marlin/Configuration.h b/Marlin/Configuration.h index 9b2979eab..319a07942 100644 --- a/Marlin/Configuration.h +++ b/Marlin/Configuration.h @@ -93,8 +93,8 @@ #define TEMP_SENSOR_BED 0 // This makes temp sensor 1 a redundant sensor for sensor 0. If the temperatures difference between these sensors is to high the print will be aborted. -#define TEMP_SENSOR_1_AS_REDUNDANT -#define MAX_REDUNDANT_TEMP_SENSOR_DIFF 5 +//#define TEMP_SENSOR_1_AS_REDUNDANT +#define MAX_REDUNDANT_TEMP_SENSOR_DIFF 10 // Actual temperature must be close to target for this long before M109 returns success #define TEMP_RESIDENCY_TIME 10 // (seconds) diff --git a/Marlin/Configuration_adv.h b/Marlin/Configuration_adv.h index dbfa69989..fea219fc7 100644 --- a/Marlin/Configuration_adv.h +++ b/Marlin/Configuration_adv.h @@ -318,6 +318,9 @@ const unsigned int dropsegments=5; //everything with less than this number of st //=========================================================================== //============================= Define Defines ============================ //=========================================================================== +#if EXTRUDERS > 1 && defined TEMP_SENSOR_1_AS_REDUNDANT + #error "You cannot use TEMP_SENSOR_1_AS_REDUNDANT if EXTRUDERS > 1" +#endif #if TEMP_SENSOR_0 > 0 #define THERMISTORHEATER_0 TEMP_SENSOR_0 @@ -367,8 +370,5 @@ const unsigned int dropsegments=5; //everything with less than this number of st #undef BED_MAXTEMP #endif -#if EXTRUDERS > 1 && defined TEMP_SENSOR_1_AS_REDUNDANT - #error "You cannot use TEMP_SENSOR_1_AS_REDUNDANT if EXTRUDERS > 1" -#endif #endif //__CONFIGURATION_ADV_H diff --git a/Marlin/Marlin_main.cpp b/Marlin/Marlin_main.cpp index 47202aff8..3a38d2e36 100644 --- a/Marlin/Marlin_main.cpp +++ b/Marlin/Marlin_main.cpp @@ -1055,7 +1055,7 @@ void process_commands() case 105 : // M105 if(setTargetedHotend(105)){ break; - } + } #if defined(TEMP_0_PIN) && TEMP_0_PIN > -1 SERIAL_PROTOCOLPGM("ok T:"); SERIAL_PROTOCOL_F(degHotend(tmp_extruder),1); @@ -2278,4 +2278,4 @@ bool setTargetedHotend(int code){ } } return false; -} +} diff --git a/Marlin/pins.h b/Marlin/pins.h index 1511a4cdd..03dbc9650 100644 --- a/Marlin/pins.h +++ b/Marlin/pins.h @@ -313,189 +313,200 @@ #if MOTHERBOARD == 33 || MOTHERBOARD == 34 -#define LARGE_FLASH true + #define LARGE_FLASH true + + #define X_STEP_PIN 54 + #define X_DIR_PIN 55 + #define X_ENABLE_PIN 38 + #define X_MIN_PIN 3 + #define X_MAX_PIN 2 + + #define Y_STEP_PIN 60 + #define Y_DIR_PIN 61 + #define Y_ENABLE_PIN 56 + #define Y_MIN_PIN 14 + #define Y_MAX_PIN 15 + + #define Z_STEP_PIN 46 + #define Z_DIR_PIN 48 + #define Z_ENABLE_PIN 62 + #define Z_MIN_PIN 18 + #define Z_MAX_PIN 19 + + #define Z2_STEP_PIN 36 + #define Z2_DIR_PIN 34 + #define Z2_ENABLE_PIN 30 + + #define E0_STEP_PIN 26 + #define E0_DIR_PIN 28 + #define E0_ENABLE_PIN 24 + + #define E1_STEP_PIN 36 + #define E1_DIR_PIN 34 + #define E1_ENABLE_PIN 30 + + #define SDPOWER -1 + #define SDSS 53 + #define LED_PIN 13 + + #if MOTHERBOARD == 33 + #define FAN_PIN 9 // (Sprinter config) + #else + #define FAN_PIN 4 // IO pin. Buffer needed + #endif -#define X_STEP_PIN 54 -#define X_DIR_PIN 55 -#define X_ENABLE_PIN 38 -#define X_MIN_PIN 3 -#define X_MAX_PIN 2 + #define PS_ON_PIN 12 -#define Y_STEP_PIN 60 -#define Y_DIR_PIN 61 -#define Y_ENABLE_PIN 56 -#define Y_MIN_PIN 14 -#define Y_MAX_PIN 15 + #if defined(REPRAP_DISCOUNT_SMART_CONTROLLER) || defined(G3D_PANEL) + #define KILL_PIN 41 + #else + #define KILL_PIN -1 + #endif -#define Z_STEP_PIN 46 -#define Z_DIR_PIN 48 -#define Z_ENABLE_PIN 62 -#define Z_MIN_PIN 18 -#define Z_MAX_PIN 19 + #define HEATER_0_PIN 10 // EXTRUDER 1 -#define Z2_STEP_PIN 36 -#define Z2_DIR_PIN 34 -#define Z2_ENABLE_PIN 30 + #if MOTHERBOARD == 33 + #define HEATER_1_PIN -1 + #else + #define HEATER_1_PIN 9 // EXTRUDER 2 (FAN On Sprinter) + #endif -#define E0_STEP_PIN 26 -#define E0_DIR_PIN 28 -#define E0_ENABLE_PIN 24 + #define HEATER_2_PIN -1 + #define TEMP_0_PIN 13 // ANALOG NUMBERING + #define TEMP_1_PIN 15 // ANALOG NUMBERING + #define TEMP_2_PIN -1 // ANALOG NUMBERING + #define HEATER_BED_PIN 8 // BED + #define TEMP_BED_PIN 14 // ANALOG NUMBERING -#define E1_STEP_PIN 36 -#define E1_DIR_PIN 34 -#define E1_ENABLE_PIN 30 -#define SDPOWER -1 -#define SDSS 53 -#define LED_PIN 13 -#if MOTHERBOARD == 33 -#define FAN_PIN 9 // (Sprinter config) -#else -#define FAN_PIN 4 // IO pin. Buffer needed -#endif -#define PS_ON_PIN 12 + #ifdef NUM_SERVOS + #define SERVO0_PIN 11 -#if defined(REPRAP_DISCOUNT_SMART_CONTROLLER) || defined(G3D_PANEL) -#define KILL_PIN 41 -#else -#define KILL_PIN -1 -#endif + #if NUM_SERVOS > 1 + #define SERVO1_PIN 6 + #endif -#define HEATER_0_PIN 10 // EXTRUDER 1 -#if MOTHERBOARD == 33 -#define HEATER_1_PIN -1 -#else -#define HEATER_1_PIN 9 // EXTRUDER 2 (FAN On Sprinter) -#endif -#define HEATER_2_PIN -1 -#define TEMP_0_PIN 13 // ANALOG NUMBERING -#define TEMP_1_PIN 15 // ANALOG NUMBERING -#define TEMP_2_PIN -1 // ANALOG NUMBERING -#define HEATER_BED_PIN 8 // BED -#define TEMP_BED_PIN 14 // ANALOG NUMBERING + #if NUM_SERVOS > 2 + #define SERVO2_PIN 5 + #endif -#ifdef NUM_SERVOS - #define SERVO0_PIN 11 - #if NUM_SERVOS > 1 - #define SERVO1_PIN 6 - #endif - #if NUM_SERVOS > 2 - #define SERVO2_PIN 5 - #endif - #if NUM_SERVOS > 2 - #define SERVO3_PIN 4 + #if NUM_SERVOS > 2 + #define SERVO3_PIN 4 + #endif #endif -#endif -#ifdef ULTRA_LCD + #ifdef ULTRA_LCD - #ifdef NEWPANEL - #define LCD_PINS_RS 16 - #define LCD_PINS_ENABLE 17 - #define LCD_PINS_D4 23 - #define LCD_PINS_D5 25 - #define LCD_PINS_D6 27 - #define LCD_PINS_D7 29 - - #ifdef REPRAP_DISCOUNT_SMART_CONTROLLER - #define BEEPER 37 + #ifdef NEWPANEL + #define LCD_PINS_RS 16 + #define LCD_PINS_ENABLE 17 + #define LCD_PINS_D4 23 + #define LCD_PINS_D5 25 + #define LCD_PINS_D6 27 + #define LCD_PINS_D7 29 - #define BTN_EN1 31 - #define BTN_EN2 33 - #define BTN_ENC 35 + #ifdef REPRAP_DISCOUNT_SMART_CONTROLLER + #define BEEPER 37 - #define SDCARDDETECT 49 - #else - //arduino pin which triggers an piezzo beeper - #define BEEPER 33 // Beeper on AUX-4 - - //buttons are directly attached using AUX-2 - #ifdef REPRAPWORLD_KEYPAD - #define BTN_EN1 64 // encoder - #define BTN_EN2 59 // encoder - #define BTN_ENC 63 // enter button - #define SHIFT_OUT 40 // shift register - #define SHIFT_CLK 44 // shift register - #define SHIFT_LD 42 // shift register - #else - #define BTN_EN1 37 - #define BTN_EN2 35 - #define BTN_ENC 31 //the click - #endif + #define BTN_EN1 31 + #define BTN_EN2 33 + #define BTN_ENC 35 - #ifdef G3D_PANEL #define SDCARDDETECT 49 #else - #define SDCARDDETECT -1 // Ramps does not use this port + //arduino pin which triggers an piezzo beeper + #define BEEPER 33 // Beeper on AUX-4 + + //buttons are directly attached using AUX-2 + #ifdef REPRAPWORLD_KEYPAD + #define BTN_EN1 64 // encoder + #define BTN_EN2 59 // encoder + #define BTN_ENC 63 // enter button + #define SHIFT_OUT 40 // shift register + #define SHIFT_CLK 44 // shift register + #define SHIFT_LD 42 // shift register + #else + #define BTN_EN1 37 + #define BTN_EN2 35 + #define BTN_ENC 31 //the click + #endif + + #ifdef G3D_PANEL + #define SDCARDDETECT 49 + #else + #define SDCARDDETECT -1 // Ramps does not use this port + #endif + #endif - #endif - #else //old style panel with shift register - //arduino pin witch triggers an piezzo beeper - #define BEEPER 33 // No Beeper added - - //buttons are attached to a shift register - // Not wired this yet - //#define SHIFT_CLK 38 - //#define SHIFT_LD 42 - //#define SHIFT_OUT 40 - //#define SHIFT_EN 17 - - #define LCD_PINS_RS 16 - #define LCD_PINS_ENABLE 17 - #define LCD_PINS_D4 23 - #define LCD_PINS_D5 25 - #define LCD_PINS_D6 27 - #define LCD_PINS_D7 29 - #endif -#endif //ULTRA_LCD + #else //old style panel with shift register + //arduino pin witch triggers an piezzo beeper + #define BEEPER 33 // No Beeper added + + //buttons are attached to a shift register + // Not wired this yet + //#define SHIFT_CLK 38 + //#define SHIFT_LD 42 + //#define SHIFT_OUT 40 + //#define SHIFT_EN 17 + + #define LCD_PINS_RS 16 + #define LCD_PINS_ENABLE 17 + #define LCD_PINS_D4 23 + #define LCD_PINS_D5 25 + #define LCD_PINS_D6 27 + #define LCD_PINS_D7 29 + #endif + #endif //ULTRA_LCD #else // RAMPS_V_1_1 or RAMPS_V_1_2 as default (MOTHERBOARD == 3) -#define X_STEP_PIN 26 -#define X_DIR_PIN 28 -#define X_ENABLE_PIN 24 -#define X_MIN_PIN 3 -#define X_MAX_PIN -1 //2 - -#define Y_STEP_PIN 38 -#define Y_DIR_PIN 40 -#define Y_ENABLE_PIN 36 -#define Y_MIN_PIN 16 -#define Y_MAX_PIN -1 //17 - -#define Z_STEP_PIN 44 -#define Z_DIR_PIN 46 -#define Z_ENABLE_PIN 42 -#define Z_MIN_PIN 18 -#define Z_MAX_PIN -1 //19 + #define X_STEP_PIN 26 + #define X_DIR_PIN 28 + #define X_ENABLE_PIN 24 + #define X_MIN_PIN 3 + #define X_MAX_PIN -1 //2 + + #define Y_STEP_PIN 38 + #define Y_DIR_PIN 40 + #define Y_ENABLE_PIN 36 + #define Y_MIN_PIN 16 + #define Y_MAX_PIN -1 //17 + + #define Z_STEP_PIN 44 + #define Z_DIR_PIN 46 + #define Z_ENABLE_PIN 42 + #define Z_MIN_PIN 18 + #define Z_MAX_PIN -1 //19 + + #define E0_STEP_PIN 32 + #define E0_DIR_PIN 34 + #define E0_ENABLE_PIN 30 + + #define SDPOWER 48 + #define SDSS 53 + #define LED_PIN 13 + #define PS_ON_PIN -1 + #define KILL_PIN -1 + + #ifdef RAMPS_V_1_0 // RAMPS_V_1_0 + #define HEATER_0_PIN 12 // RAMPS 1.0 + #define HEATER_BED_PIN -1 // RAMPS 1.0 + #define FAN_PIN 11 // RAMPS 1.0 + #else // RAMPS_V_1_1 or RAMPS_V_1_2 + #define HEATER_0_PIN 10 // RAMPS 1.1 + #define HEATER_BED_PIN 8 // RAMPS 1.1 + #define FAN_PIN 9 // RAMPS 1.1 + #endif -#define E0_STEP_PIN 32 -#define E0_DIR_PIN 34 -#define E0_ENABLE_PIN 30 + #define HEATER_1_PIN -1 + #define HEATER_2_PIN -1 + #define TEMP_0_PIN 2 // MUST USE ANALOG INPUT NUMBERING NOT DIGITAL OUTPUT NUMBERING!!!!!!!!! + #define TEMP_1_PIN -1 + #define TEMP_2_PIN -1 + #define TEMP_BED_PIN 1 // MUST USE ANALOG INPUT NUMBERING NOT DIGITAL OUTPUT NUMBERING!!!!!!!!! -#define SDPOWER 48 -#define SDSS 53 -#define LED_PIN 13 -#define PS_ON_PIN -1 -#define KILL_PIN -1 - -#ifdef RAMPS_V_1_0 // RAMPS_V_1_0 - #define HEATER_0_PIN 12 // RAMPS 1.0 - #define HEATER_BED_PIN -1 // RAMPS 1.0 - #define FAN_PIN 11 // RAMPS 1.0 -#else // RAMPS_V_1_1 or RAMPS_V_1_2 - #define HEATER_0_PIN 10 // RAMPS 1.1 - #define HEATER_BED_PIN 8 // RAMPS 1.1 - #define FAN_PIN 9 // RAMPS 1.1 -#endif -#define HEATER_1_PIN -1 -#define HEATER_2_PIN -1 -#define TEMP_0_PIN 2 // MUST USE ANALOG INPUT NUMBERING NOT DIGITAL OUTPUT NUMBERING!!!!!!!!! -#define TEMP_1_PIN -1 -#define TEMP_2_PIN -1 -#define TEMP_BED_PIN 1 // MUST USE ANALOG INPUT NUMBERING NOT DIGITAL OUTPUT NUMBERING!!!!!!!!! #endif// MOTHERBOARD == 33 || MOTHERBOARD == 34 // SPI for Max6675 Thermocouple @@ -1618,4 +1629,4 @@ HEATER_BED_PIN, FAN_PIN, \ _E0_PINS _E1_PINS _E2_PINS \ analogInputToDigitalPin(TEMP_0_PIN), analogInputToDigitalPin(TEMP_1_PIN), analogInputToDigitalPin(TEMP_2_PIN), analogInputToDigitalPin(TEMP_BED_PIN) } -#endif +#endif diff --git a/Marlin/temperature.cpp b/Marlin/temperature.cpp index f82770840..b7c39f8d6 100644 --- a/Marlin/temperature.cpp +++ b/Marlin/temperature.cpp @@ -107,15 +107,15 @@ static volatile bool temp_meas_ready = false; (defined(EXTRUDER_2_AUTO_FAN_PIN) && EXTRUDER_2_AUTO_FAN_PIN > -1) static unsigned long extruder_autofan_last_check; #endif - + #if EXTRUDERS > 3 -# error Unsupported number of extruders + # error Unsupported number of extruders #elif EXTRUDERS > 2 -# define ARRAY_BY_EXTRUDERS(v1, v2, v3) { v1, v2, v3 } + # define ARRAY_BY_EXTRUDERS(v1, v2, v3) { v1, v2, v3 } #elif EXTRUDERS > 1 -# define ARRAY_BY_EXTRUDERS(v1, v2, v3) { v1, v2 } + # define ARRAY_BY_EXTRUDERS(v1, v2, v3) { v1, v2 } #else -# define ARRAY_BY_EXTRUDERS(v1, v2, v3) { v1 } + # define ARRAY_BY_EXTRUDERS(v1, v2, v3) { v1 } #endif // Init min and max temp with extreme values to prevent false errors during startup @@ -127,8 +127,14 @@ static int maxttemp[EXTRUDERS] = ARRAY_BY_EXTRUDERS( 16383, 16383, 16383 ); #ifdef BED_MAXTEMP static int bed_maxttemp_raw = HEATER_BED_RAW_HI_TEMP; #endif -static void *heater_ttbl_map[EXTRUDERS] = ARRAY_BY_EXTRUDERS( (void *)HEATER_0_TEMPTABLE, (void *)HEATER_1_TEMPTABLE, (void *)HEATER_2_TEMPTABLE ); -static uint8_t heater_ttbllen_map[EXTRUDERS] = ARRAY_BY_EXTRUDERS( HEATER_0_TEMPTABLE_LEN, HEATER_1_TEMPTABLE_LEN, HEATER_2_TEMPTABLE_LEN ); + +#ifdef TEMP_SENSOR_1_AS_REDUNDANT + static void *heater_ttbl_map[2] = {(void *)HEATER_0_TEMPTABLE, (void *)HEATER_1_TEMPTABLE }; + static uint8_t heater_ttbllen_map[2] = { HEATER_0_TEMPTABLE_LEN, HEATER_1_TEMPTABLE_LEN }; +#else + static void *heater_ttbl_map[EXTRUDERS] = ARRAY_BY_EXTRUDERS( (void *)HEATER_0_TEMPTABLE, (void *)HEATER_1_TEMPTABLE, (void *)HEATER_2_TEMPTABLE ); + static uint8_t heater_ttbllen_map[EXTRUDERS] = ARRAY_BY_EXTRUDERS( HEATER_0_TEMPTABLE_LEN, HEATER_1_TEMPTABLE_LEN, HEATER_2_TEMPTABLE_LEN ); +#endif static float analog2temp(int raw, uint8_t e); static float analog2tempBed(int raw); @@ -475,11 +481,11 @@ void manage_heater() } #endif #ifdef TEMP_SENSOR_1_AS_REDUNDANT - if(fabs(current_temperature[1] - redundant_temperature) > MAX_REDUNDANT_TEMP_SENSOR_DIFF) { + if(fabs(current_temperature[0] - redundant_temperature) > MAX_REDUNDANT_TEMP_SENSOR_DIFF) { disable_heater(); if(IsStopped() == false) { SERIAL_ERROR_START; - SERIAL_ERRORLNPGM("Extruder switched off. Temperature difference between temp sensors is to high !"); + SERIAL_ERRORLNPGM("Extruder switched off. Temperature difference between temp sensors is too high !"); LCD_ALERTMESSAGEPGM("Err: REDUNDANT TEMP ERROR"); } #ifndef BOGUS_TEMPERATURE_FAILSAFE_OVERRIDE @@ -580,7 +586,11 @@ void manage_heater() // Derived from RepRap FiveD extruder::getTemperature() // For hot end temperature measurement. static float analog2temp(int raw, uint8_t e) { +#ifdef TEMP_SENSOR_1_AS_REDUNDANT + if(e > EXTRUDERS) +#else if(e >= EXTRUDERS) +#endif { SERIAL_ERROR_START; SERIAL_ERROR((int)e); @@ -660,7 +670,7 @@ static void updateTemperaturesFromRawValues() } current_temperature_bed = analog2tempBed(current_temperature_bed_raw); #ifdef TEMP_SENSOR_1_AS_REDUNDANT - redundant_temperature =analog2temp(redundant_temperature_raw, 1); + redundant_temperature = analog2temp(redundant_temperature_raw, 1); #endif //Reset the watchdog after we know we have a temperature measurement. watchdog_reset();