From 356fd0aa99d19d7597a7a18afb5cf428ad61231a Mon Sep 17 00:00:00 2001 From: Josh Stewart Date: Mon, 30 Nov 2015 20:30:31 +1100 Subject: [PATCH] Add missing variable for low speed crank angle --- decoders.ino | 33 +++++++++++++++++++-------------- 1 file changed, 19 insertions(+), 14 deletions(-) diff --git a/decoders.ino b/decoders.ino index 301f520..f6edce5 100644 --- a/decoders.ino +++ b/decoders.ino @@ -122,8 +122,8 @@ int getCrankAngle_missingTooth(int timePerDegree) int crankAngle = (tempToothCurrentCount - 1) * triggerToothAngle + configPage2.triggerAngle; //Number of teeth that have passed since tooth 1, multiplied by the angle each tooth represents, plus the angle that tooth 1 is ATDC. This gives accuracy only to the nearest tooth. //Estimate the number of degrees travelled since the last tooth} long elapsedTime = micros() - tempToothLastToothTime; - if(elapsedTime < SHRT_MAX ) { crankAngle += div(elapsedTime, timePerDegree).quot; } //This option is much faster, but only available for smaller values of elapsedTime - else { ldiv(elapsedTime, timePerDegree).quot; } + if(elapsedTime < SHRT_MAX ) { crankAngle += div((int)elapsedTime, timePerDegree).quot; } //This option is much faster, but only available for smaller values of elapsedTime + else { crankAngle += ldiv(elapsedTime, timePerDegree).quot; } if (crankAngle >= 720) { crankAngle -= 720; } else if (crankAngle > 360) { crankAngle -= 360; } @@ -206,8 +206,8 @@ int getCrankAngle_DualWheel(int timePerDegree) int crankAngle = (tempToothCurrentCount - 1) * triggerToothAngle + configPage2.triggerAngle; //Number of teeth that have passed since tooth 1, multiplied by the angle each tooth represents, plus the angle that tooth 1 is ATDC. This gives accuracy only to the nearest tooth. //Estimate the number of degrees travelled since the last tooth} long elapsedTime = micros() - tempToothLastToothTime; - if(elapsedTime < SHRT_MAX ) { crankAngle += div(elapsedTime, timePerDegree).quot; } //This option is much faster, but only available for smaller values of elapsedTime - else { ldiv(elapsedTime, timePerDegree).quot; } + if(elapsedTime < SHRT_MAX ) { crankAngle += div((int)elapsedTime, timePerDegree).quot; } //This option is much faster, but only available for smaller values of elapsedTime + else { crankAngle += ldiv(elapsedTime, timePerDegree).quot; } if (crankAngle >= 720) { crankAngle -= 720; } @@ -226,6 +226,7 @@ Note: This is a very simple decoder. See http://www.megamanual.com/ms2/GM_7pinHE void triggerSetup_BasicDistributor() { triggerActualTeeth = configPage1.nCylinders / 2; + if(triggerActualTeeth == 0) { triggerActualTeeth = 1; } triggerToothAngle = 360 / triggerActualTeeth; //The number of degrees that passes from tooth to tooth triggerFilterTime = 60000000L / MAX_RPM / configPage1.nCylinders; // Minimum time required between teeth triggerFilterTime = triggerFilterTime / 2; //Safety margin @@ -270,11 +271,15 @@ int getCrankAngle_BasicDistributor(int timePerDegree) tempToothLastToothTime = toothLastToothTime; interrupts(); + //int crankAngle = (tempToothCurrentCount - 1) * triggerToothAngle + configPage2.triggerAngle; //Number of teeth that have passed since tooth 1, multiplied by the angle each tooth represents, plus the angle that tooth 1 is ATDC. This gives accuracy only to the nearest tooth. + //crankAngle += ldiv( (micros() - tempToothLastToothTime), timePerDegree).quot; //Estimate the number of degrees travelled since the last tooth + + int crankAngle = (tempToothCurrentCount - 1) * triggerToothAngle + configPage2.triggerAngle; //Number of teeth that have passed since tooth 1, multiplied by the angle each tooth represents, plus the angle that tooth 1 is ATDC. This gives accuracy only to the nearest tooth. //Estimate the number of degrees travelled since the last tooth} long elapsedTime = micros() - tempToothLastToothTime; - if(elapsedTime < SHRT_MAX ) { crankAngle += div(elapsedTime, timePerDegree).quot; } //This option is much faster, but only available for smaller values of elapsedTime - else { ldiv(elapsedTime, timePerDegree).quot; } + if(elapsedTime < SHRT_MAX ) { crankAngle += div((int)elapsedTime, timePerDegree).quot; } //This option is much faster, but only available for smaller values of elapsedTime + else { crankAngle += ldiv(elapsedTime, timePerDegree).quot; } if (crankAngle >= 720) { crankAngle -= 720; } if (crankAngle > 360) { crankAngle -= 360; } @@ -358,8 +363,8 @@ int getCrankAngle_GM7X(int timePerDegree) //Estimate the number of degrees travelled since the last tooth} long elapsedTime = micros() - tempToothLastToothTime; - if(elapsedTime < SHRT_MAX ) { crankAngle += div(elapsedTime, timePerDegree).quot; } //This option is much faster, but only available for smaller values of elapsedTime - else { ldiv(elapsedTime, timePerDegree).quot; } + if(elapsedTime < SHRT_MAX ) { crankAngle += div((int)elapsedTime, timePerDegree).quot; } //This option is much faster, but only available for smaller values of elapsedTime + else { crankAngle += ldiv(elapsedTime, timePerDegree).quot; } if (crankAngle > 360) { crankAngle -= 360; } @@ -469,8 +474,8 @@ int getRPM_4G63() int crankAngle = toothAngles[(tempToothCurrentCount - 1)] + configPage2.triggerAngle; //Perform a lookup of the fixed toothAngles array to find what the angle of the last tooth passed was. //Estimate the number of degrees travelled since the last tooth} long elapsedTime = micros() - tempToothLastToothTime; - if(elapsedTime < SHRT_MAX ) { crankAngle += div(elapsedTime, timePerDegree).quot; } //This option is much faster, but only available for smaller values of elapsedTime - else { ldiv(elapsedTime, timePerDegree).quot; } + if(elapsedTime < SHRT_MAX ) { crankAngle += div((int)elapsedTime, timePerDegree).quot; } //This option is much faster, but only available for smaller values of elapsedTime + else { crankAngle += ldiv(elapsedTime, timePerDegree).quot; } if (crankAngle >= 720) { crankAngle -= 720; } @@ -569,8 +574,8 @@ int getCrankAngle_24X(int timePerDegree) //Estimate the number of degrees travelled since the last tooth} long elapsedTime = micros() - tempToothLastToothTime; - if(elapsedTime < SHRT_MAX ) { crankAngle += div(elapsedTime, timePerDegree).quot; } //This option is much faster, but only available for smaller values of elapsedTime - else { ldiv(elapsedTime, timePerDegree).quot; } + if(elapsedTime < SHRT_MAX ) { crankAngle += div((int)elapsedTime, timePerDegree).quot; } //This option is much faster, but only available for smaller values of elapsedTime + else { crankAngle += ldiv(elapsedTime, timePerDegree).quot; } if (crankAngle > 360) { crankAngle -= 360; } @@ -655,8 +660,8 @@ int getCrankAngle_Jeep2000(int timePerDegree) else { crankAngle = toothAngles[(tempToothCurrentCount - 1)] + configPage2.triggerAngle;} //Perform a lookup of the fixed toothAngles array to find what the angle of the last tooth passed was. //Estimate the number of degrees travelled since the last tooth} long elapsedTime = micros() - tempToothLastToothTime; - if(elapsedTime < SHRT_MAX ) { crankAngle += div(elapsedTime, timePerDegree).quot; } //This option is much faster, but only available for smaller values of elapsedTime - else { ldiv(elapsedTime, timePerDegree).quot; } + if(elapsedTime < SHRT_MAX ) { crankAngle += div((int)elapsedTime, timePerDegree).quot; } //This option is much faster, but only available for smaller values of elapsedTime + else { crankAngle += ldiv(elapsedTime, timePerDegree).quot; } if (crankAngle > 360) { crankAngle -= 360; }