@ -40,10 +40,13 @@
int target_temperature [ EXTRUDERS ] = { 0 } ;
int target_temperature_bed = 0 ;
int current_temperature_raw [ EXTRUDERS ] = { 0 } ;
float current_temperature [ EXTRUDERS ] = { 0 } ;
float current_temperature [ EXTRUDERS ] = { 0. 0 } ;
int current_temperature_bed_raw = 0 ;
float current_temperature_bed = 0 ;
float current_temperature_bed = 0.0 ;
# ifdef TEMP_SENSOR_1_AS_REDUNDANT
int redundant_temperature_raw = 0 ;
float redundant_temperature = 0.0 ;
# endif
# ifdef PIDTEMP
float Kp = DEFAULT_Kp ;
float Ki = ( DEFAULT_Ki * PID_dT ) ;
@ -106,13 +109,13 @@ static volatile bool temp_meas_ready = false;
# 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
@ -124,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 ) ;
@ -471,7 +480,19 @@ void manage_heater()
}
}
# endif
# ifdef TEMP_SENSOR_1_AS_REDUNDANT
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 too high ! " ) ;
LCD_ALERTMESSAGEPGM ( " Err: REDUNDANT TEMP ERROR " ) ;
}
# ifndef BOGUS_TEMPERATURE_FAILSAFE_OVERRIDE
Stop ( ) ;
# endif
}
# endif
} // End extruder for loop
# if (defined(EXTRUDER_0_AUTO_FAN_PIN) && EXTRUDER_0_AUTO_FAN_PIN > -1) || \
@ -565,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 ) ;
@ -644,7 +669,9 @@ static void updateTemperaturesFromRawValues()
current_temperature [ e ] = analog2temp ( current_temperature_raw [ e ] , e ) ;
}
current_temperature_bed = analog2tempBed ( current_temperature_bed_raw ) ;
# ifdef TEMP_SENSOR_1_AS_REDUNDANT
redundant_temperature = analog2temp ( redundant_temperature_raw , 1 ) ;
# endif
//Reset the watchdog after we know we have a temperature measurement.
watchdog_reset ( ) ;
@ -1145,6 +1172,9 @@ ISR(TIMER0_COMPB_vect)
# if EXTRUDERS > 1
current_temperature_raw [ 1 ] = raw_temp_1_value ;
# endif
# ifdef TEMP_SENSOR_1_AS_REDUNDANT
redundant_temperature_raw = raw_temp_1_value ;
# endif
# if EXTRUDERS > 2
current_temperature_raw [ 2 ] = raw_temp_2_value ;
# endif