From 699d5888491dc34ad5592be17c3efe49b5cae3e7 Mon Sep 17 00:00:00 2001 From: rusefillc Date: Tue, 12 Dec 2023 14:10:57 -0500 Subject: [PATCH] https://github.com/rusefi/alphax-4chan/issues/166 only:alphax_4chan --- .../boards/hellen/alphax-4chan/prepend.txt | 3 ++ firmware/controllers/actuators/main_relay.cpp | 5 +++ firmware/hw_layer/mc33816.cpp | 2 + firmware/init/sensor/init_vbatt.cpp | 37 ++++++++++++++----- firmware/integration/rusefi_config.txt | 2 + firmware/tunerstudio/rusefi.input | 6 +-- 6 files changed, 43 insertions(+), 12 deletions(-) diff --git a/firmware/config/boards/hellen/alphax-4chan/prepend.txt b/firmware/config/boards/hellen/alphax-4chan/prepend.txt index 9e0d1ba23b..9c73d28298 100644 --- a/firmware/config/boards/hellen/alphax-4chan/prepend.txt +++ b/firmware/config/boards/hellen/alphax-4chan/prepend.txt @@ -18,6 +18,9 @@ #define show_Hellen_presets true #define show_4chan_presets true +#define ts_show_ign_key_analog_input true +! todo: insert actual value here! +#define IGN_KEY_DIVIDER 3 #define TS_TRIGGER_SCOPE_CHANNEL_1_NAME "C2/C3 Crank VR" #define TS_TRIGGER_SCOPE_CHANNEL_2_NAME "E5/E6 Cam VR" diff --git a/firmware/controllers/actuators/main_relay.cpp b/firmware/controllers/actuators/main_relay.cpp index ce7ba723ec..febb44a014 100644 --- a/firmware/controllers/actuators/main_relay.cpp +++ b/firmware/controllers/actuators/main_relay.cpp @@ -4,6 +4,11 @@ void MainRelayController::onSlowCallback() { #if EFI_MAIN_RELAY_CONTROL +#if defined(IGN_KEY_DIVIDER) + if (isAdcChannelValid(engineConfiguration->ignKeyAdcChannel)) { + hasIgnitionVoltage = Sensor::getOrZero(SensorType::IgnKeyVoltage) > 5; + } else +#endif // IGN_KEY_DIVIDER if (engineConfiguration->ignitionKeyDigitalPin != Gpio::Unassigned) { // separate digital input pin just for main relay logic since it's preferred to read voltage from main relay // key-on is usually a bit smaller voltage than main relay but sometimes even 1v off! diff --git a/firmware/hw_layer/mc33816.cpp b/firmware/hw_layer/mc33816.cpp index f8000d6851..1544409ce1 100644 --- a/firmware/hw_layer/mc33816.cpp +++ b/firmware/hw_layer/mc33816.cpp @@ -1,6 +1,8 @@ /* * @file mc33816.cpp * + * TL,DR: GDI + * * The NXP MC33816 is a programmable gate driver IC for precision solenoid control applications. * * diff --git a/firmware/init/sensor/init_vbatt.cpp b/firmware/init/sensor/init_vbatt.cpp index 083f409043..bceff818d2 100644 --- a/firmware/init/sensor/init_vbatt.cpp +++ b/firmware/init/sensor/init_vbatt.cpp @@ -5,23 +5,42 @@ #include "functional_sensor.h" #include "linear_func.h" -static LinearFunc vbattFunc; static FunctionalSensor vbattSensor(SensorType::BatteryVoltage, /* timeout = */ MS2NT(100)); +static FunctionalSensor ignBattSensor(SensorType::IgnKeyVoltage, /* timeout = */ MS2NT(100)); void initVbatt() { - vbattFunc.configure(0, 0, 1, engineConfiguration->vbattDividerCoeff, 0, 50); - vbattSensor.setFunction(vbattFunc); - - if (!isAdcChannelValid(engineConfiguration->vbattAdcChannel)) { - return; + { + static LinearFunc vbattFunc; // static with scoped visibility just to reduce change of code defect + vbattFunc.configure(0, 0, 1, engineConfiguration->vbattDividerCoeff, 0, 50); + vbattSensor.setFunction(vbattFunc); } - // adcVoltsPerVolt is set to 1.0 because vbatt doesn't go thru the analog input divider - AdcSubscription::SubscribeSensor(vbattSensor, engineConfiguration->vbattAdcChannel, /* filter HZ = */ 20, /* adcVoltsPerVolt = */ 1.0f); +#if defined(IGN_KEY_DIVIDER) + { + static LinearFunc ignBattFunc; // static with scoped visibility just to reduce change of code defect + ignBattFunc.configure(0, 0, 1, IGN_KEY_DIVIDER, 0, 50); + ignBattSensor.setFunction(ignBattFunc); + } +#endif // IGN_KEY_DIVIDER - vbattSensor.Register(); + + if (isAdcChannelValid(engineConfiguration->vbattAdcChannel)) { + // adcVoltsPerVolt is set to 1.0 because vbatt doesn't go thru the analog input divider + AdcSubscription::SubscribeSensor(vbattSensor, engineConfiguration->vbattAdcChannel, /* filter HZ = */ 20, /* adcVoltsPerVolt = */ 1.0f); + vbattSensor.Register(); + } + +#if defined(IGN_KEY_DIVIDER) + if (isAdcChannelValid(engineConfiguration->ignKeyAdcChannel)) { + AdcSubscription::SubscribeSensor(ignBattSensor, engineConfiguration->ignKeyAdcChannel, /* filter HZ = */ 20, /* adcVoltsPerVolt = */ 1.0f); + ignBattSensor.Register(); + } +#endif // IGN_KEY_DIVIDER } void deinitVbatt() { AdcSubscription::UnsubscribeSensor(vbattSensor, engineConfiguration->vbattAdcChannel); +#if defined(IGN_KEY_DIVIDER) + AdcSubscription::UnsubscribeSensor(ignBattSensor, engineConfiguration->ignKeyAdcChannel); +#endif // IGN_KEY_DIVIDER } diff --git a/firmware/integration/rusefi_config.txt b/firmware/integration/rusefi_config.txt index 440aa6d987..8fb953e306 100644 --- a/firmware/integration/rusefi_config.txt +++ b/firmware/integration/rusefi_config.txt @@ -2213,6 +2213,8 @@ end_struct #define SIMULATOR_TUNE_BIN_FILE_NAME "generated/simulator_tune_image.bin" ! some board files override this value using prepend file +#define ts_show_ign_key_switch false +#define ts_show_ign_key_analog_input false #define ts_show_hip9011 false #define ts_show_tps_sent false #define ts_show_inj_diag false diff --git a/firmware/tunerstudio/rusefi.input b/firmware/tunerstudio/rusefi.input index 482e101bcb..6572a322b8 100644 --- a/firmware/tunerstudio/rusefi.input +++ b/firmware/tunerstudio/rusefi.input @@ -3783,9 +3783,9 @@ cmd_set_engine_type_default = "@@TS_IO_TEST_COMMAND_char@@@@ts_command_e_TS_ ; Engine->Battery & Alternator dialog = batteryDialog, "Battery Settings", yAxis field = "vBatt ADC input", vbattAdcChannel - field = "Ignition Key ADC input", ignKeyAdcChannel - field = "Ignition Key Switch", ignitionKeyDigitalPin - field = "Ignition Key Switch Mode", ignitionKeyDigitalPinMode + field = "Ignition Key ADC input", ignKeyAdcChannel@@if_ts_show_ign_key_analog_input + field = "Ignition Key Switch", ignitionKeyDigitalPin@@if_ts_show_ign_key_switch + field = "Ignition Key Switch Mode", ignitionKeyDigitalPinMode@@if_ts_show_ign_key_switch field = "Battery Input Divider Coefficient", vbattDividerCoeff dialog = alternator, "Alternator Settings", yAxis field = "Enabled", isAlternatorControlEnabled