|
@@ -1891,10 +1891,6 @@ void temp_mgr_init()
|
|
|
TCNT5 = 0;
|
|
|
OCR5A = TIMER5_OCRA_OVF;
|
|
|
|
|
|
-#ifdef TEMP_MODEL
|
|
|
- temp_model::init();
|
|
|
-#endif
|
|
|
-
|
|
|
// clear pending interrupts, enable COMPA
|
|
|
TIFR5 |= (1<<OCF5A);
|
|
|
ENABLE_TEMP_MGR_INTERRUPT();
|
|
@@ -2391,21 +2387,6 @@ void setup()
|
|
|
data.flag_bits.uninitialized = true;
|
|
|
}
|
|
|
|
|
|
-void init()
|
|
|
-{
|
|
|
- // TODO: initialize the model with eeprom values
|
|
|
- data.P = TEMP_MODEL_P;
|
|
|
- data.C = TEMP_MODEL_C;
|
|
|
- for(uint8_t i = 0; i != TEMP_MODEL_R_SIZE; ++i)
|
|
|
- data.R[i] = TEMP_MODEL_R;
|
|
|
- data.Ta_corr = TEMP_MODEL_Ta_corr;
|
|
|
- data.warn = TEMP_MODEL_W;
|
|
|
- data.err = TEMP_MODEL_E;
|
|
|
-
|
|
|
- enabled = true;
|
|
|
- setup();
|
|
|
-}
|
|
|
-
|
|
|
bool calibrated()
|
|
|
{
|
|
|
if(!(data.P >= 0)) return false;
|
|
@@ -2567,12 +2548,62 @@ void temp_model_set_resistance(uint8_t index, float R)
|
|
|
|
|
|
void temp_model_report_settings()
|
|
|
{
|
|
|
- printf_P(PSTR("%STemperature Model settings:\n"
|
|
|
- "%S M310 P%.2f C%.2f S%u E%.2f W%.2f T%.2f\n"),
|
|
|
- echomagic, echomagic, (double)temp_model::data.P, (double)temp_model::data.C, (unsigned)temp_model::enabled,
|
|
|
- (double)temp_model::data.err, (double)temp_model::data.warn, (double)temp_model::data.Ta_corr);
|
|
|
+ SERIAL_ECHO_START;
|
|
|
+ SERIAL_ECHOLNPGM("Temperature Model settings:");
|
|
|
for(uint8_t i = 0; i != TEMP_MODEL_R_SIZE; ++i)
|
|
|
printf_P(PSTR("%S M310 I%u R%.2f\n"), echomagic, (unsigned)i, (double)temp_model::data.R[i]);
|
|
|
+ printf_P(PSTR("%S M310 P%.2f C%.2f S%u B%u E%.2f W%.2f T%.2f\n"),
|
|
|
+ echomagic, (double)temp_model::data.P, (double)temp_model::data.C,
|
|
|
+ (unsigned)temp_model::enabled, (unsigned)temp_model::warn_beep,
|
|
|
+ (double)temp_model::data.err, (double)temp_model::data.warn,
|
|
|
+ (double)temp_model::data.Ta_corr);
|
|
|
+}
|
|
|
+
|
|
|
+void temp_model_reset_settings()
|
|
|
+{
|
|
|
+ TempMgrGuard temp_mgr_guard;
|
|
|
+
|
|
|
+ temp_model::data.P = TEMP_MODEL_P;
|
|
|
+ temp_model::data.C = NAN;
|
|
|
+ for(uint8_t i = 0; i != TEMP_MODEL_R_SIZE; ++i)
|
|
|
+ temp_model::data.R[i] = NAN;
|
|
|
+ temp_model::data.Ta_corr = TEMP_MODEL_Ta_corr;
|
|
|
+ temp_model::data.warn = TEMP_MODEL_W;
|
|
|
+ temp_model::data.err = TEMP_MODEL_E;
|
|
|
+ temp_model::enabled = false;
|
|
|
+}
|
|
|
+
|
|
|
+void temp_model_load_settings()
|
|
|
+{
|
|
|
+ static_assert(TEMP_MODEL_R_SIZE == 16); // ensure we don't desync with the eeprom table
|
|
|
+ TempMgrGuard temp_mgr_guard;
|
|
|
+
|
|
|
+ temp_model::enabled = eeprom_read_byte((uint8_t*)EEPROM_TEMP_MODEL_ENABLE);
|
|
|
+ temp_model::data.P = eeprom_read_float((float*)EEPROM_TEMP_MODEL_P);
|
|
|
+ temp_model::data.C = eeprom_read_float((float*)EEPROM_TEMP_MODEL_C);
|
|
|
+ for(uint8_t i = 0; i != TEMP_MODEL_R_SIZE; ++i)
|
|
|
+ temp_model::data.R[i] = eeprom_read_float((float*)EEPROM_TEMP_MODEL_R + i);
|
|
|
+ temp_model::data.Ta_corr = eeprom_read_float((float*)EEPROM_TEMP_MODEL_Ta_corr);
|
|
|
+ temp_model::data.warn = eeprom_read_float((float*)EEPROM_TEMP_MODEL_W);
|
|
|
+ temp_model::data.err = eeprom_read_float((float*)EEPROM_TEMP_MODEL_E);
|
|
|
+
|
|
|
+ if(!temp_model::calibrated()) {
|
|
|
+ SERIAL_ECHOLNPGM("TM: stored calibration invalid, resetting");
|
|
|
+ temp_model_reset_settings();
|
|
|
+ }
|
|
|
+ temp_model::setup();
|
|
|
+}
|
|
|
+
|
|
|
+void temp_model_save_settings()
|
|
|
+{
|
|
|
+ eeprom_update_byte((uint8_t*)EEPROM_TEMP_MODEL_ENABLE, temp_model::enabled);
|
|
|
+ eeprom_update_float((float*)EEPROM_TEMP_MODEL_P, temp_model::data.P);
|
|
|
+ eeprom_update_float((float*)EEPROM_TEMP_MODEL_C, temp_model::data.C);
|
|
|
+ for(uint8_t i = 0; i != TEMP_MODEL_R_SIZE; ++i)
|
|
|
+ eeprom_update_float((float*)EEPROM_TEMP_MODEL_R + i, temp_model::data.R[i]);
|
|
|
+ eeprom_update_float((float*)EEPROM_TEMP_MODEL_Ta_corr, temp_model::data.Ta_corr);
|
|
|
+ eeprom_update_float((float*)EEPROM_TEMP_MODEL_W, temp_model::data.warn);
|
|
|
+ eeprom_update_float((float*)EEPROM_TEMP_MODEL_E, temp_model::data.err);
|
|
|
}
|
|
|
|
|
|
void temp_model_autotune(float temp)
|