Fix recently added functions (#393)

Changed aseTsnDelay name to aseTaperTime
Added a default aseTaperTime to 0.1S
aseTsnStart isn't needed, removed
Added IAC_STEP_OL taper, big thanks to Ryan
Default dfcoMinCLT is 0C, added calibration offset and increased it to 40C as described on updates.ino
Changed bitRead to BIT_CHECK
Fix dfcoStart wasn't been reseted if conditions was droped before elapsed time causing next DFCO activation right away
Few cosmetical changes on ini

Update commits counter
This commit is contained in:
Vitor Moreno B. Sales 2020-05-28 23:25:33 -03:00 committed by GitHub
parent 141078639b
commit 27cc6ddf4c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
9 changed files with 48 additions and 36 deletions

View File

@ -6,7 +6,7 @@
[![License](https://img.shields.io/badge/license-GPLv3-blue.svg)](https://github.com/noisymime/speeduino/blob/master/LICENSE) [![License](https://img.shields.io/badge/license-GPLv3-blue.svg)](https://github.com/noisymime/speeduino/blob/master/LICENSE)
[![Build Status](https://img.shields.io/travis/noisymime/speeduino.svg)](https://travis-ci.org/noisymime/speeduino/) [![Build Status](https://img.shields.io/travis/noisymime/speeduino.svg)](https://travis-ci.org/noisymime/speeduino/)
[![Open Bounties](https://img.shields.io/bountysource/team/speeduino/activity.svg)](https://www.bountysource.com/teams/speeduino) [![Open Bounties](https://img.shields.io/bountysource/team/speeduino/activity.svg)](https://www.bountysource.com/teams/speeduino)
[![GitHub commits](https://img.shields.io/github/commits-since/noisymime/speeduino/202002.svg)](https://github.com/noisymime/speeduino/compare/202002...master) [![GitHub commits](https://img.shields.io/github/commits-since/noisymime/speeduino/202005.svg)](https://github.com/noisymime/speeduino/compare/202005...master)
![MISRA](https://img.shields.io/azure-devops/tests/speeduino/Speeduino/1?label=MISRA&passed_label=warnings&failed_label=violations) ![MISRA](https://img.shields.io/azure-devops/tests/speeduino/Speeduino/1?label=MISRA&passed_label=warnings&failed_label=violations)
[![Chat on Slack](https://img.shields.io/badge/slack-speeduino-CC2B5E.svg?style=flat&logo=slack)](https://speeduino.com/home/community/slack) [![Chat on Slack](https://img.shields.io/badge/slack-speeduino-CC2B5E.svg?style=flat&logo=slack)](https://speeduino.com/home/community/slack)

View File

@ -314,7 +314,7 @@
<pcVariable digits="0" name="tsEtRollOut" units="in">0.0</pcVariable> <pcVariable digits="0" name="tsEtRollOut" units="in">0.0</pcVariable>
</page> </page>
<page number="0" size="128"> <page number="0" size="128">
<constant digits="1" name="aseTsnDelay" units="S">4.0</constant> <constant digits="1" name="aseTaperTime" units="S">4.0</constant>
<constant digits="0" name="aeColdPct" units="%">100.0</constant> <constant digits="0" name="aeColdPct" units="%">100.0</constant>
<constant digits="0" name="aeColdTaperMin" units="C">0.0</constant> <constant digits="0" name="aeColdTaperMin" units="C">0.0</constant>
<constant name="aeMode">"TPS"</constant> <constant name="aeMode">"TPS"</constant>

View File

@ -326,7 +326,7 @@
<pcVariable digits="0" name="tsEtRollOut" units="in">0.0</pcVariable> <pcVariable digits="0" name="tsEtRollOut" units="in">0.0</pcVariable>
</page> </page>
<page number="0" size="128"> <page number="0" size="128">
<constant digits="1" name="aseTsnDelay" units="S">4.0</constant> <constant digits="1" name="aseTaperTime" units="S">4.0</constant>
<constant digits="0" name="aeColdPct" units="%">100.0</constant> <constant digits="0" name="aeColdPct" units="%">100.0</constant>
<constant digits="0" name="aeColdTaperMin" units="C">0.0</constant> <constant digits="0" name="aeColdTaperMin" units="C">0.0</constant>
<constant name="aeMode">"TPS"</constant> <constant name="aeMode">"TPS"</constant>

View File

@ -218,7 +218,7 @@
;Page 1 is all general settings. Note that some of these (algorithm and ignAlgorithm) MUST come before their use in the bitStringValue() calls in the fuel and ignition tables ;Page 1 is all general settings. Note that some of these (algorithm and ignAlgorithm) MUST come before their use in the bitStringValue() calls in the fuel and ignition tables
;-------------------------------------------------- ;--------------------------------------------------
page = 1 page = 1
aseTsnDelay = scalar, U08, 0, "S", 0.1, 0.0, 0.0, 25.5, 1 aseTaperTime = scalar, U08, 0, "S", 0.1, 0.0, 0.0, 25.5, 1
aeColdPct = scalar, U08, 1, "%", 1.0, 0, 100, 255, 0 ;AE cold adjustment % aeColdPct = scalar, U08, 1, "%", 1.0, 0, 100, 255, 0 ;AE cold adjustment %
#if CELSIUS #if CELSIUS
aeColdTaperMin = scalar, U08, 2, "C", 1.0, -40, -40, 215, 0 ;AE cold adjustment, taper start clt (full adjustment) aeColdTaperMin = scalar, U08, 2, "C", 1.0, -40, -40, 215, 0 ;AE cold adjustment, taper start clt (full adjustment)
@ -1199,7 +1199,7 @@ page = 11
defaultValue = legacyMAP, 0 defaultValue = legacyMAP, 0
defaultValue = battVCorMode, 1 defaultValue = battVCorMode, 1
defaultValue = idleAdvEnabled, 0 ;Idle advance control turned off defaultValue = idleAdvEnabled, 0 ;Idle advance control turned off
defaultValue = aseTsnDelay, 0.0 defaultValue = aseTaperTime, 0.0
defaultValue = dfcoDelay, 0.1 defaultValue = dfcoDelay, 0.1
defaultValue = idleTaperTime, 1.0 defaultValue = idleTaperTime, 1.0
defaultValue = dfcoDelay, 0.1 defaultValue = dfcoDelay, 0.1
@ -1498,7 +1498,7 @@ menuDialog = main
vssSmoothing = "A smoothing factor to help reduce noise in the VSS signal. Typical values are between 0 and 50" vssSmoothing = "A smoothing factor to help reduce noise in the VSS signal. Typical values are between 0 and 50"
aeTime = "The duration of the acceleration enrichment" aeTime = "The duration of the acceleration enrichment"
aseTsnDelay = "Transition time to disable ASE" aseTaperTime = "Transition time to disable ASE"
iacChannels = "The number of output channels used for PWM valves. Select 1 for 2-wire valves or 2 for 3-wire valves." iacChannels = "The number of output channels used for PWM valves. Select 1 for 2-wire valves or 2 for 3-wire valves."
iacStepTime = "Duration of each stepping pulse. Values that are too low can cause the motor to behave erratically or not at all. See the manual for suggested step times" iacStepTime = "Duration of each stepping pulse. Values that are too low can cause the motor to behave erratically or not at all. See the manual for suggested step times"
iacCoolTime = "Cool time between each step. Set to zero if you don't want any cooling at all" iacCoolTime = "Cool time between each step. Set to zero if you don't want any cooling at all"
@ -1642,26 +1642,26 @@ menuDialog = main
fanHyster = "The number of degrees of hysteresis to be used in controlling the fan. Recommended values are between 2 and 5" fanHyster = "The number of degrees of hysteresis to be used in controlling the fan. Recommended values are between 2 and 5"
aeTime = "The duration of the acceleration enrichment" aeTime = "The duration of the acceleration enrichment"
aseTsnDelay = "Transition time to disable ASE" aseTaperTime= "Transition time to disable ASE"
iacChannels = "The number of output channels used for PWM valves. Select 1 for 2-wire valves or 2 for 3-wire valves." iacChannels = "The number of output channels used for PWM valves. Select 1 for 2-wire valves or 2 for 3-wire valves."
iacStepTime = "Duration of each stepping pulse. Values that are too low can cause the motor to behave erratically or not at all. See the manual for suggested step times" iacStepTime = "Duration of each stepping pulse. Values that are too low can cause the motor to behave erratically or not at all. See the manual for suggested step times"
iacCoolTime = "Cool time between each step. Set to zero if you don't want any cooling at all" iacCoolTime = "Cool time between each step. Set to zero if you don't want any cooling at all"
iacStepHome = "Homing steps to perform on startup. Must be greater than the fully open steps value" iacStepHome = "Homing steps to perform on startup. Must be greater than the fully open steps value"
iacMaxSteps = "Maximum number of steps the IAC can be moved away from the home position. Should always be less than Homing steps." iacMaxSteps = "Maximum number of steps the IAC can be moved away from the home position. Should always be less than Homing steps."
iacStepHyster = "The minimum number of steps to move in any one go." iacStepHyster = "The minimum number of steps to move in any one go."
iacAlgorithm = "Selects method of idle control.\nNone = no idle control valve.\nOn/Off valve.\nPWM valve (2,3 wire).\nStepper Valve (4,6,8 wire)." iacAlgorithm = "Selects method of idle control.\nNone = no idle control valve.\nOn/Off valve.\nPWM valve (2,3 wire).\nStepper Valve (4,6,8 wire)."
iacPWMdir = "Normal PWM valves increase RPM with higher duty. If RPM decreases with higher duty then select Reverse" iacPWMdir = "Normal PWM valves increase RPM with higher duty. If RPM decreases with higher duty then select Reverse"
iacCLminDuty= "When using closed loop idle control, this is the minimum duty cycle that the PID loop will allow. Combined with the maximum value, this specifies the working range of your idle valve" iacCLminDuty = "When using closed loop idle control, this is the minimum duty cycle that the PID loop will allow. Combined with the maximum value, this specifies the working range of your idle valve"
iacCLmaxDuty= "When using closed loop idle control, this is the maximum duty cycle that the PID loop will allow. Combined with the minimum value, this specifies the working range of your idle valve" iacCLmaxDuty = "When using closed loop idle control, this is the maximum duty cycle that the PID loop will allow. Combined with the minimum value, this specifies the working range of your idle valve"
iacFastTemp = "Below this temperature, the idle output will be high (On). Above this temperature, it will turn off." iacFastTemp = "Below this temperature, the idle output will be high (On). Above this temperature, it will turn off."
idleUpPolarity = "Normal polarity is a ground switch where an earthed signal activates the Idle Up. The internal pullup will be enabled with Normal polarity. \n Inverted may be used if a 5v signal is used to enable the Idle Up." idleUpPolarity = "Normal polarity is a ground switch where an earthed signal activates the Idle Up. The internal pullup will be enabled with Normal polarity. \n Inverted may be used if a 5v signal is used to enable the Idle Up."
CTPSPolarity = "Normal polarity is a ground switch where an earthed signal activates the closed throttle position. The internal pullup will be enabled with Normal polarity. \n Inverted may be used if a 5v signal is used to enable the closed throttle position." CTPSPolarity = "Normal polarity is a ground switch where an earthed signal activates the closed throttle position. The internal pullup will be enabled with Normal polarity. \n Inverted may be used if a 5v signal is used to enable the closed throttle position."
idleUpAdder = "The amount (In either Duty Cycle % or Steps (Depending on the idle control method in use), that the idle control will increase by when Idle Up is active" idleUpAdder = "The amount (In either Duty Cycle % or Steps (Depending on the idle control method in use), that the idle control will increase by when Idle Up is active"
idleAdvEnabled = "Added setting adds curve values to current spark table values when user defined idle is active. \n Switched setting overrides spark table values and uses curve values for idle ignition timing." idleAdvEnabled = "Added setting adds curve values to current spark table values when user defined idle is active. \n Switched setting overrides spark table values and uses curve values for idle ignition timing."
idleAdvAlgorithm = "Use Throttle position sensor (TPS) or closed throttle position sensor (CTPS) to detect idle state." idleAdvAlgorithm= "Use Throttle position sensor (TPS) or closed throttle position sensor (CTPS) to detect idle state."
idleAdvDelay= "The number of seconds after sync is achieved before the idle advance control begins" idleAdvDelay = "The number of seconds after sync is achieved before the idle advance control begins"
idleTaperTime = "Soft time transition from crank to running PWM targets" idleTaperTime = "Soft time transition from crank to running PWM targets"
oddfire2 = "The ATDC angle of channel 2 for oddfire engines. This is relative to the TDC angle of channel 1" oddfire2 = "The ATDC angle of channel 2 for oddfire engines. This is relative to the TDC angle of channel 1"
oddfire3 = "The ATDC angle of channel 3 for oddfire engines. This is relative to the TDC angle of channel 1 (NOT channel 2)" oddfire3 = "The ATDC angle of channel 3 for oddfire engines. This is relative to the TDC angle of channel 1 (NOT channel 2)"
@ -2142,7 +2142,6 @@ menuDialog = main
field = "Number of outputs", iacChannels, { iacAlgorithm == 2 || iacAlgorithm == 3 } field = "Number of outputs", iacChannels, { iacAlgorithm == 2 || iacAlgorithm == 3 }
field = "Idle valve frequency", idleFreq, { iacAlgorithm == 2 || iacAlgorithm == 3 } field = "Idle valve frequency", idleFreq, { iacAlgorithm == 2 || iacAlgorithm == 3 }
field = "Idle valve direction", iacPWMdir, { iacAlgorithm == 2 || iacAlgorithm == 3 } field = "Idle valve direction", iacPWMdir, { iacAlgorithm == 2 || iacAlgorithm == 3 }
field = "Crank to run taper", idleTaperTime, { iacAlgorithm == 2 }
dialog = closedloop_idle, "Closed loop Idle" dialog = closedloop_idle, "Closed loop Idle"
field = "P", idleKP, { iacAlgorithm == 3 || iacAlgorithm == 5 } field = "P", idleKP, { iacAlgorithm == 3 || iacAlgorithm == 5 }
@ -2154,6 +2153,7 @@ menuDialog = main
dialog = idleSettings, "Idle Settings" dialog = idleSettings, "Idle Settings"
topicHelp = "https://wiki.speeduino.com/en/configuration/Idle" topicHelp = "https://wiki.speeduino.com/en/configuration/Idle"
field = "Idle control type", iacAlgorithm field = "Idle control type", iacAlgorithm
field = "Crank to run taper", idleTaperTime, { iacAlgorithm == 2 || iacAlgorithm == 4 }
field = "#Fast Idle" field = "#Fast Idle"
field = "Fast idle temp", iacFastTemp, { iacAlgorithm == 1 } field = "Fast idle temp", iacFastTemp, { iacAlgorithm == 1 }
panel = pwm_idle panel = pwm_idle
@ -2205,7 +2205,7 @@ menuDialog = main
dialog = ASE_time, "Duration (s)", yAxis dialog = ASE_time, "Duration (s)", yAxis
field = "How long time the After Start Enrichment is applied in seconds." field = "How long time the After Start Enrichment is applied in seconds."
field = "Usually this is varies from 1-2s when engine is hot up to 20s on a cold engine." field = "Usually this is varies from 1-2s when engine is hot up to 20s on a cold engine."
field = "Transition time to disable", aseTsnDelay field = "Transition time to disable", aseTaperTime
panel = afterstart_enrichment_time panel = afterstart_enrichment_time
dialog = ASE, "Afterstart Enrichment(ASE)", yAxis dialog = ASE, "Afterstart Enrichment(ASE)", yAxis

View File

@ -41,7 +41,6 @@ extern unsigned long knockStartTime;
extern byte lastKnockCount; extern byte lastKnockCount;
extern int16_t knockWindowMin; //The current minimum crank angle for a knock pulse to be valid extern int16_t knockWindowMin; //The current minimum crank angle for a knock pulse to be valid
extern int16_t knockWindowMax;//The current maximum crank angle for a knock pulse to be valid extern int16_t knockWindowMax;//The current maximum crank angle for a knock pulse to be valid
extern byte aseTsnStart;
extern uint16_t dfcoStart; extern uint16_t dfcoStart;
#endif // CORRECTIONS_H #endif // CORRECTIONS_H

View File

@ -29,7 +29,6 @@ unsigned long knockStartTime;
byte lastKnockCount; byte lastKnockCount;
int16_t knockWindowMin; //The current minimum crank angle for a knock pulse to be valid int16_t knockWindowMin; //The current minimum crank angle for a knock pulse to be valid
int16_t knockWindowMax;//The current maximum crank angle for a knock pulse to be valid int16_t knockWindowMax;//The current maximum crank angle for a knock pulse to be valid
byte aseTsnStart;
uint16_t dfcoStart; uint16_t dfcoStart;
void initialiseCorrections() void initialiseCorrections()
@ -102,7 +101,7 @@ uint16_t correctionsFuel()
if (currentStatus.launchCorrection != 100) { sumCorrections = (sumCorrections * currentStatus.launchCorrection); activeCorrections++; } if (currentStatus.launchCorrection != 100) { sumCorrections = (sumCorrections * currentStatus.launchCorrection); activeCorrections++; }
bitWrite(currentStatus.status1, BIT_STATUS1_DFCO, correctionDFCO()); bitWrite(currentStatus.status1, BIT_STATUS1_DFCO, correctionDFCO());
if ( bitRead(currentStatus.status1, BIT_STATUS1_DFCO) == 1 ) { sumCorrections = 0; } if ( BIT_CHECK(currentStatus.status1, BIT_STATUS1_DFCO) == 1 ) { sumCorrections = 0; }
sumCorrections = sumCorrections / powint(100,activeCorrections); sumCorrections = sumCorrections / powint(100,activeCorrections);
@ -134,7 +133,7 @@ static inline byte correctionsFuel_new()
currentStatus.launchCorrection = correctionLaunch(); numCorrections++; currentStatus.launchCorrection = correctionLaunch(); numCorrections++;
bitWrite(currentStatus.status1, BIT_STATUS1_DFCO, correctionDFCO()); bitWrite(currentStatus.status1, BIT_STATUS1_DFCO, correctionDFCO());
if ( bitRead(currentStatus.status1, BIT_STATUS1_DFCO) == 1 ) { sumCorrections = 0; } if ( BIT_CHECK(currentStatus.status1, BIT_STATUS1_DFCO) == 1 ) { sumCorrections = 0; }
sumCorrections = currentStatus.wueCorrection \ sumCorrections = currentStatus.wueCorrection \
+ correctionASEvalue \ + correctionASEvalue \
@ -221,14 +220,13 @@ byte correctionASE()
{ {
BIT_SET(currentStatus.engine, BIT_ENGINE_ASE); //Mark ASE as active. BIT_SET(currentStatus.engine, BIT_ENGINE_ASE); //Mark ASE as active.
ASEValue = 100 + table2D_getValue(&ASETable, currentStatus.coolant + CALIBRATION_TEMPERATURE_OFFSET); ASEValue = 100 + table2D_getValue(&ASETable, currentStatus.coolant + CALIBRATION_TEMPERATURE_OFFSET);
aseTsnStart = runSecsX10;
} }
else else
{ {
if (( (runSecsX10 - aseTsnStart) < configPage2.aseTsnDelay ) && (!BIT_CHECK(currentStatus.engine, BIT_ENGINE_CRANK)) ) //Cranking check needs to be here also, so cranking and afterstart enrichments won't run simultaneously if ( (!BIT_CHECK(currentStatus.engine, BIT_ENGINE_CRANK)) && (runSecsX10 < configPage2.aseTaperTime) ) //Cranking check needs to be here also, so cranking and afterstart enrichments won't run simultaneously
{ {
BIT_SET(currentStatus.engine, BIT_ENGINE_ASE); //Mark ASE as active. BIT_SET(currentStatus.engine, BIT_ENGINE_ASE); //Mark ASE as active.
ASEValue = 100 + map((runSecsX10 - aseTsnStart), 0, configPage2.aseTsnDelay,\ ASEValue = 100 + map(runSecsX10, 0, configPage2.aseTaperTime,\
table2D_getValue(&ASETable, currentStatus.coolant + CALIBRATION_TEMPERATURE_OFFSET), 0); table2D_getValue(&ASETable, currentStatus.coolant + CALIBRATION_TEMPERATURE_OFFSET), 0);
} }
else else
@ -484,7 +482,7 @@ bool correctionDFCO()
bool DFCOValue = false; bool DFCOValue = false;
if ( configPage2.dfcoEnabled == 1 ) if ( configPage2.dfcoEnabled == 1 )
{ {
if ( bitRead(currentStatus.status1, BIT_STATUS1_DFCO) == 1 ) if ( BIT_CHECK(currentStatus.status1, BIT_STATUS1_DFCO) == 1 )
{ {
DFCOValue = ( currentStatus.RPM > ( configPage4.dfcoRPM * 10) ) && ( currentStatus.TPS < configPage4.dfcoTPSThresh ); DFCOValue = ( currentStatus.RPM > ( configPage4.dfcoRPM * 10) ) && ( currentStatus.TPS < configPage4.dfcoTPSThresh );
if ( DFCOValue == false) { dfcoStart = 0; } if ( DFCOValue == false) { dfcoStart = 0; }
@ -496,6 +494,7 @@ bool correctionDFCO()
if ( dfcoStart == 0 ) { dfcoStart = runSecsX10; } if ( dfcoStart == 0 ) { dfcoStart = runSecsX10; }
if( (runSecsX10 - dfcoStart) > configPage2.dfcoDelay ) { DFCOValue = true; } if( (runSecsX10 - dfcoStart) > configPage2.dfcoDelay ) { DFCOValue = true; }
} }
else { dfcoStart = 0; } //Prevent future activation right away if previous time wasn't activated
} // DFCO active check } // DFCO active check
} // DFCO enabled check } // DFCO enabled check
return DFCOValue; return DFCOValue;

View File

@ -551,7 +551,7 @@ struct statuses {
*/ */
struct config2 { struct config2 {
byte aseTsnDelay; byte aseTaperTime;
byte aeColdPct; //AE cold clt modifier % byte aeColdPct; //AE cold clt modifier %
byte aeColdTaperMin; //AE cold modifier, taper start temp (full modifier), was ASE in early versions byte aeColdTaperMin; //AE cold modifier, taper start temp (full modifier), was ASE in early versions
byte aeMode : 2; /**< Acceleration Enrichment mode. 0 = TPS, 1 = MAP. Values 2 and 3 reserved for potential future use (ie blended TPS / MAP) */ byte aeMode : 2; /**< Acceleration Enrichment mode. 0 = TPS, 1 = MAP. Values 2 and 3 reserved for potential future use (ie blended TPS / MAP) */

View File

@ -307,7 +307,18 @@ void idleControl()
//We must also have more than zero RPM for the running state //We must also have more than zero RPM for the running state
if (BIT_CHECK(LOOP_TIMER, BIT_TIMER_4HZ) && (currentStatus.RPM > 0)) if (BIT_CHECK(LOOP_TIMER, BIT_TIMER_4HZ) && (currentStatus.RPM > 0))
{ {
idleStepper.targetIdleStep = table2D_getValue(&iacStepTable, (currentStatus.coolant + CALIBRATION_TEMPERATURE_OFFSET)) * 3; //All temps are offset by 40 degrees. Step counts are divided by 3 in TS. Multiply back out here if ( runSecsX10 < configPage2.idleTaperTime )
{
//Tapering between cranking IAC value and running
idleStepper.targetIdleStep = map(runSecsX10, 0, configPage2.idleTaperTime,\
table2D_getValue(&iacCrankStepsTable, (currentStatus.coolant + CALIBRATION_TEMPERATURE_OFFSET)) * 3,\
table2D_getValue(&iacStepTable, (currentStatus.coolant + CALIBRATION_TEMPERATURE_OFFSET)) * 3);
}
else
{
//Standard running
idleStepper.targetIdleStep = table2D_getValue(&iacStepTable, (currentStatus.coolant + CALIBRATION_TEMPERATURE_OFFSET)) * 3; //All temps are offset by 40 degrees. Step counts are divided by 3 in TS. Multiply back out here
}
if(currentStatus.idleUpActive == true) { idleStepper.targetIdleStep += configPage2.idleUpAdder; } //Add Idle Up amount if active if(currentStatus.idleUpActive == true) { idleStepper.targetIdleStep += configPage2.idleUpAdder; } //Add Idle Up amount if active
iacStepTime_uS = configPage6.iacStepTime * 1000; iacStepTime_uS = configPage6.iacStepTime * 1000;
iacCoolTime_uS = configPage9.iacCoolTime * 1000; iacCoolTime_uS = configPage9.iacCoolTime * 1000;

View File

@ -322,7 +322,7 @@ void doUpdates()
//Introdced a DFCO delay option. Default it to 0 //Introdced a DFCO delay option. Default it to 0
configPage2.dfcoDelay = 0; configPage2.dfcoDelay = 0;
//Introdced a minimum temperature for DFCO. Default it to 40C //Introdced a minimum temperature for DFCO. Default it to 40C
configPage2.dfcoMinCLT = 40; configPage2.dfcoMinCLT = 80; //CALIBRATION_TEMPERATURE_OFFSET is 40
//Update flexfuel ignition config values for 40 degrees offset //Update flexfuel ignition config values for 40 degrees offset
for (int i=0; i<6; i++) for (int i=0; i<6; i++)
@ -352,6 +352,9 @@ void doUpdates()
//Cranking enrichment to run taper added. Default it to 0,1 secs //Cranking enrichment to run taper added. Default it to 0,1 secs
configPage10.crankingEnrichTaper = 1; configPage10.crankingEnrichTaper = 1;
//ASE to run taper added. Default it to 0,1 secs
configPage2.aseTaperTime = 1;
writeAllConfig(); writeAllConfig();
EEPROM.write(EEPROM_DATA_VERSION, 14); EEPROM.write(EEPROM_DATA_VERSION, 14);