;-------------------------------------------------------------------------------
[MegaTune]
MTversion = 2.25 ; MegaTune itself; needs to match exec version.
queryCommand = "S" ; data format
signature = "MSnS-extra format 029q *********" ; gets changed when data format/this file changes
versionInfo = "T" ; full text of this revision
; last edited for version 029q and MT2.25 (release)
;-------------------------------------------------------------------------------
[Constants]
; msValue = userValue / scale - translate
; userValue = (msValue + translate) * scale
endianness = big
#unset MEMPAGES ; set to enable all 13 pages for full debugging
#unset LOGPAGES ; set to enable 11 pages for trigger/tooth logging
#if MEMPAGES
;only use the 13 page version if you are a code developer and want to see the contents of ram
;Be sure not to let Megatune do a Chunk write command because the firmware does not correctly
;support 256 byte page writes (even though it ignores all the bytes on those pages)
nPages = 13
burnCommand = "B"
pageSize = 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 256, 256
pageActivate = "P\001", "P\002", "P\003", "P\000", "P\004", "P\005", "P\006", "P\007", "P\010", "P\360", "P\361", "P\362", "P\363"
pageReadCommand = "V", "V", "V", "V", "V", "V", "V", "V", "V", "V", "V", "V", "V"
pageValueWrite = "W%o%v", "W%o%v", "W%o%v", "W%o%v", "W%o%v", "W%o%v", "W%o%v", "W%o%v", "W%o%v", "", "", "", ""
pageChunkWrite = "X%o%c%v", "X%o%c%v", "X%o%c%v", "X%o%c%v", "X%o%c%v", "X%o%c%v", "X%o%c%v", "X%o%c%v", "X%o%c%v", "", "", "", ""
#elif LOGPAGES
nPages = 11
burnCommand = "B"
pageSize = 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189
pageActivate = "P\001", "P\002", "P\003", "P\000", "P\004", "P\005", "P\006", "P\007", "P\010", "P\360", "P\361"
pageReadCommand = "V", "V", "V", "V", "V", "V", "V", "V", "V", "V", "V"
pageValueWrite = "W%o%v", "W%o%v", "W%o%v", "W%o%v", "W%o%v", "W%o%v", "W%o%v", "W%o%v", "W%o%v", "", ""
pageChunkWrite = "X%o%c%v", "X%o%c%v", "X%o%c%v", "X%o%c%v", "X%o%c%v", "X%o%c%v", "X%o%c%v", "X%o%c%v", "X%o%c%v", "", ""
#else
nPages = 9
burnCommand = "B"
pageSize = 189, 189, 189, 189, 189, 189, 189, 189, 189
pageActivate = "P\001", "P\002", "P\003", "P\000", "P\004", "P\005", "P\006", "P\007", "P\010"
pageReadCommand = "V", "V", "V", "V", "V", "V", "V", "V", "V"
pageValueWrite = "W%o%v", "W%o%v", "W%o%v", "W%o%v", "W%o%v", "W%o%v", "W%o%v", "W%o%v", "W%o%v"
pageChunkWrite = "X%o%c%v", "X%o%c%v", "X%o%c%v", "X%o%c%v", "X%o%c%v", "X%o%c%v", "X%o%c%v", "X%o%c%v", "X%o%c%v"
#endif
; Pages 10 & 11 are special read only pages that can be used to view realtime logged data
; of inter-tooth or inter-trigger times. Primarily for code devel or checking your trigger
; wheel is giving normal pulses.
;At present you can only access this data by using the Table Editor and viewing the data directly
;Page 10 contains the time between each tooth in the generic (missing and/or 2nd trig) and Neon
;Page 11 contains the time between "triggers" and will work for all ignition types
;93 big endian 16bit numbers are returned. The 188th byte is the address of the _next_ byte to
;be written. The code logs continuously once the page is selected so you need to start from the
;next byte and wrap around to the beginning to get the data in the right order
;The 189th byte indicates the time units. 0 = microseconds, 1= 0.1ms units
;After you've selected the page, pause a little then hit Fetch, you'll get 93 new samples.
;Then somehow get them into a spreadsheet and plot a graph.
;i.e. if the data is (decimal) 52, 45, ....
; convert those two numbers -> (52*256) + 45
;page 12 = RAM bytes $0000 to $00FF ($0000 to $003f return zeros)
;page 13 = RAM bytes $0100 to $01FF
;comms settings - you may need to tweak these for USB serial
;e.g. put writeblocks off and add an interwrite delay
pageActivationDelay = 50
writeBlocks = on
interWriteDelay = 0
;end USB settings
; name = bits, type, offset, bits
; name = array, type, offset, shape, units, scale, translate, lo, hi, digits
; name = scalar, type, offset, units, scale, translate, lo, hi, digits
page = 1
veBins1 = array, U08, 0, [12x12], "%", 1.0, 0.0, 0.0, 255.0, 0
rpmBins1 = array, U08, 158, [ 12], "RPM", 100.0, 0.0, 100, 25500, 0
#if SPEED_DENSITY
#if MPXH6300A
mapBins1 = array, U08, 170, [ 12], "kPa", 1.213675, 1.53, 20.0, 304.0, 0
#elif MPXH6400A
mapBins1 = array, U08, 170, [ 12], "kPa", 1.6197783, 2.147, 20.0, 400.0, 0
#else
mapBins1 = array, U08, 170, [ 12], "kPa", 1.0, 0.0, 0.0, 255.0, 0
#endif
#elif AIR_FLOW_METER
afmBins1 = array, U08, 170, [ 12], "AFM Volts", 0.01961, 0.0, 0.0, 5.0, 2
#elif ALPHA_N
tpsBins1 = array, U08, 170, [ 12], "TPS", 1.0, 0.0, 0.0, 255.0, 0
#endif
#if CELSIUS
egoTemp1 = scalar, U08, 144, "C", 0.555, -72, -40, 102.0, 0
#else
egoTemp1 = scalar, U08, 144, "F", 1.0, -40, -40, 215.0, 0
#endif
egoCount1 = scalar, U08, 145, "", 1.0, 0.0, 0.0, 255.0, 0
egoDelta1 = scalar, U08, 146, "%", 1.0, 0.0, 0.0, 255.0, 0
egoLimit1 = scalar, U08, 147, "%", 1.0, 0.0, 0.0, 255.0, 0
reqFuel1 = scalar, U08, 148, "ms", 0.1, 0.0, 0.0, 25.5, 1
divider1 = scalar, U08, 149, "", 1.0, 0.0
alternate1 = bits, U08, 150, [0:0], "Simultaneous", "Alternating"
injOpen1 = scalar, U08, 151, "ms", 0.1, 0.0, 0.1, 25.5, 1
injPwmP1 = scalar, U08, 153, "%", 1.0, 0.0, 0.0, 100.0, 0
injPwmT1 = scalar, U08, 154, "ms", 0.1, 0.0, 0.0, 25.5, 1
battFac1 = scalar, U08, 155, "ms/v",0.0166667, 0.0, 0.0, 1.0, 2
rpmk1 = scalar, U16, 156, "", 1.0, 0.0
; Config1
mapType1 = bits, U08, 182, [0:1], "115 kPa", "250 kPa", "300 kPa", "400 kPa"
mapSensor1 = bits, U08, 182, [0:0]
twoStroke1 = bits, U08, 182, [2:2], "Four-stroke", "Two-stroke"
;; injType1 = bits, U08, 182, [3:3], "Port", "Throttle Body"
nCylinders1= bits, U08, 182, [4:7+1]
; Config3
cltType1 = bits, U08, 183, [0:1], "GM", "Unknown1", "Unknown2", "Unknown3"
matType1 = bits, U08, 183, [2:3], "GM", "Unknown1", "Unknown2", "Unknown3"
nInjectors1= bits, U08, 183, [4:7+1]
; Config3
engineType1= bits, U08, 184, [0:0], "Even fire", "Odd fire"
egoType1 = bits, U08, 184, [1:1], "Narrow band", "Wide band"
algorithm1 = bits, U08, 184, [2:2], "Speed Density", "Alpha-N"
baroCorr1 = bits, U08, 184, [3:3], "Off", "On"
egoRPM1 = scalar, U08, 185, "RPM", 100.0, 0.0, 100, 25500, 0
#if CELSIUS
fastIdleT1 = scalar, U08, 186, "C", 0.555, -72.0, -40, 102, 1
#else
fastIdleT1 = scalar, U08, 186, "F", 1.0, -40.0, -40, 215, 1
#endif
egoSwitch1 = scalar, U08, 187, "v", 0.0196, 0.0, 0.0, 5.0, 3
egoIgnCount= bits, U08, 188, [0:0], "mSec", "Ign Pulses*^"
page = 2
veBins2 = array, U08, 0, [12x12], "%", 1.0, 0.0, 0.0, 255.0, 0
rpmBins2 = array, U08, 158, [ 12], "RPM", 100.0, 0.0, 100, 25000, 0
#if SPEED_DENSITY
#if MPXH6300A
mapBins2 = array, U08, 170, [ 12], "kPa", 1.213675, 1.53, 20.0, 304.0, 0
#elif MPXH6400A
mapBins2 = array, U08, 170, [ 12], "kPa", 1.6197783, 2.147, 20.0, 400.0, 0
#else
mapBins2 = array, U08, 170, [ 12], "kPa", 1.0, 0.0, 0.0, 255.0, 0
#endif
#elif AIR_FLOW_METER
afmBins2 = array, U08, 170, [12], "Volts", 0.01961, 0.0, 0.0, 5.0, 2
#elif ALPHA_N
tpsBins2 = array, U08, 170, [ 12], "TPS", 1.0, 0.0, 0.0, 255.0, 0
#endif
#if CELSIUS
egoTemp2 = scalar, U08, 144, "C", 0.555, -72, -40, 102.0, 0
#else
egoTemp2 = scalar, U08, 144, "F", 1.0, -40, -40, 215.0, 0
#endif
egoDelta2 = scalar, U08, 146, "%", 1.0, 0.0, 0.0, 255.0, 0
egoLimit2 = scalar, U08, 147, "%", 1.0, 0.0, 0.0, 255.0, 0
reqFuel2 = scalar, U08, 148, "ms", 0.1, 0.0, 0.0, 25.5, 1
divider2 = scalar, U08, 149, "", 1.0, 0.0
alternate2 = bits, U08, 150, [0:0], "Simultaneous", "Alternating"
injOpen2 = scalar, U08, 151, "ms", 0.1, 0.0, 0.1, 25.5, 1
injPwmP2 = scalar, U08, 153, "%", 1.0, 0.0, 0.0, 100.0, 0
injPwmT2 = scalar, U08, 154, "ms", 0.1, 0.0, 0.0, 25.5, 1
battFac2 = scalar, U08, 155, "ms/v",0.0166667, 0.0, 0.0, 1.0, 2
rpmk2 = scalar, U16, 156, "", 1.0, 0.0
; Config1
mapType2 = bits, U08, 182, [0:1], "115 kPa", "250 kPa", "300 kPa", "400 kPa"
twoStroke2 = bits, U08, 182, [2:2], "Four-stroke", "Two-stroke"
;; injType2 = bits, U08, 182, [3:3], "Port", "Throttle Body"
nCylinders2= bits, U08, 182, [4:7+1]
; Config3
cltType2 = bits, U08, 183, [0:1], "GM", "Unknown1", "Unknown2", "Unknown3"
matType2 = bits, U08, 183, [2:3], "GM", "Unknown1", "Unknown2", "Unknown3"
nInjectors2= bits, U08, 183, [4:7+1]
; Config3
engineType2= bits, U08, 184, [0:0], "Even fire", "Odd fire"
egoType2 = bits, U08, 184, [1:1], "Narrow band", "Wide band"
algorithm2 = bits, U08, 184, [2:2], "Speed Density", "Alpha-N"
baroCorr2 = bits, U08, 184, [3:3], "Off", "On"
primePulse2= scalar, U08, 185, "ms", 0.1, 0.0, 0.0, 25.5, 1
egoRPM2 = scalar, U08, 185, "RPM", 100.0, 0.0, 100, 25500, 0
#if CELSIUS
fastIdleT2 = scalar, U08, 186, "C", 0.555, -72.0, -40, 102, 1
#else
fastIdleT2 = scalar, U08, 186, "F", 1.0, -40.0, -40, 215, 1
#endif
egoSwitch2 = scalar, U08, 187, "v", 0.0196, 0.0, 0.0, 5.0, 3
; taeColdM2 = scalar, U08, 188, "%", 1.0, 0.0, 0.0, 250.0, 0
; egoCount2 = scalar, U08, 190, "", 1.0, 0.0, 0.0, 255.0, 0
; SECOND O2 SETTINGS
TwoLambda = bits, U08, 188[0:0], "None*^(DT)", "Fitted (DT only)"
page = 3
advTable1 = array, U08, 0,[12x12], "deg", 0.352, -28.4, -10.0, 80.0, 0
rpmBins3 = array, U08, 144,[ 12], "RPM", 100.0, 0.0, 100, 25500, 0
#if SPEED_DENSITY
#if MPXH6300A
mapBins3 = array, U08, 156, [ 12], "kPa", 1.213675, 1.53, 20.0, 304.0, 0
#elif MPXH6400A
mapBins3 = array, U08, 156, [ 12], "kPa", 1.6197783, 2.147, 20.0, 400.0, 0
#else
mapBins3 = array, U08, 156,[ 12], "kPa", 1.0, 0.0, 0.0, 255.0, 0
#endif
#elif AIR_FLOW_METER
afmBins3 = array, U08, 156, [12], "AFM Volts", 0.01961, 0.0, 0.0, 5.0, 2
#elif ALPHA_N
tpsBins3 = array, U08, 156, [ 12], "TPS", 1.0, 0.0, 0.0, 255.0, 0
#endif
TrigAng = scalar, U08, 168, "Deg", 0.352, 0, 0, 90, 0
FixAng = scalar, U08, 169, "Deg", 0.352, -28.4, -10, 80, 0
Trim = scalar, S08, 170, "Deg", 0.352, 0, -45, 45, 0
CrankAng = scalar, U08, 171, "Deg", 0.352, -28.4, -10, 80, 0
IgHold = scalar, U08, 172, "", 1, 0, 0, 100, 0
Trig_plus = bits, U08, 173[0:1], "0", "+22.5", "INVALID", "+45"
TrigCrank = bits, U08, 173[2:2], "Trigger Return", "Time Based"
IgInv = bits, U08, 173[3:3], "No", "Yes"
oddfire = bits, U08, 173[4:4], "No", "Yes"
IdleAdv = scalar, U08, 174, "Deg", 0.352,-28.4, -10, 80, 0
IdleAdvTPS = scalar, U08, 175, "ADC", 1, 0, 0, 255, 0
IdleAdvRPM = scalar, U08, 176, "RPM", 100, 0, 0, 1200, 0
#if CELSIUS
IdleAdvCLT = scalar, U08, 177, "C", 0.555, -72, -40, 102, 1
#else
IdleAdvCLT = scalar, U08, 177, "F", 1, -40, -40, 215, 0
#endif
IdleDelayTime = scalar, U08, 178, "sec", 1, 0, 0, 5, 0
StgCycles = scalar, U08, 179, "cycles", 1, 0, 0, 255, 0
#if MPXH6300A
Stg2ndParmKPA = scalar, U08, 180, "KPa", 1.213675, 1.53, 0, 304.0, 0
Stg2ndParmDlt = scalar, U08, 181, "KPa", 1.213675, 1.53, 0, 304.0, 0
#elif MPXH6400A
Stg2ndParmKPA = scalar, U08, 180, "KPa", 1.6197783, 2.147, 20.0, 400.0, 0
Stg2ndParmDlt = scalar, U08, 181, "KPa", 1.6197783, 2.147, 20.0, 400.0, 0
#else
Stg2ndParmKPA = scalar, U08, 180, "kPa", 1, 0, 0, 255, 0
Stg2ndParmDlt = scalar, U08, 181, "kPa", 1,0,0,255,0
#endif
spare3_182 = scalar, U08, 182, "", 1, 0, 0, 255, 0
spare3_183 = scalar, U08, 183, "", 1, 0, 0, 255, 0
spare3_184 = scalar, U08, 184, "", 1, 0, 0, 255, 0
page = 4
msnsCyl = bits, U08, 0, [0:0], "Off*", "MSnS^"
neonCrank = bits, U08, 0, [1:1], "Off*^", "Neon/420A"
wheelon = bits, U08, 0, [2:2], "Off*^", "Generic wheel"
onetwo = bits, U08, 0, [3:3], "-1", "-2"
edis = bits, U08, 0, [4:5], "Off*^", "EDIS", "INVALID", "dual EDIS"
tfi = bits, U08, 0, [6:6], "Off*^", "Ford TFI"
hei7 = bits, U08, 0, [7:7], "Off*^", "GM 7pin HEI"
; used to capture all ignition modes, for menu selection
ignmode = scalar, U08, 0, "", 1, 0, 0, 255,0
fidleUse = bits, U08, 1, [0:0], "Idle control*", "Spark output A"
led17Use = bits, U08, 1, [1:1], "Squirt*^", "Spark output A"
led18Use = bits, U08, 1, [2:3], "Warmup*^", "IRQ trigger", "Output4","Spark output C"
led18_2Use = bits, U08, 1, [3:3]
led19Use = bits, U08, 1, [4:4], "Acceleration*^", "Spark output B"
x2use = bits, U08, 1, [5:5], "Water inj", "Fan control"
;bit 6 is led18/fan control
toy_dli = bits, U08, 1, [7:7], "Normal*", "Toyota DLI muliplex"
;spark outputs E & F
spkeop = bits, U08, 116, [3:3], "Shiftlight", "Spark output E"
spkfop = bits, U08, 116, [4:4], "Knock input", "Spark output F"
SoftRevLim = scalar, U08, 2, "rpm", 100.0, 0.0, 100, 25500, 0
SoftLimRetard = scalar, U08, 3, "deg", 0.352, -28.4, -10, 80, 0
SoftLimMax = scalar, U08, 4, "s", 0.1, 0.0, 0.0, 25.5, 1
; "MSnS Soft limit cool time (s)", 5, 0.1, 0.0, 0.0, 25.5 NOT USED
HardRevLim = scalar, U08, 6, "rpm", 100, 0.0, 100, 25500, 0
out1lim = scalar, U08, 7, "raw byte or deg F +40", 1, 0, 0, 255, 0
out1src = bits, U08, 8, [0:4], "Off*", "INVALID", "INVALID", "INVALID", "MAP", "MAT", "CLT", "TPS", "BATT", "EGO", "egocorr", "AirCorr", "WarmCorr", "RPM", "PW1", "TPSAccel", "BaroCorr", "GammaE","VECurr1", "PW2","VECurr2", "IdleDC","CTimeH", "CTimeL","SparkAngle", "AFRTarget","X7ADC", "X6ADC","CltIATAngle", "KnockAngle","EggoCorr2", "Traction Active"
out2lim = scalar, U08, 9, "raw byte or deg F +40", 1, 0, 0, 255, 0
out2src = bits, U08, 10, [0:4], "Off*", "INVALID", "INVALID", "INVALID", "MAP", "MAT", "CLT", "TPS", "BATT", "EGO", "egocorr", "AirCorr", "WarmCorr", "RPM", "PW1", "TPSAccel", "BaroCorr", "GammaE","VECurr1", "PW2","VECurr2", "IdleDC","CTimeH", "CTimeL","SparkAngle", "AFRTarget","X7ADC", "X6ADC","CltIATAngle", "KnockAngle","EggoCorr2", "Traction Active"
out1Hysis = scalar, U08, 126, "raw byte or deg F", 1, 0, 0, 255, 0
out2Hysis = scalar, U08, 127, "raw byte or deg F", 1, 0, 0, 255, 0
out3lim = scalar, U08, 133, "raw byte or deg F +40", 1, 0, 0, 255, 0
out3src = bits, U08, 132, [0:4], "Off*", "INVALID", "DECEL", "ACCEL", "MAP", "MAT", "CLT", "TPS", "BATT", "EGO", "egocorr", "AirCorr", "WarmCorr", "RPM", "PW1", "TPSAccel", "BaroCorr", "GammaE","VECurr1", "PW2","VECurr2", "IdleDC","CTimeH", "CTimeL","SparkAngle", "AFRTarget","X7ADC", "X6ADC","CltIATAngle", "KnockAngle","EggoCorr2", "Traction Active"
out3Timer = scalar, U08, 134, "Sec", 0.1, 0, 0, 25.5, 1
Out3_Out1 = bits, U08, 116[7:7], "Source", "output1+Source"
out4lim = scalar, U08, 139, "raw byte or deg F +40", 1, 0, 0, 255, 0
out4src = bits, U08, 138, [0:4], "Off*", "INVALID", "DECEL", "ACCEL", "MAP", "MAT", "CLT","TPS", "BATT", "EGO", "egocorr", "AirCorr", "WarmCorr", "RPM", "PW1", "TPSAccel", "BaroCorr", "GammaE","VECurr1", "PW2","VECurr2", "IdleDC","CTimeH", "CTimeL","SparkAngle", "AFRTarget","X7ADC", "X6ADC","CltIATAngle", "KnockAngle","EggoCorr2", "Traction Active"
out4FAN = bits, U08, 1, [6:6], "Source", "Fan Control"
wd_2trig = bits, U08, 11, [0:0], "Off", "2nd trigger"
whlsim = bits, U08, 11, [2:2], "off", "on"
taeIgnCount = bits, U08, 11, [3:3], "Sec*^", "Cycles"
rotaryFDign = bits, U08, 11, [4:4], "FC Trailing", "FD Trailing"
hybridAN = bits, U08, 11, [5:5], "Off*^", "On"
inj2cr = bits, U08 11, [6:6], "Off", "On*^"
boostUse = bits, U08, 12, [0:0], "Output1*^", "Boost Control"
shiftUse = bits, U08, 12, [1:1], "Off*^", "On"
launchUse = bits, U08, 12, [2:2], "Off*^", "On"
out3sparkd = bits, U08, 12, [4:4], "Output3", "Spark output D"
dwellduty50 = bits, U08, 12, [5:6], "75% duty cycle*^", "minimal for HEI4", "50% duty cycle", "INVALID"
whlsimcnt = scalar, U08, 13, "", 1.0, 0.0, 1, 6, 0
freqDiv = bits, U08, 14, [0:2], "INVALID","39.0 Hz","19.5 Hz","13.0 Hz","9.8 Hz","7.8 Hz","6.5 Hz","5.6 Hz"
bcUpdateRate = scalar, U08, 15, "ms", 1.0, 0.0, 10, 255, 0
pGain = scalar, U08, 16, "%", 0.3922, 0.0, 0, 100, 1
dGain = scalar, U08, 17, "%", 0.3922, 0.0, 0, 100, 1
ShiftLower = scalar, U08, 18, "rpm", 100.0, 0.0, 100, 25500, 0
ShiftUpper = scalar, U08, 19, "rpm", 100.0, 0.0, 100, 25500, 0
LaunchLim = scalar, U08, 20, "rpm", 100.0, 0.0, 100, 25500, 0
edismultirpm = scalar, U08, 21, "rpm", 100.0, 0.0, 100, 2500, 0
BoostDir = bits, U08, 92, [6:6], "Increase boost", "Decrease Boost"
inj1g = bits, U08, 33, [5:5], "off", "on*^"
inj2t = bits, U08, 33, [4:4], "1*^", "2 (DT)"
inj2g = bits, U08, 33, [6:6], "off", "on*^"
trig2fall = bits, U08, 33, [0:0], "rising", "falling (like IRQ)"
#if MPXH6300A
KPaTarg10 = scalar, U08, 29, "KPa", 1.213675, 1.53, 100, 304.0, 0
KPaTarg40 = scalar, U08, 30, "KPa", 1.213675, 1.53, 100, 304.0, 0
KPaTarg60 = scalar, U08, 31, "KPa", 1.213675, 1.53, 100, 304.0, 0
KPaTarg100 = scalar, U08, 32, "KPa", 1.213675, 1.53, 100, 304.0, 0
#elif MPXH6400A
KPaTarg10 = scalar, U08, 29, "KPa", 1.6197783, 2.147, 20.0, 400.0, 0
KPaTarg40 = scalar, U08, 30, "KPa", 1.6197783, 2.147, 20.0, 400.0, 0
KPaTarg60 = scalar, U08, 31, "KPa", 1.6197783, 2.147, 20.0, 400.0, 0
KPaTarg100 = scalar, U08, 32, "KPa", 1.6197783, 2.147, 20.0, 400.0, 0
#else
KPaTarg10 = scalar, U08, 29, "KPa", 1, 0, 100, 255, 0
KPaTarg40 = scalar, U08, 30, "KPa", 1, 0, 100, 255, 0
KPaTarg60 = scalar, U08, 31, "KPa", 1, 0, 100, 255, 0
KPaTarg100 = scalar, U08, 32, "KPa", 1, 0, 100, 255, 0
#endif
TPSRPMTarg = bits, U08, 92, [7:7], "TPS", "RPM"
TargetB1 = scalar, U08, 25, "Raw Value", 1, 0, 0, 255, 0
TargetB2 = scalar, U08, 26, "Raw Value", 1, 0, 0, 255, 0
TargetB3 = scalar, U08, 27, "Raw Value", 1, 0, 0, 255, 0
TargetB4 = scalar, U08, 28, "Raw Value", 1, 0, 0, 255, 0
; Added for Enhanced stuff
; Target AFR 8 x 8 table
AfrTar = bits, U08, 46,[7:7], "Off*^(DT)", "On"
AfrTar2 = bits, U08, 92,[1:1], "Off*^(DT)", "On"
#if MPXH6300A
EgoLimKPa = scalar, U08, 39, "KPa", 1.213675, 1.53, 0, 304.0, 0
#elif MPXH6400A
EgoLimKPa = scalar, U08, 39, "KPa", 1.6197783, 2.147, 20.0, 400.0, 0
#else
EgoLimKPa = scalar, U08, 39, "KPa", 1, 0, 0, 255, 0
#endif
EgoLim2 = scalar, U08, 40, "+-", 1, 0, 0, 100, 0
KpaTPSTar = bits, U08, 109,[4:4], "Speed Density", "Alpha-N"
TPSTar = bits, U08, 109,[5:5], "Always", "Above TPS Setpoint"
TPSAFRPoint = scalar, U08, 121, "Raw ADC", 1, 0, 0, 255, 0
; More Launch Stuff
LachTps = scalar, U08, 41, "Raw ADC", 1, 0, 0, 255, 0
LachDeg = scalar, U08, 42, "Deg", 0.352, -28.4, -10, 45, 0
LachRpm = scalar, U08, 43, "RPM", 100, 0, 0, 6000, 0
VLaunch = bits, U08, 46[1:1], "Off", "On"
LC_flatsel = scalar, U08, 124, "RPM", 100, 0, 0, 25500, 0
LC_flatlim = scalar, U08, 128, "RPM", 100, 0, 3000, 6000, 0
LC_f_slim = scalar, U08, 140, "RPM", 100, 0, 3000, 6000, 0
LC_f_limangle = scalar, U08, 141, "Deg", 0.352, -28.4, -10, 45, 0
; Over Boost Protection
#if MPXH6300A
OvrBKpa = scalar, U08, 44, "KPa", 1.213675, 1.53, 0, 304.0, 0
#elif MPXH6400A
OvrBKpa = scalar, U08, 44, "KPa", 1.6197783, 2.147, 20.0, 400.0, 0
#elif KPa
OvrBKpa = scalar, U08, 44, "KPa", 1, 0, 100, 255, 0
#else
OvrBKpa = scalar, U08, 44, "PSI", 0.147, -100, -15, 23, 1
#endif
; Coolant / Iat Related Ignition
CltAdv = bits, U08, 46[2:2], "Off", "On"
#if CELSIUS
IgAdvDeg = scalar, U08, 48, "C", 0.555, 0, 0, 100, 1
IgAdvTemp = scalar, U08, 47, "C", 0.555, -72, -40, 70, 1
IgRetDeg = scalar, U08, 50, "C", 0.555, 0, 0, 102, 1
IgRetTemp = scalar, U08, 52, "C", 0.555, -72, -40, 102, 1
#else
IgAdvDeg = scalar, U08, 48, "F", 1, 0, 0, 120, 1
IgAdvTemp = scalar, U08, 47, "F", 1, -40, -10, 120, 1
IgRetDeg = scalar, U08, 50, "F", 1, 0, 0, 120, 1
IgRetTemp = scalar, U08, 52, "F", 1, -40, -10, 120, 1
#endif
MaxIatAdv = scalar, U08, 49, "Deg", 0.352,0, 0, 15, 1
#if MPXH6300A
IatAdvKpa = scalar, U08, 51, "KPa", 1.213675, 1.53, 0, 304.0, 0
#elif MPXH6400A
IatAdvKpa = scalar, U08, 51, "KPa", 1.6197783, 2.147, 20.0, 400.0, 0
#else
IatAdvKpa = scalar, U08, 51, "KPa", 1, 0, 0, 255, 0
#endif
; KNOCK DETECTOR SETTINGS
KnockOn = bits, U08, 46[6:6], "Off","On"
KnockRpm = scalar, U08, 53, "RPM", 100, 0, 0, 12000, 0
#if MPXH6300A
KnockKpa = scalar, U08, 55, "KPa", 1.213675, 1.53, 0, 304.0, 0
#elif MPXH6400A
KnockKpa = scalar, U08, 55, "KPa", 1.6197783, 2.147, 20.0, 400.0, 0
#else
KnockKpa = scalar, U08, 55, "KPa", 1, 0, 0, 255, 0
#endif
KnockRpmL = scalar, U08, 54, "RPM", 100, 0, 0, 12000, 0
KnockRet = scalar, U08, 56, "Deg", 0.352, 0, 0, 10, 0
KnockSb = scalar, U08, 57, "Deg", 0.352, 0, 0, 10, 0
KnockMax = scalar, U08, 59, "Deg", 0.352, 0, 1, 30, 0
KnockAdv = scalar, U08, 58, "Deg", 0.352, 0, 0, 20, 0
KnockTim = scalar, U08, 60, "Sec", 1, 0, 1, 10, 0
#if MPXH6300A
KnockBoost = scalar, U08, 107, "KPa", 1.213675, 1.53, 0, 304.0, 0
BoostMaxKn = scalar, U08, 108, "KPa", 1.213675, 1.53, 0, 304.0, 0
#elif MPXH6400A
KnockBoost = scalar, U08, 107, "KPa", 1.6197783, 2.147, 20.0, 400.0, 0
BoostMaxKn = scalar, U08, 108, "KPa", 1.6197783, 2.147, 20.0, 400.0, 0
#elif KPa
KnockBoost = scalar, U08, 107, "KPa", 1, 0, 0, 155, 0
BoostMaxKn = scalar, U08, 108, "KPa", 1, 0, 0, 155, 0
#else
KnockBoost = scalar, U08, 107, "PSI", 0.147, 0, 0, 20, 0
BoostMaxKn = scalar, U08, 108, "PSI", 0.147, 0, 0, 20, 0
#endif
; WATER INJECTION SETTINGS
WaterInj = bits, U08, 46[3:3], "Off*", "On"
WaterIRpm = scalar, U08, 63, "RPM", 100, 0, 0, 12000, 0
#if MPXH6300A
StartWIKPa = scalar, U08, 62, "KPa", 1.213675, 1.53, 0, 304.0, 0
#elif MPXH6400A
StartWIKPa = scalar, U08, 62, "KPa", 1.6197783, 2.147, 20.0, 400.0, 0
#elif KPa
StartWIKPa = scalar, U08, 62, "KPa", 1, 0, 0, 255, 0
#else
StartWIKPa = scalar, U08, 62, "PSI", 0.147, -100, 0, 20, 0
#endif
#if CELSIUS
WaterIIat = scalar, U08, 61, "C", 0.555, -72, -40, 102, 1
#else
WaterIIat = scalar, U08, 61, "F", 1, -40, -10, 120, 1
#endif
; OPEN LOOP MODE
OLoopEgo = bits, U08, 46[0:0], "TPS", "KPa"
#if MPXH6300A
KPaOn = scalar, U08, 64, "KPa", 1.213675, 1.53, 0, 304.0, 0
#elif MPXH6400A
KPaOn = scalar, U08, 64, "KPa", 1.6197783, 2.147, 20.0, 400.0, 0
#else
KPaOn = scalar, U08, 64, "KPa", 1, 0, 0, 255, 0
#endif
TpsOn = scalar, U08, 65, "Raw", 1, 0, 0, 255, 0
; HARD CUT TYPE SETTINGS FOR REV LIMITER AND LAUNCH AND OVER BOOST
HCutType = bits, U08, 46[4:5], "INVALID", "Spark Cut Only", "Fuel Only", "Fuel & Spark"
HCutSpark = scalar, U08, 45, "Sparks", 1,0, 0, 20, 0
HCutLCType = bits, U08, 76[0:1], "INVALID", "Spark Cut Only", "Fuel Only", "Fuel & Spark"
HCutLCSpark = scalar, U08, 77, "Sparks", 1, 0, 0, 20, 0
SparkCutBase = scalar, U08, 78, "Sparks", 1, -1, 5, 20, 0 ; -1 to Value
OvrBCutType = bits, U08, 76[4:5], "INVALID", "Spark Cut Only", "Fuel Only", "Fuel & Spark"
SparkCutBNum = scalar, U08, 84, "Sparks", 1, 0, 0, 20, 0
; Output Inverters
InvOut1 = bits, U08, 66[1:1], "Normal", "Inverted"
InvOut2 = bits, U08, 66[2:2], "Normal", "Inverted"
Out1UpLim = scalar, U08, 88, "raw byte or deg F +40", 1, 0, 0, 255, 0
Out2UpLim = scalar, U08, 89, "raw byte or deg F +40", 1, 0, 0, 255, 0
; EDIS multi-spark
edismulti = bits, U08, 66[3:3], "Off*^", "On"
; Nitrous System
NosRpm = scalar, U08, 23, "RPM", 100, 0, 1000, 25000, 0
NosTps = scalar, U08, 67, "Raw", 1, 0, 0, 255, 0
#if CELSIUS
NosClt = scalar, U08, 22, "C", 0.555, -72, -40, 102, 1
#else
NosClt = scalar, U08, 22, "F", 1, -40, -10, 120, 1
#endif
NosAngle = scalar, U08, 68, "Deg", 0.352, 0, 0, 30, 0
NosPWLo = scalar, U08, 69, "mSec", 0.1, 0, 0, 25.5, 1
NosPWHi = scalar, U08, 70, "mSec", 0.1, 0, 0, 25.5, 1
nitrousUse = bits, U08, 11, [7:7], "Off*", "On"
NosRpmMax = scalar, U08, 24, "RPM", 100, 0, 3000, 25000, 0
DtNos = bits, U08, 66[5:5], "Bank1", "Bank2"
NosLagSystem = bits, U08, 76[6:6], "Off", "On"
#if MPXH6300A
NosLowKpa = scalar, U08, 85, "KPa", 1.213675, 1.53, 0, 304.0, 0
NosHiKpa = scalar, U08, 86, "KPa", 1.213675, 1.53, 0, 304.0, 0
#elif MPXH6400A
NosLowKpa = scalar, U08, 85, "KPa", 1.6197783, 2.147, 20.0, 400.0, 0
NosHiKpa = scalar, U08, 86, "KPa", 1.6197783, 2.147, 20.0, 400.0, 0
#else
NosLowKpa = scalar, U08, 85, "KPa", 1, 0, 0, 255
NosHiKpa = scalar, U08, 86, "KPa", 1, 0, 0, 255
#endif
; n2ostage2 = bits, U08, ??where??, "Off", "Stage2 on"
;nitrous/launch
N2Odel_launch = scalar, U08, 157, "s", 0.01, 0, 0, 2.55, 2
N2Odel_flat = scalar, U08, 158, "s", 0.01, 0, 0, 2.55, 2
N2Oholdon = scalar, U08, 159, "s", 0.01, 0, 0, 2.55, 2
;wheel decoder
numteeth = scalar, U08, 90, "", 1, 0, 0, 255
trig1 = scalar, U08, 25, "", 1, 0, 0, 255
trig2 = scalar, U08, 26, "", 1, 0, 0, 255
trig3 = scalar, U08, 27, "", 1, 0, 0, 255
trig4 = scalar, U08, 28, "", 1, 0, 0, 255
trig1ret = scalar, U08, 29, "", 1, 0, 0, 255
trig2ret = scalar, U08, 30, "", 1, 0, 0, 255
trig3ret = scalar, U08, 31, "", 1, 0, 0, 255
trig4ret = scalar, U08, 32, "", 1, 0, 0, 255
trig5 = scalar, U08, 145, "", 1, 0, 0, 255
trig6 = scalar, U08, 146, "", 1, 0, 0, 255
trig5ret = scalar, U08, 147, "", 1, 0, 0, 255
trig6ret = scalar, U08, 148, "", 1, 0, 0, 255
miss2nd = bits, U08, 66[0:0], "no missing", "missing teeth"
dualdizzy = bits, U08, 92, [4:4], "Normal", "Dual dizzy"
; OVER RUN FUEL CUT SETTINGS
OvrRunC = bits, U08, 66[6:6], "Off","On"
OvrRunRpm = scalar, U08, 71, "RPM", 100, 0, 1000, 6000, 0
#if CELSIUS
OvrRunClt = scalar, U08, 182, "C", 0.555, -72, -40, 102, 0
#else
OvrRunClt = scalar, U08, 182, "F", 1, -40, -40, 215, 0
#endif
#if MPXH6300A
OvrRunKpa = scalar, U08, 72, "KPa", 1.213675, 1.53, 0, 304.0, 0
#elif MPXH6400A
OvrRunKpa = scalar, U08, 72, "KPa", 1.6197783, 2.147, 20.0, 400.0, 0
#else
OvrRunKpa = scalar, U08, 72, "KPa", 1, 0, 0, 255, 0
#endif
OvrRunTps = scalar, U08, 73, "Raw ADC", 1, 0, 0, 255, 0
OvrRunTimr = scalar, U08, 130, "Sec", 1, 0, 0, 255, 0
; Accel Dot Settings
AccDecEnrich = bits, U08, 66[7:7], "TPSdot*^(DT)", "MAPdot"
KPaDotBoost = bits, U08, 66[4:4], "Never", "In Boost"
DecayAccel = bits, U08, 116[6:6], "None*^(DT)", "Decay"
DecayAcPoint = scalar, U08, 183, "mS", 0.1, 0, 0, 25.5, 1
; Electric Fan control (X2) - can't be used with water inj
#if CELSIUS
efanontemp = scalar, U08, 74, "C", 0.555, -72, -40, 102, 1
efanofftemp = scalar, U08, 75, "C", 0.555, -72, -40, 102, 1
#else
efanontemp = scalar, U08, 74, "F", 1, -40, -40, 215, 1
efanofftemp = scalar, U08, 75, "F", 1, -40, -40, 215, 1
#endif
; STAGED INJECTION
IStagedMode = bits, U08, 76[2:3],"Off*^","RPM-Based","MAP-Based","TPS-Based"
ScaleFac = scalar, U08, 79, "", 1.0, 0.0, 0, 255
StgTrans = scalar, U08, 80, "", 1.0, 0.0, 0, 255
StgDelta = scalar, U08, 81, "", 1.0, 0.0, 0, 255
StagedMAP2nd = bits, U08, 109[6:6], "Off*^", "MAP-Based"
StagedAnd = bits, U08, 109[7:7], "One condition", "Both Conditions"
; BARO CORRECTION
#if MPXH6300A
BarroHi = scalar, U08, 82, "KPa", 1.213675, 1.53, 0, 304.0, 0
BarroLow = scalar, U08, 83, "KPa", 1.213675, 1.53, 0, 304.0, 0
#elif MPXH6400A
BarroHi = scalar, U08, 82, "KPa", 1.6197783, 2.147, 20.0, 400.0, 0
BarroLow = scalar, U08, 83, "KPa", 1.6197783, 2.147, 20.0, 400.0, 0
#elif MPX4250
BarroHi = scalar, U08, 82, "KPa", 0.9837, 8, 10, 255
BarroLow = scalar, U08, 83, "KPa", 0.9837, 8, 10, 255
#else
BarroHi = scalar, U08, 82, "KPa", 0.433, 10, 10, 255
BarroLow = scalar, U08, 83, "KPa", 0.433, 10, 10, 255
#endif
AlphBaroCor = bits, U08, 184, [3:3], "No", "Yes"
AFMUse = bits, U08, 184, [5:5], "No AFM *^", "AFM on X7"
AirCorAFM = bits, U08, 184, [6:6], "Use IAT", "Built into AFM"
ConsBarCor = bits, U08, 184, [7:7], "Not Fitted*^", "Extra MAP fitted to X7"
; Spark Table Selection
STTable2On = bits, U08, 76[7:7], "Spark Table1^", "Spark Table2"
ST2Delay = scalar, U08, 87, "Sec", 0.1, 0, 0, 25, 1
; VE Table 3
UseVE3 = bits, U08, 92[0:0], "Dont switch*^(DT)", "Switch to Table3"
VE3Delay = scalar, U08, 93, "Sec", 0.1, 0, 0, 25, 1
; Traction Control
TractionOn = bits, U08, 92[5:5], "Off*^", "On"
RPMThresh = scalar, U08, 98, "RPM/Sec", 1000, 0, 1000, 25000, 0
RPM1S = scalar, U08, 94, "3000RPM/Sec or 5%Slip", 0.1, 0, 0, 20.0, 1
RPM2S = scalar, U08, 95, "4000RPM/Sec or 15%Slip", 0.1, 0, 0, 20.0, 1
RPM3S = scalar, U08, 96, "6000RPM/Sec or 30%Slip", 0.1, 0, 0, 20.0, 1
RPM4S = scalar, U08, 97, "10000RPM/Sec or 70%Slip ", 0.1, 0, 0, 20.0, 1
TractRet1 = scalar, U08, 99, "3000RPM/Sec or 5%Slip", 0.352, 0, 0, 30, 0
TractRet2 = scalar, U08, 100, "4000RPM/Sec or 15%Slip", 0.352, 0, 0, 30, 0
TractRet3 = scalar, U08, 101, "6000RPM/Sec or 30%Slip", 0.352, 0, 0, 30, 0
TractRet4 = scalar, U08, 102, "10000RPM/Sec or 70%Slip", 0.352, 0, 0, 30, 0
TractSC1 = scalar, U08, 103, "3000RPM/Sec or 5%Slip", 1, 0, 0, 2, 0
TractSC2 = scalar, U08, 104, "4000RPM/Sec or 15%Slip", 1, 0, 0, 2, 0
TractSC3 = scalar, U08, 105, "6000RPM/Sec or 30%Slip", 1, 0, 0, 2, 0
TractSC4 = scalar, U08, 106, "10000RPM/Sec or 70%Slip", 1, 0, 0, 2, 0
TractNOS = bits, U08, 109, [0:0], "No", "Yes"
TractCyc1 = scalar, U08, 112, "3000RPM/Sec or 5%Slip", 1, 0, 1, 255, 0
TractCyc2 = scalar, U08, 113, "4000RPM/Sec or 15%Slip", 1, 0, 1, 255, 0
TractCyc3 = scalar, U08, 114, "6000RPM/Sec or 30%Slip", 1, 0, 1, 255, 0
TractCyc4 = scalar, U08, 115, "10000RPM/Sec or 70%Slip", 1, 0, 1, 255, 0
TractCySec = bits, U08, 109,[2:2], "RPM stable for 0.1S", "Cycle count only"
TractScale = scalar, U08, 119, "%", 0.39216, 0, 0, 100, 0
TractSlip = scalar, U08, 120, "%", 0.39216, 0, 0, 100, 0
TractVSSMax = scalar, U08, 118, "V", 0.0196, 0, 0, 5, 2
TractVSSMin = scalar, U08, 117, "V", 0.0196, 0, 0, 5, 2
TractMode = bits, U08, 109, [3:3], "RPM Based", "Vehicle Speed Sensors"
TractSlipH = scalar, U08, 123, "%", 0.39216, 0, 0, 100, 0
;Advanced options for testing
falsetrig_dis = bits, U08, 92, [2:2], "Enabled*", "Disabled"
wheel_old = bits, U08, 92, [3:3], "025 style", "024s9 style"
;Dwell control
;running dwell variable railed to 8 - who needs more than 8ms?
;mindischarge railed to 1.5ms. ought to be max 1ms I guess? Normal value say 0.1ms
dwellcont = bits, U08, 109, [1:1], "Fixed duty*^", "Dwell control"
dwellcrank = scalar, U08, 110, "ms", 0.1, 0, 0, 25, 1
dwellrun = scalar, U08, 111, "ms", 0.1, 0, 0, 8, 1
mindischg = scalar, U08, 143, "ms", 0.1, 0, 0, 1.5, 1
;pwm idle stuff was in here
tachconf = bits, U08, 144[0:2], "OFF","X2 (JS0)","X3 (JS1)","X4 (JS2)","X5 (JS3)","Output3","Pin10","INVALID"
tachconfdiv = bits, U08, 144[7:7], "Normal", "Half speed"
#if MPXH6300A
bc_max_diff = scalar, U08, 125, "kPa", 1.213675, 1.53, 0, 304.0, 0
DecelKPa = scalar, U08, 129, "kPa", 1.213675, 1.53, 0, 304.0, 0
Pambient = scalar, U08, 185, "kPa", 1.213675, 1.53, 0, 304.0, 0
#elif MPXH6400A
bc_max_diff = scalar, U08, 125, "kPa", 1.6197783, 2.147, 20.0, 400.0, 0
DecelKPa = scalar, U08, 129, "kPa", 1.6197783, 2.147, 20.0, 400.0, 0
Pambient = scalar, U08, 185, "kPa", 1.6197783, 2.147, 20.0, 400.0, 0
#else
bc_max_diff = scalar, U08, 125, "kPa", 1.0, 0.0, 0.0, 255.0, 0
DecelKPa = scalar, U08, 129, "kPa", 1.0, 0.0, 0.0, 255.0, 0
Pambient = scalar, U08, 185, "kPa", 1.0, 0.0, 0.0, 255.0, 0
#endif
DecelBoost = bits, U08, 92, [7:7], "Never*^", "Above KPa Setpoint"
; More Boost Controller Stuff
#if CELSIUS
IATBoostSt = scalar, U08, 135, "C", 0.555, -72, -40, 100, 1
IATBoost = scalar, U08, 136, "C", 0.555, 0, 0, 102, 1
TPSBooIAT = scalar, U08, 137, "Raw ADC", 1, 0, 0, 255, 0
#else
IATBoostSt = scalar, U08, 135, "F", 1, -40, -10, 120, 1
IATBoost = scalar, U08, 136, "F", 1, 0, 0, 120, 1
TPSBooIAT = scalar, U08, 137, "Raw ADC", 1, 0, 0, 255, 0
#endif
BooTbl2Use = bits, U08, 116, [2:2], "Dont Switch*^", "Targets 2"
; MAPdot and ACCEL WIZARD STUFF
mapThresh4 = scalar, U08, 91, "kPa/s", 10, 0, 0, 2550, 0
taeRates4 = array, U08, 161,[ 4], "ms", 0.1960784, 0.0, 0.0, 25.5, 1
maeRates4 = array, U08, 165,[ 4], "ms", 10, 0.0, 0.0, 2550, 0
maeBins4 = array, U08, 169,[ 4], "ms", 0.1, 0.0, 0.0, 25.5, 1
taeBins4 = array, U08, 173,[ 4], "ms", 0.1, 0.0, 0.0, 25.5, 1
taeColdA4 = scalar, U08, 177, "ms", 0.1, 0.0, 0.0, 25.5, 1
tpsThresh4 = scalar, U08, 178, "v/s", 0.1953125, 0.0, 0.2, 49.8, 3
taeTime4 = scalar, U08, 179, "ms", 0.1, 0.0, 0.0, 25.5, 1
tdePct4 = scalar, U08, 180, "%", 1.0, 0.0, 0.0, 255.0, 0
taeColdM4 = scalar, U08, 181, "%", 1.0, 0.0, 0.0, 250.0, 0
mapProportion4 = bits, U08, 66[7:7], "TPSdot*^(DT)", "MAPdot"
AccelMapASE = bits, U08, 184, [2:2], "Normal*^", "Off during ASE"
RPMBAsedAE = bits, U08, 184[4:4], "Normal AE*^", "RPM Based"
;???curve table
RPMAE1 = scalar, U08, 152, "RPM", 100, 0, 100, 25500, 0 ; RPM based AE stuff
RPMAE2 = scalar, U08, 151, "RPM", 100, 0, 100, 25500, 0
RPMAE3 = scalar, U08, 150, "RPM", 100, 0, 100, 25500, 0
RPMAE4 = scalar, U08, 149, "RPM", 100, 0, 100, 25500, 0
RPMmS1 = scalar, U08, 153, "mS", 0.1, 0, 0, 25.5, 1
RPMmS2 = scalar, U08, 154, "mS", 0.1, 0, 0, 25.5, 1
RPMmS3 = scalar, U08, 155, "mS", 0.1, 0, 0, 25.5, 1
RPMmS4 = scalar, U08, 156, "mS", 0.1, 0, 0, 25.5, 1
page = 5
advTable2 = array, U08, 0,[12x12], "deg", 0.352, -28.4, -10.0, 80.0, 0
rpmBins4 = array, U08, 144,[ 12], "RPM", 100.0, 0.0, 100, 25500, 0
#if SPEED_DENSITY
#if MPXH6300A
mapBins4 = array, U08, 156, [ 12], "kPa", 1.213675, 1.53, 20.0, 304.0, 0
#elif MPXH6400A
mapBins4 = array, U08, 156, [ 12], "kPa", 1.6197783, 2.147, 20.0, 400.0, 0
#else
mapBins4 = array, U08, 156, [ 12], "kPa", 1.0, 0.0, 0.0, 255.0, 0
#endif
#elif AIR_FLOW_METER
afmBins4 = array, U08, 156, [12], "AFM Volts", 0.01961, 0.0, 0.0, 5.0, 2
#elif ALPHA_N
tpsBins4 = array, U08, 156, [ 12], "TPS", 1.0, 0.0, 0.0, 255.0, 0
#endif
page = 6
veBins3 = array, U08, 0, [12x12], "%", 1.0, 0.0, 0.0, 255.0, 0
rpmBins5 = array, U08, 144, [ 12], "RPM", 100.0, 0.0, 100, 25500, 0
#if SPEED_DENSITY
#if MPXH6300A
mapBins5 = array, U08, 156, [ 12], "kPa", 1.213675, 1.53, 20.0, 304.0, 0
#elif MPXH6400A
mapBins5 = array, U08, 156, [ 12], "kPa", 1.6197783, 2.147, 20.0, 400.0, 0
#else
mapBins5 = array, U08, 156, [ 12], "kPa", 1.0, 0.0, 0.0, 255.0, 0
#endif
#elif AIR_FLOW_METER
afmBins5 = array, U08, 156, [12], "AFM Volts", 0.01961, 0.0, 0.0, 5.0, 2
#elif ALPHA_N
tpsBins5 = array, U08, 156, [ 12], "TPS", 1.0, 0.0, 0.0, 255.0, 0
#endif
ASETable1 = scalar, U08, 168, "%", 1.0, 0.0, 0.0, 255, 0
ASETable2 = scalar, U08, 169, "%", 1.0, 0.0, 0.0, 255, 0
ASETable3 = scalar, U08, 170, "%", 1.0, 0.0, 0.0, 255, 0
ASETable4 = scalar, U08, 171, "%", 1.0, 0.0, 0.0, 255, 0
ASETable5 = scalar, U08, 172, "%", 1.0, 0.0, 0.0, 255, 0
ASETable6 = scalar, U08, 173, "%", 1.0, 0.0, 0.0, 255, 0
ASETable7 = scalar, U08, 174, "%", 1.0, 0.0, 0.0, 255, 0
ASETable8 = scalar, U08, 175, "%", 1.0, 0.0, 0.0, 255, 0
ASETable9 = scalar, U08, 176, "%", 1.0, 0.0, 0.0, 255, 0
ASETable10 = scalar, U08, 177, "%", 1.0, 0.0, 0.0, 255, 0
ASETime = scalar, U08, 178, "", 1.0, 0.0, 0.0, 255, 0
aseIgnCount = bits, U08, 179, [0:0], "Cycles*^", "Sec"
ASEFixDe = bits, U08, 179, [1:1], "Decay *^", "Fixed then Decay"
ASEFixTim = scalar, U08, 180, "", 1.0, 0.0, 0.0, 255, 0
#if CELSIUS
ASEFixTemp = scalar, U08, 181, "C", 0.555, -72, -40, 100, 1
#else
ASEFixTemp = scalar, U08, 181, "F", 1, -40, -10, 120, 1
#endif
VEFixASE = bits, U08, 179, [2:2], "Normal MAP *^", "Fixed MAP"
#if MPXH6300A
VEFixValue = scalar, U08, 182, "kPa", 1.213675, 1.53, 20.0, 304.0, 0
#elif MPXH6400A
VEFixValue = scalar, U08, 182, "kPa", 1.6197783, 2.147, 20.0, 400.0, 0
#else
VEFixValue = scalar, U08, 182, "kpa", 0.965, 9, 0.0, 255.0, 0
#endif
page = 7 ; TARGET AFR table 1 BINS FOR VE 1 (First find which sensor used)
#if NARROW_BAND_EGO
afrBins1 = array, U08, 0, [8x8], "Volts", 0.0196, 0, 0.0, 5.0, 2
#elif WB_1_0_LINEAR
afrBins1 = array, U08, 0, [8x8], "Volts", 0.0196, 0, 0.0, 5.0, 2
#elif WB_UNKNOWN
afrBins1 = array, U08, 0, [8x8], "Volts", 0.0196, 0, 0.0, 5.0, 2
#elif AEM_LINEAR
afrBins1 = array, U08, 0, [8x8], "Volts", 0.0196, 0, 0.0, 5.0, 2
#elif AEM_NON_LINEAR
afrBins1 = array, U08, 0, [8x8], "Volts", 0.0196, 0, 0.0, 5.0, 2
#elif DIYWB_NON_LINEAR
afrBins1 = array, U08, 0, [8x8], "Volts", 0.0196, 0, 0.0, 5.0, 2
#elif DYNOJET_LINEAR
afrBins1 = array, U08, 0, [8x8], "Volts", 0.0314, 0, 0.0, 5.0, 2
#elif TECHEDGE_LINEAR
afrBins1 = array, U08, 0, [8x8], "AFR", 0.0392, 229.0, 9.0, 19.0, 1
#elif INNOVATE_1_2_LINEAR
afrBins1 = array, U08, 0, [8x8], "AFR", 0.1961, 0, 10.0, 20.0, 1
#elif INNOVATE_0_5_LINEAR
afrBins1 = array, U08, 0, [8x8], "AFR", 0.0392, 255.0, 10.0, 20.0, 1
#elif INNOVATE_LC1_DEFAULT
afrBins1 = array, U08, 0, [8x8], "AFR", 0.057647, 127.5, 10.0, 20.0, 1
#elif ZEITRONIX_NON_LINEAR
afrBins1 = array, U08, 0, [8x8], "Volts", 0.0196, 0, 0.0, 5.0, 2
#else
; Should never get here but just incase put message on screen
#error "No O2 sensor configuration selected; Youll need to fix the settings.ini.\n\nMegaTune terminating."
#exit ; Terminate MT
#endif
rpmBins6 = array, U08, 64,[ 8], "RPM", 100.0, 0.0, 100, 25500, 0
#if SPEED_DENSITY
#if MPXH6300A
mapBins6 = array, U08, 72, [ 8], "kPa", 1.213675, 1.53, 20.0, 304.0, 0
#elif MPXH6400A
mapBins6 = array, U08, 72, [ 8], "kPa", 1.6197783, 2.147, 20.0, 400.0, 0
#else
mapBins6 = array, U08, 72, [ 8], "kPa", 1.0, 0.0, 0.0, 255.0, 0
#endif
#elif AIR_FLOW_METER
afmBins6 = array, U08, 72, [8], "AFM Volts", 0.01961, 0.0, 0.0, 5.0, 2
#elif ALPHA_N
tpsBins6 = array, U08, 72, [ 8], "TPS", 1.0, 0.0, 0.0, 255.0, 0
#endif
; TARGET AFR table 2 BINS FOR VE 3 (First find which sensor used)
#if NARROW_BAND_EGO
afrBins2 = array, U08, 80, [8x8], "Volts", 0.0196, 0, 0.0, 5.0, 2
#elif WB_1_0_LINEAR
afrBins2 = array, U08, 80, [8x8], "Volts", 0.0196, 0, 0.0, 5.0, 2
#elif WB_UNKNOWN
afrBins2 = array, U08, 80, [8x8], "Volts", 0.0196, 0, 0.0, 5.0, 2
#elif AEM_LINEAR
afrBins2 = array, U08, 80, [8x8], "Volts", 0.0196, 0, 0.0, 5.0, 2
#elif AEM_NON_LINEAR
afrBins2 = array, U08, 80, [8x8], "Volts", 0.0196, 0, 0.0, 5.0, 2
#elif DIYWB_NON_LINEAR
afrBins2 = array, U08, 80, [8x8], "Volts", 0.0196, 0, 0.0, 5.0, 2
#elif DYNOJET_LINEAR
afrBins2 = array, U08, 80, [8x8], "Volts", 0.0314, 0, 0.0, 5.0, 2
#elif TECHEDGE_LINEAR
afrBins2 = array, U08, 80, [8x8], "AFR", 0.0392, 229.0, 9.0, 19.0, 1
#elif INNOVATE_1_2_LINEAR
afrBins2 = array, U08, 80, [8x8], "AFR", 0.1961, 0, 10.0, 20.0, 1
#elif INNOVATE_0_5_LINEAR
afrBins2 = array, U08, 80, [8x8], "AFR", 0.0392, 255.0, 10.0, 20.0, 1
#elif INNOVATE_LC1_DEFAULT
afrBins2 = array, U08, 80, [8x8], "AFR", 0.057647, 127.5, 10.0, 20.0, 1
#elif ZEITRONIX_NON_LINEAR
afrBins2 = array, U08, 80, [8x8], "Volts", 0.0196, 0, 0.0, 5.0, 2
#else
; Should never get here but just incase put message on screen
#error "No O2 sensor configuration selected; You need to fix the settings.ini.\n\nMegaTune terminating."
#exit ; Terminate MT
#endif
rpmBins7 = array, U08, 144,[ 8], "RPM", 100.0, 0.0, 100, 25500, 0
#if SPEED_DENSITY
#if MPXH6300A
mapBins7 = array, U08, 152, [ 8], "kPa", 1.213675, 1.53, 20.0, 304.0, 0
#elif MPXH6400A
mapBins7 = array, U08, 152, [ 8], "kPa", 1.6197783, 2.147, 20.0, 400.0, 0
#else
mapBins7 = array, U08, 152, [ 8], "kPa", 1.0, 0.0, 0.0, 255.0, 0
#endif
#elif AIR_FLOW_METER
afmBins7 = array, U08, 152, [8], "AFM Volts", 0.01961, 0.0, 0.0, 5.0, 2
#elif ALPHA_N
tpsBins7 = array, U08, 152, [ 8], "TPS", 1.0, 0.0, 0.0, 255.0, 0
#endif
;nitrous stage 2
; Nitrous System
Nos2Rpm = scalar, U08, 160, "RPM", 100, 0, 1000, 25000, 0
Nos2RpmMax= scalar, U08, 161, "RPM", 100, 0, 3000, 25000, 0
Nos2delay = scalar, U08, 162, "s", 0.01, 0, 0, 2.55,2
Nos2Angle = scalar, U08, 163, "Deg", 0.352, 0, 0, 30, 0
Nos2PWLo = scalar, U08, 164, "mSec", 0.1, 0, 0, 25.5, 1
Nos2PWHi = scalar, U08, 165, "mSec", 0.1, 0, 0, 25.5, 1
;oddfire wheel decoder
;outaoffs = bits, U08, 166, [0:2], "0", "+22.5", "+45", "+67.5", "+90", "+112.5", "+135", "+157.5"
outaoffs = bits, U08, 166, [0:2], "0", "INVALID", "+45", "INVALID", "+90", "INVALID", "INVALID", "INVALID"
outaoffv = scalar, U08, 167, "deg", 0.352, 0, 0, 45, 1
outboffs = bits, U08, 168, [0:2], "0", "INVALID", "+45", "INVALID", "+90", "INVALID", "INVALID", "INVALID"
outboffv = scalar, U08, 169, "deg", 0.352, 0, 0, 45, 1
outcoffs = bits, U08, 170, [0:2], "0", "INVALID", "+45", "INVALID", "+90", "INVALID", "INVALID", "INVALID"
outcoffv = scalar, U08, 171, "deg", 0.352, 0, 0, 45, 1
outdoffs = bits, U08, 172, [0:2], "0", "INVALID", "+45", "INVALID", "+90", "INVALID", "INVALID", "INVALID"
outdoffv = scalar, U08, 173, "deg", 0.352, 0, 0, 45, 1
outeoffs = bits, U08, 174, [0:2], "0", "INVALID", "+45", "INVALID", "+90", "INVALID", "INVALID", "INVALID"
outeoffv = scalar, U08, 175, "deg", 0.352, 0, 0, 45, 1
outfoffs = bits, U08, 176, [0:2], "0", "INVALID", "+45", "INVALID", "+90", "INVALID", "INVALID", "INVALID"
outfoffv = scalar, U08, 177, "deg", 0.352, 0, 0, 45, 1
page = 8 ; boost controller targets
;target kpa
#if MPXH6300A
bcBins1 = array, U08, 0, [ 6x6], "kPa", 1.213675, 1.53, 20.0, 304.0, 0
bcBins3 = array, U08, 96, [ 6x6], "kPa", 1.213675, 1.53, 20.0, 304.0, 0
#elif MPXH6400A
bcBins1 = array, U08, 0, [ 6x6], "kPa", 1.6197783, 2.147, 20.0, 400.0, 0
bcBins3 = array, U08, 96, [ 6x6], "kPa", 1.6197783, 2.147, 20.0, 400.0, 0
#else
bcBins1 = array, U08, 0, [6x6], "kpa", 1, 0, 0.0, 255.0, 0
bcBins3 = array, U08, 96, [6x6], "kpa", 1, 0, 0.0, 255.0, 0
#endif
bcrpmBins1 = array, U08, 36,[ 6], "RPM", 100.0, 0.0, 100, 25500, 0
bctpsBins1 = array, U08, 42,[ 6], "tps%", 0.392, 0.0, 0.0, 100.0, 0
;default duty cycle
bcBins2 = array, U08, 48, [6x6], "duty", 0.392, 0, 0.0, 100.0, 0
bcrpmBins2 = array, U08, 84,[ 6], "RPM", 100.0, 0.0, 100, 25500, 0
bctpsBins2 = array, U08, 90,[ 6], "tps%", 0.392, 0.0, 0.0, 100.0, 0
bcrpmBins3 = array, U08, 132,[ 6], "RPM", 100.0, 0.0, 100, 25500, 0
bctpsBins3 = array, U08, 138,[ 6], "tps%", 0.392, 0.0, 0.0, 100.0, 0
page = 9 ; idle control and other bits ripped out of lower pages for more space
idle_dc_lo = scalar, U08, 000, "dc", 1, 0, 0, 255, 0
idleperiod = scalar, U08, 001, "x 0.01sec", 1, 0, 0, 255, 0
idlecrankdc = scalar, U08, 002, "dc", 1, 0, 0, 255, 0 ;kg
idledelayclock = scalar, U08, 003, "x 0.01sec", 1, 0, 0, 255, 0 ;kg
idledashdc = scalar, U08, 004, "dc", 1, 0, 0, 255, 0
idlemindc = scalar, U08, 005, "dc", 1, 0, 0, 255, 0
idle_dc_hi = scalar, U08, 006, "dc", 1, 0, 0, 255, 0
ictlrpm1 = scalar, U08, 007, "lo RPM", 10, 0, 0, 2500, 0 ;kg
ictlrpm2 = scalar, U08, 008, "hi RPM", 10, 0, 0, 2500, 0 ;kg
Ideadbnd = scalar, U08, 009, "+/- RPM", 10, 0, 0, 2500, 0 ;kg
Idashdelay = scalar, U08, 010, "x 0.01sec", 1, 0, 0, 255, 0 ;kg
idlefreq = scalar, U08, 011, "10000/x = Frequency", 1, 0, 0, 255, 0
idlestartclk = scalar, U08, 012, "x 0.01sec", 1, 0, 0, 255, 0 ;kg
idlePeriod2 = scalar, U08, 013, "x 0.01sec", 1, 0, 0, 255, 0
irestorerpm = scalar, U08, 014, "RPM", 10, 0, 100, 6000, 0
idleclosedc = scalar, U08, 015, "dc", 1, 0, 0, 255, 0
pwmIdle = bits, U08, 016[0:0], "B&G On-Off*^", "PWM"
pwmidlewhen = bits, U08, 016[1:2], "INVALID", "Warmup only", "Closed loop only", "INVALID"
IATCor = bits, U08, 016,[3:3], "Normal Correction*^", "Corrected"
IATCorTy = bits, U08, 016,[4:4], "Coolant Corrected", "IAT Corrected"
#if CELSIUS
fastIdleTemp = scalar, U08, 17, "C", 0.555, -72.0, -40, 102
slowIdleTemp = scalar, U08, 18, "C", 0.555, -72.0, -40, 102
#else
fastIdleTemp = scalar, U08, 17, "F", 1.0, -40.0, -40, 215
slowIdleTemp = scalar, U08, 18, "F", 1.0, -40.0, -40, 215
#endif
fastIdleRPM = scalar, U08, 19, "RPM", 10.0, 0.0, 10, 2550
slowIdleRPM = scalar, U08, 20, "RPM", 10.0, 0.0, 10, 2550
; For TPS from ADC, use scale=100/(max-min) and tra=-min
; 100/(225-26) = 0.502, -26, might just be best to leave it in ADC...
; idleThresh = scalar, U08, 21, "%", 0.502, -26.0, 0.0, 255
idleThresh = scalar, U08, 21, "ADC", 1, 0, 0, 255, 0
;???curve
wueBins9 = array, U08, 22,[ 10], "%", 1.0, 0.0, 0.0, 255.0, 0
;???curve
CrankPWT1 = scalar, U08, 32, "mS", 0.1, 1, 0, 25.5, 1
CrankPWT2 = scalar, U08, 33, "mS", 0.1, 1, 0, 25.5, 1
CrankPWT3 = scalar, U08, 34, "mS", 0.1, 1, 0, 25.5, 1
CrankPWT4 = scalar, U08, 35, "mS", 0.1, 1, 0, 25.5, 1
CrankPWT5 = scalar, U08, 36, "mS", 0.1, 1, 0, 25.5, 1
CrankPWT6 = scalar, U08, 37, "mS", 0.1, 1, 0, 25.5, 1
CrankPWT7 = scalar, U08, 38, "mS", 0.1, 1, 0, 25.5, 1
CrankPWT8 = scalar, U08, 39, "mS", 0.1, 1, 0, 25.5, 1
CrankPWT9 = scalar, U08, 40, "mS", 0.1, 1, 0, 25.5, 1
CrankPWT10 = scalar, U08, 41, "mS", 0.1, 1, 0, 25.5, 1
; Priming SETTINGS
AlwaysPrime = bits, U08, 42[0:0], "Prime Pulse>0*^", "Always"
PrimeLate = bits, U08, 42[1:2], "Power Up*^", "INVALID", "Twice","After 2 Secs"
PrimeTBox = bits, U08, 42[3:3], "Priming Table", "Standard Prime"
; CLT vs MAT for cranking pulse width
crankpwip = bits, U08, 42, [4:5], "INVALID", "CLT only*^", "MAT only", "CLT,MAT average"
ExFuelCrank = bits, U08, 42, [6:6], "Off", "On"
CrankRPM = scalar, U08, 43, "rpm", 100.0, 0.0, 100, 1000, 0
tpsflood = scalar, U08, 44, "raw", 1.0, 0.0, 0.0, 255.0, 0
PrimePulse = scalar, U08, 45, "mS", 0.1, 0.0, 0.0, 25.5, 1
ExtraFMult = scalar, U08, 46, "%", 1.0, 0.0, 0.0, 255, 0
; Coolant related correction table for air density
IATCorS = array , U08, 47, [7], "%", 1.0, 0.0, 50, 150, 0
; Coolant related correction table for air density
; IATCor1 = scalar, U08, 47, "%", 1.0, 0.0, 0.0, 255, 0
; IATCor2 = scalar, U08, 48, "%", 1.0, 0.0, 0.0, 255, 0
; IATCor3 = scalar, U08, 49, "%", 1.0, 0.0, 0.0, 255, 0
; IATCor4 = scalar, U08, 50, "%", 1.0, 0.0, 0.0, 255, 0
; IATCor5 = scalar, U08, 51, "%", 1.0, 0.0, 0.0, 255, 0
; IATCor6 = scalar, U08, 52 "%", 1.0, 0.0, 0.0, 255, 0
; IATCor7 = scalar, U08, 53, "%", 1.0, 0.0, 0.0, 255, 0
RPMRedLo = scalar, U08, 54, "RPM", 100, 0.0, 0.0, 25500, 0
RPMRedHi = scalar, U08, 55, "RPM", 100, 0.0, 0.0, 25500, 0
#if CELSIUS
IATCTemp = array , U08, 56, [7], "C", 0.555, -72, -72, 102, 0
#else
IATCTemp = array , U08, 56, [7], "F", 1.0, -40.0, -40, 215, 0
#endif
;#if CELSIUS
; IATCTemp1 = scalar, U08, 56, "C", 0.555, -72, -40, 102, 1
; IATCTemp2 = scalar, U08, 57, "C", 0.555, -72, -40, 102, 1
; IATCTemp3 = scalar, U08, 58, "C", 0.555, -72, -40, 102, 1
; IATCTemp4 = scalar, U08, 59, "C", 0.555, -72, -40, 102, 1
; IATCTemp5 = scalar, U08, 60, "C", 0.555, -72, -40, 102, 1
; IATCTemp6 = scalar, U08, 61, "C", 0.555, -72, -40, 102, 1
; IATCTemp7 = scalar, U08, 62, "C", 0.555, -72, -40, 102, 1
;#else
; IATCTemp1 = scalar, U08, 56, "F", 1.0, -40.0, -40.0, 215, 1
; IATCTemp2 = scalar, U08, 57, "F", 1.0, -40.0, -40.0, 215, 1
; IATCTemp3 = scalar, U08, 58, "F", 1.0, -40.0, -40.0, 215, 1
; IATCTemp4 = scalar, U08, 59, "F", 1.0, -40.0, -40.0, 215, 1
; IATCTemp5 = scalar, U08, 60, "F", 1.0, -40.0, -40.0, 215, 1
; IATCTemp6 = scalar, U08, 61, "F", 1.0, -40.0, -40.0, 215, 1
; IATCTemp7 = scalar, U08, 62, "F", 1.0, -40.0, -40.0, 215, 1
;#endif
splitTable = array, U08, 63, [6x6], "deg", 0.352, -28.4, -10.0, 80.0, 0
splitrpmBins = array, U08, 99, [ 6], "RPM", 100.0, 0.0, 100, 25500, 0
#if SPEED_DENSITY
#if MPXH6300A
splitkpaBins = array, U08, 105, [ 6], "kPa", 1.213675, 1.53, 20.0, 304.0, 0
#elif MPXH6400A
splitkpaBins = array, U08, 105, [ 6], "kPa", 1.6197783, 2.147, 20.0, 400.0, 0
#else
splitkpaBins = array, U08, 105, [6], "kpa", 1, 0, 0.0, 255.0, 0
#endif
#elif AIR_FLOW_METER
splitafmBins = array, U08, 105, [6], "AFM Volts", 0.01961, 0.0, 0.0, 5.0, 2
#elif ALPHA_N
splittpsBins = array, U08, 105, [ 6], "TPS", 1.0, 0.0, 0.0, 255.0, 0
#endif
rotary2 = bits, U08, 111, [0:0], "Off", "On"
fixedsplit = scalar, U08, 112, "deg", 0.352, -28.4, -10.0, 30.0, 0
; uncomment the following if you want to be able to save logged trigger or teeth into an MSQ
; file for onward processing. Normally best to leave commented.
;Didn't seem to work as-is with b730
;page = 10
;??; blob10 = array, U08, 0, [189]
; toothlog = array, U16, 0, [93]
; toothpos = scalar, U08, 186, "", 1,0,0,255
; toothscale = scalar, U08, 187,"", 1,0,0,255
;page = 11
; triggerlog = array, U16, 0, [93]
; triggerpos = scalar, U08, 186, "", 1,0,0,255
; triggerscale = scalar, U08, 187,"", 1,0,0,255
;-------------------------------------------------------------------------------
[Menu]
;----------------------------------------------------------------------------
; There are five pre-defined values that may be used to define your menus.
; The first four allow access to the "standard" dialog boxes, the last one
; merely draws a separator (horizontal line) in the menu.
;
; std_constants
; std_enrichments
; std_realtime
; std_warmup
;
; std_separator
;
; If you use any of the std_constants, std_enrichments or std_warmup
; editors, they may be optionally suffixed with a page number (only
; useful for multi-page code variants), which causes them to edit the
; specified page. If you leave off the page specifier, they edit logical
; page one as specified in the Constants section.
;
;----------------------------------------------------------------------------
menuDialog = main
menu = "&Basic Settings"
subMenu = std_constants, "&Engine Constants 1", 1
subMenu = egoControl1, "&Exhaust Gas Settings", 1
subMenu = veTable1Tbl, "Fuel &VE Table 1", 0
subMenu = AccelDecc, "&Accel Deccl Mode"
subMenu = std_accel, "&Acceleration Wizard", 4
subMenu = MoreAccel, "RPM &Based Accel"
subMenu = codeBase, "&Codebase and outputs function"
subMenu = wheeldecoder, "Wheel decoder settings", 0, { wheelon }
#if MPXH6300A
subMenu = mapwarning, "MAP sensor warning", 0, { mapType1!=2 }
#elif MPXH6400A
subMenu = mapwarning, "MAP sensor warning", 0, { mapType1!=3 }
#else
subMenu = mapwarning, "MAP sensor warning", 0, { mapType1>1 }
#endif
menu = "Crank/&WarmUp"
subMenu = CrankTble, "Cranking Settings", 9
subMenu = CrankExtra, "More Cranking Stuff", 9
subMenu = AfterStTbl, "After start Enrichment Settings", 6
subMenu = std_warmup, "&Warmup Wizard", 9
menu = "Fuel Dual Table&2", { inj2t }
subMenu = std_constants, "&Constants 2 (DT)", 2
subMenu = egoControl2, "&Exhaust Gas Settings", 2
subMenu = veTable2Tbl, "&VE Table 2 (DT)"
menu = "&More settings"
subMenu = idleControl, "&Idle Control", 0, { !fidleUse }
subMenu = idleControl2, "Idle Control (Closed Loop Settings)", 0, { pwmIdle & (pwmidlewhen >1) }
subMenu = HardLim, "Rev Limiter Type"
subMenu = RevLimiterS, "Rev Limits", 4
subMenu = LambdaSet, "&Lambda AFR Settings"
subMenu = afrTable1Tbl, "A&FR Targets for VE Table 1", 0, { AfrTar }
subMenu = afrTable2Tbl, "AF&R Targets for VE Table 3", 0, { UseVE3 && AfrTar2 }
subMenu = OpenLoop, "&Open Loop Mode"
subMenu = OvrRun, "Over &Run Settings"
subMenu = tachoutput, "Tacho output pin", 0
subMenu = BarroCor, "&Barometric Correction", { baroCorr1 }
subMenu = outputs, "&Outputs"
subMenu = outputs2, "S&hift light/ fan/ Output 3+4"
menu = "Spar&k", { ignmode }
subMenu = sparkSettings, "&Spark Settings"
subMenu = sparkTbl, "Spark Table &1"
subMenu = sparkTbl2, "Spark Table &2", 0, { STTable2On }
subMenu = SparkT2, "Spar&k Table selection",
subMenu = IdleAdvance, "Idle Advance settings",
subMenu = Knock, "Kn&ock System"
subMenu = IatCltIg, "&IAT/Clt Related Ignition"
subMenu = dwellSettings, "Dwell settings"
subMenu = wheelsim, "Stim for wheel"
; subMenu = rotarySettings, "Rotary trailing settings"
; subMenu = rotarySplitType, "Rotary trailing output type", 0, { rotary2 }
; subMenu = splitTbl, "Rotary split Table ", 0, { rotary2 }
subMenu = splitTbl, "Rotary trailing settings"
subMenu = oddwheel, "Oddfire Wheel settings", 7, { wheelon && oddfire }
menu = "&Advanced"
subMenu = fuelTable, "&Fuel table selection"
subMenu = veTable3Tbl, "Fuel VE Table &3", 0, { UseVE3 }
subMenu = LaunchSettings, "Launch &Control"
subMenu = WaterInj, "&Water Injection Settings", 0, { !x2use }
subMenu = NosSystem, "&Nitrous System"
; subMenu = NosSystem2, "&Nitrous Stage 2", 0, { nitrousUse && n2ostage2 }
subMenu = Staged, "&Staged Injection"
subMenu = MoreStaged, "More Staged Injection", 0, { IStagedMode }
subMenu = OvrBoo, "Over &Boost Protection"
subMenu = traction, "Anti-Rev System (&Traction Control)"
subMenu = traction2, "Anti-Rev System cont...", 0, { TractionOn }
subMenu = boostControl, "&Boost Control", 0, { boostUse }
subMenu = boostTbl1, "Boost kpa targets table1", 8, { boostUse }
subMenu = boostTbl3, "Boost kpa targets table2", 8, { boostUse && BooTbl2Use }
subMenu = boostTbl2, "Boost duty targets", 8, { boostUse }
subMenu = boostIAT, "IAT Related Boost", 0, { boostUse }
subMenu = clt_IATCorrC, "Coolant-Related Air Density"
; subMenu = clt_IATCorr, "Coolant-Related Air Density"
subMenu = advanced, "&Advanced code options"
; the following menu gives access to some spare bytes of flash for education
;(uncomment to use it)
; subMenu = demo, "Example Demo"
menu = "&Tuning"
subMenu = std_realtime, "&Realtime Display"
subMenu = std_separator
subMenu = veTable1Map, "VE Table &1"
subMenu = veTable2Map, "VE Table &2", 0, { inj2t }
subMenu = veTable3Map, "VE Table &3" 0, { UseVE3 }
subMenu = sparkMap, "Spar&k Table1", 0, { ignmode }
subMenu = sparkMap2, "Spark &Table2", 0, { STTable2On }
subMenu = splitMap, "Rotary Split", 0, { rotary2 }
subMenu = boostMap1, "Boost 1", 8, { boostUse }
subMenu = boostMap3, "Boost 2", 8, { boostUse && BooTbl2Use }
subMenu = boostMap2, "Boost duty targets", 8, { boostUse }
menu = "Help"
plugIn = "%INSTALL_DIR%/README.txt", "&ReadMe File"
plugIn = "%WORKING_DIR%/audit.log", "A&udit Log"
subMenu = std_separator
subMenu = Fhelp1, "&General Help"
subMenu = Fhelp2, "&Fuel Table Selection"
subMenu = Fhelp3, "&Lambda Settings"
subMenu = Fhelp4, "&Hard Cut Limiter Type"
subMenu = Fhelp5, "&Launch Control"
subMenu = Fhelp6, "Accel Decel &Mode"
subMenu = Fhelp7, "Rev Limiter"
subMenu = Ihelp1, "Idle Control"
subMenu = Ihelp2, "Idle Control (Closed Loop Settings)"
subMenu = Shelp3, "&Spark Settings"
subMenu = Shelp4, "Spar&k Table Selection"
subMenu = Shelp5, "Wheel decoder Settings"
subMenu = Shelp1, "Kn&ock System"
subMenu = Shelp2, "&IAT/CLT Related Ignition"
subMenu = Chelp1, "&Codebase and output functions"
subMenu = Chelp2, "&Advanced code options"
subMenu = Chelp3, "&Barometric Correction"
subMenu = Chelp4, "&Water Injection"
subMenu = Chelp5, "&NOS System"
subMenu = Chelp6, "Staged Injection Syste&m"
; subMenu = Chelp7, "MAP Sensor Selection"
subMenu = Chelp8, "Over Run Settings"
menuDialog = splitTbl
menu = "Rotary Trailing &Settings"
subMenu = rotarySettings, "Rotary trailing settings"
subMenu = rotarySplitType, "Rotary trailing output type"
menuDialog = clt_IATCorrC
menu = "&Settings"
subMenu = clt_IATCorr, "Coolant-Related Air Density"
;-------------------------------------------------------------------------------
[UserDefined]
dialog = mapwarning, "MAP Sensor setup readme"
field = "WARNING!!!"
field = ""
field = "When using a 3bar or 4bar map sensor you"
field = "MUST use the Megatune Configurator to enable"
field = "that sensor type - otherwise all of the kpa"
field = "values in Megatune will display incorrectly"
field = ""
dialog = egoControl1, "EGO Control",1
help = egoHelp
field = "EGO Sensor Type", egoType1
field = "EGO Switch Point", egoSwitch1
field = "Ignition Events or msec per Step", egoCount1
field = "Controller Step Size", egoDelta1
field = "Controller Authority +/-", egoLimit1
field = "Active Above Coolant Temp", egoTemp1
field = "Active Above RPM", egoRPM1
field = "EGO Correction Step Counter", egoIgnCount
dialog = egoControl2, "EGO Control for Second O2 Sensor",2
field = "Second Lambda fitted on X7?", TwoLambda
field = ""
field = "EGO Sensor Type", egoType2, { TwoLambda }
field = "EGO Switch Point", egoSwitch2, { TwoLambda }
field = "Controller Step Size", egoDelta2, { TwoLambda }
field = "Controller Authority +/-", egoLimit2, { TwoLambda }
field = "Active Above Coolant Temp", egoTemp2, { TwoLambda }
field = "Active Above RPM", egoRPM2, { TwoLambda }
dialog = codeBase, "Power cycle after changes", 4
topicHelp = Chelp1
field = "#Choose one code type"
field = "Distributor (MSnS)", msnsCyl
field = "Neon/420A decoder", neonCrank
field = "Wheel decoder (e.g. 36-1)", wheelon
field = "EDIS", edis
field = "EDIS multispark", edismulti, { edis }
field = "TFI ignition", tfi
field = "HEI Ignition", hei7
field = "#Choose input/output pins to use"
field = "FIDLE function", fidleUse
field = "LED17(D14) function", led17Use
field = "LED18(D15) function", led18Use
field = "LED19(D16) function", led19Use
field = "Multiplex ignition?", toy_dli
field = "X2 (JS0) function", x2use
field = "X4 (JS2) function", boostUse
field = "output3/Spark D", out3sparkd
field = "pin10 shift / Spark E", spkeop
field = "knock in / Spark F", spkfop
dialog = wheeldecoder, "Power cycle after changes", 4
topicHelp = Shelp5
field = "Wheel decoder base teeth", numteeth
field = "2nd trigger enable", wd_2trig
field = "2nd trigger active edge", trig2fall, { wd_2trig }
field = "2nd trigger and missing teeth", miss2nd, { wd_2trig }
field = "Missing teeth", onetwo, { !wd_2trig || ( wd_2trig && miss2nd) }
field = "Trig pos A", trig1
field = "Trig return pos A", trig1ret
field = "Trig pos B", trig2
field = "Trig return pos B", trig2ret
field = "Trig pos C", trig3
field = "Trig return pos C", trig3ret
field = "Trig pos D", trig4
field = "Trig return pos D", trig4ret
field = "Trig pos E", trig5
field = "Trig return pos E", trig5ret
field = "Trig pos F", trig6
field = "Trig return pos F", trig6ret
field = "Dual dizzy mode (see F1)", dualdizzy
field = "Wheel decoder routine", wheel_old
dialog = oddwheel, "Oddfire wheel offsets", 7
field = "!HIGHLY EXPERIMENTAL"
field = ""
field = "Output A offset steps", outaoffs, { trig1 }
field = "plus value", outaoffv, { trig1 }
field = "Output B offset steps", outboffs, { trig2 }
field = "plus value", outboffv, { trig2 }
field = "Output C offset steps", outcoffs, { trig3 }
field = "plus value", outcoffv, { trig3 }
field = "Output D offset steps", outdoffs, { trig4 }
field = "plus value", outdoffv, { trig4 }
field = "Output E offset steps", outeoffs, { trig5 }
field = "plus value", outeoffv, { trig5 }
field = "Output F offset steps", outfoffs, { trig6 }
field = "plus value", outfoffv, { trig6 }
dialog = advanced, "Power cycle after changes",4
topicHelp = Chelp2
field = "#Functions from DT (*=B+G default)"
field = "Hybrid Alpha N", hybridAN
field = "#"
field = "!Unless your using a MAF,"
field = "!ENSURE MAF SET TO NO!!"
field = "Mass Air Flow Meter MAF: (X7)", AFMUse
field = "Air Density Correction:", AirCorAFM, { AFMUse }
field = ""
field = "EDIS multispark", edismulti, { edis }
field = "EDIS multispark rpm limit", edismultirpm, { edis && edismulti }
field = ""
field = "False trigger protection", falsetrig_dis
dialog = fuelTable, "Fuel Table selection",4
topicHelp = Fhelp2
field = "* = B+G default ^ = MSnS default"
field = "DT = Dual Table default"
field = "Injector channel 1:"
field = "use table : always 1"
field = "GammaE:", inj1g
field = "Injector channel 2:"
field = "use table:", inj2t
field = "GammaE:", inj2g
field = "Pulse inj2 during cranking", inj2cr
field = ""
field = "Switch VE Table1 for VE Table3 when"
field = "NOS on or when Pin6 JP1 low.", UseVE3
field = "Delay for changing to VE3", VE3Delay, { UseVE3 }
dialog = RevLimiterS, "Rev Limiter", 4
topicHelp = Fhelp7
field = "Rev Limiter"
field = "MSnS Soft rev limit", SoftRevLim
field = "MSnS Soft limit retard", SoftLimRetard
field = "MSnS Soft limit max time", SoftLimMax
field = "MSnS Hard Rev limit", HardRevLim
dialog = outputs,"Outputs",4
topicHelp = Fhelp1
field = "Output turns off when actual value ="
field = "On/Off limit - Hysterisis"
field = "To create an output window set Upper"
field = "Limit. For normal output set to zero"
field = "OUTPUT 1 (X4 / JS2) source", out1src, { !boostUse }
field = "On-Off Limit", out1lim, { !boostUse }
field = "Off Hysterisis", out1Hysis, { !boostUse }
field = "Upper Limit", Out1UpLim, { !boostUse }
field = "Output1 Invert for Temps", InvOut1, { !boostUse }
field = ""
field = "OUTPUT 2 (X5 / JS3) source", out2src
field = "On-Off Limit", out2lim
field = "Off Hysterisis", out2Hysis
field = "Upper Limit", Out2UpLim
field = "Output2 Invert for Temps" InvOut2
dialog = outputs2,"More Outputs",4
topicHelp = Fhelp1
field = "OUTPUT 3 (U1 pin15)"
field = "Source or Source+OUTPUT1", Out3_Out1, { !out3sparkd }
field = "OUTPUT 3 (PTD0) source", out3src, { !out3sparkd }
field = "On-Off Limit", out3lim, { !out3sparkd }
field = "Off Delay Timer", out3Timer, { !out3sparkd }
field = ""
field = "OUTPUT 4 (LED18)"
field = "OUTPUT 4 (LED18) source", out4src, { !out4FAN && led18_2Use }
field = "On-Off Limit", out4lim, { !out4FAN && led18_2Use }
field = "Use above source or FAN Control", out4FAN, { led18_2Use }
field = ""
field = "Shift Light", shiftUse, { !spkfop }
field = "Shift light Lower Threshold", ShiftLower, { shiftUse }
field = "Shift Light Upper Threshold", ShiftUpper, { shiftUse && (!wd_2trig) }
field = "Fan control (X2 / JS0 or LED18)"
field = "Fan on temperature", efanontemp, { x2use + out4FAN }
field = "Fan off temperature", efanofftemp, { x2use + out4FAN }
dialog = sparkSettings,"Spark Settings",3
topicHelp = Shelp3
field = "Trigger Angle = Setting + Additions"
field = "e.g. 77+45= 122"
field = "Trigger Angle ", TrigAng
field = "Trigger Angle addition", Trig_plus, { !oddfire }
field = "Note: If req Trigger above 90"
field = "then select +22.5 Deg"
field = "if above 112.5 select +45"
field = ""
field = "Cranking Timing", TrigCrank, { !edis }
field = "Cranking advance Angle (see F1)", CrankAng, { TrigCrank + edis + dwellcont }
field = "Hold Ignition", IgHold
field = "Spark Output Inverted (see F1)", IgInv
field = "EXPERIMENTAL Oddfire support", oddfire
field = ""
field = "Fixed Angle (-10 = use map)", FixAng
field = "Trim Angle", Trim
dialog = IdleAdvance, "Idle Advance Settings",3
field = "#Idle Advance Settings"
field = "Idle advance (-10 = use map)", IdleAdv
field = "Idle advance TPS threshold", IdleAdvTPS
field = "Idle advance RPM threshold", IdleAdvRPM
field = "Idle advance CLT threshold", IdleAdvCLT
field = "Idle advance Wait Time", IdleDelayTime
dialog = rotarySplitType, "Rotary Trailing Output Type",4
field = "trailing output type", rotaryFDign
dialog = rotarySettings,"Rotary Settings",9
field = "#Experimental trailing split"
field = "For twin rotor only, check msefi before using"
field = "trailing split support", rotary2
field = "!NOTE!"
field = "!In the split table:"
field = "\t>20 means trailing OFF"
field = "\t0 means fire simultaneously"
field = "\tother values are the trailing delay in degrees"
field = ""
field = "Fixed split for testing (-10 = map)", fixedsplit, { rotary2 }
dialog = dwellSettings,"Dwell Settings",4
topicHelp = DwellHelp
field = "Dwell control", dwellcont
field = "Use: Spark output duty cycle", dwellduty50, { !dwellcont }
field = "Or:"
field = " Cranking dwell", dwellcrank, { dwellcont }
field = " Running dwell", dwellrun, { dwellcont }
field = "Minimum discharge period", mindischg, { dwellcont }
field = ""
field = "#Note"
field = "these times are for 12V. Battery voltage correction"
field = "is applied. At higher voltages the time is reduced"
field = "and when low it is increased"
dialog = wheelsim,"Simulator for wheel",4
topicHelp = Stim4WHelp
field = "!ONLY FOR USE ON STIM - DO NOT USE ON CAR"
field = ""
field = "Wheel simulator", whlsim
field = "Number of steps/outputs", whlsimcnt
dialog = tachoutput,"Tacho output pin",4
topicHelp = TachoHelp
field = "!MAKE SURE THIS PIN IS NOT ALREADY IN USE"
field = ""
field = "Tacho output pin", tachconf
field = "Normal or half speed", tachconfdiv
dialog = idleControl, "PWM 2-Wire Idle Control", 9
topicHelp = Ihelp1
field = "#Algorithm", pwmIdle
field = "When to use PWM idle", pwmidlewhen, { pwmIdle }
field = "Idle Valve Frequency", idlefreq, { pwmIdle }
field = "Cranking", idlecrankdc, { pwmIdle }
field = "Mininum", idlemindc, { pwmIdle & (pwmidlewhen >1) }
field = "Closed", idleclosedc, { pwmIdle & (pwmidlewhen >1) }
field = "#Warmup (open loop) Settings"
field = "Idle frequency at lower temp", idle_dc_lo, { pwmIdle & (pwmidlewhen !=0) & (pwmidlewhen != 2) }
field = "Idle frequency at upper temp", idle_dc_hi, { pwmIdle & (pwmidlewhen !=0) & (pwmidlewhen != 2) }
field = "Idle Speed Target"
field = "*Fast Idle (lower) Temp", fastIdleTemp, { pwmIdle }
field = "*Slow Idle (upper) Temp", slowIdleTemp, { pwmIdle }
field = "Fast Idle Speed", fastIdleRPM, { pwmIdle & (pwmidlewhen >1) }
field = "Slow (warm) Idle Speed", slowIdleRPM, { pwmIdle & (pwmidlewhen >1) }
; field = "* Denotes item also used for warmup"
field = "#Dashpot Settings"
field = "TPS threshold", idleThresh, { pwmIdle & (pwmidlewhen >1) }
field = "Idle Activation adder", irestorerpm, { pwmIdle & (pwmidlewhen >1) }
field = "Dashpot Settle Time", idledelayclock, { pwmIdle & (pwmidlewhen >1) }
field = "Dashpot Adder", idledashdc, { pwmIdle & (pwmidlewhen >1) }
dialog = idleControl2, "Idle Control Continued", 9
topicHelp = Ihelp2
field = "Deadband Range", Ideadbnd, { pwmIdle }
field = "#Adaptive Idle Deviation Control"
; field = "RPM Deviation Control"
field = "This determines how fast the closed loop control responds"
field = "based on how far from the target the current RPM is"
field = "if rpm = target plus 'Upper Limit', the recovery time"
field = "is 'Fast Recovery'"
field = "Upper Limit", ictlrpm2, { pwmIdle }
field = "Lower Limit", ictlrpm1, { pwmIdle }
field = "Fast recovery", idlePeriod2, { pwmIdle }
field = "Slow recovery", idleperiod, { pwmIdle }
field = "#Other time constants"
field = "Closure Speed", Idashdelay, { pwmIdle & (pwmidlewhen >1) }
field = "Startup Delay", idlestartclk, { pwmIdle & (pwmidlewhen >1) }
dialog = boostIAT, "IAT Related Boost",4
topicHelp = Fhelp1
field = "#Remove boost related to IAT"
field = "When IAT above", IATBoostSt
field = "remove 1 psi (7KPa) every:", IATBoost
field = "when tps above:", TPSBooIAT
dialog = boostControl, "Boost Controller Parameters", 4
topicHelp = Fhelp1
field = "Solenoid PWM Rate", freqDiv
field = "Controller Update", bcUpdateRate
field = "Proportional Gain", pGain
field = "Differential Gain", dGain
field = ""
field = "Increase Voltage =", BoostDir
field = ""
field = "Switch Boost Target Tables when"
field = "NOS on or JP1 pin6 low", BooTbl2Use
field = ""
field = "Closed loop kpa limit", bc_max_diff
field = "This is the difference between target"
field = "boost level and actual. If greater"
field = "than this limit then goes open loop"
field = "and uses duty cycle from table"
field = "Note. 0% duty = low boost, 100% = full boost"
field = ""
field = "Typical ambient pressure", Pambient, { !baroCorr1 }
; ENHANCED STUFF
dialog = LaunchSettings, "Launch Control", 4
topicHelp = Fhelp5
field = "#Launch Control"
field = "Launch Control", launchUse
field = "Retard Ignition above ", LachRpm, { launchUse && (ignmode>0) }
field = "Retard to : ", LachDeg, { launchUse && (ignmode>0) }
field = "Enable Launch when TPS above ", LachTps, { launchUse }
field = "Launch Control Hard Rev Limit", LaunchLim, { launchUse }
field = "Variable Launch", VLaunch, { launchUse }
field = "Flat shift arming rpm", LC_flatsel, { launchUse }
field = "Flat shift mode retard above", LC_f_slim, { launchUse && (ignmode>0) }
field = "Retard to : ", LC_f_limangle, { launchUse && (ignmode>0) }
field = "Flat shift hard rev limit", LC_flatlim, { launchUse }
dialog = LambdaSet, "Lambda Sensor Targets", 4
topicHelp = Fhelp3
field = "#Set to 255KPa for B+G Default"
field = "Change Ego Limit above", EgoLimKPa
field = "Change Ego Limit to", EgoLim2
field = ""
field = "#8x8 AFR Target Tables"
field = "For VE Table 1", AfrTar
field = "For VE Table 3", AfrTar2
field = "Control Algorithm for AFR tables", KpaTPSTar
field = ""
field = "Use Target tables:", TPSTar
field = "Use Enrichment EGO Switch Point until TPS:", TPSAFRPoint, { TPSTar }
field = ""
dialog = OpenLoop, "Open Loop Mode", 4
topicHelp = OpenLoopHelp
field = "Open Loop O2 Correction:", OLoopEgo
field = ""
field = "If TPS selected then go Open Loop @", TpsOn
field = "If KPa selected then go Open Loop @", KPaOn
field = "Set selection to zero for no Openloop"
field = "Restart MS after changes"
dialog = WaterInj,"Water Injection Setpoints", 4
topicHelp = Chelp4
field = "#Please Note:"
field = "O2 correction turns OFF when water starts"
field = "Water Injection", WaterInj
field = "Start Water Injection when Boost above", StartWIKPa, { WaterInj }
field = "and engine speed above:", WaterIRpm, { WaterInj }
field = "and Manifold Air Temp above", WaterIIat, { WaterInj }
dialog = IatCltIg, "IAT/Clt Related Ignition", 4
topicHelp = Shelp2
field = "Coolant/Iat Related Advance", CltAdv
field = "Add 1 degree of ignition advance every", IgAdvDeg, { CltAdv }
field = "when below: Coolant setpoint ", IgAdvTemp, { CltAdv }
field = "Note: IAT Retard will work when 3C above "
field = " Coolant setpoint"
field = "Max allowable added ignition advance ", MaxIatAdv, { CltAdv }
field = " "
field = "Pull 1 degree of ignition retard every", IgRetDeg, { CltAdv }
field = "when MAP above", IatAdvKpa, { CltAdv }
field = "and IAT above", IgRetTemp, { CltAdv }
dialog = Knock,"Knock Detection System", 4
topicHelp = Shelp1
field = "Knock Detector System", KnockOn
field = "Ignore Knocks when above", KnockRpm, { KnockOn }
field = "Ignore Knocks when MAP above ", KnockKpa, { KnockOn }
field = "Ignore Knocks when below ", KnockRpmL, { KnockOn }
field = "First Knock: Retard by", KnockRet, { KnockOn }
field = "Subsequent Knocks: Retard by", KnockSb, { KnockOn }
field = "Max Retard Allowed ", KnockMax, { KnockOn }
field = "Advance when no knock:", KnockAdv, { KnockOn }
field = "Wait time between steps:", KnockTim, { KnockOn }
field = ""
field = "#If using Boost Control:"
field = "Amount of boost to remove/add in"
field = "the above steps", KnockBoost, { boostUse && KnockOn }
field = "Maximum boost to remove", BoostMaxKn, { boostUse && KnockOn }
dialog = SparkT2, "Spark Table selection", 4
topicHelp = Shelp4
field = "Use Spark Table 1"
field = "until JP1 pin6 input low or"
field = "NOS system on, then use:", STTable2On
field = "Delay before switching to Table 2", ST2Delay, { STTable2On }
dialog = OvrBoo, "Over Boost Protection", 4
topicHelp = Fhelp1
field = "OVER BOOST PROTECTION"
field = "Over Boost Hard Cut if Boost hits", OvrBKpa
dialog = HardLim, "Hard Cut/Limiter Type", 4
topicHelp = Fhelp4
field = "!**********C A U T I O N**************"
field = "!IGNITION CUT IS NOT SUITABLE"
field = "!FOR VEHICLES FITTED WITH"
field = "! CATALYTIC CONVERTERS"
field = "!*Spark Cut doesn't work for Edis users*"
field = "BASE NUMBER to cut sparks from", SparkCutBase
field = "#REV LIMITER"
field = "Hard Cut Type", HCutType
field = "Cut 'n' sparks out of BASE NUMBER", HCutSpark
field = "#LAUNCH CONTROL"
field = "Hard Cut Type", HCutLCType
field = "Cut 'n' sparks out of BASE NUMBER", HCutLCSpark
field = "#OVER BOOST PROTECTION"
field = "Hard Cut Type", OvrBCutType
field = "Cut 'n' sparks out of BASE NUMBER", SparkCutBNum
dialog = NosSystem, "Nitrous System", 4
topicHelp = Chelp5
field = "Nitrous Control", nitrousUse
field = "Turn N2O on when above", NosRpm, { nitrousUse }
field = "And Coolant Temp above", NosClt, { nitrousUse }
field = "And TPS >", NosTps, { nitrousUse }
; field = ""
field = "Additional Fuel PW @ N2O min rpm", NosPWLo, { nitrousUse }
field = "NOS Max RPM", NosRpmMax, { nitrousUse }
field = "Additional Fuel PW @ N2O Max RPM", NosPWHi, { nitrousUse }
; field = ""
field = "If ST2 off Retard Ignition by" NosAngle, { nitrousUse }
; field = ""
field = "If Dual Table enrich ", DtNos, { nitrousUse }
field = "Nitrous delay after launch", N2Odel_launch, { nitrousUse && launchUse }
field = "Nitrous delay after flat shift", N2Odel_flat, { nitrousUse && launchUse }
;not yet implemented field = "Nitrous fuel hold on", N2Oholdon, { nitrousUse }
field = ""
field = "Turbo Anti-Lag System: (see help)", NosLagSystem, { nitrousUse }
field = "Fire N2O when conditions above met"
field = "and MAP above", NosLowKpa, { nitrousUse && NosLagSystem }
field = "and MAP below", NosHiKpa, { nitrousUse && NosLagSystem }
field = ""
; field = "Enable 2nd stage", n2ostage2, { nitrousUse }
dialog = NosSystem2, "Nitrous System stage 2", 7
; topicHelp = Chelp5
field = "Enable stage 2 above", Nos2Rpm
field = "NOS Max RPM", Nos2RpmMax
field = "delay after stage1", Nos2delay
field = "Retard Ignition by", Nos2Angle
field = "Additional Fuel PW @ N2O min rpm", Nos2PWLo
field = "Additional Fuel PW @ N2O Max RPM", Nos2PWHi
dialog = Staged, "Staged Injection", 4
topicHelp = Chelp6
field = "#STAGED INJECTION SETTINGS"
field = " Not suitable with DT"
field = "Injector Staging Mode:", IStagedMode
field = "#Injector Bank 2 off until:"
field = "Staging Point (RPM/100, KPa, or TPSADC)", StgTrans, { IStagedMode }
field = "Staging Off Delta (units as above)", StgDelta, { IStagedMode }
field = "Then Reduce Banks #1, #2 by Scaling Factor"
field = "Staged Scaling Factor (Prim Flow/Total Flow)", ScaleFac, { IStagedMode }
field = ""
field = "Staging second Parameter", StagedMAP2nd, { IStagedMode }
field = "Staging on one or both params", StagedAnd, { StagedMAP2nd }
field = "!Restart MS after changes"
dialog = MoreStaged, "More staging settings",3
field = "#MORE STAGED INJECTION SETTINGS"
field = ""
field = "Injector 2nd parameter kPa", Stg2ndParmKPA, { StagedMAP2nd }
field = "Injector 2nd parameter delta", Stg2ndParmDlt, { StagedMAP2nd }
field = ""
field = "Injector staging delay", StgCycles
dialog = OvrRun, "Over Run Fuel Cut", 4
topicHelp = Chelp8
field = "Over Run Fuel Cut", OvrRunC
field = "Cut fuel when:"
field = "RPM greater than:", OvrRunRpm, { OvrRunC }
field = "and KPa lower than: ", OvrRunKpa, { OvrRunC }
field = "and TPS lower than: ", OvrRunTps, { OvrRunC }
field = "and coolant greater than:", OvrRunClt, { OvrRunC }
field = "after", OvrRunTimr, { OvrRunC }
dialog = AccelDecc, "Accel Decel Trigger dot", 4
topicHelp = Fhelp6
field = "Accel Enrichments Trigger:", AccDecEnrich
field = ""
field = "Accel Timer", taeIgnCount
field = ""
field = "Decay Accel Enrichment:", DecayAccel
field = "Accel value at end of Accel Time:", DecayAcPoint, { DecayAccel }
field = ""
field = "Turn Decel Enrich off when :", DecelBoost
field = "Cut Decel Setpoint:", DecelKPa, { DecelBoost }
field = ""
field = "If MAPdot:"
field = " Turn Accel Enrich off in boost", KPaDotBoost, { AccDecEnrich }
field = " Turn Accel Enrich off during ASE", AccelMapASE, { AccDecEnrich }
field = ""
dialog = MoreAccel, "RPM Based Accel", 4
topicHelp = Fhelp6a
field = "RPM BAsed Accel is triggered as usual via MAP or TPS"
field = "but it is NOT based on a rate of change of MAP "
field = "or TPS. The fuel added is based on the engine's RPM."
field = "RPM Based Accel Enrichment:", RPMBAsedAE
field = ""
field = "Engine Speed high", RPMAE1, { RPMBAsedAE }
field = "Engine Speed mid - high", RPMAE2, { RPMBAsedAE }
field = "Engine Speed low - mid", RPMAE3, { RPMBAsedAE }
field = "Engine Speed low", RPMAE4, { RPMBAsedAE }
field = ""
field = "Enrichment for high speed:", RPMmS4, { RPMBAsedAE }
field = "Enrichment for mid - high speed:", RPMmS3, { RPMBAsedAE }
field = "Enrichment for low - mid speed:", RPMmS2, { RPMBAsedAE }
field = "Enrichment for low speed:", RPMmS1, { RPMBAsedAE }
field = ""
field = "MAP Threshold:", mapThresh4, { RPMBAsedAE }
field = "TPS Threshold:", tpsThresh4, { RPMBAsedAE }
field = "Accel Time:", taeTime4, { RPMBAsedAE }
dialog = BarroCor, "Barometric Correction", 4
topicHelp = Chelp3
field = "To help stop processor resets causing"
field = "the engine to run weak or rich"
field = "Max KPa for Baro Correction", BarroHi
field = "Min KPa for Baro Correction", BarroLow
field = ""
field = "Constant Baro corr in Alpha_n:", AlphBaroCor, { algorithm1 }
field = ""
field = "USE same sensor as primary sensor"
field = "MAP sensor connected to X7"
field = "Constant Baro Correction:", ConsBarCor
dialog = traction, "Anti-Rev System(Traction Control)", 4
topicHelp = Fhelp1
field = "Traction Control", TractionOn
field = "MODE=:", TractMode
field = "(RPM Based)RPMdot Threshold", RPMThresh, { !TractMode }
field = "(VSS Based)Sensor Differential", TractScale, { TractMode }
field = "(VSS Based)Low Speed Slip Threshold ", TractSlip, { TractMode }
field = "(VSS Based)Half Speed Slip Threshold", TractSlipH, { TractMode }
field = "Operate Anti-Rev between Max and Min"
field = "(VSS Based)Max Undriven input", TractVSSMax, { TractMode }
field = "(VSS Based)Min Undriven input", TractVSSMin, { TractMode }
field = "Enrichment Bins (mSec)"
field = "", RPM1S
field = "", RPM2S
field = "", RPM3S
field = "", RPM4S
field = "Retard Ignition by",
field = "", TractRet1, { ignmode }
field = "", TractRet2, { ignmode }
field = "", TractRet3, { ignmode }
field = "", TractRet4, { ignmode }
dialog = traction2, "Anti-Rev System cont...", 4
topicHelp = Fhelp1
field = "Spark Cut 'n' from Base Value"
field = "", TractSC1, { ignmode }
field = "", TractSC2, { ignmode }
field = "", TractSC3, { ignmode }
field = "", TractSC4, { ignmode }
field = ""
field = "Turn NOS off during Anti-Rev?", TractNOS, { nitrousUse }
field = ""
field = "Retard, Enrichment + Spark cut"
field = "for nn Engine Cycles"
field = "", TractCyc1
field = "", TractCyc2
field = "", TractCyc3
field = "", TractCyc4
field = "or untill:", TractCySec
dialog = CrankExtra, "More Cranking Stuff",9
topicHelp = Chelp9a
field = "Cranking RPM", CrankRPM
field = "TPS value for flood clear", tpsflood
field = ""
field = "#Extra fuel for cranking:"
field = "Use First Start Enrichment:", ExFuelCrank
field = "Extra Cranking Fuel Enrichment: ", ExtraFMult, { ExFuelCrank }
field = "If normal cranking PW = 10.0mS and "
field = "Enrichment = 50% then PW = 15.0mS"
dialog = CrankTble, "Cranking / Prime Table", 9
topicHelp = Chelp9
field = "Prime Pump when", AlwaysPrime
field = "Fire Priming Pulse", PrimeLate
field = "Priming PW Source", PrimeTBox
field = "Standard Priming PW:", PrimePulse, { PrimeTBox }
field = "Cranking Pulse Width Temps", crankpwip
#if CELSIUS
field = "#Cranking/Priming PW Table"
field = " -40 C ", CrankPWT1
field = " -29 C ", CrankPWT2
field = " -18 C ", CrankPWT3
field = " -7 C ", CrankPWT4
field = " 4 C ", CrankPWT5
field = " 16 C ", CrankPWT6
field = " 27 C ", CrankPWT7
field = " 38 C ", CrankPWT8
field = " 54 C ", CrankPWT9
field = " 71 C ", CrankPWT10
#else
field = "#Pulse Widths"
field = " -40 F ", CrankPWT1
field = " -20 F ", CrankPWT2
field = " 0 F ", CrankPWT3
field = " 20 F ", CrankPWT4
field = " 40 F ", CrankPWT5
field = " 60 F ", CrankPWT6
field = " 80 F ", CrankPWT7
field = " 100 F ", CrankPWT8
field = " 130 F ", CrankPWT9
field = " 160 F ", CrankPWT10
#endif
dialog = AfterStTbl, "After Start Enrichment (ASE) Settings", 6
topicHelp = Chelp10
field = "ASE Timer", aseIgnCount
field = "ASE TOTAL Time", ASETime
field = ""
field = "ASE Mode", ASEFixDe
field = "MAP mode during ASE", VEFixASE
field = "Use Fixed ASE/MAP when coolant below:", ASEFixTemp, { ASEFixDe + VEFixASE }
field = "Fixed ASE/MAP Time Period", ASEFixTim, { ASEFixDe + VEFixASE }
field = "Fixed MAP Value", VEFixValue, { VEFixASE }
#if CELSIUS
field = "#After Start Enrichment Table"
field = " -40 C ", ASETable1
field = " -29 C ", ASETable2
field = " -18 C ", ASETable3
field = " -7 C ", ASETable4
field = " 4 C ", ASETable5
field = " 16 C ", ASETable6
field = " 27 C ", ASETable7
field = " 38 C ", ASETable8
field = " 54 C ", ASETable9
field = " 71 C ", ASETable10
#else
field = "#After Start Enrichment Table"
field = " -40 F ", ASETable1
field = " -20 F ", ASETable2
field = " 0 F ", ASETable3
field = " 20 F ", ASETable4
field = " 40 F ", ASETable5
field = " 60 F ", ASETable6
field = " 80 F ", ASETable7
field = " 100 F ", ASETable8
field = " 130 F ", ASETable9
field = " 160 F ", ASETable10
#endif
dialog = clt_IATCorr, "Coolant corrected Air Density", 9
topicHelp = airdenHelp
field = "Air Density Correction:", IATCor
field = "Correction based on:", IATCorTy, { IATCor }
; field = "!Set both to 25500 for no reduction!"
field = "Start to reduce correction at:", RPMRedLo, { IATCor }
field = "End correction at:", RPMRedHi, { IATCor }
field = ""
field = "If you want to see air temp gauge instead you need to"
field = "edit the msns-extra.ini file and find [CurveEditor]"
field = "Change cltGauge to matGauge"
field = "Or just look at where the green ball is on the graph"
dialog = demo, "Demo menu", 3
field = "spare 3 182", spare3_182
field = "spare 3 183", spare3_183
field = "spare 3 184", spare3_184
;*************************** HELP STUFF ***************************************
help = Fhelp1, "General Help"
webHelp = "http://megasquirt.sourceforge.net/extra/"
text = "For MS (fuel only) select *.
"
text = "For MSnS select ^
"
text = "
"
text = "For more help or problems please see the Extra Website by clicking the Web Help button.
"
text = "
"
text = "If you can't find an answer there post a thread on http://www.msefi.com
"
text = "or contact"
text = " james@nscc.info
"
text = "or contact"
text = " philip.ringwood@ntlworld.com"
help = Fhelp2, "Fuel Table Selection"
webHelp = "http://megasquirt.sourceforge.net/extra/tableswitch.html"
text = "INJECTOR CH1 (PW1)"
text = "This will always use VE Table1
"
text = "GammaE On or OFF = :"
text = "Accel Enrich, WarmUpEnrich + AirTemp Corr
"
text = "
"
text = "INJECTOR CH2 (PW2)"
text = "Either use VE Table 1 or 2, 1=Normal 2=DT
"
text = "GammaE On or Off = :"
text = "Accel Enrich, WarmUpEnrich + AirTemp Corr
"
text = "Pulse Inj CH2 during cranking"
text = "Do you want CH2 to add fuel whilst cranking
"
text = "
"
text = "The VE Table 1 can be switched to"
text = "VE Table 3 on the run for use with Spark Table2"
text = "or on its own if ST2 not selected in"
text = "Spark Table Selection
"
text = "VE3 will replace VE1 when NOS running or Pin6 JP1 low.
"
text = "This can be used in any mode, but in DT "
text = "it will obviously only change PW1."
text = "If not in DT it will change both PW's.
"
help = Fhelp3,"Lambda Settings"
webHelp = "http://megasquirt.sourceforge.net/extra/dualego.htm"
text = "You can now change the Ego Limit"
text = "depending on the MAP KPa. If you don't"
text = "want it to change simply put 255 in the"
text = "KPa setpoint.
"
text = "
"
text = "There are also 2 AFR target tables.
"
text = "Table 1 contains the target AFR's for"
text = "VE Table 1.
"
text = "Table 2 contains the target AFR's for"
text = "VE Table 3.
"
text = "NOTE: These are just targets, they dont"
text = "replace your VE table and should be"
text = "thought of as a fine tune for the VE table.
"
text = "If you dont want to use them simply"
text = "select them off. The target will then "
text = "be as set in the enrichments page.
"
text = "
"
text = "We have added the facility to run from the target tables when above a certain TPS setpoint.
"
text = "If you want to use this set Use Targets to Above TPS and set the TPS setpoint.
"
text = "
"
help = Fhelp4,"Hard Cut Limiter Type"
text = "If using any spark mode other than Edis then you have the"
text = "option to cut spark and or fuel in "
text = "the rev limiting modes.
"
text = "The Base Number is the number of sparks"
text = "that can be cut from (yy). This value will"
text = "depend on number of cylinders.
"
text = "Then select how many sparks to cut"
text = "in each mode(xx).
"
text = "So you will get xx cuts in every yy sparks.
"
help = Fhelp5, "Launch Control"
webHelp = "http://megasquirt.sourceforge.net/extra/launch.htm"
text = "Active low input TOMI Header JP1 Pin4
"
text = "Typically this is wired to a thumb switch or clutch/brake pedal switch"
text = "This holds the RPM by first activating a ignition retard
"
text = "then a hard cut to help you get a good Launch
"
text = "
"
text = "Variable Launch, when selected,"
text = "stores the current engine RPM"
text = "as soon as the input is switched low"
text = "and uses that as its Hard Cut RPM.
"
text = "This is for use with a thumb switch"
text = "so launch rpm can be altered at the"
text = "track.
"
text = "
"
text = "The flat shift settings are for use with a clutch switch and allow"
text = "for different limits when changing gear. To disable, set the arming"
text = "RPM above you maximum rpm"
text = "If you press the clutch above the flat shift arming limit then the code"
text = "uses the flat shift limits, else it uses the launch limits"
help = Fhelp6, "Accel Decel Mode"
webHelp = "http://megasquirt.sourceforge.net/extra/mapdot.html"
text = "Select between TPSdot / MAPdot accel/decel enrichment
"
text = "
"
text = "The Accel Timer can be changed from Seconds to Engine Cycle counts.
"
text = "Note that a value of 0.3 could mean 0.3 seconds or 3 ignition pulses.
"
text = "The Cycles option is useful because the enrichment will reduce at higher rpms
"
text = "
"
text = "Normal MS mode finds the increase in PW and holds that till the Accel Timer has timed out.
"
text = "By selecting Decay it will find the increase to add then it will linearly decrease the Enrichment,
"
text = "to the Decay Value by the time the Accel Timer has timed out.
"
text = "
"
text = "If in MAP mode then you turn off"
text = "the accel/decel enrichment when"
text = "the engine goes into boost.
"
text = "
"
text = "You can also turn just the Decel off in either mode when in Boost to prevent a lean condition in boost
"
text = "
"
text = "Please see the Accel Wizard in the Tuning Section"
help = Fhelp6a, "RPM Based Accel"
webHelp =""
text = "THIS OPTION IS USED FOR A VERY SPECIALISED INSTALL!! 99.9% of installs will not need this option.
"
text = "This is triggered via a rate of change of TPS or MAP as the usual Accel Stuff, BUT the"
text = " enrichment is based on how fast the engine is running.
"
text = "The MAP and TPS based Accel erichment bins in the Accel Wizard will be ignored in this mode."
text = " The Trigger values will still be current."
text = "This is often required with high strung small displacement MOTORS and race motors"
help = Ihelp1, "Idle Control"
; KG rewrote this help info section
webHelp = "http://megasquirt.sourceforge.net/extra/pwmidle.html"
text = "Idle control can be used in B&G on/off, Warm up, or Closed-Loop Modes.
"
text = "
"
text = "--B&G on/off simply opens or closes a valve to provide additional air below a temperature threshold
"
text = "
"
text = "--Warm up mode linearly varies the duty cycle of a 2 wire solenoid actuated valve to provide"
text = "additional air during cold startup, while gradually scaling down the duty cycle until the engine is warm.
"
text = "
"
text = "--Closed-loop mode attempts to keep the engine idling at a set rpm by using PWM with a 2 wire"
text = "solenoid actuated valve, and actively varying the duty cycle to maintain rpm.
"
text = "
"
text = "
"
text = "Warmup Settings:
"
text = "--Lower temp idle frequency is the higher duty cycle required to start and run a cold engine.
"
text = "--Upper temp idle frequency is the duty cycle the idle valve will be scaled down to as the engine warms up.
"
text = "
"
text = "These two values are linearly interpolated from one to the other starting from the lower engine temp"
text = "to the higher engine temp (fast idle temp, and slow idle temp.)"
text = "
"
text = "--Idle valve frequency
"
text = "
"
text = "This is generally something most people will not need to mess with, however, different idle valves are designed to work"
text = "best at specific operational frequencies. Note that the Frequency of actuation is 1000 / this value
"
text = "
"
text = "Please Note: true DUTY CYCLE% = Lower or Upper dc * 100 / Idle Valve Frequency value"
text = "example Freq value - 200 = 50 hz operation, a DC value of 80 = 80*100/200 = 40% true duty cycle
"
text = "
"
text = "While most valves operate at 100 hertz, some older style 2-wire valves will work better at frequencies as low as 39 hertz."
text = "There is an inverse repationship between frequency of operation and control precision because of the algorithm"
text = "Used to control the PWM output. Lower frequencies have more steps between dc values. 100hz operation has 100 steps"
text = "and therefore has 1% control steps. 50hz operation has 200 steps and has 0.5% duty cycle steps and that is why"
text = "the duty cycle values put into MT need to be double the true DC% value.
"
text = "Some valves may emit a buzzing sound which can be eliminated by increasing the frequency above 100 hertz.
"
text = "
"
text = "There is a formula for modifying the idle valve frequency. The formula is '10000/desired frequency = x where x is"
text = "is the variable you input in megatune. For example '100' would be 100 hertz, and '50' would be 200 hertz
"
text = "
"
text = "
"
text = "Closed Loop Settings:
"
text = "
"
text = "This is fairly experimental code, but with careful manipulation of variables it should be possible to"
text = "produce a stable idle.
"
text = "
"
text = "-- Cranking (dc) is the duty cycle required at cranking.
"
text = "-- Minimum (dc) is the duty cycle slightly lower than a warm idle dc when regulated.
"
text = "-- Closed (dc) is the duty cycle where the valve closes.
"
text = "The values here follow the rule above and are related to teh frequency selected and are not true DC except when the idlefreq values is 100.
"
text = "Some valves are normally closed (use 0 here) others require a certain DC to clsoe and will regulate"
text = "above this value. Bosch 2 wire valves are normally open, close at 25% and regulate at about 40%.
"
text = "--Fast Idle RPM is the idle target for the engine at, or below the fast idle temperature.
"
text = "--Slow Idle RPM is the idle target for the engine at, or above the slow idle temperature (fully warmed up).
"
text = "
"
text = "The two RPM set points are linearly interpolated between the two temperatures to provide a smooth"
text = "transition during warmup
"
text = "
"
text = "--TPS Threshold is the point above which the idle valve closes in ADC (as it is no longer needed).
"
text = "--Idle Activation (rpm) is 'how many rpm' above idle that the idle valve returns to operation after the throttle"
text = "has been opened and closed again. This follows the idle speed as it is interpolated from Fast Idle RPM to Slow Idle RPM
"
text = "--Dashpot Settle is the wait time required after a dashpot event for the rpms to settle below the "
text = "idle activation point. After a dashpot it is possible that rpms will overshoot the activation point and this is the time required to settle below activation point.
"
text = "--Dashpot Adder (dc) is the dashpot duty cycle added to the last controlled idle duty cycle which allows"
text = "it to recover to a nice idle with minimal overshoot. These values should be low: 1-5 DC
"
text = "See next help section 'Idle Control (Closed Loop Settings)' for more information.
"
help = Ihelp2, "Idle Control (Closed Loop Settings)"
webHelp = "http://megasquirt.sourceforge.net/extra/pwmidle.html"
text = "More Closed Loop Settings
"
text = "
"
text = "Deadband range
"
text = "This is a range of rpm that you do not want it to bother changing duty cycle to regulate idle.
"
text = "30 to 50 rpm seems to be good here try smaller values unitl it seems stable.
"
text = "
"
text = "Adaptive idle control
"
text = "This controls the time between idle control events. The goal is to have a Slow Recovery which is tuned to the"
text = "engine's time constant at idle. You do not want it to hunt nor have falling idle speed. The Fast Recovery"
text = "is how fast you want it to recover to a decent idle when the idle speed is higher or lower than the target"
text = "this can be tuned for startup and to see what is needed to recover if idle speed drops significantly below target"
text = "for example when the A/C or electric fans kick on and the idle drops below target."
text = "
"
text = "The rpm values determine the curve. The lower value should be close to the dead band value and the upper one should be"
text = "a bit further away, maybe 100 or 200 rpm
"
text = "the next 2 values are time constants needed for startup and idle valve closure"
text = "--Closure speed comtrols the speed at which the idle valve closes. It is the time step delay between each"
text = "as it steps to a closed dc value"
text = "--Startup delay is a wait time right after the engine is started that the system stabilizes before"
text = "it attempts to find an idle speed
"
text = "
"
text = "Idle Timing
"
text = "
"
text = "
"
text = "Questions can be directed to http://msefi.com"
help = Shelp1, "Knock Detection"
text = "Please see:
"
webHelp = "http://megasquirt.sourceforge.net/extra/knock.html"
text = "for more info on this function.
"
help = Shelp2, "IAT/CLT Related Ignition"
webHelp = "http://megasquirt.sourceforge.net/extra/cltiat.html"
text = "When selected you can add 1 degree"
text = "of advance to the ignition"
text = "for every xx amount of degrees lower"
text = "the coolant temp is than the setpoint.
"
text = "There is also a max setpoint to"
text = "limit the added advance by.
"
text = "
"
text = "The IAT Related Ignition is similar"
text = "but it retards the ignition 1 degree"
text = "for every nn degrees of temp higher "
text = "it is above the setpoint when the "
text = "engine is running over the set KPa.
"
help = Shelp3, "Spark Settings"
webHelp = "http://megasquirt.sourceforge.net/extra/"
text = "Trigger Angle:
"
text = "This is the angle BTDC when the trigger tooth/vane etc. passes the sensor
"
text = "Typically you should aim for 60-70deg.
"
text = "If using an OEM distributor setup like HEI7 or TFI then 5-15deg is typical
"
text = "Do NOT use a value between 15 and 40 deg or your engine will not run correctly.
"
text = "
"
text = "If you need an angle between 90-112.5"
text = "then select the '+22.5' and"
text = "enter the angle needed -22.5
"
text = "If you need an angle between 112.5-125"
text = "then select '+45'"
text = "then enter the angle needed -45
"
text = "The actual Trigger Angle is :
"
text = "Trigger Angle + 22.5 or 45 if selected
"
text = "e.g. 78 + 45 = 123
"
text = " 88 + 22.5 = 110.5
"
text = " 65 + 0 = 65
"
text = "
"
text = "When using dwell control and trigger return cranking you MUST still"
text = "specify the cranking advance which needs to match the trigger return angle."
text = "The dwell calculations need this for accurate cranking dwell"
text = "
"
text = "Choosing spark output inverted or not is VERY IMPORTANT. This is determined"
text = "by the way you drive your coil(s) - see the website. When the VB921 is used"
text = "per the diagrams you will choose Inverted. Get it right or you will risk"
text = "damaging components as well as getting wildly inaccurate timing"
help = Shelp4, "Spark Table Selection"
webHelp = "http://megasquirt.sourceforge.net/extra/tableswitch.html"
text = "If NOS System not selected and Second"
text = "Spark Table selected then the base map"
text = "will change from ST1 to ST2 when JP1"
text = "pin6 is switched low.
"
text = "If NOS selected and Second Spark Table"
text = "then when NOS system runs (check back "
text = "signal JP1 pin6 low and NOS setpoints"
text = "satisfied) then the spark map will switch"
text = "from ST1 to ST2.
"
text = "If Second Spark Table not selected and NOS"
text = "used then it will retard ignition by the "
text = "fixed amount in the NOS settings.
"
help = Shelp5, "Wheel decoder settings"
webHelp = "http://megasquirt.sourceforge.net/extra/setup-wheel.html"
text = "Read the web help for more information and diagrams"
text = "
"
text = "The base teeth normally means the number of tooth places per 360deg"
text = "i.e. on a 36-1 enter 36, on a 60-2 enter 60 (58 physical teeth and 2 gaps)"
text = "
"
text = "When using 2nd trigger and missing tooth for COP setups, enter the number of"
text = "teeth between 2nd triggers. e.g. on 60-2 enter 120"
text = "
"
text = "Trigger numbers must follow in sequence"
text = "
"
text = "Dual dizzy mode is intended for use on dual distributor vehicles such as"
text = "the Lexus V8. Setup trigger teeth for each firing event and the code will"
text = "fire coil A and coil in turn"
text = "
i.e. triggers A,C,E fire coil A; triggers B,D,F fire coil B
"
text = "There is a choice of wheel decoder style 024 vs 025. It has been found that"
text = "Low wheel counts < 20 teeth need to use the 024 style, higher numbers of teeth"
text = "may work better with 025 style"
help = Chelp1, "Codebase and Output functions"
webHelp = "http://megasquirt.sourceforge.net/extra/setup.html"
text = "When running ignition you must choose one ignition type and select as many spark"
text = "outputs as you have coils
"
text = "i.e. distributor must have SparkA only; 4cyl wasted spark SparkA, SparkB only
"
text = "
For fuel only with a simple tach input signal (i.e. not a 60-2 wheel) turn"
text = "off all ignition types and spark outputs
"
text = "If you are running a multi-toothed wheel like 36-1, 60-2, 24/2 etc. you have to"
text = "configure the wheel decoder as if you were running spark and set a minimum of SparkA"
text = "
"
text = "Choose I/O pin usage.
"
text = "FIdle = usually idle control
"
text = " previously it has been used as spark output
"
text = "
"
text = "LED17/D14 is prefferred SparkA output
"
text = "Spark outputs must be used in sequence, i.e. for two outputs you must use A,B
"
text = ""
text = "X2 (JS0) output = Water Inj Pump Out
"
text = " Cooling Fan Out
"
text = ""
text = "X4 (JS2) output = Output1
"
text = " Boost Control
"
text = ""
text = "Shift Light outputs are on PTC3 and 4 (JS7 and JS8 for V3 pcb's)
"
help = Chelp2, "Advanced code options"
text = "Hybrid Alpha N system adds KPa to"
text = "Alpha_N. This means that the KPa value becomes part of the fuel calculations, the same as in Speed density."
text = " This is very important for turbo applications where Alpha_n is used.
"
text = "
"
text = "We have added the facility for a Mass Air Flow Meter to run the fuel calculations rather than"
text = " a MAP sensor. Connect the MAF 0-5V output up to pin X7 (JS5) via a filter circuit as described on the Extra website. "
text = "In MegaTune ensure the Mass_Air_Flow Mode is set in the Settings.ini file. this is some what experimental, expect "
text = "the VE table to look very linear with lots of rows of numbers the same value in the horizontal axis."
text = "
"
text = "
"
text = "
"
text = "Air Density Correction is most likely built into the MAF you are using, so set"
text = " to BUILT INTO MAF."
text = "
"
text = "False trigger protection should always be set to Enabled, unless you are using the"
text = "trigger logging feature. Whilst logging triggers it can be handy to disable the"
text = "protection so that all triggers (including noise) gets logged"
help = Chelp3, "Barometric Correction"
text = "If the Barometric Correction is set on"
text = "in the Enrichments screen then here you"
text = "set up the limits.
"
text = "This is used if MS resets during driving it will take in"
text = "the current MAP pressure and use that"
text = "as the Barometric Pressure to calculate"
text = "the correction.
"
text = "Now you can limit the BarCorr to the presets.
"
text = "
"
text = "If using Alpha-n mode then you can use the MAP sensor thats on the MS board as"
text = " a constant barometric correction sensor."
text = "
"
text = "A way to gain Constant Baro Correction when in normal speed density mode is by"
text = " fitting an extra MAP sensor to input X7 (JS5 V3.0) The MAP sensor MUST be the"
text = " same type as fitted to your MS"
text = "
"
help = Chelp4, "Water Injection"
webHelp = "http://megasquirt.sourceforge.net/extra/waterinj.html"
text = "If selected you cannot use the fan out on X2."
text = "See Codebase and Output functions
"
text = "
"
text = "The output X2 will come on"
text = "when the setpoints are met, the IAT"
text = "setpoint is ignored when it has started.
"
text = "
"
text = "If NOS is not selected then:
"
text = "Output X3 is pulsed at the same rate"
text = "as CH2. This can be used to drive"
text = "a fast acting solenoid.
"
text = "So if a water nozzle is selected that"
text = "flows 10-15% of the total flow of the "
text = "fuel injectors, then it will supply a"
text = "proportional amount of water to fuel.
"
text = "
"
text = "NB: O2 correction is turned"
text = "off during water injection
"
help = Chelp5, "NOS System"
webHelp = "http://megasquirt.sourceforge.net/extra/nitrous.html"
text = "Water Inj output X3 will not work in"
text = "this mode.
"
text = "This turns output X3 on when the "
text = "setpoints are satisfied. Then it "
text = "waits for input Pin6 JP1 to go low. "
text = "When this happens it retards the "
text = "ignition by the set amount and adds "
text = "to the fuel by an interpoled amount"
text = "of between NOS min and max"
text = "RPM value. If the additional PWs"
text = "are zero then no extra fuel is added.
"
text = "
"
text = "If in DT mode you can select which"
text = "CH to add the enrichment PW to."
text = "O2 correction is turned off when the"
text = "input Pin6 JP1 is low. If Duty Cycle"
text = "95% then NOS output X3 is turned off"
text = "and wont come back on untill one of"
text = "setpoints is not satisfied.
"
text = "
"
text = "If NOS selected on and Anti-Lag on"
text = "when MS receives a low input on"
text = "the NOS Check Back (Pin6 JP1)"
text = "before it turns the NOS output on (X3)"
text = "then this will enable the NOS Turbo "
text = "Anti-Lag. This system is used to spool"
text = "the turbo up between a certain KPa"
text = "range using NOS.
"
text = "See http://megasquirt.sourceforge.net/extra/
"
text = "for a suitable wiring diagram.
"
help = Chelp6, "Staged Injection System"
webHelp = "http://megasquirt.sourceforge.net/extra/stagedinj.html"
text = "Roger Emm's Staged Injection System"
text = "Not for use in DT mode!
"
text = "This runs Ch1 injectors only untill"
text = "the setpoint is satisfied, then CH1"
text = "and CH2 will fire at a reduced amount"
text = "depending on the scale factor.
"
text = "This is worked out by calculating"
text = "Primary Injector Flow/Total Inj Flow."
text = "When the engine runs below the"
text = "setpoint-delta the injectors change"
text = "back to CH1 on normally and CH2 off.
"
help = Chelp8, "Over Run Settings"
webHelp = "http://megasquirt.sourceforge.net/extra/overrun.html"
text = "This is used to cut fuel off during deceleration to aid engine braking"
text = " and reduce fuel use."
help = Fhelp7, "Rev Limiter"
webHelp = "http://megasquirt.sourceforge.net/extra/revlimiter.htm"
text = "The soft rev limiter is for spark based codes, this retards the ignition to the
"
text = "Soft Limit setpoint to reduce engine power and to try to reduce engine speed.
"
text = "If the soft limit point is maintained for the limiter max time setpoint then the
"
text = "hard limiter will cut in. This will also come in when the RPM reaches the Hard Limit setpoint
"
text = "the hard limiter can be used in fuel only mode or in spark modes"
help = Chelp9, "Cranking/Priming Table"
webHelp = ""
text = "PRIME PUMP WHEN
"
text = "Values for this item are either Prime Pulse > 0 or Always. If you select the "
text = "first option, the pump will only be primed if the priming pulsewidth setting "
text = "is greater than zero. If you select the latter option, Always, the pump will "
text = "be primed regardless of your priming pulsewidth. You will most likely want to "
text = "use Always as it will get your fuel pressure up before cranking, but you don't "
text = "necessarily have to inject any fuel. The priming period is two seconds.
"
text = "
"
text = "FIRE PRIMING PULSE
"
text = "The Fire Priming Pulse option allows you to select when a priming pulse is"
text = "fired. If you select Power Up, a priming pulse will be fired immediately upon "
text = "turning on the ignition. If you select Twice, one priming pulse will be fired "
text = "when you first key the ignition on and the second pulse will be fired after a "
text = "second has passed. If you select After 2 Secs, there will be one priming pulse "
text = "two seconds after turning on the ignition.
"
text = "The first option was in the original stock code, however, it will not "
text = "necessarily work for a cold-start because there there may not already be fuel "
text = "pressure in the rail when you turn the ignition on. The other two options are "
text = "just different methods of firing the priming pulse. If you select Twice, then "
text = "there will most likely be no"
text = "fuel injected on the first pulse, unless there is already fuel pressure in the "
text = "fuel rail, and then there sould be fuel injected on the next pulse. If you "
text = "select the After 2 Secs option, it will give the fuel pump time to build up "
text = "pressure. With that option, however, remember that if you try and start the "
text = "car before allowing two seconds to elapse, no priming pulse will ever be "
text = "injected.
"
text = "
"
text = "PRIMING PW SOURCE
"
text = "There are two options for the Priming PW Source. You can either select "
text = "Standard Prime which will inject a fixed amount of fuel as specified in the "
text = "Standard Priming PW box, or you can select Priming PW Table which will have "
text = "your priming PW be based off the Cranking/Priming PW Table. If you would "
text = "like more control over your priming pulsewidths for varying temperatures,"
text = "then select Priming PW Table and the values specified in the "
text = "Cranking/Priming PW Table will be used as the priming pulsewidth for the "
text = "given temperature.
"
text = "
"
text = "STANDARD PRIMING PW
"
text = "If you selected Standard Prime for the Priming PW Source, then this is where "
text = "you select how long the injectors will stay open when the priming pulse is "
text = "fired. This value is in milliseconds.
"
text = "
"
text = "CRANKING PULSE WIDTH TEMPS
"
text = "Here you can select what temperature lookup method you would like to use for "
text = "the Cranking/Priming PW Table during cranking. CLT Only uses the coolant "
text = "temperature and is the original Megasquirt option. This is what most people "
text = "use and if you have"
text = "a standard setup with a coolant sensor, this is most likely what you will "
text = "want to use. If you would like to use the manifold temperature instead, "
text = "select MAT Only. You can also select CLT, MAT Average which uses an average "
text = "of the two temperatures.
"
text = "
"
text = "CRANKING/PRIMING PW TABLE
"
text = "In older versions of the MegaSquirt firmware, the cranking pulsewidth was "
text = "handled by a linear interpolation between a high and low temperature pair. "
text = " A linear curve was not necessarily optimal for some people so now you have "
text = "the option of setting your cranking pulsewidth at various temperatures.
"
text = "If you're migrating over from a MegaSquirt version that only used two values, "
text = "use those as your high and low values in the Cranking/Priming PW Table and then "
text = "guess the values in between. Then, when you start your car, you can adjust the "
text = "pulsewidth values for the various temperatures that yield the most reliable and "
text = "fastest starts.
"
help = Chelp9a, "Cranking/Priming Table"
webHelp = ""
text = "CRANKING RPM
"
text = "The Cranking RPM value lets the MegaSquirt know when the engine is cranking "
text = "or when it is running. A good starting point would be 300 as most engines "
text = "crank around 200 RPM; the rule of thumb being about 100 RPM higher than your "
text = "actual cranking RPM. Do not set this too high because if your RPM dips due "
text = "to a low idle or a slight stall it will make the MegaSquirt think it is "
text = "cranking and also reinitiate the afterstart"
text = "enrichment period. Set it too low and it will try and use the VE table for "
text = "crank pulsewidths instead of the Cranking/Priming PW Table, which is not "
text = "good either.
"
text = "
"
text = "TPS VALUE FOR FLOOD CLEAR
"
text = "Sometimes you might want to temporarily stop the injectors from injecting "
text = "fuel during cranking to clear a flooded engine. This is achieved by holding "
text = "down the gas pedal during cranking. The MegaSquirt needs to know at what "
text = "point of gas pedal deflection it should turn off the injectors and a good "
text = "starting point would be just before floored.
"
text = "To get this value, go to Tools, Calibrate TPS, and push the gas pedal almost "
text = "all the way to the floor - about where you think the fuel should be cut off "
text = "and hit Get Current. Remember this value and hit CANCEL on the Calibrate "
text = "TPS dialog. Insert this value for the TPS Flood Clear. If this value is "
text = "set too low then you will not get any fuel during cranking. If you set this "
text = "value too high, then you won't be able to press the pedal enough to trigger "
text = "the Flood Clear.
"
text = "
"
text = "If the First Start Enrichment option is set to ON you will have the option "
text = "to increase the cranking PW for the first start of the day. Just turn on the "
text = "ignition and then pump the throttle 3 times before cranking. If the TPS value "
text = "goes above the FLOODCLEAR more than 3 times before you crank the engine then "
text = "the cranking PW will be multiplied by the Extra Cranking Fuel Multiplier. So "
text = "if the normal cranking PW is set to 10.0mS and the multiplier is 50% then the "
text = "cranking PW will be 15.0mS. This setting returns to the normal PW after the "
text = "first attempt to start the motor or if you apply the throttle past the "
text = "FLOODCLEAR setting. This is to assist starting a motor that requires "
text = "additional fuel to start only on the first start after sitting a long time. "
text = "If the engine fails to start on the first attempt, the First Start Enrichment "
text = "can be reactivated after the engine has set for two sec without cranking."
help = Chelp10, "After Start Enrichment (ASE)"
webHelp = ""
text = "It's been found that during winter the cranking and after start enrichments "
text = "need tweeking
"
text = "in order to get the engine to start and run without restarting it several "
text = "times from cold.
"
text = "The reason is felt that the after start and cranking enrichments dont follow "
text = "temperature in a
"
text = "linear format. So if you find this is the case you can use this table to "
text = "tweek areas where it
"
text = "is difficult to start. It has been found that the areas for concern are around "
text = "32F (0C) "
text = "
"
text = "
"
text = "After Start Enrich Counter is the length of time in Seconds or engine cycles "
text = "that the
"
text = "after start enrich runs for. The percentage added is decayed down to zero as "
text = "the time expires "
text = "
"
text = "
"
text = "Set ASE Mode to FIXED for a timed period of ASE that does not decay, after "
text = "the timer the ASE will
"
text = "then decay as usual during the TOTAL ASE time period thats left. This has a "
text = "temp setpoint as
"
text = "it should only be needed when the coolant temperatures are fairly low. "
text = "
"
text = "
"
text = "Setting MAP to a fixed value helps to maintain a constant PW during the "
text = "initial start where the
"
text = "map drops quickly from around 100KPa to the tickover KPa. This is held during "
text = "the FIXED time period."
text = "The FIXED period is a period of time at the start of the TOTAL ASE time. "
text = "FIXED must be less than TOTAL"
help = DTHelp1, "Lambda Settings"
text = "If you run 2 Lambda sensors, one on each "
text = "bank, you can have a totally
"
text = "seperate Ego correction for CH2"
text = "only for use when CH2 = VE Table2"
help = airdenHelp, "Coolant Corrected Air Density"
text = "Unless you really know what your doing this MUST be set to NORMAL CORRECTION. "
text = "This is ONLY suitable for fine tuning an already tuned engine!"
text = "
"
text = "Air Density Correction is a factor of Inlet Air Temp measured from the Manifold "
text = "Air Temp Sensor. There have been a few instances where the air temp is more "
text = "affected by the coolant temp at low manifold pressures or Throttle positions "
text = "rather than the entering air temp as measured at the MAT. In this case it was "
text = "found that the engine could run lean for the same air temp depending on the "
text = "coolant temperature. To help TUNE this we have added Coolant Correction "
text = "percentage.
"
text = "With this function enabled the correction percentage is interpolated from the "
text = "table, depending on the coolant temperature. So Air Density would now be :
"
text = " Air Density = (MAT Related Air Density) * Coolant related correction %
"
text = "E.G. Air Density = 120 * 110 % = 132"
text = "
"
text = "This correction can then be reduced by the engines RPM. The Reduction Start "
text = "value is where the coolant correction is started to be removed, and the "
text = "correction End position is where there will no longer be any coolant correction. "
text = "The coolant correction is interpolated between these 2 points. At engine speeds "
text = "lower then the start point the correction will be as the Coolant Correction Table. "
text = "Between the Start and End values the Coolant Correction is reduced at a linear "
text = "rate. At the End value the Coolant Correction rate is removed totally."
text = "
"
text = "The idea is that as rpm increases as does air flow, so the MAT sensor will be a "
text = "more realistic measurement of density."
text = "
"
text = "So if start is 3000rpm and end is 6000, and correction is 150%, then at 3000rpm "
text = "correction will be 150%, at 4500rpm correction will be 125% and at 6000rpm "
text = "correction will be 100% (i.e. no correction)."
text = "
"
text = "We have allowed the temperatures to be user defined, suggested temps would be :
"
text = "Temp 1 = -40 F
"
text = "Temp 2 = -20 F
"
text = "Temp 3 = 0 F
"
text = "Temp 4 = 20 F
"
text = "Temp 5 = 50 F
"
text = "Temp 6 = 80 F
"
text = "Temp 7 = 120 F
"
help = OpenLoopHelp, "Open Loop Mode"
text = "You can turn off closed loop oxygen sensor monitoring above a TPS position"
text = "or kpa value.
"
text = "The aim of this is so that only the VE table is used to control fuelling, typically"
text = "at full throttle/load conditions"
help = TachoHelp, "Tacho Output pin"
text = "When running coilpacks or COP, many people have a problem getting a signal to"
text = "run their tachometer. This option sends a pulse on a chosen output for each"
text = "tach event. There is NO error checking, so you must make sure that the chosen"
text = "pin is not already being used for something else.
"
text = "You will also need to add a small transistor driver circuit"
help = DwellHelp, "Dwell control"
text = "If you use direct coil control (VB921) or a non-smart dwell ignition module"
text = "it is VITAL that you enable dwell control with the correct spark invert/non-invert setting"
text = "The dwell numbers given are get-you-going numbers but will need adjusting.
"
text = "If your ignition driver/coil are getting warm or hot then the dwell is too high
"
text = "Min discharge is the time the coil is allowed to spark before charging starts again.
"
text = "
"
text = "Some Bosch ignition modules are smart-dwell and need the 75% setting instead of true dwell"
help = Stim4WHelp, "Stim for wheel"
text = "This option is for toothed wheel users to test their Megasquirt on the bench using"
text = "the stimulator where the correct input signal is unavailable.
"
text = "
"
text = "DO NOT use on the real engine or you will flood the engine with fuel"
help = egoHelp, "Exhaust gas settings"
text = "These are the basic settings for EGO correction where a narrowband or wideband"
text = "oxygen sensor automatically adjusts the mixture as you drive to a target value"
text = "the more advanced settings are through the Target AFR system which can only"
text = "be used with a Wideband
"
text = "Refer to the Megamanual for basic EGO settings as these remain much the same as"
text = "standard MS1 code"
;-------------------------------------------------------------------------------
[CurveEditor]
curve = clt_IATCorrC, "Coolant corrected Air Density, see Settings", 9
topicHelp = airdenHelp
columnLabel = "Temp", "Offset"
xBins = IATCTemp, coolant
yBins = IATCorS
gauge = cltGauge
#if CELSIUS
xAxis = -40, 100, 15
#else
xAxis = -40, 220, 14
#endif
yAxis = 50, 150, 11
[TableEditor]
; table_id, map3d_id, "title", page
table = veTable1Tbl, veTable1Map, "VE Table 1", 1
; constant, variable
xBins = rpmBins1, rpm
#if SPEED_DENSITY
yBins = mapBins1, map
#elif AIR_FLOW_METER
yBins = afmBins1, MAFVolts
#elif ALPHA_N
yBins = tpsBins1, tpsADC
#endif
zBins = veBins1
gridHeight = 1.0
upDownLabel = "(RICHER)", "(LEANER)"
table = veTable2Tbl, veTable2Map, "VE Table 2 (DT)", 2
xBins = rpmBins2, rpm
#if SPEED_DENSITY
yBins = mapBins2, map
#elif AIR_FLOW_METER
yBins = afmBins2, MAFVolts
#elif ALPHA_N
yBins = tpsBins2, tpsADC
#endif
zBins = veBins2
gridHeight = 1.0
upDownLabel = "(RICHER)", "(LEANER)"
table = sparkTbl, sparkMap, "Ignition Advance Main Table", 3
xBins = rpmBins3, rpm
#if SPEED_DENSITY
yBins = mapBins3, map
#elif AIR_FLOW_METER
yBins = afmBins3, MAFVolts
#elif ALPHA_N
yBins = tpsBins3, tpsADC
#endif
zBins = advTable1
gridHeight = 3.0
upDownLabel = "ADVANCED", "RETARDED"
table = sparkTbl2, sparkMap2, "Ignition Advance Table 2. See Spark Table selection", 5
xBins = rpmBins4, rpm
#if SPEED_DENSITY
yBins = mapBins4, map
#elif AIR_FLOW_METER
yBins = afmBins4, MAFVolts
#elif ALPHA_N
yBins = tpsBins4, tpsADC
#endif
zBins = advTable2
gridHeight = 3.0
upDownLabel = "RETARDED", "ADVANCED"
table = veTable3Tbl, veTable3Map, "VE Table 3. See Fuel Table Selection", 6
xBins = rpmBins5, rpm
#if SPEED_DENSITY
yBins = mapBins5, map
#elif AIR_FLOW_METER
yBins = afmBins5, MAFVolts
#elif ALPHA_N
yBins = tpsBins5, tpsADC
#endif
zBins = veBins3
gridHeight = 1.0
upDownLabel = "(RICHER)", "(LEANER)"
#if NARROW_BAND_EGO
table = afrTable1Tbl, afrTable1Map, "AFR Targets for VE Table 1 (Volts)", 7
xBins = rpmBins6, rpm
#if SPEED_DENSITY
yBins = mapBins6, map
#elif AIR_FLOW_METER
yBins = afmBins6, MAFVolts
#elif ALPHA_N
yBins = tpsBins6, tpsADC
#endif
zBins = afrBins1
table = afrTable2Tbl, afrTable2Map, "AFR Targets for VE Table 3 (Volts)", 7
xBins = rpmBins7, rpm
#if SPEED_DENSITY
yBins = mapBins7, map
#elif AIR_FLOW_METER
yBins = afmBins7, MAFVolts
#elif ALPHA_N
yBins = tpsBins7, tpsADC
#endif
zBins = afrBins2
#elif WB_UNKNOWN
table = afrTable1Tbl, afrTable1Map, "AFR Targets for VE Table 1 (Volts)", 7
xBins = rpmBins6, rpm
#if SPEED_DENSITY
yBins = mapBins6, map
#elif AIR_FLOW_METER
yBins = afmBins6, MAFVolts
#elif ALPHA_N
yBins = tpsBins6, tpsADC
#endif
zBins = afrBins1
table = afrTable2Tbl, afrTable2Map, "AFR Targets for VE Table 3 (Volts)", 7
xBins = rpmBins7, rpm
#if SPEED_DENSITY
yBins = mapBins7, map
#elif AIR_FLOW_METER
yBins = afmBins7, MAFVolts
#elif ALPHA_N
yBins = tpsBins7, tpsADC
#endif
zBins = afrBins2
#elif DIYWB_NON_LINEAR
table = afrTable1Tbl, afrTable1Map, "AFR Targets for VE Table 1 (Volts)", 7
xBins = rpmBins6, rpm
#if SPEED_DENSITY
yBins = mapBins6, map
#elif AIR_FLOW_METER
yBins = afmBins6, MAFVolts
#elif ALPHA_N
yBins = tpsBins6, tpsADC
#endif
zBins = afrBins1
table = afrTable2Tbl, afrTable2Map, "AFR Targets for VE Table 3 (Volts)", 7
xBins = rpmBins7, rpm
#if SPEED_DENSITY
yBins = mapBins7, map
#elif AIR_FLOW_METER
yBins = afmBins7, MAFVolts
#elif ALPHA_N
yBins = tpsBins7, tpsADC
#endif
zBins = afrBins2
#else
table = afrTable1Tbl, afrTable1Map, "AFR Targets for VE Table 1 (AFR)", 7
xBins = rpmBins6, rpm
#if SPEED_DENSITY
yBins = mapBins6, map
#elif AIR_FLOW_METER
yBins = afmBins6, MAFVolts
#elif ALPHA_N
yBins = tpsBins6, tpsADC
#endif
zBins = afrBins1
table = afrTable2Tbl, afrTable2Map, "AFR Targets for VE Table 3 (AFR)", 7
xBins = rpmBins7, rpm
#if SPEED_DENSITY
yBins = mapBins7, map
#elif AIR_FLOW_METER
yBins = afmBins7, MAFVolts
#elif ALPHA_N
yBins = tpsBins7, tpsADC
#endif
zBins = afrBins2
#endif
table = boostTbl1, boostMap1, "Boost kpa target 1", 8
; constant, variable
xBins = bcrpmBins1, rpm
yBins = bctpsBins1, throttle
zBins = bcBins1
table = boostTbl2, boostMap2, "Boost duty target", 8
xBins = bcrpmBins2, rpm
yBins = bctpsBins2, throttle
zBins = bcBins2
table = boostTbl3, boostMap3, "Boost kpa target 2", 8
xBins = bcrpmBins3, rpm
yBins = bctpsBins3, throttle
zBins = bcBins3
table = splitTbl, splitMap, "Rotary split Table - see settings", 9
xBins = splitrpmBins, rpm
#if SPEED_DENSITY
yBins = splitkpaBins, map
#elif AIR_FLOW_METER
yBins = splitafmBins, MAFVolts
#elif ALPHA_N
yBins = splittpsBins, tpsADC
#endif
zBins = splitTable
gridHeight = 3.0
upDownLabel = "RETARDED", "ADVANCED"
;-------------------------------------------------------------------------------
[GaugeConfigurations]
;-------------------------------------------------------------------------------
; Notes on some of the gauges.
;
; The accelEnrichGauge is now a composite of both acceleration enrichment
; and deceleration enleanment numbers. See the definition of the variable
; accDecEnrich in the OutputChannels section.
;
; David Hooke contributed the lambda gauge and associated transfer
; function files.
;
; The lambda gauge is the best way (my opinion) to report data from a
; wide band EGO gauge, it standardizes the output irrespective of fuel
; or mix of fuels, so you needn't do any brainwork to know if your 75%
; gasoline and 25% methanol is rich at 10:1 or not.
;
; Use the file WBlambda100AVR.inc, if using a standard ADC (e.g., AVR cpu).
; Use the file WBlambda100MOT.inc, if using a biased ADC (e.g., MOT cpu).
;-------------------------------------------------------------------------------
; Define a gauge's characteristics here, then go to a specific layout
; block (Tuning or FrontPage) and use the name you've defined here to
; display that gauge in a particular position.
;
; Name = Case-sensitive, user-defined name for this gauge configuration.
; Var = Case-sensitive name of variable to be displayed, see the
; OutputChannels block in this file for possible values.
; Title = Title displayed at the top of the gauge.
; Units = Units displayed below value on gauge.
; Lo = Lower scale limit of gauge.
; Hi = Upper scale limit of gauge.
; LoD = Lower limit at which danger color is used for gauge background.
; LoW = Lower limit at which warning color is used.
; HiW = Upper limit at which warning color is used.
; HiD = Upper limit at which danger color is used.
; vd = Decimal places in displayed value
; ld = Label decimal places for display of Lo and Hi, above.
;Name Var Title Units Lo Hi LoD LoW HiW HiD vd ld
deadGauge = deadValue, "---", "", 0, 1, -1, -1, 2, 2, 0, 0
baroADCGauge = baroADC, "Barometer ADC", "", 0, 255, -1, -1, 256, 256, 0, 0
mapADCGauge = mapADC, "MAP ADC", "", 0, 255, -1, -1, 256, 256, 0, 0
matADCGauge = matADC, "MAT ADC", "", 0, 255, -1, -1, 256, 256, 0, 0
cltADCGauge = cltADC, "CLT ADC", "", 0, 255, -1, -1, 256, 256, 0, 0
tpsADCGauge = tpsADC, "TPS ADC", "", 0, 255, -1, -1, 256, 256, 0, 0
batADCGauge = batADC, "BAT ADC", "", 0, 255, -1, -1, 256, 256, 0, 0
idleGauge = idleDC "IdleDC", "%", 0, 255, -1, -1, 256, 256, 0, 0
#if NARROW_BAND_EGO
egoGauge = egoVoltage, "Rear Bank O2 Voltage", "volts", 0, 1.0, 0.2, 0.3, 0.6, 0.8, 2, 2
#else
egoGauge = egoVoltage, "Rear Bank O2 Voltage", "volts", 0.5, 4.5, 0.0, 0.0, 5.0, 5.0, 2, 2
#endif
#if NARROW_BAND_EGO
ego2Gauge = ego2Voltage, "Front Bank O2 Voltage", "volts", 0, 1.0, 0.2, 0.3, 0.6, 0.8, 2, 2
#else
ego2Gauge = ego2Voltage, "Front Bank O2 Voltage", "volts", 0.5, 4.5, 0.0, 0.0, 5.0, 5.0, 2, 2
#endif
lambdaGauge = lambda, "Lambda", "", 0.5, 1.5, 0.5, 0.7, 2, 1.1, 2, 2
accelEnrichGauge = accDecEnrich, "AE Driven Fuel Pct", "Pct", 100, 200, 0, 0, 999, 999, 0, 0
afrGauge = afr, "Air:Fuel Ratio", "", 10, 19.4, 12, 13, 15, 16, 2, 2
clockGauge = secl, "Clock", "Seconds", 0, 255, 10, 10, 245, 245, 0, 0
dutyCycle1Gauge = dutyCycle1, "Duty Cycle 1", "%", 0, 100, -1, -1, 85, 90, 1, 1
dutyCycle2Gauge = dutyCycle2, "Duty Cycle 2", "%", 0, 100, -1, -1, 85, 90, 1, 1
egoCorrGauge = egoCorrection, "O2 Driven Correction (GEGO)", "%", 80, 120, 90, 99, 101, 110, 0, 0
gammaEnrichGauge = gammaEnrich, "Gamma Enrichment", "%", 50, 150, -1, -1, 151, 151, 0, 0
#if MPXH6300A
mapGauge = map, "Engine MAP", "kPa", 0, 304, 0, 20, 250, 275, 0, 0
#elif MPXH6400A
mapGauge = map, "Engine MAP", "kPa", 0, 400, 0, 20, 250, 275, 0, 0
#else
mapGauge = map, "Engine MAP", "kPa", 0, 255, 0, 20, 200, 245, 0, 0
#endif
baroGauge = barometer, "Barometer", "kPa", 60, 110, 0, 20, 200, 245, 0, 0
barocorrGauge = baroCorrection, "baro correction", "%", 0, 120, -1, -1, 999, 999, 0, 0
pulseWidth1Gauge = pulseWidth1, "Pulse Width 1", "mSec", 0, 25.5, 1.0, 1.2, 20, 25, 1, 1
pulseWidth2Gauge = pulseWidth2, "Pulse Width 2", "mSec", 0, 25.5, 1.0, 1.2, 20, 25, 1, 1
tachometer = rpm, "Engine Speed", "RPM", 0, 8000, 300, 600, 3000, 5000, 0, 0
throttleGauge = throttle, "Throttle Position", "%TPS", 0, 100, -1, 1, 90, 100, 0, 0
veBucketGauge = veTuneValue, "VE Bucket", "%", 0, 150, -1, -1, 999, 999, 0, 0
veGauge = veCurr, "VE Current", "%", 0, 120, -1, -1, 999, 999, 0, 0
voltMeter = batteryVoltage,"Battery Voltage", "volts", 7, 21, 8, 9, 15, 16, 2, 2
warmupEnrichGauge = warmupEnrich, "Warmup Enrichment", "%", 100, 150, -1, -1, 101, 105, 0, 0
#if CELSIUS
cltGauge = coolant, "Coolant Temp", "%TEMP", -40, 120, -15, 0, 95, 105, 0, 0
matGauge = mat, "Manifold Air Temp", "%TEMP", -40, 110, -15, 0, 95, 100, 0, 0
#else
cltGauge = coolant, "Coolant Temp", "%TEMP", -40, 250, 0, 0, 200, 220, 0, 0
matGauge = mat, "Manifold Air Temp", "%TEMP", -40, 215, 0, 0, 200, 210, 0, 0
#endif
advanceGauge = advSpark, "Spark Advance", "deg BTDC", 50, -10, 0, 0, 35, 45, 0,
stackGauge = stackL, "CPU stack", "bytes", 240, 200, 0, 0, 254, 254, 0, 0
; T2XGauge = T2X, "T2 X byte", "byte", 0, 255, 0, 0, 254, 254, 0, 0
; Extra Stuff
fuelGauge = fuelpress, "Fuel Pressure", "lb/in", 0, 80, 30, 40, 60, 65, 1, 1
#if CELSIUS
egtGauge = egttemp, "EGT", "C", 0, 1000, 0, 0, 1450, 1480, 1, 1
#else
egtGauge = egttemp, "EGT", "F", 0, 2200, 0, 0, 1450, 1480, 1, 1
#endif
CltIatGauge = CltIatDeg, "Clt IAT Angle", "Deg", -10, 10, -10, -10, 10, 10, 1
KnockGauge = KnockDeg, "Knock Retard", "Deg", -20, 0, -20, -20, 1, 1
egoCorrGauge2 = egoCorrection2, "EGO Correction2", "%", 50, 150, 90, 99, 101, 110, 0, 0
testGauge = test, "TEST", "", 0, 255, 255, 255, 0, 0
test2Gauge = test2, "TEST2", "", 0, 255, 255, 255, 0, 0,
RpmHiResGauge = RpmHiRes, "Engine RPM", "RPM", 0, 8000, 0, 300, 7800, 8000, 0
lambdaGauge2 = lambda2, "Lambda2", "", 0.5, 1.5, 0.5, 0.7, 2, 1.1, 2, 2
afrGauge2 = afr2, "Air:Fuel Ratio2", "", 10, 19.4, 12, 13, 15, 16, 2, 2
vacuumGauge = vacuum, "Engine Vacuum", "in-HG", 0, 30, 0, 0, 30, 30, 1, 1
boostgauge = boost, "Engine Boost", "PSIG", 0, 20, 0, 0, 15, 20, 1, 1
VacBooGauge = boostVac, "Engine Vac Boost", "in-HG/PSIG", -30, 30, -30, -30, 30, 30, 1, 1
TargetAFRGauge = TargetAFR, "Target AFR", "AFR", 10, 19.4, 0, 0, 20, 20, 2, 2
mphGauge = mph, "Speedo", "MPH", 0, 200, -1, -1, 200, 200, 1
USgphGauge = USgph, "US GPH", "GPH", 0, 100, -1, -1, 100, 100, 1
gphGauge = gph, "GPH", "GPH", 0, 100, -1, -1, 100, 100, 1
USmpgGauge = USmpg, "US MPG", "MPG", 0, 100, -1, -1, 100, 100, 1
mpgGauge = mpg, "MPG", "MPG", 0, 100, -1, -1, 100, 100, 1
YGForceGauge = YForce, "Y G-Force", "G", -3, 3, 0, 0, 2, 3, 3
XGForceGauge = XForce, "X G-Force", "G", -3, 3, 0, 0, 2, 3, 3
MAFGauge = MAFVolts, "Volts", "V", 0, 5, 0, 0, 5, 5, 2
bcDCGauge = bcDC, "Boost Control DC", "%", 0, 100, -1, -1 999, 999, 0, 0
idleDCGauge = idleDC, "Idle DC", "%", 0, 100, -1, -1 999, 999, 0, 0
RealDutyGauge1 = dutyCy1Real, "Fuel Delivery 1", "Flow", 0, 75, -1, -1, 75, 75, 1, 1
RealDutyGauge2 = dutyCy2Real, "Fuel Delivery 2", "Flow", 0, 75, -1, -1, 75, 75, 1, 1
;-------------------------------------------------------------------------------
[FrontPage]
#if NARROW_BAND_EGO
egoLEDs = 0.0, 1.0, 0.5 ; NB settings.
#else
; If you reverse these range values as you see below, then the LED
; bar will work as you expect, high on the right, low on the left.
egoLEDs = 4.0, 1.0, 2.5 ; WB settings.
#endif
; Gauges are numbered left to right, top to bottom.
;
; 1 2 3 4
; 5 6 7 8
;Gauge Setup 0
gauge1 = RpmHiResGauge
gauge2 = cltGauge
gauge3 = pulseWidth1Gauge
gauge4 = dutyCycle1Gauge
gauge5 = mapGauge
gauge6 = matGauge
gauge7 = afrGauge
gauge8 = advanceGauge
;Gauge Setup 1
; gauge1 = RpmHiResGauge
; gauge2 = cltGauge
; gauge3 = pulseWidth1Gauge
; gauge4 = dutyCycle1Gauge
; gauge5 = mapGauge
; gauge6 = accelEnrichGauge
; gauge7 = egoCorrGauge
; gauge8 = advanceGauge
;Gauge Setup 2
; gauge1 = tachometer
; gauge2 = throttleGauge
; gauge3 = cltGauge
; gauge4 = matGauge
; gauge5 = mapGauge
; gauge6 = veGauge
; gauge7 = ego2Gauge
; gauge8 = advanceGauge
;Gauge Setup 3
; gauge1 = RpmHiResGauge
; gauge2 = cltGauge
; gauge3 = pulseWidth1Gauge
; gauge4 = dutyCycle1Gauge
; gauge5 = mapGauge
; gauge6 = accelEnrichGauge
; gauge7 = egoCorrGauge
; gauge8 = advanceGauge
;Gauge Setup 4
; gauge1 = tachometer
; gauge2 = throttleGauge
; gauge3 = idleGauge
; gauge4 = pulseWidth1Gauge
; gauge5 = mapGauge
; gauge6 = cltGauge
; gauge7 = matGauge
; gauge7 = accelEnrichGauge
; gauge8 = advanceGauge
;Gauge Setup 5 Alpha-N / MAF
; gauge1 = tachometer
; gauge2 = tpsADCGauge
; gauge2 = MAFGauge
; gauge3 = pulseWidth1Gauge
; gauge4 = accelEnrichGauge
; gauge5 = cltGauge
; gauge6 = veGauge
; gauge7 = voltMeter
; gauge8 = mapGauge
; gauge5 = tpsADCGauge
; gauge4 = TargetAFRGauge
; gauge4 = batADCGauge
; gauge3 = mphGauge ; ONLY FOR USE WHEN VSS CONNECTED TO MS
; gauge3 = USgphGauge
; gauge3 = gphGauge
; gauge3 = USmpgGauge
; gauge3 = mpgGauge
; gauge4 = egtGauge
; gauge4 = fuelGauge
; gauge4 = throttleGauge
; gauge6 = matGauge
; gauge7 = KnockGauge
; gauge7 = pulseWidth2Gauge
; gauge7 = afrGauge
; gauge8 = dutyCycle2Gauge
; gauge8 = stackGauge ; CPU stack pointer, only useful for coders
; gauge8 = T2XGauge ; only useful for code testing
; These 3 are for the second lambda sensor. Remove ";" and re-number gauge
; gauge6 = afrGauge2
; gauge7 = pulseWidth2Gauge
; gauge8 = egoCorrGauge2
; Eliot Mansfield's boost and vacuum gauges.
; gauge7 = vacuumGauge
; gauge8 = boostgauge
; Decided to combine the Vacuum and Boost gauges into one
; gauge4 = VacBooGauge
; For testing only
; gauge8 = testGauge
; gauge8 = test2Gauge
; G FORCE GAUGES
; gauge7 = XGForceGauge
; gauge8 = YGForceGauge
; = expression, off-label, on-label, off-bg, off-fg, on-bg, on-fg
indicator = { porta & 0b00000001 }, "Fuel Pump Off", "Fuel Pump On", white, black, green, black
indicator = { porta & 0b00000010 }, "Fidle/Spark Off", "Fidle/Spark On", white, black, green, black
indicator = { porta & 0b00100000 }, "Fan/W Inj Off", "Fan/W Inj On", white, black, green, black
indicator = { porta & 0b00010000 }, "NOS/W Inj Off", "NOS/W Inj Pulsing", white, black, green, black
indicator = { porta & 0b00001000 }, "Output1/Boost Cont", "Output1/Boost Cont", white, black, green, black
indicator = { porta & 0b00000100 }, "Output2 Off", "Output2 On", white, black, green, black
indicator = { portd & 0b00000001 }, "Output3 Off", "Output3 On", white, black, green, black
indicator = { portc & 0b00000100 }, "Fan/Output4 Off", "Fan/Output4 On", white, black, green, black
indicator = { portd & 0b00001000 }, "Launch On", "Launch Off", red, black, white, black
indicator = { portd & 0b00000100 }, "Knocked", "No Knock", red, black, white, black
indicator = { portd & 0b00000010 }, "NOS/Tables On", "NOS/Tables Off", red, black, white, black
indicator = { floodclear && (( engine & 3 ) != 1) }, "", "FLOOD CLEAR", white, black, red, black
; indicator = { portc & 0b00010000 }, "Trig2", "Trig2", white, black, green, black
; indicator = { squirt & 0b01000000}, "BC ON", "BC OFF", white, black, green, black
;-------------------------------------------------------------------------------
[RunTime]
barHysteresis = 2.5 ; Seconds
#if CELSIUS
coolantBar = -40, 100
matBar = -40, 100
#else
coolantBar = -40, 215
matBar = -40, 215
#endif
batteryBar = 6, 15
dutyCycleBar = 0, 100
#if NARROW_BAND_EGO
egoBar = 0, 1.0
#else
egoBar = 0, 5.0
#endif
gammaEBar = 0, 200
mapBar = 0, 255
pulseWidthBar = 0, 25.5
rpmBar = 0, 8000
throttleBar = 0, 100
egoCorrBar = 0, 200
baroCorrBar = 0, 200
warmupCorrBar = 0, 200
airdenCorrBar = 0, 200
veCorrBar = 0, 200
accCorrBar = 0, 100
;-------------------------------------------------------------------------------
[Tuning]
#if NARROW_BAND_EGO
egoLEDs = 0.0, 1.0, 0.5 ; NB settings.
#else
; If you reverse these range values as you see below, then the LED
; bar will work as you expect, high on the right, low on the left.
egoLEDs = 4.0, 1.0, 2.5 ; WB settings.
#endif
font = "FixedSys", 14
spotDepth = 2 ; 0 = no indicators, 1 = Z only, 2 = XYZ indicators.
cursorDepth = 2 ; Same as spot depth.
;;gives error gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees.
; The four radio buttons on the tuning screen select a "page" of six
; gauges. The gauge numbering is the same as the front page, across
; then down.
; 1 2
; 3 4
; 5 6
;
; gaugeColumns allows you to hide or show gauges in column 2 (i.e.,
; gauges 2, 4 and 6).
gaugeColumns = 2 ; Only 1 or 2 are valid.
; Page 1 Page 2 Page 3 Page 4
pageButtons = "&EGO", "&WUE", "PW&1", "PW&2"
; gauge1 = tachometer, tachometer, tachometer, tachometer
gauge1 = RpmHiResGauge, RpmHiResGauge, RpmHiResGauge, RpmHiResGauge
gauge2 = mapGauge, mapGauge, mapGauge, mapGauge
; gauge3 = egoGauge, egoGauge, egoGauge, egoGauge
gauge3 = afrGauge, afrGauge, afrGauge, afrGauge
gauge4 = egoCorrGauge, warmupEnrichGauge, pulseWidth1Gauge, pulseWidth2Gauge
gauge5 = veBucketGauge, veBucketGauge, veBucketGauge, veBucketGauge
gauge6 = accelEnrichGauge, accelEnrichGauge, dutyCycle1Gauge, dutyCycle2Gauge
;-------------------------------------------------------------------------------
[OutputChannels]
deadValue = { 0 } ; Convenient unchanging value.
ochGetCommand = "R" ; was "a" and before that "A"
ochBlockSize = 39 ; was 38
secl = scalar, U08, 0, "sec", 1.000, 0.000
squirt = scalar, U08, 1, "bits", 1.000, 0.000
engine = scalar, U08, 2, "bits", 1.000, 0.000
baroADC = scalar, U08, 3, "ADC", 1.000, 0.000
mapADC = scalar, U08, 4, "ADC", 1.000, 0.000
matADC = scalar, U08, 5, "ADC", 1.000, 0.000
cltADC = scalar, U08, 6, "ADC", 1.000, 0.000
tpsADC = scalar, U08, 7, "ADC", 1.000, 0.000
batADC = scalar, U08, 8, "ADC", 1.000, 0.000
egoADC = scalar, U08, 9, "ADC", 1.000, 0.000
egoCorrection = scalar, U08, 10, "%", 1.000, 0.000
airCorrection = scalar, U08, 11, "%", 1.000, 0.000
warmupEnrich = scalar, U08, 12, "%", 1.000, 0.000
rpm100 = scalar, U08, 13, "r100", 1.000, 0.000
pulseWidth1 = scalar, U08, 14, "ms", 0.100, 0.000
accelEnrich = scalar, U08, 15, "mS", 1.000, 0.000
baroCorrection = scalar, U08, 16, "%", 1.000, 0.000
gammaEnrich = scalar, U08, 17, "%", 1.000, 0.000
veCurr1 = scalar, U08, 18, "%", 1.000, 0.000
pulseWidth2 = scalar, U08, 19, "ms", 0.100, 0.000
veCurr2 = scalar, U08, 20, "%", 1.000, 0.000
idleDC = scalar, U08, 21, "%", 1.000, 0.000
iTime = scalar, U16, 22, "s", 1.000, 0.000
advance = scalar, U08, 24, "deg", 1.000, 0.000
afrtarget = scalar, U08, 25, "ADC", 1.000, 0.000
fuelADC = scalar, U08, 26, "ADC", 1.000, 0.000 ; ADC from X7 (second O2 or fuel pressure)
egtADC = scalar, U08, 27, "ADC", 1.000, 0.000
CltIatAngle = scalar, U08, 28, "deg", 1.000, 0.000
KnockAngle = scalar, U08, 29, "deg", 1.000, 0.000
egoCorrection2 = scalar, U08, 30, "%", 1.000, 0.000 ; Second O2 sensor correction
porta = scalar, U08, 31, "", 1.000, 0 ; porta raw value
portb = scalar, U08, 32, "", 1.000, 0 ; portb raw value
portc = scalar, U08, 33, "", 1.000, 0 ; portc raw value
portd = scalar, U08, 34, "", 1.000, 0 ; portd raw value
stackL = scalar, U08, 35, "", 1.000, 0 ; low byte of stack
tpsLast = scalar, U08, 36, "", 1.000, 0 ; TPS last for Accel Wizard
iTimeX = scalar, U08, 37, "s", 1.000, 0.000
bcDC = scalar, U08, 38, "%", 0.3922, 0.000
accDecEnrich = { (engine & 0b00100000) ? 100 : ((pulseWidth-injOpen1) / (pulseWidth-(accelEnrich / 10)-injOpen1) * 100) }, "%" ; In percent, centered on 100% meaning no correction.
batteryVoltage = { batADC / 255.0 * 30.0 } ; Current MS power supply voltage.
coolant = { tempCvt(table(cltADC, "thermfactor.inc")-40) } ; Coolant sensor temperature in user units.
egoVoltage = { egoADC / 255.0 * 5.0 } ; EGO sensor voltage.
ego2Voltage = { fuelADC / 255.0 * 5.0 } ; EGO sensor voltage 2.
mat = { tempCvt(table(matADC, "matfactor.inc")-40) } ; Manifold temperature in user units.
rpm = { rpm100*100 } ; True RPM.
time = { timeNow } ; "timeNow" is a parameterless built-in function.
#if CELSIUS
egttemp = { egtADC * 3.90625 } ; Setup for converting 0-5V = 0 - 1000C
#else
egttemp = { egtADC * 7.15625 } ; Setup for converting 0-5V = 0 - 1832F
#endif
; Added for second O2 sensor
#if NARROW_BAND_EGO
afr2 = { table(fuelADC, "NBafr100.inc") / 100.0 }
lambda2 = { afr2 / 14.7 }
#elif ZEITRONIX_NON_LINEAR
lambda2 = { table(fuelADC, "WBafr100Zeit.inc") / 100.0 }
afr2 = { lambda * 14.7 }
#elif INNOVATE_LC1_DEFAULT
lambda2 = { fuelADC/255.0 + 0.5 }
afr2 = { lambda * 14.7 }
#else
lambda2 = { table(fuelADC, "WBlambda100MOT.inc") / 100.0 }
afr2 = { lambda2 * 14.7 }
#endif
#include "lambdaSensors.ini"
#if MPXH6300A
; barometer = { table(baroADC, "kpafactor4250.inc") }
barometer = { (baroADC + 1.53) * 1.213675 }
map = { (mapADC + 1.53) * 1.213675 }
#elif MPXH6400A
; barometer = { table(baroADC, "kpafactor4250.inc") }
barometer = { (baroADC + 2.147) * 1.6197783 }
map = { (mapADC + 2.147) * 1.6197783 }
#elif MPX4250
barometer = { table(baroADC, "kpafactor4250.inc") }
map = { table(mapADC, "kpafactor4250.inc") } ; Manifold pressure in kPa.
#else
barometer = { table(baroADC, "kpafactor4115.inc") }
map = { table(mapADC, "kpafactor4115.inc") }
#endif
throttle = { table(tpsADC, "throttlefactor.inc") }
advSpark = { (advance * 0.352)-10 }
; Enhanced Stuff
KnockAng = { (KnockAngle * 90 / 256) }
KnockDeg = { -KnockAng }
CltIatAng = { CltIatAngle * 90 / 256 }
CltIatDeg = { CltIatAng < 45? CltIatAng: -90 + CltIatAng } ; Coolant Iat added Angle
fuelvolt = { fuelADC < 1 ? 0.0 : fuelADC * (5/255) - 0.5 }
fuelpress = { fuelADC < 1 ? 0.0 : fuelvolt / 0.04 +1 }
altDiv1 = { alternate1 ? 2 : 1 }
altDiv2 = { alternate2 ? 2 : 1 }
cycleTime1 = { rpm < 100 ? 0 : 60000.0 / rpm * (2.0-twoStroke1) }
nSquirts1 = { nCylinders1/divider1 }
dutyCycle1 = { rpm < 100 ? 0 : 100.0*nSquirts1/altDiv1*pulseWidth1/cycleTime1 }
cycleTime2 = { rpm < 100 ? 0 : 60000.0 / rpm * (2.0-twoStroke2) }
nSquirts2 = { nCylinders2/divider2 }
dutyCycle2 = { rpm < 100 ? 0 : 100.0*nSquirts2/altDiv2*pulseWidth2/cycleTime2 }
; User defined Opening Time for Real Duty Cycle, enter your opening time and select gauge RealDuty1 or 2
Open_Time1 = {1.0}
Open_Time2 = {1.0}
InjectorRating1 = {100} ;Nom Injector flow rating Injector 1
InjectorRating2 = {100} ;Nom Injector flow rating Injector 2
dutyCy1Real = { rpm < 100 ? 0 : InjectorRating1*nSquirts1/altDiv1*(pulseWidth1-Open_Time1)/cycleTime1 }
dutyCy2Real = { rpm < 100 ? 0 : InjectorRating2*nSquirts2/altDiv2*(pulseWidth2-Open_Time2)/cycleTime2 }
; These next two are needed to make the runtime dialog look good.
veCurr = { veCurr1 }
pulseWidth = { pulseWidth1 }
; G FORCE DISPLAY Alter Values for XOffset and YOffset to get the G at zero when stationary
; this is to compensate for any tilting the chip has at rest.
YOffset = { 182 }
XOffset = { 187 }
YForce = { egtADC > YOffset + 1 ? (egtADC - YOffset) * 0.04464 : egtADC < YOffset - 1 ? (egtADC - YOffset) * 0.04464 : 0 } ; 1G = 312mV * 1.41 gain from amp = 440mV
XForce = { fuelADC > XOffset + 1 ? (fuelADC - XOffset) * 0.04464 : fuelADC < XOffset - 1 ? (fuelADC - XOffset) * 0.04464 : 0 } ; 1G = 312mV * 1.41 gain from amp = 440mV
; Test use only
test = { mapDOT }
test2 = { egtADC }
iTimefull = { (iTimeX*65536)+ iTime }
RpmHitmp = { iTimefull > 0 ? (60000000 *(2.0-twoStroke1)) / (iTimefull * nCylinders1) : 0 }
; get rid of the 1 or 2 rpm display that seems to worry some users
RpmHiRes = { RpmHitmp > 20 ? RpmHitmp : 0 }
; Vacuum and Boost Gauges
vacuum = { (barometer-map)*0.2953007 } ; Calculate vacuum in in-Hg.
boost = { map < barometer ? 0.0 : (map-barometer)*0.1450377 } ; Calculate boost in PSIG.
boostVac = { map < barometer ? -vacuum : (map-barometer)*0.1450377 }
; Speedo Gauge, when VSS connected to X6 and X7
;****************************************************************************
; CHANGE THESE TO SUIT YOUR CAR TO GET MPG, MPH, ETC. THIS WILL ONLY WORK WITH A SUITABLE
; VEHICLE SPEED SENSOR CONNECTED TO MSnS-EXTRA CODE.
Speed = { 70 } ; Change this to your actual speed @ 2.5V from VSS circuit
fuelCC = { 2168 } ; Enter the total flow for all your injectors here in cc/Min
;****************************************************************************
squirtmul = { divider1 < 2 ? 2 : divider1 < 3 ? 1 : divider1 < 5 ? 0.5 : divider1 < 9 ? 0.25 : divider1 < 17 ? 0.125 : 1 }
squirts = { alternate1 > 0 ? rpm100 / 0.6 * squirtmul : rpm100 * 2 * squirtmul / 0.6 } ; How many squirts per Sec
OpenWidth = { injOpen1 * 0.1 } ; Pulse width for injector opening time
CCpHr = { pulseWidth < 1 ? 1 : (fuelCC/60) * ((pulseWidth - OpenWidth)/1000) * squirts * 3600 } ; cc / hr
mphTemp = { fuelADC < 1 ? 0 : (fuelADC * Speed) /127.5 } ; MPH
mph = { mphTemp < 1 ? 0 : mphTemp } ; Ensure we get 0 mph
USgph = { CCpHr / 3785 } ; US Gallons / Hr
USmpg = { fuelADC < 1 ? 0 : mph < 1 ? 0 : mph / USgph } ; US Miles / Gallon
gph = { CCpHr / 4546 } ; Real Gallons / Hr
mpg = { fuelADC < 1 ? 0 : mph < 1 ? 0 : mph / gph } ; Real Miles / Gallon
;*****************************************************************************
; CHANGE THESE VALUES TO FIND THE APPROXIMATE BHP FOR YOUR ENGINE.
; CALCULATIONS WERE PROVIDED BY ERIC. THESE WILL ONLY WORK IF A SUITABLE VEHICLE SPEED
; SENSOR IS CONNECTED TO THE MSnS-EXTRA CODE. This is unfinished!
Cd = { 0.33 } ; Change this to your vehicle's Coefficient of Drag (0.25-1.0 for road vehicles)
Mass = { 1050 } ; Change this to your vehicle's weight in KGs.
Crr = { 18 } ; Change this to your vehicle's internal drive train loss. (8% for Nascar,
; diamond-like coating on gears to 25% for road car with automatic transmission)
Radius = { 16.15 } ; Change this to your vehicle's driven wheel radius in inch's
GrTms = { 0.88 } ; Ratio of the gear you want to test BHP in.
DiffRa = { 3.31 } ; Differential ratio
floodclear = { tpsADC > 200 ? 1 : 0 } ; For flood clear indicator on main screen
tpsDOTTY = { mapProportion4 ? 0 : (tpsADC - tpsLast) * 0.19 } ; * 0.019 / 0.1 to convert it to V from ADC and to 1Sec from 0.1Sec
mapDOTTY = { mapProportion4 ? (mapADC - tpsLast) / 0.1 : 0 } ; Divide by 0.1 to convert from 0.1Sec to 1Sec
tpsDOT = { tpsDOTTY < 0 ? 0 : tpsDOTTY } ; Only display positive or it gets confusing to read
mapDOT = { mapDOTTY < 0 ? 0 : mapDOTTY } ; Only display positive or it gets confusing to read
Timeroll = { portc & 0b00000100 }
waterIlog = { porta & 0b00010000 }
MAFVolts = { fuelADC * 0.0196078 }
;-------------------------------------------------------------------------------
[Datalog]
; Full datalog.
;
; Default user-defined log emulates the full datalog.
;
; The entries are saved in the datalog file in the order in
; which they appear in the list below.
;
; Channel - Case sensitive name of output channel to be logged.
; Label - String written to header line of log. Be careful
; about changing these, as programs like MSLVV and
; MSTweak key off specific column names.
; Type - Data type of output, converted before writing.
; Format - C-style output format of data.
;
; Channel Label Type Format
; -------------- ---------- ----- ------
;change the next line to #set if you still want to use the older logviewer
#unset MSLVV_COMPATIBLE
#if MSLVV_COMPATIBLE
entry = time, "Time", float, "%.3f"
entry = secl, "SecL", int, "%d"
entry = rpm100, "RPM", int, "%d"
entry = map, "MAP", int, "%d"
entry = throttle, "TP", int, "%d"
entry = egoVoltage, "O2", float, "%.3f"
entry = mat, "MAT", float, "%.1f"
entry = coolant, "CLT", float, "%.1f"
entry = engine, "Engine", int, "%d"
entry = egoCorrection, "Gego", int, "%d"
entry = airCorrection, "Gair", int, "%d"
entry = warmupEnrich, "Gwarm", int, "%d"
entry = baroCorrection, "Gbaro", int, "%d"
entry = gammaEnrich, "Gammae", int, "%d"
entry = accDecEnrich, "TPSacc", int, "%d"
entry = veCurr1, "Gve", int, "%d"
entry = pulseWidth1, "PW", float, "%.1f"
entry = veCurr2, "Gve2", int, "%d"
entry = pulseWidth2, "PW2", float, "%.1f"
entry = dutyCycle1, "DutyCycle1", float, "%.1f"
entry = dutyCycle2, "DutyCycle2", float, "%.1f"
; Last three are for MSLVV compatibility, but we dont use these, we use the
; three underneath.
entry = pulseWidth2, "UserData1", int, "%d"
entry = veCurr2, "UserData2", int, "%d"
entry = idleDC, "UserData3", int, "%d"
#else
; if using the newer log viewer we have no such limits on fields - so do lots
entry = time, "Time", float, "%.3f"
entry = secl, "SecL", int, "%d"
entry = rpm100, "RPM/100", int, "%d"
entry = map, "MAP", int, "%d"
entry = throttle, "TP", int, "%d"
entry = egoVoltage, "O2", float, "%.3f"
entry = mat, "MAT", float, "%.1f"
entry = coolant, "CLT", float, "%.1f"
entry = engine, "Engine", int, "%d"
entry = egoCorrection, "Gego", int, "%d"
entry = airCorrection, "Gair", int, "%d"
entry = warmupEnrich, "Gwarm", int, "%d"
entry = baroCorrection, "Gbaro", int, "%d"
entry = gammaEnrich, "Gammae", int, "%d"
entry = accDecEnrich, "TPSacc", int, "%d"
entry = veCurr1, "Gve", int, "%d"
entry = pulseWidth1, "PW", float, "%.1f"
entry = veCurr2, "Gve2", int, "%d"
entry = pulseWidth2, "PW2", float, "%.1f"
entry = dutyCycle1, "DutyCycle1", float, "%.1f"
entry = dutyCycle2, "DutyCycle2", float, "%.1f"
entry = pulseWidth2, "pulseWidth2", int, "%d"
entry = veCurr2, "veCurr22", int, "%d"
entry = idleDC, "idleDC", int, "%d"
entry = bcDC, "BCDuty3", int, "%d"
entry = advSpark, "Spark Angle", int, "%d"
entry = egttemp, "EGT", int, "%d"
entry = fuelpress, "Fuel Press", int, "%d"
entry = KnockDeg, "Knock", int, "%d"
entry = RpmHiRes, "RPM", int, "%d"
entry = barometer, "barometer", int, "%d"
entry = porta, "porta", int, "%d"
entry = portb, "portb", int, "%d"
entry = portc, "portc", int, "%d"
entry = portd, "portd", int, "%d"
; entry = XForce, "X GForce", float, "%.2f" ; X on X7
; entry = YForce, "Y GForce", float, "%.2f" ; Y on X6
; entry = MAFVolts, "MAF Volts", float, "%.2f" ; MAF on X7
; TEST ONLY - DONT USE
; entry = iTime, "iTime", int, "%d"
; entry = iTimeX, "iTimeX", int, "%d"
; entry = iTimefull, "iTimeFull", int, "%d"
#endif