Fix temperature min/max test
- Base tests on all thermistors/thermocouples, not just heater 0
This commit is contained in:
parent
b5970492e2
commit
3703694e30
@ -145,7 +145,7 @@ static volatile bool temp_meas_ready = false;
|
||||
static float temp_iState_min_bed;
|
||||
static float temp_iState_max_bed;
|
||||
#else //PIDTEMPBED
|
||||
static unsigned long previous_millis_bed_heater;
|
||||
static unsigned long previous_millis_bed_heater;
|
||||
#endif //PIDTEMPBED
|
||||
static unsigned char soft_pwm[EXTRUDERS];
|
||||
|
||||
@ -755,7 +755,7 @@ void manage_heater() {
|
||||
#ifdef FILAMENT_SENSOR
|
||||
if (filament_sensor) {
|
||||
meas_shift_index = delay_index1 - meas_delay_cm;
|
||||
if (meas_shift_index < 0) meas_shift_index += MAX_MEASUREMENT_DELAY + 1; //loop around buffer if needed
|
||||
if (meas_shift_index < 0) meas_shift_index += MAX_MEASUREMENT_DELAY + 1; //loop around buffer if needed
|
||||
|
||||
// Get the delayed info and add 100 to reconstitute to a percent of
|
||||
// the nominal filament diameter then square it to get an area
|
||||
@ -1259,10 +1259,7 @@ enum TempState {
|
||||
ISR(TIMER0_COMPB_vect) {
|
||||
//these variables are only accesible from the ISR, but static, so they don't lose their value
|
||||
static unsigned char temp_count = 0;
|
||||
static unsigned long raw_temp_0_value = 0;
|
||||
static unsigned long raw_temp_1_value = 0;
|
||||
static unsigned long raw_temp_2_value = 0;
|
||||
static unsigned long raw_temp_3_value = 0;
|
||||
static unsigned long raw_temp_value[EXTRUDERS] = { 0 };
|
||||
static unsigned long raw_temp_bed_value = 0;
|
||||
static TempState temp_state = StartupDelay;
|
||||
static unsigned char pwm_count = BIT(SOFT_PWM_SCALE);
|
||||
@ -1474,7 +1471,7 @@ ISR(TIMER0_COMPB_vect) {
|
||||
break;
|
||||
case MeasureTemp_0:
|
||||
#if HAS_TEMP_0
|
||||
raw_temp_0_value += ADC;
|
||||
raw_temp_value[0] += ADC;
|
||||
#endif
|
||||
temp_state = PrepareTemp_BED;
|
||||
break;
|
||||
@ -1500,7 +1497,7 @@ ISR(TIMER0_COMPB_vect) {
|
||||
break;
|
||||
case MeasureTemp_1:
|
||||
#if HAS_TEMP_1
|
||||
raw_temp_1_value += ADC;
|
||||
raw_temp_value[1] += ADC;
|
||||
#endif
|
||||
temp_state = PrepareTemp_2;
|
||||
break;
|
||||
@ -1513,7 +1510,7 @@ ISR(TIMER0_COMPB_vect) {
|
||||
break;
|
||||
case MeasureTemp_2:
|
||||
#if HAS_TEMP_2
|
||||
raw_temp_2_value += ADC;
|
||||
raw_temp_value[2] += ADC;
|
||||
#endif
|
||||
temp_state = PrepareTemp_3;
|
||||
break;
|
||||
@ -1526,7 +1523,7 @@ ISR(TIMER0_COMPB_vect) {
|
||||
break;
|
||||
case MeasureTemp_3:
|
||||
#if HAS_TEMP_3
|
||||
raw_temp_3_value += ADC;
|
||||
raw_temp_value[3] += ADC;
|
||||
#endif
|
||||
temp_state = Prepare_FILWIDTH;
|
||||
break;
|
||||
@ -1561,19 +1558,19 @@ ISR(TIMER0_COMPB_vect) {
|
||||
if (temp_count >= OVERSAMPLENR) { // 10 * 16 * 1/(16000000/64/256) = 164ms.
|
||||
if (!temp_meas_ready) { //Only update the raw values if they have been read. Else we could be updating them during reading.
|
||||
#ifndef HEATER_0_USES_MAX6675
|
||||
current_temperature_raw[0] = raw_temp_0_value;
|
||||
current_temperature_raw[0] = raw_temp_value[0];
|
||||
#endif
|
||||
#if EXTRUDERS > 1
|
||||
current_temperature_raw[1] = raw_temp_1_value;
|
||||
current_temperature_raw[1] = raw_temp_value[1];
|
||||
#if EXTRUDERS > 2
|
||||
current_temperature_raw[2] = raw_temp_2_value;
|
||||
current_temperature_raw[2] = raw_temp_value[2];
|
||||
#if EXTRUDERS > 3
|
||||
current_temperature_raw[3] = raw_temp_3_value;
|
||||
current_temperature_raw[3] = raw_temp_value[3];
|
||||
#endif
|
||||
#endif
|
||||
#endif
|
||||
#ifdef TEMP_SENSOR_1_AS_REDUNDANT
|
||||
redundant_temperature_raw = raw_temp_1_value;
|
||||
redundant_temperature_raw = raw_temp_value[1];
|
||||
#endif
|
||||
current_temperature_bed_raw = raw_temp_bed_value;
|
||||
} //!temp_meas_ready
|
||||
@ -1585,31 +1582,67 @@ ISR(TIMER0_COMPB_vect) {
|
||||
|
||||
temp_meas_ready = true;
|
||||
temp_count = 0;
|
||||
raw_temp_0_value = 0;
|
||||
raw_temp_1_value = 0;
|
||||
raw_temp_2_value = 0;
|
||||
raw_temp_3_value = 0;
|
||||
for (int i = 0; i < EXTRUDERS; i++) raw_temp_value[i] = 0;
|
||||
raw_temp_bed_value = 0;
|
||||
|
||||
#if HEATER_0_RAW_LO_TEMP > HEATER_0_RAW_HI_TEMP
|
||||
#define MAXTEST <=
|
||||
#define MINTEST >=
|
||||
#define GE0 <=
|
||||
#define LE0 >=
|
||||
#else
|
||||
#define MAXTEST >=
|
||||
#define MINTEST <=
|
||||
#define GE0 >=
|
||||
#define LE0 <=
|
||||
#endif
|
||||
if (current_temperature_raw[0] GE0 maxttemp_raw[0]) max_temp_error(0);
|
||||
if (current_temperature_raw[0] LE0 minttemp_raw[0]) min_temp_error(0);
|
||||
|
||||
#if EXTRUDERS > 1
|
||||
#if HEATER_1_RAW_LO_TEMP > HEATER_1_RAW_HI_TEMP
|
||||
#define GE1 <=
|
||||
#define LE1 >=
|
||||
#else
|
||||
#define GE1 >=
|
||||
#define LE1 <=
|
||||
#endif
|
||||
if (current_temperature_raw[1] GE1 maxttemp_raw[1]) max_temp_error(1);
|
||||
if (current_temperature_raw[1] LE1 minttemp_raw[1]) min_temp_error(1);
|
||||
#if EXTRUDERS > 2
|
||||
#if HEATER_2_RAW_LO_TEMP > HEATER_2_RAW_HI_TEMP
|
||||
#define GE2 <=
|
||||
#define LE2 >=
|
||||
#else
|
||||
#define GE2 >=
|
||||
#define LE2 <=
|
||||
#endif
|
||||
if (current_temperature_raw[2] GE2 maxttemp_raw[2]) max_temp_error(2);
|
||||
if (current_temperature_raw[2] LE2 minttemp_raw[2]) min_temp_error(2);
|
||||
#if EXTRUDERS > 3
|
||||
#if HEATER_3_RAW_LO_TEMP > HEATER_3_RAW_HI_TEMP
|
||||
#define GE3 <=
|
||||
#define LE3 >=
|
||||
#else
|
||||
#define GE3 >=
|
||||
#define LE3 <=
|
||||
#endif
|
||||
if (current_temperature_raw[3] GE3 maxttemp_raw[3]) max_temp_error(3);
|
||||
if (current_temperature_raw[3] LE3 minttemp_raw[3]) min_temp_error(3);
|
||||
#endif // EXTRUDERS > 3
|
||||
#endif // EXTRUDERS > 2
|
||||
#endif // EXTRUDERS > 1
|
||||
|
||||
#if defined(BED_MAXTEMP) && (TEMP_SENSOR_BED != 0)
|
||||
#if HEATER_BED_RAW_LO_TEMP > HEATER_BED_RAW_HI_TEMP
|
||||
#define GEBED <=
|
||||
#define LEBED >=
|
||||
#else
|
||||
#define GEBED >=
|
||||
#define LEBED <=
|
||||
#endif
|
||||
if (current_temperature_bed_raw GEBED bed_maxttemp_raw) {
|
||||
target_temperature_bed = 0;
|
||||
bed_max_temp_error();
|
||||
}
|
||||
#endif
|
||||
|
||||
for (int i=0; i<EXTRUDERS; i++) {
|
||||
if (current_temperature_raw[i] MAXTEST maxttemp_raw[i]) max_temp_error(i);
|
||||
else if (current_temperature_raw[i] MINTEST minttemp_raw[i]) min_temp_error(i);
|
||||
}
|
||||
/* No bed MINTEMP error? */
|
||||
#if defined(BED_MAXTEMP) && (TEMP_SENSOR_BED != 0)
|
||||
if (current_temperature_bed_raw MAXTEST bed_maxttemp_raw) {
|
||||
target_temperature_bed = 0;
|
||||
bed_max_temp_error();
|
||||
}
|
||||
#endif
|
||||
} // temp_count >= OVERSAMPLENR
|
||||
|
||||
#ifdef BABYSTEPPING
|
||||
|
Loading…
Reference in New Issue
Block a user