Trigger based locked timing for Basic Distributor and 4G63 decoders
This commit is contained in:
parent
7b9ef56e07
commit
017501878e
|
@ -34,7 +34,7 @@ void initialiseAuxPWM()
|
||||||
vvt_pin_port = portOutputRegister(digitalPinToPort(pinVVT_1));
|
vvt_pin_port = portOutputRegister(digitalPinToPort(pinVVT_1));
|
||||||
vvt_pin_mask = digitalPinToBitMask(pinVVT_1);
|
vvt_pin_mask = digitalPinToBitMask(pinVVT_1);
|
||||||
|
|
||||||
boost_pwm_max_count = 1000000L / (16 * configPage3.boostFreq * 2); //Converts the frequency in Hz to the number of ticks (at 16uS) it takes to complete 1 cycle. The x2 is there because the frequency is stored at half value (in a byte)
|
boost_pwm_max_count = 1000000L / (16 * configPage3.boostFreq * 2); //Converts the frequency in Hz to the number of ticks (at 16uS) it takes to complete 1 cycle. The x2 is there because the frequency is stored at half value (in a byte) to allow freqneucies up to 511Hz
|
||||||
vvt_pwm_max_count = 1000000L / (16 * configPage3.vvtFreq * 2); //Converts the frequency in Hz to the number of ticks (at 16uS) it takes to complete 1 cycle
|
vvt_pwm_max_count = 1000000L / (16 * configPage3.vvtFreq * 2); //Converts the frequency in Hz to the number of ticks (at 16uS) it takes to complete 1 cycle
|
||||||
//TIMSK1 |= (1 << OCIE1A); //Turn on the A compare unit (ie turn on the interrupt) //Shouldn't be needed with closed loop as its turned on below
|
//TIMSK1 |= (1 << OCIE1A); //Turn on the A compare unit (ie turn on the interrupt) //Shouldn't be needed with closed loop as its turned on below
|
||||||
TIMSK1 |= (1 << OCIE1B); //Turn on the B compare unit (ie turn on the interrupt)
|
TIMSK1 |= (1 << OCIE1B); //Turn on the B compare unit (ie turn on the interrupt)
|
||||||
|
|
11
decoders.ino
11
decoders.ino
|
@ -288,8 +288,15 @@ void triggerPri_BasicDistributor()
|
||||||
}
|
}
|
||||||
|
|
||||||
setFilter(curGap); //Recalc the new filter value
|
setFilter(curGap); //Recalc the new filter value
|
||||||
|
|
||||||
addToothLogEntry(curGap);
|
addToothLogEntry(curGap);
|
||||||
|
|
||||||
|
if ( configPage2.ignCranklock && BIT_CHECK(currentStatus.engine, BIT_ENGINE_CRANK) )
|
||||||
|
{
|
||||||
|
endCoil1Charge();
|
||||||
|
endCoil2Charge();
|
||||||
|
endCoil3Charge();
|
||||||
|
endCoil4Charge();
|
||||||
|
}
|
||||||
|
|
||||||
toothLastMinusOneToothTime = toothLastToothTime;
|
toothLastMinusOneToothTime = toothLastToothTime;
|
||||||
toothLastToothTime = curTime;
|
toothLastToothTime = curTime;
|
||||||
|
@ -460,7 +467,7 @@ void triggerPri_4G63()
|
||||||
}
|
}
|
||||||
else if (!currentStatus.hasSync) { return; }
|
else if (!currentStatus.hasSync) { return; }
|
||||||
|
|
||||||
if ( BIT_CHECK(currentStatus.engine, BIT_ENGINE_CRANK) )
|
if ( configPage2.ignCranklock && BIT_CHECK(currentStatus.engine, BIT_ENGINE_CRANK) )
|
||||||
{
|
{
|
||||||
if( toothCurrentCount == 1 ) { endCoil1Charge(); }
|
if( toothCurrentCount == 1 ) { endCoil1Charge(); }
|
||||||
else if( toothCurrentCount == 3 ) { endCoil2Charge(); }
|
else if( toothCurrentCount == 3 ) { endCoil2Charge(); }
|
||||||
|
|
|
@ -252,7 +252,7 @@ struct config2 {
|
||||||
byte sparkMode : 2; //Spark output mode (Eg Wasted spark, single channel or Wasted COP)
|
byte sparkMode : 2; //Spark output mode (Eg Wasted spark, single channel or Wasted COP)
|
||||||
byte dfcoEnabled : 1; //Whether or not DFCO is turned on
|
byte dfcoEnabled : 1; //Whether or not DFCO is turned on
|
||||||
byte triggerFilter : 2; //The mode of trigger filter being used (0=Off, 1=Light (Not currently used), 2=Normal, 3=Aggressive)
|
byte triggerFilter : 2; //The mode of trigger filter being used (0=Off, 1=Light (Not currently used), 2=Normal, 3=Aggressive)
|
||||||
byte dwellUnused : 1;
|
byte ignCranklock : 1; //Whether or not the ignition timing during cranking is locked to a CAS pulse. Only currently valid for Basic distributor and 4G63.
|
||||||
|
|
||||||
byte dwellCrank; //Dwell time whilst cranking
|
byte dwellCrank; //Dwell time whilst cranking
|
||||||
byte dwellRun; //Dwell time whilst running
|
byte dwellRun; //Dwell time whilst running
|
||||||
|
|
|
@ -236,6 +236,7 @@ page = 4
|
||||||
sparkMode = bits, U08, 12, [2:3], "Wasted Spark", "Single Channel", "Wasted COP", "Sequential"
|
sparkMode = bits, U08, 12, [2:3], "Wasted Spark", "Single Channel", "Wasted COP", "Sequential"
|
||||||
dfcoEnabled= bits, U08, 12, [4:4], "Off", "On"
|
dfcoEnabled= bits, U08, 12, [4:4], "Off", "On"
|
||||||
TrigFilter = bits, U08, 12, [5:6], "Off", "Weak", "Medium", "Aggressive"
|
TrigFilter = bits, U08, 12, [5:6], "Off", "Weak", "Medium", "Aggressive"
|
||||||
|
ignCranklock=bits, U08, 12, [7:7], "Off", "On"
|
||||||
dwellcrank = scalar, U08, 13, "ms", 0.1, 0, 0, 25, 1
|
dwellcrank = scalar, U08, 13, "ms", 0.1, 0, 0, 25, 1
|
||||||
dwellrun = scalar, U08, 14, "ms", 0.1, 0, 0, 8, 1
|
dwellrun = scalar, U08, 14, "ms", 0.1, 0, 0, 8, 1
|
||||||
numteeth = scalar, U08, 15, "teeth", 1.0, 0.0, 0.0, 255, 0
|
numteeth = scalar, U08, 15, "teeth", 1.0, 0.0, 0.0, 255, 0
|
||||||
|
@ -465,6 +466,7 @@ page = 8
|
||||||
defaultValue = mapMax, 260
|
defaultValue = mapMax, 260
|
||||||
defaultValue = fpPrime, 3
|
defaultValue = fpPrime, 3
|
||||||
defaultValue = TrigFilter, 0
|
defaultValue = TrigFilter, 0
|
||||||
|
defaultValue = ignCranklock, 0
|
||||||
|
|
||||||
[Menu]
|
[Menu]
|
||||||
|
|
||||||
|
@ -606,6 +608,7 @@ page = 8
|
||||||
launchPin = "The ARDUINO pin that the clutch switch is connected to. This is NOT the pin on the connector, but the pin it relates to on the arduino"
|
launchPin = "The ARDUINO pin that the clutch switch is connected to. This is NOT the pin on the connector, but the pin it relates to on the arduino"
|
||||||
ignBypassPin = "The ARDUINO pin that the ignition bypass is connected to. This is NOT the pin on the connector, but the pin it relates to on the arduino"
|
ignBypassPin = "The ARDUINO pin that the ignition bypass is connected to. This is NOT the pin on the connector, but the pin it relates to on the arduino"
|
||||||
ignBypassEnable = "If turned on, a ground signal will be output during cranking on the specified pin. This is used to bypass the Speeduino ignition control during cranking."
|
ignBypassEnable = "If turned on, a ground signal will be output during cranking on the specified pin. This is used to bypass the Speeduino ignition control during cranking."
|
||||||
|
ignCranklock = "On certain low resolution ignition patterns, the cranking timing can be locked to occur when a pulse is recieved."
|
||||||
|
|
||||||
|
|
||||||
[UserDefinedTS]
|
[UserDefinedTS]
|
||||||
|
@ -732,6 +735,7 @@ page = 8
|
||||||
field = ""
|
field = ""
|
||||||
field = "Cranking bypass", ignBypassEnable
|
field = "Cranking bypass", ignBypassEnable
|
||||||
field = "Bypass output pin", ignBypassPin { ignBypassEnable }
|
field = "Bypass output pin", ignBypassPin { ignBypassEnable }
|
||||||
|
field = "Fix cranking timing with trigger", ignCranklock, { TrigPattern == 1 || TrigPattern == 4 }
|
||||||
|
|
||||||
dialog = aseSettings, "Afterstart Enrichment"
|
dialog = aseSettings, "Afterstart Enrichment"
|
||||||
field = "Enrichment %", asePct
|
field = "Enrichment %", asePct
|
||||||
|
|
|
@ -1056,7 +1056,8 @@ void loop()
|
||||||
//crankAngle = getCrankAngle(timePerDegree); //Refresh with the latest crank angle
|
//crankAngle = getCrankAngle(timePerDegree); //Refresh with the latest crank angle
|
||||||
|
|
||||||
//fixedCrankingOverride is used to extend the dwell during cranking so that the decoder can trigger the spark upon seeing a certain tooth. Currently only available on the basic distributor and 4g63 decoders.
|
//fixedCrankingOverride is used to extend the dwell during cranking so that the decoder can trigger the spark upon seeing a certain tooth. Currently only available on the basic distributor and 4g63 decoders.
|
||||||
if ( BIT_CHECK(currentStatus.engine, BIT_ENGINE_CRANK) ) { fixedCrankingOverride = currentStatus.dwell; }
|
if ( configPage2.ignCranklock && BIT_CHECK(currentStatus.engine, BIT_ENGINE_CRANK)) { fixedCrankingOverride = currentStatus.dwell; }
|
||||||
|
else { fixedCrankingOverride = 0; }
|
||||||
|
|
||||||
if(ignitionOn && !currentStatus.launchingHard && !BIT_CHECK(currentStatus.spark, BIT_SPARK_BOOSTCUT) && !BIT_CHECK(currentStatus.spark, BIT_SPARK_HRDLIM))
|
if(ignitionOn && !currentStatus.launchingHard && !BIT_CHECK(currentStatus.spark, BIT_SPARK_BOOSTCUT) && !BIT_CHECK(currentStatus.spark, BIT_SPARK_HRDLIM))
|
||||||
{
|
{
|
||||||
|
@ -1113,7 +1114,7 @@ void loop()
|
||||||
if(ignition3StartTime > 0) {
|
if(ignition3StartTime > 0) {
|
||||||
setIgnitionSchedule3(ign3StartFunction,
|
setIgnitionSchedule3(ign3StartFunction,
|
||||||
ignition3StartTime,
|
ignition3StartTime,
|
||||||
currentStatus.dwell,
|
currentStatus.dwell + fixedCrankingOverride,
|
||||||
ign3EndFunction
|
ign3EndFunction
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
@ -1134,7 +1135,7 @@ void loop()
|
||||||
if(ignition4StartTime > 0) {
|
if(ignition4StartTime > 0) {
|
||||||
setIgnitionSchedule4(ign4StartFunction,
|
setIgnitionSchedule4(ign4StartFunction,
|
||||||
ignition4StartTime,
|
ignition4StartTime,
|
||||||
currentStatus.dwell,
|
currentStatus.dwell + fixedCrankingOverride,
|
||||||
ign4EndFunction
|
ign4EndFunction
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue