commit
77158ead74
|
@ -11,7 +11,7 @@ void initialiseSchedulers()
|
||||||
{
|
{
|
||||||
// Much help in this from http://arduinomega.blogspot.com.au/2011/05/timer2-and-overflow-interrupt-lets-get.html
|
// Much help in this from http://arduinomega.blogspot.com.au/2011/05/timer2-and-overflow-interrupt-lets-get.html
|
||||||
//Fuel Schedules, which uses timer 3
|
//Fuel Schedules, which uses timer 3
|
||||||
TCCR3B = 0x00; //Disbale Timer3 while we set it up
|
TCCR3B = 0x00; //Disable Timer3 while we set it up
|
||||||
TCNT3 = 0; //Reset Timer Count
|
TCNT3 = 0; //Reset Timer Count
|
||||||
TIFR3 = 0x00; //Timer3 INT Flag Reg: Clear Timer Overflow Flag
|
TIFR3 = 0x00; //Timer3 INT Flag Reg: Clear Timer Overflow Flag
|
||||||
TCCR3A = 0x00; //Timer3 Control Reg A: Wave Gen Mode normal
|
TCCR3A = 0x00; //Timer3 Control Reg A: Wave Gen Mode normal
|
||||||
|
@ -22,7 +22,7 @@ void initialiseSchedulers()
|
||||||
fuelSchedule3.Status = OFF;
|
fuelSchedule3.Status = OFF;
|
||||||
|
|
||||||
//Ignition Schedules, which uses timer 5
|
//Ignition Schedules, which uses timer 5
|
||||||
TCCR5B = 0x00; //Disbale Timer3 while we set it up
|
TCCR5B = 0x00; //Disable Timer3 while we set it up
|
||||||
TCNT5 = 0; //Reset Timer Count
|
TCNT5 = 0; //Reset Timer Count
|
||||||
TIFR5 = 0x00; //Timer5 INT Flag Reg: Clear Timer Overflow Flag
|
TIFR5 = 0x00; //Timer5 INT Flag Reg: Clear Timer Overflow Flag
|
||||||
TCCR5A = 0x00; //Timer5 Control Reg A: Wave Gen Mode normal
|
TCCR5A = 0x00; //Timer5 Control Reg A: Wave Gen Mode normal
|
||||||
|
@ -33,7 +33,7 @@ void initialiseSchedulers()
|
||||||
ignitionSchedule3.Status = OFF;
|
ignitionSchedule3.Status = OFF;
|
||||||
|
|
||||||
//The remaining Schedules (Schedules 4 for fuel and ignition) use Timer4
|
//The remaining Schedules (Schedules 4 for fuel and ignition) use Timer4
|
||||||
TCCR4B = 0x00; //Disbale Timer4 while we set it up
|
TCCR4B = 0x00; //Disable Timer4 while we set it up
|
||||||
TCNT4 = 0; //Reset Timer Count
|
TCNT4 = 0; //Reset Timer Count
|
||||||
TIFR4 = 0x00; //Timer4 INT Flag Reg: Clear Timer Overflow Flag
|
TIFR4 = 0x00; //Timer4 INT Flag Reg: Clear Timer Overflow Flag
|
||||||
TCCR4A = 0x00; //Timer4 Control Reg A: Wave Gen Mode normal
|
TCCR4A = 0x00; //Timer4 Control Reg A: Wave Gen Mode normal
|
||||||
|
|
13
sensors.ino
13
sensors.ino
|
@ -3,6 +3,7 @@ Speeduino - Simple engine management for the Arduino Mega 2560 platform
|
||||||
Copyright (C) Josh Stewart
|
Copyright (C) Josh Stewart
|
||||||
A full copy of the license may be found in the projects root directory
|
A full copy of the license may be found in the projects root directory
|
||||||
*/
|
*/
|
||||||
|
|
||||||
int tempReading;
|
int tempReading;
|
||||||
|
|
||||||
void instanteneousMAPReading()
|
void instanteneousMAPReading()
|
||||||
|
@ -15,7 +16,7 @@ void instanteneousMAPReading()
|
||||||
if(tempReading >= VALID_MAP_MAX || tempReading <= VALID_MAP_MIN) { mapErrorCount += 1; }
|
if(tempReading >= VALID_MAP_MAX || tempReading <= VALID_MAP_MIN) { mapErrorCount += 1; }
|
||||||
else { currentStatus.mapADC = tempReading; mapErrorCount = 0; }
|
else { currentStatus.mapADC = tempReading; mapErrorCount = 0; }
|
||||||
|
|
||||||
currentStatus.MAP = map(currentStatus.mapADC, 0, 1023, configPage1.mapMin, configPage1.mapMax); //Get the current MAP value
|
currentStatus.MAP = fastMap1023toX(currentStatus.mapADC, 0, 1023, configPage1.mapMin, configPage1.mapMax); //Get the current MAP value
|
||||||
}
|
}
|
||||||
|
|
||||||
void readMAP()
|
void readMAP()
|
||||||
|
@ -50,7 +51,7 @@ void readMAP()
|
||||||
{
|
{
|
||||||
//Reaching here means that the last cylce has completed and the MAP value should be calculated
|
//Reaching here means that the last cylce has completed and the MAP value should be calculated
|
||||||
currentStatus.mapADC = ldiv(MAPrunningValue, MAPcount).quot;
|
currentStatus.mapADC = ldiv(MAPrunningValue, MAPcount).quot;
|
||||||
currentStatus.MAP = map(currentStatus.mapADC, 0, 1023, configPage1.mapMin, configPage1.mapMax); //Get the current MAP value
|
currentStatus.MAP = fastMap1023toX(currentStatus.mapADC, 0, 1023, configPage1.mapMin, configPage1.mapMax); //Get the current MAP value
|
||||||
MAPcurRev = startRevolutions; //Reset the current rev count
|
MAPcurRev = startRevolutions; //Reset the current rev count
|
||||||
MAPrunningValue = 0;
|
MAPrunningValue = 0;
|
||||||
MAPcount = 0;
|
MAPcount = 0;
|
||||||
|
@ -59,14 +60,12 @@ void readMAP()
|
||||||
|
|
||||||
case 2:
|
case 2:
|
||||||
//Minimum reading in a cycle
|
//Minimum reading in a cycle
|
||||||
|
|
||||||
if (currentStatus.RPM < 1) { instanteneousMAPReading(); return; } //If the engine isn't running, fall back to instantaneous reads
|
if (currentStatus.RPM < 1) { instanteneousMAPReading(); return; } //If the engine isn't running, fall back to instantaneous reads
|
||||||
|
|
||||||
if( (MAPcurRev == startRevolutions) || (MAPcurRev == startRevolutions+1) ) //2 revolutions are looked at for 4 stroke. 2 stroke not currently catered for.
|
if( (MAPcurRev == startRevolutions) || (MAPcurRev == startRevolutions+1) ) //2 revolutions are looked at for 4 stroke. 2 stroke not currently catered for.
|
||||||
{
|
{
|
||||||
tempReading = analogRead(pinMAP);
|
tempReading = analogRead(pinMAP);
|
||||||
tempReading = analogRead(pinMAP);
|
tempReading = analogRead(pinMAP);
|
||||||
|
|
||||||
//Error check
|
//Error check
|
||||||
if(tempReading < VALID_MAP_MAX && tempReading > VALID_MAP_MIN)
|
if(tempReading < VALID_MAP_MAX && tempReading > VALID_MAP_MIN)
|
||||||
{
|
{
|
||||||
|
@ -78,7 +77,7 @@ void readMAP()
|
||||||
{
|
{
|
||||||
//Reaching here means that the last cylce has completed and the MAP value should be calculated
|
//Reaching here means that the last cylce has completed and the MAP value should be calculated
|
||||||
currentStatus.mapADC = MAPrunningValue;
|
currentStatus.mapADC = MAPrunningValue;
|
||||||
currentStatus.MAP = map(currentStatus.mapADC, 0, 1023, configPage1.mapMin, configPage1.mapMax); //Get the current MAP value
|
currentStatus.MAP = fastMap1023toX(currentStatus.mapADC, 0, 1023, configPage1.mapMin, configPage1.mapMax); //Get the current MAP value
|
||||||
MAPcurRev = startRevolutions; //Reset the current rev count
|
MAPcurRev = startRevolutions; //Reset the current rev count
|
||||||
MAPrunningValue = 1023; //Reset the latest value so the next reading will always be lower
|
MAPrunningValue = 1023; //Reset the latest value so the next reading will always be lower
|
||||||
}
|
}
|
||||||
|
@ -112,7 +111,7 @@ void readCLT()
|
||||||
void readIAT()
|
void readIAT()
|
||||||
{
|
{
|
||||||
tempReading = analogRead(pinIAT);
|
tempReading = analogRead(pinIAT);
|
||||||
tempReading = map(analogRead(pinIAT), 0, 1023, 0, 511); //Get the current raw IAT value
|
tempReading = fastMap1023toX(analogRead(pinIAT), 0, 1023, 0, 511); //Get the current raw IAT value
|
||||||
currentStatus.iatADC = ADC_FILTER(tempReading, ADCFILTER_IAT, currentStatus.iatADC);
|
currentStatus.iatADC = ADC_FILTER(tempReading, ADCFILTER_IAT, currentStatus.iatADC);
|
||||||
currentStatus.IAT = iatCalibrationTable[currentStatus.iatADC] - CALIBRATION_TEMPERATURE_OFFSET;
|
currentStatus.IAT = iatCalibrationTable[currentStatus.iatADC] - CALIBRATION_TEMPERATURE_OFFSET;
|
||||||
}
|
}
|
||||||
|
@ -120,7 +119,7 @@ void readIAT()
|
||||||
void readO2()
|
void readO2()
|
||||||
{
|
{
|
||||||
tempReading = analogRead(pinO2);
|
tempReading = analogRead(pinO2);
|
||||||
tempReading = map(analogRead(pinO2), 0, 1023, 0, 511); //Get the current O2 value.
|
tempReading = fastMap1023toX(analogRead(pinO2), 0, 1023, 0, 511); //Get the current O2 value.
|
||||||
currentStatus.O2ADC = ADC_FILTER(tempReading, ADCFILTER_O2, currentStatus.O2ADC);
|
currentStatus.O2ADC = ADC_FILTER(tempReading, ADCFILTER_O2, currentStatus.O2ADC);
|
||||||
currentStatus.O2 = o2CalibrationTable[currentStatus.O2ADC];
|
currentStatus.O2 = o2CalibrationTable[currentStatus.O2ADC];
|
||||||
}
|
}
|
||||||
|
|
|
@ -718,7 +718,7 @@ void loop()
|
||||||
if(toothHistoryIndex > TOOTH_LOG_SIZE) { BIT_SET(currentStatus.squirt, BIT_SQUIRT_TOOTHLOG1READY); }
|
if(toothHistoryIndex > TOOTH_LOG_SIZE) { BIT_SET(currentStatus.squirt, BIT_SQUIRT_TOOTHLOG1READY); }
|
||||||
}
|
}
|
||||||
|
|
||||||
//The IAT and CLT readings can be done less frequently. This still runs about 4 times per secondl
|
//The IAT and CLT readings can be done less frequently. This still runs about 4 times per second
|
||||||
if ((mainLoopCount & 255) == 1)
|
if ((mainLoopCount & 255) == 1)
|
||||||
{
|
{
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue