Initial boost and vvt page work
This commit is contained in:
parent
7fe880fb3d
commit
e1f2f42107
1
comms.h
1
comms.h
|
@ -8,6 +8,7 @@
|
||||||
#define afrMapPage 5
|
#define afrMapPage 5
|
||||||
#define afrSetPage 6
|
#define afrSetPage 6
|
||||||
#define iacPage 7
|
#define iacPage 7
|
||||||
|
#define boostvvtPage 8
|
||||||
|
|
||||||
byte currentPage;
|
byte currentPage;
|
||||||
|
|
||||||
|
|
63
comms.ino
63
comms.ino
|
@ -88,6 +88,13 @@ void command()
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 'Z': //Totally non-standard testing function. Will be removed once calibration testing is completed. This function takes 1.5kb of program space! :S
|
case 'Z': //Totally non-standard testing function. Will be removed once calibration testing is completed. This function takes 1.5kb of program space! :S
|
||||||
|
digitalWrite(pinInjector1, HIGH);
|
||||||
|
digitalWrite(pinInjector2, HIGH);
|
||||||
|
delay(20);
|
||||||
|
digitalWrite(pinInjector1, LOW);
|
||||||
|
digitalWrite(pinInjector2, LOW);
|
||||||
|
return;
|
||||||
|
|
||||||
Serial.println("Coolant");
|
Serial.println("Coolant");
|
||||||
for(int x=0; x<CALIBRATION_TABLE_SIZE; x++)
|
for(int x=0; x<CALIBRATION_TABLE_SIZE; x++)
|
||||||
{
|
{
|
||||||
|
@ -234,7 +241,7 @@ void receiveValue(int offset, byte newValue)
|
||||||
if (offset < 272)
|
if (offset < 272)
|
||||||
{
|
{
|
||||||
//X Axis
|
//X Axis
|
||||||
ignitionTable.axisX[(offset-256)] = (int)(newValue) * int(100); //The RPM values sent by megasquirt are divided by 100, need to multiple it back by 100 to make it correct
|
ignitionTable.axisX[(offset-256)] = (int)(newValue) * int(100); //The RPM values sent by TunerStudio are divided by 100, need to multiple it back by 100 to make it correct
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -266,7 +273,7 @@ void receiveValue(int offset, byte newValue)
|
||||||
if (offset < 272)
|
if (offset < 272)
|
||||||
{
|
{
|
||||||
//X Axis
|
//X Axis
|
||||||
afrTable.axisX[(offset-256)] = int(newValue) * int(100); //The RPM values sent by megasquirt are divided by 100, need to multiply it back by 100 to make it correct
|
afrTable.axisX[(offset-256)] = int(newValue) * int(100); //The RPM values sent by TunerStudio are divided by 100, need to multiply it back by 100 to make it correct
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -296,6 +303,41 @@ void receiveValue(int offset, byte newValue)
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case boostvvtPage: //Boost and VVT maps (8x8)
|
||||||
|
if (offset < 64) //New value is part of the boost map
|
||||||
|
{
|
||||||
|
boostTable.values[7-offset/8][offset%8] = newValue;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
else if (offset < 72) //New value is on the X (RPM) axis of the boost table
|
||||||
|
{
|
||||||
|
boostTable.axisX[(offset-64)] = int(newValue) * int(100); //The RPM values sent by TunerStudio are divided by 100, need to multiply it back by 100 to make it correct
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
else if (offset < 80) //New value is on the Y (TPS) axis of the boost table
|
||||||
|
{
|
||||||
|
boostTable.axisY[(7-(offset-72))] = int(newValue);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
else if (offset < 144) //New value is part of the vvt map
|
||||||
|
{
|
||||||
|
offset = offset - 80;
|
||||||
|
vvtTable.values[7-offset/8][offset%8] = newValue;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
else if (offset < 152) //New value is on the X (RPM) axis of the vvt table
|
||||||
|
{
|
||||||
|
offset = offset - 144;
|
||||||
|
vvtTable.axisX[offset] = int(newValue) * int(100); //The RPM values sent by TunerStudio are divided by 100, need to multiply it back by 100 to make it correct
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
else //New value is on the Y (Load) axis of the vvt table
|
||||||
|
{
|
||||||
|
offset = offset - 152;
|
||||||
|
vvtTable.axisY[(7-offset)] = int(newValue);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -404,6 +446,23 @@ void sendPage()
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
case boostvvtPage:
|
||||||
|
{
|
||||||
|
//Need to perform a translation of the values[MAP/TPS][RPM] into the MS expected format
|
||||||
|
byte response[160]; //Bit hacky, but the size is: (8x8 + 8 + 8) + (8x8 + 8 + 8) = 160
|
||||||
|
|
||||||
|
//Boost table
|
||||||
|
for(int x=0;x<64;x++) { response[x] = boostTable.values[7-x/8][x%8]; }
|
||||||
|
for(int x=64;x<72;x++) { response[x] = byte(boostTable.axisX[(x-64)] / 100); }
|
||||||
|
for(int y=72;y<80;y++) { response[y] = byte(boostTable.axisY[7-(y-72)]); }
|
||||||
|
//VVT table
|
||||||
|
for(int x=0;x<64;x++) { response[x+80] = vvtTable.values[7-x/8][x%8]; }
|
||||||
|
for(int x=64;x<72;x++) { response[x+80] = byte(vvtTable.axisX[(x-64)] / 100); }
|
||||||
|
for(int y=72;y<80;y++) { response[y+80] = byte(vvtTable.axisY[7-(y-72)]); }
|
||||||
|
Serial.write((byte *)&response, sizeof(response));
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
|
@ -60,16 +60,14 @@
|
||||||
;----------------------------------------------------------------------------
|
;----------------------------------------------------------------------------
|
||||||
|
|
||||||
endianness = little
|
endianness = little
|
||||||
nPages = 7
|
nPages = 8
|
||||||
burnCommand = "B"
|
burnCommand = "B"
|
||||||
; pageSize = 125
|
pageSize = 288, 64, 288, 64, 288, 64, 64, 160
|
||||||
; pageSize = 128, 128, 128, 128
|
|
||||||
pageSize = 288, 64, 288, 64, 288, 64, 64
|
|
||||||
pageActivationDelay = 10
|
pageActivationDelay = 10
|
||||||
; pageActivate = ""
|
; pageActivate = ""
|
||||||
pageActivate = "P\001", "P\002", "P\003", "P\004", "P\005", "P\006", "P\007"
|
pageActivate = "P\001", "P\002", "P\003", "P\004", "P\005", "P\006", "P\007"
|
||||||
pageReadCommand = "V", "V", "V", "V", "V", "V", "V"
|
pageReadCommand = "V", "V", "V", "V", "V", "V", "V", "V"
|
||||||
pageValueWrite = "W%2o%v", "W%o%v", "W%2o%v", "W%o%v", "W%2o%v", "W%o%v", "W%o%v"
|
pageValueWrite = "W%2o%v", "W%o%v", "W%2o%v", "W%o%v", "W%2o%v", "W%o%v", "W%o%v", "W%o%v"
|
||||||
;\x00%2
|
;\x00%2
|
||||||
; pageChunkWrite = "" ; No chunk write for standard MS
|
; pageChunkWrite = "" ; No chunk write for standard MS
|
||||||
|
|
||||||
|
@ -365,6 +363,16 @@ page = 7
|
||||||
fanHyster = scalar, U08, 58, "°F", 1.0, -40, -40, 215.0, 0
|
fanHyster = scalar, U08, 58, "°F", 1.0, -40, -40, 215.0, 0
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
;--------------------------------------------------
|
||||||
|
;Boost and vvt maps (Page 8)
|
||||||
|
;--------------------------------------------------
|
||||||
|
page = 8
|
||||||
|
boostTable = array, U08, 0,[8x8], "%", 1.0, 0.0, 0, 100, 0
|
||||||
|
rpmBinsBoost = array, U08, 64,[ 8], "RPM", 100.0, 0.0, 100, 25500, 0
|
||||||
|
tpsBinsBoost = array, U08, 72,[ 8], "TPS", 1.0, 0.0, 0.0, 255.0, 0
|
||||||
|
vvtTable = array, U08, 80,[8x8], "%", 1.0, 0.0, 0, 100, 0
|
||||||
|
rpmBinsVVT = array, U08, 144,[ 8], "RPM", 100.0, 0.0, 100, 25500, 0
|
||||||
|
tpsBinsVVT = array, U08, 152,[ 8], "TPS", 1.0, 0.0, 0.0, 255.0, 0
|
||||||
|
|
||||||
;-------------------------------------------------------------------------------
|
;-------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
@ -428,6 +436,7 @@ page = 7
|
||||||
subMenu = std_realtime, "&Realtime Display"
|
subMenu = std_realtime, "&Realtime Display"
|
||||||
subMenu = accelEnrichments, "&Acceleration Wizard"
|
subMenu = accelEnrichments, "&Acceleration Wizard"
|
||||||
subMenu = egoControl, "AFR/O2", 3
|
subMenu = egoControl, "AFR/O2", 3
|
||||||
|
subMenu = boostControl, "Boost control", 8
|
||||||
subMenu = RevLimiterS, "Rev Limits", 2
|
subMenu = RevLimiterS, "Rev Limits", 2
|
||||||
subMenu = veTable1Tbl, "&VE Table", 0
|
subMenu = veTable1Tbl, "&VE Table", 0
|
||||||
subMenu = sparkTbl, "&Spark Table", 2
|
subMenu = sparkTbl, "&Spark Table", 2
|
||||||
|
@ -677,6 +686,9 @@ page = 7
|
||||||
settingOption = "MPXH5700", mapMin=0, mapMax=700
|
settingOption = "MPXH5700", mapMin=0, mapMax=700
|
||||||
settingOption = "MPXH6400", mapMin=3, mapMax=416
|
settingOption = "MPXH6400", mapMin=3, mapMax=416
|
||||||
|
|
||||||
|
dialog = boostControl, "Boost Control"
|
||||||
|
panel = boostTbl
|
||||||
|
|
||||||
|
|
||||||
; -------------------------------------------------------------
|
; -------------------------------------------------------------
|
||||||
; Help down here
|
; Help down here
|
||||||
|
@ -858,6 +870,13 @@ help = helpEnrichments, "Enrichments Help"
|
||||||
upDownLabel = "RICHER", "LEANER"
|
upDownLabel = "RICHER", "LEANER"
|
||||||
gridOrient = 250, 0, 340
|
gridOrient = 250, 0, 340
|
||||||
|
|
||||||
|
table = boostTbl, boostMap, "Boost control Table", 8
|
||||||
|
xBins = rpmBinsBoost, rpm
|
||||||
|
yBins = tpsBinsBoost, throttle
|
||||||
|
zBins = boostTable
|
||||||
|
gridHeight = 3.0
|
||||||
|
upDownLabel = "HIGHER", "LOWER"
|
||||||
|
|
||||||
;-------------------------------------------------------------------------------
|
;-------------------------------------------------------------------------------
|
||||||
|
|
||||||
[GaugeConfigurations]
|
[GaugeConfigurations]
|
||||||
|
|
|
@ -28,7 +28,7 @@ void initialiseSchedulers()
|
||||||
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
|
||||||
//TCCR5B = (1 << CS12); //Timer5 Control Reg B: Timer Prescaler set to 256. Refer to http://www.instructables.com/files/orig/F3T/TIKL/H3WSA4V7/F3TTIKLH3WSA4V7.jpg
|
//TCCR5B = (1 << CS12); //Timer5 Control Reg B: Timer Prescaler set to 256. Refer to http://www.instructables.com/files/orig/F3T/TIKL/H3WSA4V7/F3TTIKLH3WSA4V7.jpg
|
||||||
TCCR5B = 0x03; //Reverting this for now due to issue with low RPM overflow
|
TCCR5B = 0x03; //aka Divisor = 64 = 490.1Hz
|
||||||
ignitionSchedule1.Status = OFF;
|
ignitionSchedule1.Status = OFF;
|
||||||
ignitionSchedule2.Status = OFF;
|
ignitionSchedule2.Status = OFF;
|
||||||
ignitionSchedule3.Status = OFF;
|
ignitionSchedule3.Status = OFF;
|
||||||
|
@ -38,7 +38,7 @@ void initialiseSchedulers()
|
||||||
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
|
||||||
TCCR4B = (1 << CS12); //Timer4 Control Reg B: Timer Prescaler set to 256. Refer to http://www.instructables.com/files/orig/F3T/TIKL/H3WSA4V7/F3TTIKLH3WSA4V7.jpg
|
TCCR4B = (1 << CS12); //Timer4 Control Reg B: aka Divisor = 256 = 122.5HzTimer Prescaler set to 256. Refer to http://www.instructables.com/files/orig/F3T/TIKL/H3WSA4V7/F3TTIKLH3WSA4V7.jpg
|
||||||
ignitionSchedule4.Status = OFF;
|
ignitionSchedule4.Status = OFF;
|
||||||
fuelSchedule4.Status = OFF;
|
fuelSchedule4.Status = OFF;
|
||||||
}
|
}
|
||||||
|
|
|
@ -66,9 +66,11 @@ void (*triggerSecondary)(); //Pointer for the secondary trigger function (Gets p
|
||||||
int (*getRPM)(); //Pointer to the getRPM function (Gets pointed to the relevant decoder)
|
int (*getRPM)(); //Pointer to the getRPM function (Gets pointed to the relevant decoder)
|
||||||
int (*getCrankAngle)(int); //Pointer to the getCrank Angle function (Gets pointed to the relevant decoder)
|
int (*getCrankAngle)(int); //Pointer to the getCrank Angle function (Gets pointed to the relevant decoder)
|
||||||
|
|
||||||
struct table3D fuelTable; //8x8 fuel map
|
struct table3D fuelTable; //16x16 fuel map
|
||||||
struct table3D ignitionTable; //8x8 ignition map
|
struct table3D ignitionTable; //16x16 ignition map
|
||||||
struct table3D afrTable; //8x8 afr target map
|
struct table3D afrTable; //16x16 afr target map
|
||||||
|
struct table3D boostTable; //8x8 boost map
|
||||||
|
struct table3D vvtTable; //8x8 vvt map
|
||||||
struct table2D taeTable; //4 bin TPS Acceleration Enrichment map (2D)
|
struct table2D taeTable; //4 bin TPS Acceleration Enrichment map (2D)
|
||||||
struct table2D WUETable; //10 bin Warm Up Enrichment map (2D)
|
struct table2D WUETable; //10 bin Warm Up Enrichment map (2D)
|
||||||
struct table2D dwellVCorrectionTable; //6 bin dwell voltage correction (2D)
|
struct table2D dwellVCorrectionTable; //6 bin dwell voltage correction (2D)
|
||||||
|
@ -111,6 +113,8 @@ void setup()
|
||||||
table3D_setSize(&fuelTable, 16);
|
table3D_setSize(&fuelTable, 16);
|
||||||
table3D_setSize(&ignitionTable, 16);
|
table3D_setSize(&ignitionTable, 16);
|
||||||
table3D_setSize(&afrTable, 16);
|
table3D_setSize(&afrTable, 16);
|
||||||
|
table3D_setSize(&boostTable, 8);
|
||||||
|
table3D_setSize(&vvtTable, 8);
|
||||||
|
|
||||||
loadConfig();
|
loadConfig();
|
||||||
|
|
||||||
|
|
14
storage.h
14
storage.h
|
@ -29,6 +29,10 @@ Current layout of EEPROM data (Version 3) is as follows (All sizes are in bytes)
|
||||||
| 983 |16 | AFR Table MAP/TPS bins |
|
| 983 |16 | AFR Table MAP/TPS bins |
|
||||||
| 999 |64 | Remaining Page 3 settings |
|
| 999 |64 | Remaining Page 3 settings |
|
||||||
| 1063 |64 | Page 4 settings |
|
| 1063 |64 | Page 4 settings |
|
||||||
|
| 1127 |2 | X and Y sizes for boost table |
|
||||||
|
| 1129 |64 | Boost Map (8x8) |
|
||||||
|
| 1193 |8 | Boost Table RPM bins |
|
||||||
|
| 1201 |8 | Bost Table TPS bins |
|
||||||
| 2559 |512 | Calibration data (O2) |
|
| 2559 |512 | Calibration data (O2) |
|
||||||
| 3071 |512 | Calibration data (IAT) |
|
| 3071 |512 | Calibration data (IAT) |
|
||||||
| 3583 |512 | Calibration data (CLT) |
|
| 3583 |512 | Calibration data (CLT) |
|
||||||
|
@ -58,6 +62,16 @@ Current layout of EEPROM data (Version 3) is as follows (All sizes are in bytes)
|
||||||
#define EEPROM_CONFIG6_END 1063
|
#define EEPROM_CONFIG6_END 1063
|
||||||
#define EEPROM_CONFIG7_START 1063
|
#define EEPROM_CONFIG7_START 1063
|
||||||
#define EEPROM_CONFIG7_END 1127
|
#define EEPROM_CONFIG7_END 1127
|
||||||
|
#define EEPROM_CONFIG8_XSIZE1 1127
|
||||||
|
#define EEPROM_CONFIG8_YSIZE1 1128
|
||||||
|
#define EEPROM_CONFIG8_MAP1 1129
|
||||||
|
#define EEPROM_CONFIG8_XBINS1 1193
|
||||||
|
#define EEPROM_CONFIG8_YBINS1 1201
|
||||||
|
#define EEPROM_CONFIG8_XSIZE2 1209
|
||||||
|
#define EEPROM_CONFIG8_YSIZE2 1210
|
||||||
|
#define EEPROM_CONFIG8_MAP2 1211
|
||||||
|
#define EEPROM_CONFIG8_XBINS2 1275
|
||||||
|
#define EEPROM_CONFIG8_YBINS2 1283
|
||||||
|
|
||||||
//Calibration data is stored at the end of the EEPROM (This is in case any further calibration tables are needed as they are large blocks)
|
//Calibration data is stored at the end of the EEPROM (This is in case any further calibration tables are needed as they are large blocks)
|
||||||
#define EEPROM_CALIBRATION_O2 2559
|
#define EEPROM_CALIBRATION_O2 2559
|
||||||
|
|
Loading…
Reference in New Issue