Fix issue when switching to sequential fuel post PR #478
This commit is contained in:
parent
2467960bbd
commit
7c94329bf3
|
@ -4,5 +4,7 @@
|
|||
void initialiseAll();
|
||||
void initialiseTriggers();
|
||||
void setPinMapping(byte);
|
||||
void changeHalfToFullSync(void);
|
||||
void changeFullToHalfSync(void);
|
||||
|
||||
#endif
|
|
@ -3297,3 +3297,196 @@ void initialiseTriggers()
|
|||
break;
|
||||
}
|
||||
}
|
||||
|
||||
/** Change injectors or/and ignition angles to 720deg.
|
||||
* Roll back req_fuel size and set number of outputs equal to cylinder count.
|
||||
* */
|
||||
void changeHalfToFullSync(void)
|
||||
{
|
||||
//Need to do another check for injLayout as this function can be called from ignition
|
||||
if( (configPage2.injLayout == INJ_SEQUENTIAL) && (CRANK_ANGLE_MAX_INJ != 720) )
|
||||
{
|
||||
CRANK_ANGLE_MAX_INJ = 720;
|
||||
maxIgnOutputs = configPage2.nCylinders;
|
||||
req_fuel_uS *= 2;
|
||||
|
||||
inj1StartFunction = openInjector1;
|
||||
inj1EndFunction = closeInjector1;
|
||||
inj2StartFunction = openInjector2;
|
||||
inj2EndFunction = closeInjector2;
|
||||
inj3StartFunction = openInjector3;
|
||||
inj3EndFunction = closeInjector3;
|
||||
inj4StartFunction = openInjector4;
|
||||
inj4EndFunction = closeInjector4;
|
||||
inj5StartFunction = openInjector5;
|
||||
inj5EndFunction = closeInjector5;
|
||||
inj6StartFunction = openInjector6;
|
||||
inj6EndFunction = closeInjector6;
|
||||
inj7StartFunction = openInjector7;
|
||||
inj7EndFunction = closeInjector7;
|
||||
inj8StartFunction = openInjector8;
|
||||
inj8EndFunction = closeInjector8;
|
||||
|
||||
switch (configPage2.nCylinders)
|
||||
{
|
||||
case 4:
|
||||
channel3InjEnabled = true;
|
||||
channel4InjEnabled = true;
|
||||
break;
|
||||
|
||||
case 6:
|
||||
channel4InjEnabled = true;
|
||||
channel5InjEnabled = true;
|
||||
channel6InjEnabled = true;
|
||||
break;
|
||||
|
||||
case 8:
|
||||
channel5InjEnabled = true;
|
||||
channel6InjEnabled = true;
|
||||
channel7InjEnabled = true;
|
||||
channel8InjEnabled = true;
|
||||
break;
|
||||
|
||||
default:
|
||||
break; //No actions required for other cylinder counts
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
//Need to do another check for sparkMode as this function can be called from injection
|
||||
if( (configPage4.sparkMode == IGN_MODE_SEQUENTIAL) && (CRANK_ANGLE_MAX_IGN != 720) )
|
||||
{
|
||||
CRANK_ANGLE_MAX_IGN = 720;
|
||||
maxIgnOutputs = configPage2.nCylinders;
|
||||
switch (configPage2.nCylinders)
|
||||
{
|
||||
case 4:
|
||||
ign1StartFunction = beginCoil1Charge;
|
||||
ign1EndFunction = endCoil1Charge;
|
||||
ign2StartFunction = beginCoil2Charge;
|
||||
ign2EndFunction = endCoil2Charge;
|
||||
break;
|
||||
|
||||
case 6:
|
||||
ign1StartFunction = beginCoil1Charge;
|
||||
ign1EndFunction = endCoil1Charge;
|
||||
ign2StartFunction = beginCoil2Charge;
|
||||
ign2EndFunction = endCoil2Charge;
|
||||
ign3StartFunction = beginCoil3Charge;
|
||||
ign3EndFunction = endCoil3Charge;
|
||||
break;
|
||||
|
||||
case 8:
|
||||
ign1StartFunction = beginCoil1Charge;
|
||||
ign1EndFunction = endCoil1Charge;
|
||||
ign2StartFunction = beginCoil2Charge;
|
||||
ign2EndFunction = endCoil2Charge;
|
||||
ign3StartFunction = beginCoil3Charge;
|
||||
ign3EndFunction = endCoil3Charge;
|
||||
ign4StartFunction = beginCoil4Charge;
|
||||
ign4EndFunction = endCoil4Charge;
|
||||
break;
|
||||
|
||||
default:
|
||||
break; //No actions required for other cylinder counts
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/** Change injectors or/and ignition angles to 360deg.
|
||||
* In semi sequentiol mode req_fuel size is half.
|
||||
* Set number of outputs equal to half cylinder count.
|
||||
* */
|
||||
void changeFullToHalfSync(void)
|
||||
{
|
||||
if(configPage2.injLayout == INJ_SEQUENTIAL)
|
||||
{
|
||||
CRANK_ANGLE_MAX_INJ = 360;
|
||||
maxIgnOutputs = configPage2.nCylinders / 2;
|
||||
req_fuel_uS /= 2;
|
||||
switch (configPage2.nCylinders)
|
||||
{
|
||||
case 4:
|
||||
if(configPage4.inj4cylPairing == INJ_PAIR_13_24)
|
||||
{
|
||||
inj1StartFunction = openInjector1and3;
|
||||
inj1EndFunction = closeInjector1and3;
|
||||
inj2StartFunction = openInjector2and4;
|
||||
inj2EndFunction = closeInjector2and4;
|
||||
}
|
||||
else
|
||||
{
|
||||
inj1StartFunction = openInjector1and4;
|
||||
inj1EndFunction = closeInjector1and4;
|
||||
inj2StartFunction = openInjector2and3;
|
||||
inj2EndFunction = closeInjector2and3;
|
||||
}
|
||||
channel3InjEnabled = false;
|
||||
channel4InjEnabled = false;
|
||||
break;
|
||||
|
||||
case 6:
|
||||
inj1StartFunction = openInjector1and4;
|
||||
inj1EndFunction = closeInjector1and4;
|
||||
inj2StartFunction = openInjector2and5;
|
||||
inj2EndFunction = closeInjector2and5;
|
||||
inj3StartFunction = openInjector3and6;
|
||||
inj3EndFunction = closeInjector3and6;
|
||||
channel4InjEnabled = false;
|
||||
channel5InjEnabled = false;
|
||||
channel6InjEnabled = false;
|
||||
break;
|
||||
|
||||
case 8:
|
||||
inj1StartFunction = openInjector1and5;
|
||||
inj1EndFunction = closeInjector1and5;
|
||||
inj2StartFunction = openInjector2and6;
|
||||
inj2EndFunction = closeInjector2and6;
|
||||
inj3StartFunction = openInjector3and7;
|
||||
inj3EndFunction = closeInjector3and7;
|
||||
inj4StartFunction = openInjector4and8;
|
||||
inj4EndFunction = closeInjector4and8;
|
||||
channel5InjEnabled = false;
|
||||
channel6InjEnabled = false;
|
||||
channel7InjEnabled = false;
|
||||
channel8InjEnabled = false;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if(configPage4.sparkMode == IGN_MODE_SEQUENTIAL)
|
||||
{
|
||||
CRANK_ANGLE_MAX_IGN = 360;
|
||||
maxIgnOutputs = configPage2.nCylinders / 2;
|
||||
switch (configPage2.nCylinders)
|
||||
{
|
||||
case 4:
|
||||
ign1StartFunction = beginCoil1and3Charge;
|
||||
ign1EndFunction = endCoil1and3Charge;
|
||||
ign2StartFunction = beginCoil2and4Charge;
|
||||
ign2EndFunction = endCoil2and4Charge;
|
||||
break;
|
||||
|
||||
case 6:
|
||||
ign1StartFunction = beginCoil1and4Charge;
|
||||
ign1EndFunction = endCoil1and4Charge;
|
||||
ign2StartFunction = beginCoil2and5Charge;
|
||||
ign2EndFunction = endCoil2and5Charge;
|
||||
ign3StartFunction = beginCoil3and6Charge;
|
||||
ign3EndFunction = endCoil3and6Charge;
|
||||
break;
|
||||
|
||||
case 8:
|
||||
ign1StartFunction = beginCoil1and5Charge;
|
||||
ign1EndFunction = endCoil1and5Charge;
|
||||
ign2StartFunction = beginCoil2and6Charge;
|
||||
ign2EndFunction = endCoil2and6Charge;
|
||||
ign3StartFunction = beginCoil3and7Charge;
|
||||
ign3EndFunction = endCoil3and7Charge;
|
||||
ign4StartFunction = beginCoil4and8Charge;
|
||||
ign4EndFunction = endCoil4and8Charge;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -586,9 +586,10 @@ void doUpdates()
|
|||
if(readEEPROMVersion() == 19)
|
||||
{
|
||||
//202204
|
||||
|
||||
//Option added to select injector pairing on 4 cylinder engines
|
||||
if( configPage4.inj4cylPairing > INJ_PAIR_14_23 ) { configPage4.inj4cylPairing = 0; } //Check valid value
|
||||
//Half/Full sequential mode
|
||||
if( (configPage2.injLayout == INJ_SEQUENTIAL) && (configPage2.nCylinders == 4) ) { configPage4.inj4cylPairing = INJ_PAIR_13_24; } //Most of inline 4 uses 1-3-4-2 firing order
|
||||
if( configPage2.nCylinders == 4 ) { configPage4.inj4cylPairing = INJ_PAIR_14_23; } //Force setting to use the default mode from previous FW versions. This is to prevent issues on any setups that have been wired accordingly
|
||||
|
||||
configPage9.hardRevMode = 1; //Set hard rev limiter to Fixed mode
|
||||
|
||||
|
|
|
@ -33,8 +33,6 @@ extern uint8_t currentRuleStatus;
|
|||
void setResetControlPinState();
|
||||
byte pinTranslate(byte);
|
||||
byte pinTranslateAnalog(byte);
|
||||
void changeHalfToFullSync(void);
|
||||
void changeFullToHalfSync(void);
|
||||
void initialiseProgrammableIO();
|
||||
void checkProgrammableIO();
|
||||
int16_t ProgrammableIOGetData(uint16_t index);
|
||||
|
|
|
@ -117,192 +117,6 @@ void setResetControlPinState()
|
|||
}
|
||||
}
|
||||
|
||||
|
||||
/** Change injectors or/and ignition angles to 720deg.
|
||||
* Roll back req_fuel size and set number of outputs equal to cylinder count.
|
||||
* */
|
||||
void changeHalfToFullSync(void)
|
||||
{
|
||||
//Need to do another check for injLayout as this function can be called from ignition
|
||||
if( (configPage2.injLayout == INJ_SEQUENTIAL) && (CRANK_ANGLE_MAX_INJ != 720) )
|
||||
{
|
||||
CRANK_ANGLE_MAX_INJ = 720;
|
||||
maxIgnOutputs = configPage2.nCylinders;
|
||||
req_fuel_uS *= 2;
|
||||
switch (configPage2.nCylinders)
|
||||
{
|
||||
case 4:
|
||||
inj1StartFunction = openInjector1;
|
||||
inj1EndFunction = closeInjector1;
|
||||
inj2StartFunction = openInjector2;
|
||||
inj2EndFunction = closeInjector2;
|
||||
channel3InjEnabled = true;
|
||||
channel4InjEnabled = true;
|
||||
break;
|
||||
|
||||
case 6:
|
||||
inj1StartFunction = openInjector1;
|
||||
inj1EndFunction = closeInjector1;
|
||||
inj2StartFunction = openInjector2;
|
||||
inj2EndFunction = closeInjector2;
|
||||
inj3StartFunction = openInjector3;
|
||||
inj3EndFunction = closeInjector3;
|
||||
channel4InjEnabled = true;
|
||||
channel5InjEnabled = true;
|
||||
channel6InjEnabled = true;
|
||||
break;
|
||||
|
||||
case 8:
|
||||
inj1StartFunction = openInjector1;
|
||||
inj1EndFunction = closeInjector1;
|
||||
inj2StartFunction = openInjector2;
|
||||
inj2EndFunction = closeInjector2;
|
||||
inj3StartFunction = openInjector3;
|
||||
inj3EndFunction = closeInjector3;
|
||||
inj4StartFunction = openInjector4;
|
||||
inj4EndFunction = closeInjector4;
|
||||
channel5InjEnabled = true;
|
||||
channel6InjEnabled = true;
|
||||
channel7InjEnabled = true;
|
||||
channel8InjEnabled = true;
|
||||
break;
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
//Need to do another check for sparkMode as this function can be called from injection
|
||||
if( (configPage4.sparkMode == IGN_MODE_SEQUENTIAL) && (CRANK_ANGLE_MAX_IGN != 720) )
|
||||
{
|
||||
CRANK_ANGLE_MAX_IGN = 720;
|
||||
maxIgnOutputs = configPage2.nCylinders;
|
||||
switch (configPage2.nCylinders)
|
||||
{
|
||||
case 4:
|
||||
ign1StartFunction = beginCoil1Charge;
|
||||
ign1EndFunction = endCoil1Charge;
|
||||
ign2StartFunction = beginCoil2Charge;
|
||||
ign2EndFunction = endCoil2Charge;
|
||||
break;
|
||||
|
||||
case 6:
|
||||
ign1StartFunction = beginCoil1Charge;
|
||||
ign1EndFunction = endCoil1Charge;
|
||||
ign2StartFunction = beginCoil2Charge;
|
||||
ign2EndFunction = endCoil2Charge;
|
||||
ign3StartFunction = beginCoil3Charge;
|
||||
ign3EndFunction = endCoil3Charge;
|
||||
break;
|
||||
|
||||
case 8:
|
||||
ign1StartFunction = beginCoil1Charge;
|
||||
ign1EndFunction = endCoil1Charge;
|
||||
ign2StartFunction = beginCoil2Charge;
|
||||
ign2EndFunction = endCoil2Charge;
|
||||
ign3StartFunction = beginCoil3Charge;
|
||||
ign3EndFunction = endCoil3Charge;
|
||||
ign4StartFunction = beginCoil4Charge;
|
||||
ign4EndFunction = endCoil4Charge;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/** Change injectors or/and ignition angles to 360deg.
|
||||
* In semi sequentiol mode req_fuel size is half.
|
||||
* Set number of outputs equal to half cylinder count.
|
||||
* */
|
||||
void changeFullToHalfSync(void)
|
||||
{
|
||||
if(configPage2.injLayout == INJ_SEQUENTIAL)
|
||||
{
|
||||
CRANK_ANGLE_MAX_INJ = 360;
|
||||
maxIgnOutputs = configPage2.nCylinders / 2;
|
||||
req_fuel_uS /= 2;
|
||||
switch (configPage2.nCylinders)
|
||||
{
|
||||
case 4:
|
||||
if(configPage4.inj4cylPairing == INJ_PAIR_13_24)
|
||||
{
|
||||
inj1StartFunction = openInjector1and3;
|
||||
inj1EndFunction = closeInjector1and3;
|
||||
inj2StartFunction = openInjector2and4;
|
||||
inj2EndFunction = closeInjector2and4;
|
||||
}
|
||||
else
|
||||
{
|
||||
inj1StartFunction = openInjector1and4;
|
||||
inj1EndFunction = closeInjector1and4;
|
||||
inj2StartFunction = openInjector2and3;
|
||||
inj2EndFunction = closeInjector2and3;
|
||||
}
|
||||
channel3InjEnabled = false;
|
||||
channel4InjEnabled = false;
|
||||
break;
|
||||
|
||||
case 6:
|
||||
inj1StartFunction = openInjector1and4;
|
||||
inj1EndFunction = closeInjector1and4;
|
||||
inj2StartFunction = openInjector2and5;
|
||||
inj2EndFunction = closeInjector2and5;
|
||||
inj3StartFunction = openInjector3and6;
|
||||
inj3EndFunction = closeInjector3and6;
|
||||
channel4InjEnabled = false;
|
||||
channel5InjEnabled = false;
|
||||
channel6InjEnabled = false;
|
||||
break;
|
||||
|
||||
case 8:
|
||||
inj1StartFunction = openInjector1and5;
|
||||
inj1EndFunction = closeInjector1and5;
|
||||
inj2StartFunction = openInjector2and6;
|
||||
inj2EndFunction = closeInjector2and6;
|
||||
inj3StartFunction = openInjector3and7;
|
||||
inj3EndFunction = closeInjector3and7;
|
||||
inj4StartFunction = openInjector4and8;
|
||||
inj4EndFunction = closeInjector4and8;
|
||||
channel5InjEnabled = false;
|
||||
channel6InjEnabled = false;
|
||||
channel7InjEnabled = false;
|
||||
channel8InjEnabled = false;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if(configPage4.sparkMode == IGN_MODE_SEQUENTIAL)
|
||||
{
|
||||
CRANK_ANGLE_MAX_IGN = 360;
|
||||
maxIgnOutputs = configPage2.nCylinders / 2;
|
||||
switch (configPage2.nCylinders)
|
||||
{
|
||||
case 4:
|
||||
ign1StartFunction = beginCoil1and3Charge;
|
||||
ign1EndFunction = endCoil1and3Charge;
|
||||
ign2StartFunction = beginCoil2and4Charge;
|
||||
ign2EndFunction = endCoil2and4Charge;
|
||||
break;
|
||||
|
||||
case 6:
|
||||
ign1StartFunction = beginCoil1and4Charge;
|
||||
ign1EndFunction = endCoil1and4Charge;
|
||||
ign2StartFunction = beginCoil2and5Charge;
|
||||
ign2EndFunction = endCoil2and5Charge;
|
||||
ign3StartFunction = beginCoil3and6Charge;
|
||||
ign3EndFunction = endCoil3and6Charge;
|
||||
break;
|
||||
|
||||
case 8:
|
||||
ign1StartFunction = beginCoil1and5Charge;
|
||||
ign1EndFunction = endCoil1and5Charge;
|
||||
ign2StartFunction = beginCoil2and6Charge;
|
||||
ign2EndFunction = endCoil2and6Charge;
|
||||
ign3StartFunction = beginCoil3and7Charge;
|
||||
ign3EndFunction = endCoil3and7Charge;
|
||||
ign4StartFunction = beginCoil4and8Charge;
|
||||
ign4EndFunction = endCoil4and8Charge;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
//*********************************************************************************************************************************************************************************
|
||||
void initialiseProgrammableIO()
|
||||
{
|
||||
|
|
Loading…
Reference in New Issue