From 144093e252075250ed0e7fa15bdfcc7ac435a1fd Mon Sep 17 00:00:00 2001 From: Filip Ayazi Date: Mon, 13 Mar 2023 14:50:03 +0000 Subject: [PATCH] Fix handling of uninitialised EEPROM values PWM channels now set to 0, CC channel to 30mA, dt to 1000us --- src/modules/illumination/illumination.cpp | 23 ++++++++++++++++++++++- src/modules/stage/stage.cpp | 2 +- 2 files changed, 23 insertions(+), 2 deletions(-) diff --git a/src/modules/illumination/illumination.cpp b/src/modules/illumination/illumination.cpp index bd6ec55..d7861e0 100644 --- a/src/modules/illumination/illumination.cpp +++ b/src/modules/illumination/illumination.cpp @@ -125,14 +125,27 @@ void illumination_setup() #ifdef WIRING_CC_LED EEPROM.get(cc_value_eeprom, cc_value); pinMode(WIRING_CC_LED, OUTPUT); + if (cc_value > 32.0) + { + //default value ~30mA + cc_value = 10; + EEPROM.put(cc_value_eeprom, cc_value); + } + if (cc_value > 0) cc_set_value(cc_value/32.0); #endif + bool frequency_valid = false; #ifdef MCU_PICO + frequency_valid = true; EEPROM.get(pwm_frequency_eeprom, pwm_frequency); - if (pwm_frequency < 1) + if (pwm_frequency < 1 || pwm_frequency > 2000000) + { + frequency_valid = false; pwm_frequency = 64000; + EEPROM.put(pwm_frequency_eeprom, pwm_frequency); + } analogWriteRange(65535); analogWriteFreq(pwm_frequency);//32khz seems sensible #endif @@ -140,6 +153,14 @@ void illumination_setup() for(int i = 0; i < PWM_NUM; i++) { EEPROM.get(pwm_values_eeprom+i*sizeof(uint16_t), pwm_values[i]); + //rp2040 has 16bit PWM range so we rely on frequency to check if this + //is the first start. On other platforms this value is enough + if (pwm_values[i] == 65535 && !frequency_valid) + { + pwm_values[i] = 0; + EEPROM.put(pwm_values_eeprom+i*sizeof(uint16_t), pwm_values[i]); + } + if (pwm_values[i] > 0) analogWrite(pwm_led_pins[i], pwm_values[i]); } diff --git a/src/modules/stage/stage.cpp b/src/modules/stage/stage.cpp index a8f0b90..1d5c86c 100644 --- a/src/modules/stage/stage.cpp +++ b/src/modules/stage/stage.cpp @@ -54,7 +54,7 @@ void stage_setup() } EEPROM.get(min_step_delay_eeprom, min_step_delay); - if (min_step_delay < 0) + if (min_step_delay <= 0) { // -1 seems to be what we get if it's uninitialised. min_step_delay = 1000; EEPROM.put(min_step_delay_eeprom, min_step_delay);