diff --git a/speeduino/speeduino.ino b/speeduino/speeduino.ino index e377bfe6..a73bf0e2 100644 --- a/speeduino/speeduino.ino +++ b/speeduino/speeduino.ino @@ -1518,7 +1518,7 @@ void loop() //Likewise for the ignition //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 ( configPage2.ignCranklock && BIT_CHECK(currentStatus.engine, BIT_ENGINE_CRANK)) { fixedCrankingOverride = currentStatus.dwell * 2; } + if ( configPage2.ignCranklock && BIT_CHECK(currentStatus.engine, BIT_ENGINE_CRANK)) { fixedCrankingOverride = currentStatus.dwell * 3; } else { fixedCrankingOverride = 0; } //Perform an initial check to see if the ignition is turned on (Ignition only turns on after a preset number of cranking revolutions and: diff --git a/speeduino/timers.ino b/speeduino/timers.ino index f1fe1897..8bac916e 100644 --- a/speeduino/timers.ino +++ b/speeduino/timers.ino @@ -69,13 +69,15 @@ void oneMSInterval() //Most ARM chips can simply call a function //Overdwell check targetOverdwellTime = micros() - dwellLimit_uS; //Set a target time in the past that all coil charging must have begun after. If the coil charge began before this time, it's been running too long + //bool isCrankLocked = configPage2.ignCranklock && BIT_CHECK(currentStatus.engine, BIT_ENGINE_CRANK); + bool isCrankLocked = configPage2.ignCranklock && (currentStatus.RPM < ((unsigned int)configPage2.crankRPM * 100)); //Check first whether each spark output is currently on. Only check it's dwell time if it is - if(ignitionSchedule1.Status == RUNNING) { if( (ignitionSchedule1.startTime < targetOverdwellTime) && (configPage2.useDwellLim) ) { endCoil1Charge(); } } - if(ignitionSchedule2.Status == RUNNING) { if( (ignitionSchedule2.startTime < targetOverdwellTime) && (configPage2.useDwellLim) ) { endCoil2Charge(); } } - if(ignitionSchedule3.Status == RUNNING) { if( (ignitionSchedule3.startTime < targetOverdwellTime) && (configPage2.useDwellLim) ) { endCoil3Charge(); } } - if(ignitionSchedule4.Status == RUNNING) { if( (ignitionSchedule4.startTime < targetOverdwellTime) && (configPage2.useDwellLim) ) { endCoil4Charge(); } } - if(ignitionSchedule5.Status == RUNNING) { if( (ignitionSchedule5.startTime < targetOverdwellTime) && (configPage2.useDwellLim) ) { endCoil5Charge(); } } + if(ignitionSchedule1.Status == RUNNING) { if( (ignitionSchedule1.startTime < targetOverdwellTime) && (configPage2.useDwellLim) && (isCrankLocked != true) ) { endCoil1Charge(); } } + if(ignitionSchedule2.Status == RUNNING) { if( (ignitionSchedule2.startTime < targetOverdwellTime) && (configPage2.useDwellLim) && (isCrankLocked != true) ) { endCoil2Charge(); } } + if(ignitionSchedule3.Status == RUNNING) { if( (ignitionSchedule3.startTime < targetOverdwellTime) && (configPage2.useDwellLim) && (isCrankLocked != true) ) { endCoil3Charge(); } } + if(ignitionSchedule4.Status == RUNNING) { if( (ignitionSchedule4.startTime < targetOverdwellTime) && (configPage2.useDwellLim) && (isCrankLocked != true) ) { endCoil4Charge(); } } + if(ignitionSchedule5.Status == RUNNING) { if( (ignitionSchedule5.startTime < targetOverdwellTime) && (configPage2.useDwellLim) && (isCrankLocked != true) ) { endCoil5Charge(); } } //Loop executed every 100ms loop //Anything inside this if statement will run every 100ms. @@ -104,7 +106,7 @@ void oneMSInterval() //Most ARM chips can simply call a function loopSec = 0; //Reset counter. dwellLimit_uS = (1000 * configPage2.dwellLimit); //Update uS value incase setting has changed - if ( configPage2.ignCranklock && BIT_CHECK(currentStatus.engine, BIT_ENGINE_CRANK)) { dwellLimit_uS = dwellLimit_uS * 3; } //Make sure the overdwell doesn't clobber the fixed ignition cranking if enabled. + //if ( configPage2.ignCranklock && BIT_CHECK(currentStatus.engine, BIT_ENGINE_CRANK)) { dwellLimit_uS = dwellLimit_uS * 4; } //Make sure the overdwell doesn't clobber the fixed ignition cranking if enabled. //************************************************************************************************************************************************** //This updates the runSecs variable