Limit user thermistor to 999, fix thermistor table macro (#14080)
This commit is contained in:
parent
a74aad3b4a
commit
594f6b14be
1 changed files with 24 additions and 11 deletions
|
@ -68,6 +68,10 @@
|
||||||
#include "tool_change.h"
|
#include "tool_change.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if HAS_BUZZER
|
||||||
|
#include "../libs/buzzer.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
#if HOTEND_USES_THERMISTOR
|
#if HOTEND_USES_THERMISTOR
|
||||||
#if ENABLED(TEMP_SENSOR_1_AS_REDUNDANT)
|
#if ENABLED(TEMP_SENSOR_1_AS_REDUNDANT)
|
||||||
static void* heater_ttbl_map[2] = { (void*)HEATER_0_TEMPTABLE, (void*)HEATER_1_TEMPTABLE };
|
static void* heater_ttbl_map[2] = { (void*)HEATER_0_TEMPTABLE, (void*)HEATER_1_TEMPTABLE };
|
||||||
|
@ -750,10 +754,22 @@ void Temperature::_temp_error(const int8_t heater, PGM_P const serial_msg, PGM_P
|
||||||
else SERIAL_ECHOPGM(MSG_HEATER_BED);
|
else SERIAL_ECHOPGM(MSG_HEATER_BED);
|
||||||
SERIAL_EOL();
|
SERIAL_EOL();
|
||||||
}
|
}
|
||||||
|
|
||||||
#if DISABLED(BOGUS_TEMPERATURE_FAILSAFE_OVERRIDE)
|
#if DISABLED(BOGUS_TEMPERATURE_FAILSAFE_OVERRIDE)
|
||||||
if (!killed) {
|
if (!killed) {
|
||||||
Running = false;
|
Running = false;
|
||||||
killed = true;
|
killed = true;
|
||||||
|
|
||||||
|
disable_all_heaters();
|
||||||
|
|
||||||
|
#if HAS_BUZZER && PIN_EXISTS(BEEPER)
|
||||||
|
for (uint8_t i = 20; i--;) {
|
||||||
|
WRITE(BEEPER_PIN, HIGH); delay(25);
|
||||||
|
WRITE(BEEPER_PIN, LOW); delay(80);
|
||||||
|
}
|
||||||
|
WRITE(BEEPER_PIN, HIGH);
|
||||||
|
#endif
|
||||||
|
|
||||||
kill(lcd_msg);
|
kill(lcd_msg);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -1175,15 +1191,17 @@ void Temperature::manage_heater() {
|
||||||
#define SCAN_THERMISTOR_TABLE(TBL,LEN) do{ \
|
#define SCAN_THERMISTOR_TABLE(TBL,LEN) do{ \
|
||||||
uint8_t l = 0, r = LEN, m; \
|
uint8_t l = 0, r = LEN, m; \
|
||||||
for (;;) { \
|
for (;;) { \
|
||||||
m = (l + r) >> 1; \
|
m = l + r; \
|
||||||
if (m == l || m == r) return (short)pgm_read_word(&TBL[LEN-1][1]); \
|
if (!m) return short(pgm_read_word(&TBL[0][1])); \
|
||||||
|
m >>= 1; \
|
||||||
|
if (m == l || m == r) return short(pgm_read_word(&TBL[LEN-1][1])); \
|
||||||
short v00 = pgm_read_word(&TBL[m-1][0]), \
|
short v00 = pgm_read_word(&TBL[m-1][0]), \
|
||||||
v10 = pgm_read_word(&TBL[m-0][0]); \
|
v10 = pgm_read_word(&TBL[m-0][0]); \
|
||||||
if (raw < v00) r = m; \
|
if (raw < v00) r = m; \
|
||||||
else if (raw > v10) l = m; \
|
else if (raw > v10) l = m; \
|
||||||
else { \
|
else { \
|
||||||
const short v01 = (short)pgm_read_word(&TBL[m-1][1]), \
|
const short v01 = short(pgm_read_word(&TBL[m-1][1])), \
|
||||||
v11 = (short)pgm_read_word(&TBL[m-0][1]); \
|
v11 = short(pgm_read_word(&TBL[m-0][1])); \
|
||||||
return v01 + (raw - v00) * float(v11 - v01) / float(v10 - v00); \
|
return v01 + (raw - v00) * float(v11 - v01) / float(v10 - v00); \
|
||||||
} \
|
} \
|
||||||
} \
|
} \
|
||||||
|
@ -1301,12 +1319,6 @@ void Temperature::manage_heater() {
|
||||||
value += user_thermistor[t_index].sh_c_coeff * log_resistance * log_resistance * log_resistance;
|
value += user_thermistor[t_index].sh_c_coeff * log_resistance * log_resistance * log_resistance;
|
||||||
value = 1.0f / value;
|
value = 1.0f / value;
|
||||||
|
|
||||||
// Convert to degrees C
|
|
||||||
float deg_c = value + THERMISTOR_ABS_ZERO_C;
|
|
||||||
|
|
||||||
// Test only
|
|
||||||
//deg_c = constrain(deg_c, 6, 100);
|
|
||||||
|
|
||||||
//#if (MOTHERBOARD == BOARD_RAMPS_14_EFB)
|
//#if (MOTHERBOARD == BOARD_RAMPS_14_EFB)
|
||||||
// int32_t clocks = TCNT5 - tcnt5;
|
// int32_t clocks = TCNT5 - tcnt5;
|
||||||
// if (clocks >= 0) {
|
// if (clocks >= 0) {
|
||||||
|
@ -1315,7 +1327,8 @@ void Temperature::manage_heater() {
|
||||||
// }
|
// }
|
||||||
//#endif
|
//#endif
|
||||||
|
|
||||||
return deg_c;
|
// Return degrees C (up to 999, as the LCD only displays 3 digits)
|
||||||
|
return MIN(value + THERMISTOR_ABS_ZERO_C, 999);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
Reference in a new issue