diff --git a/Marlin/temperature.cpp b/Marlin/temperature.cpp index 9226f6e08..8ffbf1995 100644 --- a/Marlin/temperature.cpp +++ b/Marlin/temperature.cpp @@ -37,19 +37,14 @@ //=========================================================================== //=============================public variables============================ //=========================================================================== -int target_raw[EXTRUDERS] = { 0 }; -int target_raw_bed = 0; -#ifdef BED_LIMIT_SWITCHING -int target_bed_low_temp =0; -int target_bed_high_temp =0; -#endif -int current_raw[EXTRUDERS] = { 0 }; -int current_raw_bed = 0; +int target_temperature[EXTRUDERS] = { 0 }; +int target_temperature_bed = 0; +int current_temperature_raw[EXTRUDERS] = { 0 }; +float current_temperature[EXTRUDERS] = { 0 }; +int current_temperature_bed_raw = 0; +float current_temperature_bed = 0; #ifdef PIDTEMP - // used external - float pid_setpoint[EXTRUDERS] = { 0.0 }; - float Kp=DEFAULT_Kp; float Ki=(DEFAULT_Ki*PID_dT); float Kd=(DEFAULT_Kd/PID_dT); @@ -59,9 +54,6 @@ int current_raw_bed = 0; #endif //PIDTEMP #ifdef PIDTEMPBED - // used external - float pid_setpoint_bed = { 0.0 }; - float bedKp=DEFAULT_bedKp; float bedKi=(DEFAULT_bedKi*PID_dT); float bedKd=(DEFAULT_bedKd/PID_dT); @@ -116,12 +108,20 @@ static volatile bool temp_meas_ready = false; #endif // Init min and max temp with extreme values to prevent false errors during startup -static int minttemp[EXTRUDERS] = ARRAY_BY_EXTRUDERS(0, 0, 0); -static int maxttemp[EXTRUDERS] = ARRAY_BY_EXTRUDERS(16383, 16383, 16383); // the first value used for all -static int bed_minttemp = 0; -static int bed_maxttemp = 16383; -static void *heater_ttbl_map[EXTRUDERS] = ARRAY_BY_EXTRUDERS((void *)heater_0_temptable, (void *)heater_1_temptable, (void *)heater_2_temptable); -static int heater_ttbllen_map[EXTRUDERS] = ARRAY_BY_EXTRUDERS(heater_0_temptable_len, heater_1_temptable_len, heater_2_temptable_len); +static int minttemp_raw[EXTRUDERS] = ARRAY_BY_EXTRUDERS( HEATER_0_RAW_LO_TEMP , HEATER_1_RAW_LO_TEMP , HEATER_2_RAW_LO_TEMP ); +static int maxttemp_raw[EXTRUDERS] = ARRAY_BY_EXTRUDERS( HEATER_0_RAW_HI_TEMP , HEATER_1_RAW_HI_TEMP , HEATER_2_RAW_HI_TEMP ); +static int minttemp[EXTRUDERS] = ARRAY_BY_EXTRUDERS( 0, 0, 0 ); +static int maxttemp[EXTRUDERS] = ARRAY_BY_EXTRUDERS( 16383, 16383, 16383 ); +//static int bed_minttemp_raw = HEATER_BED_RAW_LO_TEMP; /* No bed mintemp error implemented?!? */ +#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 int heater_ttbllen_map[EXTRUDERS] = ARRAY_BY_EXTRUDERS( HEATER_0_TEMPTABLE_LEN, HEATER_1_TEMPTABLE_LEN, HEATER_2_TEMPTABLE_LEN ); + +static float analog2temp(int raw, uint8_t e); +static float analog2tempBed(int raw); +static void updateTemperaturesFromRawValues(); #ifdef WATCH_TEMP_PERIOD int watch_start_temp[EXTRUDERS] = ARRAY_BY_EXTRUDERS(0,0,0); @@ -179,13 +179,9 @@ void PID_autotune(float temp, int extruder, int ncycles) for(;;) { if(temp_meas_ready == true) { // temp sample ready - //Reset the watchdog after we know we have a temperature measurement. - watchdog_reset(); - - CRITICAL_SECTION_START; - temp_meas_ready = false; - CRITICAL_SECTION_END; - input = (extruder<0)?analog2tempBed(current_raw_bed):analog2temp(current_raw[extruder], extruder); + updateTemperaturesFromRawValues(); + + input = (extruder<0)?current_temperature_bed:current_temperature[extruder]; max=max(max,input); min=min(min,input); @@ -313,21 +309,16 @@ void manage_heater() if(temp_meas_ready != true) //better readability return; - //Reset the watchdog after we know we have a temperature measurement. - watchdog_reset(); - - CRITICAL_SECTION_START; - temp_meas_ready = false; - CRITICAL_SECTION_END; + updateTemperaturesFromRawValues(); for(int e = 0; e < EXTRUDERS; e++) { #ifdef PIDTEMP - pid_input = analog2temp(current_raw[e], e); + pid_input = current_temperature[e]; #ifndef PID_OPENLOOP - pid_error[e] = pid_setpoint[e] - pid_input; + pid_error[e] = target_temperature[e] - pid_input; if(pid_error[e] > 10) { pid_output = PID_MAX; pid_reset[e] = true; @@ -354,20 +345,20 @@ void manage_heater() pid_output = constrain(pTerm[e] + iTerm[e] - dTerm[e], 0, PID_MAX); } #else - pid_output = constrain(pid_setpoint[e], 0, PID_MAX); + pid_output = constrain(target_temperature[e], 0, PID_MAX); #endif //PID_OPENLOOP #ifdef PID_DEBUG SERIAL_ECHOLN(" PIDDEBUG "< minttemp[e]) && (current_raw[e] < maxttemp[e])) + if((current_temperature[e] > minttemp[e]) && (current_temperature[e] < maxttemp[e])) { soft_pwm[e] = (int)pid_output >> 1; } @@ -393,19 +384,19 @@ void manage_heater() } // End extruder for loop - #ifndef PIDTEMPBED + #ifndef PIDTEMPBED if(millis() - previous_millis_bed_heater < BED_CHECK_INTERVAL) return; previous_millis_bed_heater = millis(); - #endif + #endif - #if TEMP_BED_PIN > -1 + #if TEMP_SENSOR_BED != 0 - #ifdef PIDTEMPBED - pid_input = analog2tempBed(current_raw_bed); + #ifdef PIDTEMPBED + pid_input = current_temperature_bed; #ifndef PID_OPENLOOP - pid_error_bed = pid_setpoint_bed - pid_input; + pid_error_bed = target_temperature_bed - pid_input; pTerm_bed = bedKp * pid_error_bed; temp_iState_bed += pid_error_bed; temp_iState_bed = constrain(temp_iState_bed, temp_iState_min_bed, temp_iState_max_bed); @@ -419,10 +410,10 @@ void manage_heater() pid_output = constrain(pTerm_bed + iTerm_bed - dTerm_bed, 0, MAX_BED_POWER); #else - pid_output = constrain(pid_setpoint_bed, 0, MAX_BED_POWER); + pid_output = constrain(target_temperature_bed, 0, MAX_BED_POWER); #endif //PID_OPENLOOP - if((current_raw_bed > bed_minttemp) && (current_raw_bed < bed_maxttemp)) + if((current_temperature_bed > BED_MINTEMP) && (current_temperature_bed < BED_MAXTEMP)) { soft_pwm_bed = (int)pid_output >> 1; } @@ -432,35 +423,38 @@ void manage_heater() #elif not defined BED_LIMIT_SWITCHING // Check if temperature is within the correct range - if((current_raw_bed > bed_minttemp) && (current_raw_bed < bed_maxttemp)) { - if(current_raw_bed >= target_raw_bed) + if((current_temperature_bed > BED_MAXTEMP) && (current_temperature_bed < BED_MINTEMP)) + { + if(current_temperature_bed >= target_temperature_bed) { - soft_pwm_bed = 0; + soft_pwm_bed = 0; } else { - soft_pwm_bed = MAX_BED_POWER>>1; + soft_pwm_bed = MAX_BED_POWER>>1; } } - else { - soft_pwm_bed = 0; + else + { + soft_pwm_bed = 0; WRITE(HEATER_BED_PIN,LOW); } #else //#ifdef BED_LIMIT_SWITCHING // Check if temperature is within the correct band - if((current_raw_bed > bed_minttemp) && (current_raw_bed < bed_maxttemp)) { - if(current_raw_bed > target_bed_high_temp) + if((current_temperature_bed > BED_MINTEMP) && (current_temperature_bed < BED_MAXTEMP)) + { + if(current_temperature_bed > target_temperature_bed + BED_HYSTERESIS) { - soft_pwm_bed = 0; + soft_pwm_bed = 0; } - else - if(current_raw_bed <= target_bed_low_temp) + else if(current_temperature_bed <= target_temperature_bed - BED_HYSTERESIS) { - soft_pwm_bed = MAX_BED_POWER>>1; + soft_pwm_bed = MAX_BED_POWER>>1; } } - else { - soft_pwm_bed = 0; + else + { + soft_pwm_bed = 0; WRITE(HEATER_BED_PIN,LOW); } #endif @@ -468,86 +462,9 @@ void manage_heater() } #define PGM_RD_W(x) (short)pgm_read_word(&x) -// Takes hot end temperature value as input and returns corresponding raw value. -// For a thermistor, it uses the RepRap thermistor temp table. -// This is needed because PID in hydra firmware hovers around a given analog value, not a temp value. -// This function is derived from inversing the logic from a portion of getTemperature() in FiveD RepRap firmware. -int temp2analog(int celsius, uint8_t e) { - if(e >= EXTRUDERS) - { - SERIAL_ERROR_START; - SERIAL_ERROR((int)e); - SERIAL_ERRORLNPGM(" - Invalid extruder number!"); - kill(); - } - #ifdef HEATER_0_USES_MAX6675 - if (e == 0) - { - return celsius * 4; - } - #endif - if(heater_ttbl_map[e] != 0) - { - int raw = 0; - byte i; - short (*tt)[][2] = (short (*)[][2])(heater_ttbl_map[e]); - - for (i=1; i= EXTRUDERS) { SERIAL_ERROR_START; @@ -565,10 +482,9 @@ float analog2temp(int raw, uint8_t e) { if(heater_ttbl_map[e] != NULL) { float celsius = 0; - byte i; + byte i; short (*tt)[][2] = (short (*)[][2])(heater_ttbl_map[e]); - raw = (1023 * OVERSAMPLENR) - raw; for (i=1; i raw) @@ -591,13 +507,11 @@ float analog2temp(int raw, uint8_t e) { // Derived from RepRap FiveD extruder::getTemperature() // For bed temperature measurement. -float analog2tempBed(int raw) { +static float analog2tempBed(int raw) { #ifdef BED_USES_THERMISTOR float celsius = 0; byte i; - raw = (1023 * OVERSAMPLENR) - raw; - for (i=1; i raw) @@ -621,6 +535,24 @@ float analog2tempBed(int raw) { #endif } +/* Called to get the raw values into the the actual temperatures. The raw values are created in interrupt context, + and this function is called from normal context as it is too slow to run in interrupts and will block the stepper routine otherwise */ +static void updateTemperaturesFromRawValues() +{ + for(uint8_t e=0;e HEATER_0_MAXTEMP) { +#if HEATER_0_RAW_LO_TEMP < HEATER_0_RAW_HI_TEMP + maxttemp_raw[0] -= OVERSAMPLENR; +#else + maxttemp_raw[0] += OVERSAMPLENR; +#endif + } #endif //MAXTEMP #if (EXTRUDERS > 1) && defined(HEATER_1_MINTEMP) - minttemp[1] = temp2analog(HEATER_1_MINTEMP, 1); + minttemp[1] = HEATER_1_MINTEMP; + while(analog2temp(minttemp_raw[1], 1) > HEATER_1_MINTEMP) { +#if HEATER_1_RAW_LO_TEMP < HEATER_1_RAW_HI_TEMP + minttemp_raw[1] += OVERSAMPLENR; +#else + minttemp_raw[1] -= OVERSAMPLENR; +#endif + } #endif // MINTEMP 1 #if (EXTRUDERS > 1) && defined(HEATER_1_MAXTEMP) - maxttemp[1] = temp2analog(HEATER_1_MAXTEMP, 1); + maxttemp[1] = HEATER_1_MAXTEMP; + while(analog2temp(maxttemp_raw[1], 1) > HEATER_1_MAXTEMP) { +#if HEATER_1_RAW_LO_TEMP < HEATER_1_RAW_HI_TEMP + maxttemp_raw[1] -= OVERSAMPLENR; +#else + maxttemp_raw[1] += OVERSAMPLENR; +#endif + } #endif //MAXTEMP 1 #if (EXTRUDERS > 2) && defined(HEATER_2_MINTEMP) - minttemp[2] = temp2analog(HEATER_2_MINTEMP, 2); + minttemp[2] = HEATER_2_MINTEMP; + while(analog2temp(minttemp_raw[2], 2) > HEATER_2_MINTEMP) { +#if HEATER_2_RAW_LO_TEMP < HEATER_2_RAW_HI_TEMP + minttemp_raw[2] += OVERSAMPLENR; +#else + minttemp_raw[2] -= OVERSAMPLENR; +#endif + } #endif //MINTEMP 2 #if (EXTRUDERS > 2) && defined(HEATER_2_MAXTEMP) - maxttemp[2] = temp2analog(HEATER_2_MAXTEMP, 2); + maxttemp[2] = HEATER_2_MAXTEMP; + while(analog2temp(maxttemp_raw[2], 2) > HEATER_2_MAXTEMP) { +#if HEATER_2_RAW_LO_TEMP < HEATER_2_RAW_HI_TEMP + maxttemp_raw[2] -= OVERSAMPLENR; +#else + maxttemp_raw[2] += OVERSAMPLENR; +#endif + } #endif //MAXTEMP 2 #ifdef BED_MINTEMP - bed_minttemp = temp2analogBed(BED_MINTEMP); + /* No bed MINTEMP error implemented?!? */ /* + while(analog2tempBed(bed_minttemp_raw) < BED_MINTEMP) { +#if HEATER_BED_RAW_LO_TEMP < HEATER_BED_RAW_HI_TEMP + bed_minttemp_raw += OVERSAMPLENR; +#else + bed_minttemp_raw -= OVERSAMPLENR; +#endif + } + */ #endif //BED_MINTEMP #ifdef BED_MAXTEMP - bed_maxttemp = temp2analogBed(BED_MAXTEMP); + while(analog2tempBed(bed_maxttemp_raw) > BED_MAXTEMP) { +#if HEATER_BED_RAW_LO_TEMP < HEATER_BED_RAW_HI_TEMP + bed_maxttemp_raw -= OVERSAMPLENR; +#else + bed_maxttemp_raw += OVERSAMPLENR; +#endif + } #endif //BED_MAXTEMP } @@ -765,7 +753,7 @@ void disable_heater() setTargetHotend(0,i); setTargetBed(0); #if TEMP_0_PIN > -1 - target_raw[0]=0; + target_temperature[0]=0; soft_pwm[0]=0; #if HEATER_0_PIN > -1 WRITE(HEATER_0_PIN,LOW); @@ -773,7 +761,7 @@ void disable_heater() #endif #if TEMP_1_PIN > -1 - target_raw[1]=0; + target_temperature[1]=0; soft_pwm[1]=0; #if HEATER_1_PIN > -1 WRITE(HEATER_1_PIN,LOW); @@ -781,7 +769,7 @@ void disable_heater() #endif #if TEMP_2_PIN > -1 - target_raw[2]=0; + target_temperature[2]=0; soft_pwm[2]=0; #if HEATER_2_PIN > -1 WRITE(HEATER_2_PIN,LOW); @@ -789,7 +777,7 @@ void disable_heater() #endif #if TEMP_BED_PIN > -1 - target_raw_bed=0; + target_temperature_bed=0; soft_pwm_bed=0; #if HEATER_BED_PIN > -1 WRITE(HEATER_BED_PIN,LOW); @@ -1031,33 +1019,16 @@ ISR(TIMER0_COMPB_vect) if(temp_count >= 16) // 8 ms * 16 = 128ms. { - #if defined(HEATER_0_USES_AD595) || defined(HEATER_0_USES_MAX6675) - current_raw[0] = raw_temp_0_value; - #else - current_raw[0] = 16383 - raw_temp_0_value; - #endif - -#if EXTRUDERS > 1 - #ifdef HEATER_1_USES_AD595 - current_raw[1] = raw_temp_1_value; - #else - current_raw[1] = 16383 - raw_temp_1_value; - #endif + if (!temp_meas_ready) //Only update the raw values if they have been read. Else we could be updating them during reading. + { + current_temperature_raw[0] = raw_temp_0_value; +#if EXTRUDERS > 1 + current_temperature_raw[1] = raw_temp_0_value; #endif - #if EXTRUDERS > 2 - #ifdef HEATER_2_USES_AD595 - current_raw[2] = raw_temp_2_value; - #else - current_raw[2] = 16383 - raw_temp_2_value; - #endif + current_temperature_raw[2] = raw_temp_0_value; #endif - - #ifdef BED_USES_AD595 - current_raw_bed = raw_temp_bed_value; - #else - current_raw_bed = 16383 - raw_temp_bed_value; - #endif + } temp_meas_ready = true; temp_count = 0; @@ -1066,23 +1037,63 @@ ISR(TIMER0_COMPB_vect) raw_temp_2_value = 0; raw_temp_bed_value = 0; - for(unsigned char e = 0; e < EXTRUDERS; e++) { - if(current_raw[e] >= maxttemp[e]) { - target_raw[e] = 0; - max_temp_error(e); - } - if(current_raw[e] <= minttemp[e]) { - target_raw[e] = 0; - min_temp_error(e); - } +#if HEATER_0_RAW_LO_TEMP > HEATER_0_RAW_HI_TEMP + if(current_temperature_raw[0] <= maxttemp_raw[0]) { +#else + if(current_temperature_raw[0] >= maxttemp_raw[0]) { +#endif + max_temp_error(0); } +#if HEATER_0_RAW_LO_TEMP > HEATER_0_RAW_HI_TEMP + if(current_temperature_raw[0] >= minttemp_raw[0]) { +#else + if(current_temperature_raw[0] <= minttemp_raw[0]) { +#endif + min_temp_error(0); + } +#if EXTRUDERS > 1 +#if HEATER_1_RAW_LO_TEMP > HEATER_1_RAW_HI_TEMP + if(current_temperature_raw[1] <= maxttemp_raw[1]) { +#else + if(current_temperature_raw[1] >= maxttemp_raw[1]) { +#endif + max_temp_error(1); + } +#if HEATER_1_RAW_LO_TEMP > HEATER_1_RAW_HI_TEMP + if(current_temperature_raw[1] >= minttemp_raw[1]) { +#else + if(current_temperature_raw[1] <= minttemp_raw[1]) { +#endif + min_temp_error(1); + } +#endif +#if EXTRUDERS > 2 +#if HEATER_2_RAW_LO_TEMP > HEATER_2_RAW_HI_TEMP + if(current_temperature_raw[2] <= maxttemp_raw[2]) { +#else + if(current_temperature_raw[2] >= maxttemp_raw[2]) { +#endif + max_temp_error(2); + } +#if HEATER_2_RAW_LO_TEMP > HEATER_2_RAW_HI_TEMP + if(current_temperature_raw[2] >= minttemp_raw[2]) { +#else + if(current_temperature_raw[2] <= minttemp_raw[2]) { +#endif + min_temp_error(2); + } +#endif -#if defined(BED_MAXTEMP) && (HEATER_BED_PIN > -1) - if(current_raw_bed >= bed_maxttemp) { - target_raw_bed = 0; + /* No bed MINTEMP error? */ +#if defined(BED_MAXTEMP) && (TEMP_SENSOR_BED != 0) +# if HEATER_BED_RAW_LO_TEMP > HEATER_BED_RAW_HI_TEMP + if(current_temperature_bed <= bed_maxttemp_raw) { +#else + if(current_temperature_bed >= bed_maxttemp_raw) { +#endif + target_temperature_bed = 0; bed_max_temp_error(); } #endif - } + } } - diff --git a/Marlin/temperature.h b/Marlin/temperature.h index 6f4591700..feffcbd41 100644 --- a/Marlin/temperature.h +++ b/Marlin/temperature.h @@ -33,27 +33,16 @@ void manage_heater(); //it is critical that this is called periodically. //low leven conversion routines // do not use this routines and variables outsie of temperature.cpp -int temp2analog(int celsius, uint8_t e); -int temp2analogBed(int celsius); -float analog2temp(int raw, uint8_t e); -float analog2tempBed(int raw); -extern int target_raw[EXTRUDERS]; -extern int heatingtarget_raw[EXTRUDERS]; -extern int current_raw[EXTRUDERS]; -extern int target_raw_bed; -extern int current_raw_bed; -#ifdef BED_LIMIT_SWITCHING - extern int target_bed_low_temp ; - extern int target_bed_high_temp ; -#endif +extern int target_temperature[EXTRUDERS]; +extern float current_temperature[EXTRUDERS]; +extern int target_temperature_bed; +extern float current_temperature_bed; #ifdef PIDTEMP extern float Kp,Ki,Kd,Kc; - extern float pid_setpoint[EXTRUDERS]; #endif #ifdef PIDTEMPBED extern float bedKp,bedKi,bedKd; - extern float pid_setpoint_bed; #endif //high level conversion routines, for use outside of temperature.cpp @@ -61,61 +50,43 @@ extern int current_raw_bed; //deg=degreeCelsius FORCE_INLINE float degHotend(uint8_t extruder) { - return analog2temp(current_raw[extruder], extruder); + return current_temperature[extruder]; }; FORCE_INLINE float degBed() { - return analog2tempBed(current_raw_bed); + return current_temperature_bed; }; FORCE_INLINE float degTargetHotend(uint8_t extruder) { - return analog2temp(target_raw[extruder], extruder); + return target_temperature[extruder]; }; FORCE_INLINE float degTargetBed() { - return analog2tempBed(target_raw_bed); + return target_temperature_bed; }; FORCE_INLINE void setTargetHotend(const float &celsius, uint8_t extruder) { - target_raw[extruder] = temp2analog(celsius, extruder); -#ifdef PIDTEMP - pid_setpoint[extruder] = celsius; -#endif //PIDTEMP + target_temperature[extruder] = celsius; }; FORCE_INLINE void setTargetBed(const float &celsius) { - - target_raw_bed = temp2analogBed(celsius); - #ifdef PIDTEMPBED - pid_setpoint_bed = celsius; - #elif defined BED_LIMIT_SWITCHING - if(celsius>BED_HYSTERESIS) - { - target_bed_low_temp= temp2analogBed(celsius-BED_HYSTERESIS); - target_bed_high_temp= temp2analogBed(celsius+BED_HYSTERESIS); - } - else - { - target_bed_low_temp=0; - target_bed_high_temp=0; - } - #endif + target_temperature_bed = celsius; }; FORCE_INLINE bool isHeatingHotend(uint8_t extruder){ - return target_raw[extruder] > current_raw[extruder]; + return target_temperature[extruder] > current_temperature[extruder]; }; FORCE_INLINE bool isHeatingBed() { - return target_raw_bed > current_raw_bed; + return target_temperature_bed > current_temperature_bed; }; FORCE_INLINE bool isCoolingHotend(uint8_t extruder) { - return target_raw[extruder] < current_raw[extruder]; + return target_temperature[extruder] < current_temperature[extruder]; }; FORCE_INLINE bool isCoolingBed() { - return target_raw_bed < current_raw_bed; + return target_temperature_bed < current_temperature_bed; }; #define degHotend0() degHotend(0) diff --git a/Marlin/thermistortables.h b/Marlin/thermistortables.h index 698506f49..d963afff1 100644 --- a/Marlin/thermistortables.h +++ b/Marlin/thermistortables.h @@ -461,49 +461,92 @@ const short temptable_55[][2] PROGMEM = { #define TT_NAME(_N) _TT_NAME(_N) #ifdef THERMISTORHEATER_0 - #define heater_0_temptable TT_NAME(THERMISTORHEATER_0) - #define heater_0_temptable_len (sizeof(heater_0_temptable)/sizeof(*heater_0_temptable)) +# define HEATER_0_TEMPTABLE TT_NAME(THERMISTORHEATER_0) +# define HEATER_0_TEMPTABLE_LEN (sizeof(HEATER_0_TEMPTABLE)/sizeof(*HEATER_0_TEMPTABLE)) #else -#ifdef HEATER_0_USES_THERMISTOR - #error No heater 0 thermistor table specified -#else // HEATER_0_USES_THERMISTOR - #define heater_0_temptable 0 - #define heater_0_temptable_len 0 -#endif // HEATER_0_USES_THERMISTOR +# ifdef HEATER_0_USES_THERMISTOR +# error No heater 0 thermistor table specified +# else // HEATER_0_USES_THERMISTOR +# define HEATER_0_TEMPTABLE NULL +# define HEATER_0_TEMPTABLE_LEN 0 +# endif // HEATER_0_USES_THERMISTOR +#endif + +//Set the high and low raw values for the heater, this indicates which raw value is a high or low temperature +#ifndef HEATER_0_RAW_HI_TEMP +# if HEATER_0_USES_THERMISTOR //In case of a thermistor the highest temperature results in the lowest ADC value +# define HEATER_0_RAW_HI_TEMP 0 +# define HEATER_0_RAW_LO_TEMP 16383 +# else //In case of an thermocouple the highest temperature results in the highest ADC value +# define HEATER_0_RAW_HI_TEMP 16383 +# define HEATER_0_RAW_LO_TEMP 0 +# endif #endif #ifdef THERMISTORHEATER_1 - #define heater_1_temptable TT_NAME(THERMISTORHEATER_1) - #define heater_1_temptable_len (sizeof(heater_1_temptable)/sizeof(*heater_1_temptable)) +# define HEATER_1_TEMPTABLE TT_NAME(THERMISTORHEATER_1) +# define HEATER_1_TEMPTABLE_LEN (sizeof(HEATER_1_TEMPTABLE)/sizeof(*HEATER_1_TEMPTABLE)) #else -#ifdef HEATER_1_USES_THERMISTOR - #error No heater 1 thermistor table specified -#else // HEATER_1_USES_THERMISTOR - #define heater_1_temptable 0 - #define heater_1_temptable_len 0 -#endif // HEATER_1_USES_THERMISTOR +# ifdef HEATER_1_USES_THERMISTOR +# error No heater 1 thermistor table specified +# else // HEATER_1_USES_THERMISTOR +# define HEATER_1_TEMPTABLE NULL +# define HEATER_1_TEMPTABLE_LEN 0 +# endif // HEATER_1_USES_THERMISTOR +#endif + +//Set the high and low raw values for the heater, this indicates which raw value is a high or low temperature +#ifndef HEATER_1_RAW_HI_TEMP +# if HEATER_1_USES_THERMISTOR //In case of a thermistor the highest temperature results in the lowest ADC value +# define HEATER_1_RAW_HI_TEMP 0 +# define HEATER_1_RAW_LO_TEMP 16383 +# else //In case of an thermocouple the highest temperature results in the highest ADC value +# define HEATER_1_RAW_HI_TEMP 16383 +# define HEATER_1_RAW_LO_TEMP 0 +# endif #endif #ifdef THERMISTORHEATER_2 - #define heater_2_temptable TT_NAME(THERMISTORHEATER_2) - #define heater_2_temptable_len (sizeof(heater_2_temptable)/sizeof(*heater_2_temptable)) +# define HEATER_2_TEMPTABLE TT_NAME(THERMISTORHEATER_2) +# define HEATER_2_TEMPTABLE_LEN (sizeof(HEATER_2_TEMPTABLE)/sizeof(*HEATER_2_TEMPTABLE)) #else -#ifdef HEATER_2_USES_THERMISTOR - #error No heater 2 thermistor table specified -#else // HEATER_2_USES_THERMISTOR - #define heater_2_temptable 0 - #define heater_2_temptable_len 0 -#endif // HEATER_2_USES_THERMISTOR +# ifdef HEATER_2_USES_THERMISTOR +# error No heater 2 thermistor table specified +# else // HEATER_2_USES_THERMISTOR +# define HEATER_2_TEMPTABLE NULL +# define HEATER_2_TEMPTABLE_LEN 0 +# endif // HEATER_2_USES_THERMISTOR +#endif + +//Set the high and low raw values for the heater, this indicates which raw value is a high or low temperature +#ifndef HEATER_2_RAW_HI_TEMP +# if HEATER_2_USES_THERMISTOR //In case of a thermistor the highest temperature results in the lowest ADC value +# define HEATER_2_RAW_HI_TEMP 0 +# define HEATER_2_RAW_LO_TEMP 16383 +# else //In case of an thermocouple the highest temperature results in the highest ADC value +# define HEATER_2_RAW_HI_TEMP 16383 +# define HEATER_2_RAW_LO_TEMP 0 +# endif #endif #ifdef THERMISTORBED - #define bedtemptable TT_NAME(THERMISTORBED) - #define bedtemptable_len (sizeof(bedtemptable)/sizeof(*bedtemptable)) +# define BEDTEMPTABLE TT_NAME(THERMISTORBED) +# define BEDTEMPTABLE_LEN (sizeof(BEDTEMPTABLE)/sizeof(*BEDTEMPTABLE)) #else -#ifdef BED_USES_THERMISTOR - #error No bed thermistor table specified -#endif // BED_USES_THERMISTOR +# ifdef BED_USES_THERMISTOR +# error No bed thermistor table specified +# endif // BED_USES_THERMISTOR +#endif + +//Set the high and low raw values for the heater, this indicates which raw value is a high or low temperature +#ifndef HEATER_BED_RAW_HI_TEMP +# if BED_USES_THERMISTOR //In case of a thermistor the highest temperature results in the lowest ADC value +# define HEATER_BED_RAW_HI_TEMP 0 +# define HEATER_BED_RAW_LO_TEMP 16383 +# else //In case of an thermocouple the highest temperature results in the highest ADC value +# define HEATER_BED_RAW_HI_TEMP 16383 +# define HEATER_BED_RAW_LO_TEMP 0 +# endif #endif #endif //THERMISTORTABLES_H_ -