mirror of https://github.com/rusefi/speeduino.git
1169 lines
66 KiB
INI
1169 lines
66 KiB
INI
;-------------------------------------------------------------------------------
|
||
|
||
[MegaTune]
|
||
MTversion = 2.25 ; MegaTune itself; needs to match exec version.
|
||
|
||
queryCommand = "Q"
|
||
signature = 20
|
||
|
||
;-------------------------------------------------------------------------------
|
||
|
||
[Constants]
|
||
|
||
;----------------------------------------------------------------------------
|
||
; Constants Definition
|
||
; --------------------
|
||
;
|
||
; Scalar Values
|
||
; -------------
|
||
; The scaling and translation values are used as follows:
|
||
; msValue = userValue / scale - translate
|
||
; userValue = (msValue + translate) * scale
|
||
;
|
||
;
|
||
; Temperatures are fine, check out the Fielding IAC example (fastIdleT).
|
||
;
|
||
; Array Values
|
||
; ------------
|
||
; Arrays are specified just like scalars, except that they have a "shape"
|
||
; entry in the fourth parameter. The shape allows you to define lists or
|
||
; tables, for example [8] defines a list with eight values and [2x4] defines
|
||
; a table with eight values (two rows and four columns). Tables may be
|
||
; stored in either "X-" or "Y-order." X-order means that memory is layed
|
||
; out like.
|
||
;
|
||
; [x1,y1] [x2,y1]...[xn,y1] [x1,y2]...
|
||
;
|
||
; Y-order would be
|
||
;
|
||
; [x1,y1] [x1,y2]...[x1,yn] [x2,y1]...
|
||
;
|
||
; To use the TableEditor, you must define two lists and a table, and
|
||
; the lengths of the lists must correspond to the shape of the table.
|
||
;
|
||
; Bit Fields
|
||
; ----------
|
||
; Bits are numbered 0-7, the rightmost being bit zero. The basic
|
||
; data word that stores bit fields must be unsigned.
|
||
;
|
||
; You need NOT supply the correct number of labels matching the
|
||
; number of bits you've specified (one bit requires 2 values, two
|
||
; bits requires 4 values and so on). If you neglect to supply enough
|
||
; labels, they will be synthesized using the sequence "1", "2" and so
|
||
; on based upon their position in the sequence (the cltType and matType
|
||
; will end up with identical lists).
|
||
;
|
||
; If you specify a label as "INVALID" (all upper case), then it will
|
||
; not be displayed in the combo box, so you can leave out values that
|
||
; make no sense.
|
||
;
|
||
;----------------------------------------------------------------------------
|
||
|
||
endianness = little
|
||
nPages = 7
|
||
burnCommand = "B"
|
||
; pageSize = 125
|
||
; pageSize = 128, 128, 128, 128
|
||
pageSize = 288, 64, 288, 64, 288, 64, 64
|
||
pageActivationDelay = 10
|
||
; pageActivate = ""
|
||
pageActivate = "P\001", "P\002", "P\003", "P\004", "P\005", "P\006", "P\007"
|
||
pageReadCommand = "V", "V", "V", "V", "V", "V", "V"
|
||
pageValueWrite = "W%2o%v", "W%o%v", "W%2o%v", "W%o%v", "W%2o%v", "W%o%v", "W%o%v"
|
||
;\x00%2
|
||
; pageChunkWrite = "" ; No chunk write for standard MS
|
||
|
||
;Page 1 is the fuel map and axis bins only
|
||
page = 1
|
||
; 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
|
||
veTable = array, U08, 0, [16x16],"%", 1.0, 0.0, 0.0, 255.0, 0
|
||
rpmBins = array, U08, 256, [ 16], "RPM", 100.0, 0.0, 100.0, 25500.0, 0
|
||
#if SPEED_DENSITY
|
||
mapBins = array, U08, 272, [ 16], "kPa", 1.0, 0.0, 0.0, 255.0, 0
|
||
#elif ALPHA_N
|
||
tpsBins = array, U08, 272, [ 16], "TPS", 1.0, 0.0, 0.0, 255.0, 0
|
||
#elif AIR_FLOW_METER
|
||
#error "Speeduino does not support MAF"
|
||
;#exit
|
||
#endif
|
||
|
||
|
||
;--------------------------------------------------
|
||
;Start Page 2
|
||
;Page 2 is all general settings (Previously part of page 1)
|
||
;--------------------------------------------------
|
||
page = 2
|
||
crankCold = scalar, U08, 0, "ms", 0.1, 0.0, 0.0, 25.5, 1
|
||
crankHot = scalar, U08, 1, "ms", 0.1, 0.0, 0.0, 25.5, 1
|
||
asePct = scalar, U08, 2, "%", 1.0, 0.0, 0.0, 95.0, 0
|
||
aseCount = scalar, U08, 3, "s", 1.0, 0.0, 0.0, 255, 0
|
||
wueBins = array, U08, 4, [ 10], "%", 1.0, 0.0, 0.0, 255, 0
|
||
crankingPct= scalar, U08, 14, "%", 1.0, 0.0, 0.0, 255, 0
|
||
pinLayout = bits, U08, 15, [0:7], "Speeduino v0.1", "Speeduino v0.2", "Speeduino v0.3", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "Turtana PCB", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "Plazomat I/O 0.1", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
|
||
unused16 = scalar, U08, 16, "ms", 0.1, 0.0, 0.0, 25.5, 1
|
||
tdePct = scalar, U08, 17, "ms", 0.1, 0.0, 0.0, 25.5, 1
|
||
taeColdA = scalar, U08, 18, "ms", 0.1, 0.0, 0.0, 25.5, 1
|
||
tpsThresh = scalar, U08, 19, "%/s", 1.0, 0.0, 0.0, 255, 0
|
||
taeTime = scalar, U08, 20, "ms", 10, 0.0, 0.0, 2550, 0
|
||
|
||
; Display (Options for what the display is showing)
|
||
display = bits, U08, 21, [0:2], "Unused", "Adafruit 128x32", "Generic 128x32", "Adafruit 128x64", "Generic 128x64", "INVALID", "INVALID", "INVALID"
|
||
display1 = bits U08, 21, [3:5], "RPM", "PW", "Advance", "VE", "GammaE", "TPS", "IAT", "CLT"
|
||
display2 = bits U08, 21, [6:7], "O2", "Voltage", "CPU", "Mem"
|
||
|
||
display3 = bits U08, 22, [0:2], "RPM", "PW", "Advance", "VE", "GammaE", "TPS", "IAT", "CLT"
|
||
display4 = bits U08, 22, [3:4], "O2", "Voltage", "CPU", "Mem"
|
||
display5 = bits U08, 22, [5:7], "RPM", "PW", "Advance", "VE", "GammaE", "TPS", "IAT", "CLT"
|
||
|
||
displayB1 = bits U08, 23, [0:3], "RPM", "PW", "Advance", "VE", "GammaE", "TPS", "IAT", "CLT"
|
||
displayB2 = bits U08, 23, [4:7], "RPM", "PW", "Advance", "VE", "GammaE", "TPS", "IAT", "CLT"
|
||
|
||
reqFuel = scalar, U08, 24, "ms", 0.1, 0.0, 0.0, 25.5, 1
|
||
divider = scalar, U08, 25, "", 1.0, 0.0
|
||
alternate = bits, U08, 26, [0:0], "Simultaneous", "Alternating"
|
||
injOpen = scalar, U08, 27, "ms", 0.1, 0.0, 0.1, 25.5, 1
|
||
inj1Ang = scalar, U16, 28, "deg", 1.0, 0.0, 0.0, 360, 0
|
||
inj2Ang = scalar, U16, 30, "deg", 1.0, 0.0, 0.0, 360, 0
|
||
inj3Ang = scalar, U16, 32, "deg", 1.0, 0.0, 0.0, 360, 0
|
||
inj4Ang = scalar, U16, 34, "deg", 1.0, 0.0, 0.0, 360, 0
|
||
|
||
; Config1
|
||
mapType = bits, U08, 36, [0:1], "115 kPa", "250 kPa", "INVALID", "INVALID"
|
||
twoStroke = bits, U08, 36, [2:2], "Four-stroke", "Two-stroke"
|
||
injType = bits, U08, 36, [3:3], "Port", "Throttle Body"
|
||
nCylinders = bits, U08, 36, [4:8], "INVALID","1","2","3","4","INVALID","6","INVALID","8","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID"
|
||
|
||
; Config2
|
||
cltType = bits, U08, 37, [0:1], "GM", "Unknown1", "Unknown2", "Unknown3"
|
||
matType = bits, U08, 37, [2:3], "GM", "Unknown1", "Unknown2", "Unknown3"
|
||
nInjectors = bits, U08, 37, [4:7+1]
|
||
|
||
; Config3
|
||
engineType = bits, U08, 38, [0:0], "Even fire", "Odd fire"
|
||
egoType1 = bits, U08, 38, [1:1], "Narrow band", "Wide band"
|
||
algorithm = bits, U08, 38, [2:2], "Speed Density", "Alpha-N"
|
||
baroCorr = bits, U08, 38, [3:3], "Off", "On"
|
||
injTiming = bits, U08, 38, [4:5], "Bank", "Semi-Sequential", "INVALID", "INVALID"
|
||
|
||
primePulse = scalar, U08, 39, "ms", 0.1, 0.0, 0.0, 25.5, 1
|
||
dutyLim = scalar, U08, 40, "%", 1.0, 0.0, 0.0, 100.0, 0
|
||
unused41 = scalar, U08, 41, "RPM", 100.0, 0.0, 100, 25500, 0
|
||
egoSwitch = scalar, U08, 42, "v", 0.0196, 0.0, 0.0, 5.0, 3
|
||
taeColdM = scalar, U08, 43, "%", 1.0, 0.0, 0.0, 250.0, 0
|
||
tpsMin = scalar, U08, 44, "ADC", 1.0, 0.0, 0.0, 255.0, 0
|
||
tpsMax = scalar, U08, 45, "ADC", 1.0, 0.0, 0.0, 255.0, 0
|
||
unused46 = scalar, U08, 46, "RPM", 100.0, 0.0, 100, 25500, 0
|
||
unused47 = scalar, U08, 47, "RPM", 100.0, 0.0, 100, 25500, 0
|
||
unused48 = scalar, U08, 48, "RPM", 100.0, 0.0, 100, 25500, 0
|
||
unused49 = scalar, U08, 49, "RPM", 100.0, 0.0, 100, 25500, 0
|
||
unused50 = scalar, U08, 50, "RPM", 100.0, 0.0, 100, 25500, 0
|
||
unused51 = scalar, U08, 51, "RPM", 100.0, 0.0, 100, 25500, 0
|
||
unused52 = scalar, U08, 52, "RPM", 100.0, 0.0, 100, 25500, 0
|
||
unused53 = scalar, U08, 53, "RPM", 100.0, 0.0, 100, 25500, 0
|
||
unused54 = scalar, U08, 54, "RPM", 100.0, 0.0, 100, 25500, 0
|
||
unused55 = scalar, U08, 55, "RPM", 100.0, 0.0, 100, 25500, 0
|
||
unused56 = scalar, U08, 56, "RPM", 100.0, 0.0, 100, 25500, 0
|
||
unused57 = scalar, U08, 57, "RPM", 100.0, 0.0, 100, 25500, 0
|
||
unused58 = scalar, U08, 58, "RPM", 100.0, 0.0, 100, 25500, 0
|
||
unused59 = scalar, U08, 59, "RPM", 100.0, 0.0, 100, 25500, 0
|
||
unused60 = scalar, U08, 60, "RPM", 100.0, 0.0, 100, 25500, 0
|
||
unused61 = scalar, U08, 61, "RPM", 100.0, 0.0, 100, 25500, 0
|
||
unused62 = scalar, U08, 62, "RPM", 100.0, 0.0, 100, 25500, 0
|
||
unused63 = scalar, U08, 63, "RPM", 100.0, 0.0, 100, 25500, 0
|
||
|
||
;--------------------------------------------------
|
||
;Start Ignition table (Page 3)
|
||
;--------------------------------------------------
|
||
page = 3
|
||
advTable1 = array, U08, 0,[16x16], "deg", 1.0, 0.0, 0.0, 255.0, 0
|
||
rpmBins2 = array, U08, 256,[ 16], "RPM", 100.0, 0.0, 100, 25500, 0
|
||
|
||
#if SPEED_DENSITY
|
||
mapBins2 = array, U08, 272, [ 16], "kPa", 1.0, 0.0, 0.0, 255.0, 0
|
||
#elif ALPHA_N
|
||
tpsBins2 = array, U08, 272, [ 16], "TPS", 1.0, 0.0, 0.0, 255.0, 0
|
||
#elif AIR_FLOW_METER
|
||
#error "Speeduino does not support MAF"
|
||
#exit
|
||
#endif
|
||
|
||
;--------------------------------------------------
|
||
;Start Page 4
|
||
;These are primarily ignition related settings (Previously part of page 2)
|
||
;--------------------------------------------------
|
||
page = 4
|
||
TrigAng = scalar, S16, 0, "Deg", 1, 0, 0, 360, 0
|
||
FixAng = scalar, U08, 2, "Deg", 1, 0, 0, 80, 0
|
||
CrankAng = scalar, U08, 3, "Deg", 1, -28.4, -10, 80, 0
|
||
IgHold = scalar, U08, 4, "", 1, 0, 0, 100, 0
|
||
TrigEdge = bits, U08, 5[0:0], "Leading", "Trailing"
|
||
TrigSpeed = bits, U08, 5[1:1], "Crank Speed", "Cam Speed"
|
||
IgInv = bits, U08, 5[2:2], "No", "Yes"
|
||
oddfire = bits, U08, 5[3:3], "No", "Yes"
|
||
TrigPattern= bits, U08, 5[4:7], "Missing Tooth", "Basic Distributor", "Dual Wheel", "GM 7X", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
|
||
IdleAdv = scalar, U08, 6, "Deg", 0.352,-28.4, -10, 80, 0
|
||
IdleAdvTPS = scalar, U08, 7, "ADC", 1, 0, 0, 255, 0
|
||
IdleAdvRPM = scalar, U08, 8, "RPM", 100, 0, 0, 1200, 0
|
||
#if CELSIUS
|
||
IdleAdvCLT = scalar, U08, 9, "C", 0.555, -72, -40, 102, 1
|
||
#else
|
||
IdleAdvCLT = scalar, U08, 9, "F", 1, -40, -40, 215, 0
|
||
#endif
|
||
IdleDelayTime = scalar, U08, 10, "sec", 1, 0, 0, 5, 0
|
||
StgCycles = scalar, U08, 11, "cycles", 1, 0, 0, 255, 0
|
||
|
||
; name = array, type, offset, shape, units, scale, translate, lo, hi, digits
|
||
; name = scalar, type, offset, units, scale, translate, lo, hi, digits
|
||
;Dwell control
|
||
;running dwell variable railed to 8 - who needs more than 8ms?
|
||
dwellcont = bits, U08, 12, [1:1], "Fixed duty*^", "Dwell control"
|
||
dwellcrank = scalar, U08, 13, "ms", 0.1, 0, 0, 25, 1
|
||
dwellrun = scalar, U08, 14, "ms", 0.1, 0, 0, 8, 1
|
||
numteeth = scalar, U08, 15, "teeth", 1.0, 0.0, 0.0, 255, 0
|
||
onetwo = scalar, U08, 16, "teeth", 1.0, 0.0, 0.0, 255, 0
|
||
|
||
crankRPM = scalar, U08, 17, "rpm", 100, 0.0, 100, 1000, 0
|
||
tpsflood = scalar, U08, 18, "%", 1.0, 0.0, 0.0, 255.0, 0
|
||
|
||
;Rev Limits
|
||
SoftRevLim = scalar, U08, 19, "rpm", 100, 0.0, 100, 25500, 0
|
||
SoftLimRetard = scalar, U08, 20, "deg", 1.0, 0.0, 0.0, 80, 0
|
||
SoftLimMax = scalar, U08, 21, "s", 0.1, 0.0, 0.0, 25.5, 1
|
||
HardRevLim = scalar, U08, 22, "rpm", 100, 0.0, 100, 25500, 0
|
||
|
||
;TPS based acceleration enrichment
|
||
taeBins = array, U08, 23, [ 4], "%/s", 10.0, 0.00000, 0.00, 2550.0, 0
|
||
taeRates = array, U08, 27, [ 4], "%", 1.0, 0.00000, 0.00, 255.0, 0 ; 4 bytes
|
||
wueRates = array, U08, 31, [10], "C", 1.0, 0.0, 100.0, 255.0, 0
|
||
;Dwell config options
|
||
dwellLim = scalar, U08, 41, "ms", 1, 0, 0, 32, 0
|
||
dwellRates = array, U08, 42, [6], "%", 1.0, 0.0, 0.00, 255.0, 0
|
||
|
||
unused48 = scalar, U08, 48, "RPM", 100.0, 0.0, 100, 25500, 0
|
||
unused49 = scalar, U08, 49, "RPM", 100.0, 0.0, 100, 25500, 0
|
||
unused50 = scalar, U08, 50, "RPM", 100.0, 0.0, 100, 25500, 0
|
||
unused51 = scalar, U08, 51, "RPM", 100.0, 0.0, 100, 25500, 0
|
||
unused52 = scalar, U08, 52, "RPM", 100.0, 0.0, 100, 25500, 0
|
||
unused53 = scalar, U08, 53, "RPM", 100.0, 0.0, 100, 25500, 0
|
||
unused54 = scalar, U08, 54, "RPM", 100.0, 0.0, 100, 25500, 0
|
||
unused55 = scalar, U08, 55, "RPM", 100.0, 0.0, 100, 25500, 0
|
||
unused56 = scalar, U08, 56, "RPM", 100.0, 0.0, 100, 25500, 0
|
||
unused57 = scalar, U08, 57, "RPM", 100.0, 0.0, 100, 25500, 0
|
||
unused58 = scalar, U08, 58, "RPM", 100.0, 0.0, 100, 25500, 0
|
||
unused59 = scalar, U08, 59, "RPM", 100.0, 0.0, 100, 25500, 0
|
||
unused60 = scalar, U08, 60, "RPM", 100.0, 0.0, 100, 25500, 0
|
||
unused61 = scalar, U08, 61, "RPM", 100.0, 0.0, 100, 25500, 0
|
||
unused62 = scalar, U08, 62, "RPM", 100.0, 0.0, 100, 25500, 0
|
||
unused63 = scalar, U08, 63, "RPM", 100.0, 0.0, 100, 25500, 0
|
||
|
||
|
||
;--------------------------------------------------
|
||
;Start AFR page
|
||
;--------------------------------------------------
|
||
page = 5
|
||
afrTable = array, U08, 0,[16x16], "AFR", 0.1, 0.0, 7, 25.5, 1
|
||
rpmBinsAFR = array, U08, 256,[ 16], "RPM", 100.0, 0.0, 100, 25500, 0
|
||
#if SPEED_DENSITY
|
||
mapBinsAFR = array, U08, 272,[ 16], "kPa", 1.0, 0.0, 0.0, 255.0, 0
|
||
#elif ALPHA_N
|
||
tpsBinsAFR = array, U08, 272,[ 16], "TPS", 1.0, 0.0, 0.0, 255.0, 0
|
||
#elif AIR_FLOW_METER
|
||
#error "Speeduino does not support MAF"
|
||
#exit
|
||
#endif
|
||
|
||
;--------------------------------------------------
|
||
;Start page 6
|
||
; Page 6 is all settings associated with O2/AFR
|
||
;--------------------------------------------------
|
||
page = 6
|
||
egoAlgorithm= bits , U08, 0, [0:1], "Simple", "INVALID", "PID", "No correction" ; * ( 1 byte)
|
||
egoType = bits , U08, 0, [2:3], "Disabled", "Narrow Band", "Wide Band", "INVALID" ; egoOption
|
||
egoKP = scalar, U08, 1, "%", 1.0, 0.0, 0.0, 200.0, 0 ; * ( 1 byte)
|
||
egoKI = scalar, U08, 2, "%", 1.0, 0.0, 0.0, 200.0, 0 ; * ( 1 byte)
|
||
egoKD = scalar, U08, 3, "%", 1.0, 0.0, 0.0, 200.0, 0 ; * ( 1 byte)
|
||
#if CELSIUS
|
||
egoTemp = scalar, U08, 4, "<22>C", 0.555, -72, -40, 102.0, 0
|
||
#else
|
||
egoTemp = scalar, U08, 4, "<22>F", 1.0, -40, -40, 215.0, 0
|
||
#endif
|
||
egoCount = scalar, U08, 5, "", 4.0, 0.0, 4.0, 255.0, 0 ; * ( 1 byte)
|
||
egoDelta = scalar, U08, 6, "%", 1.0, 0.0, 0.0, 255.0, 0 ; * ( 1 byte)
|
||
egoLimit = scalar, U08, 7, "", 1, 0, 0, 16, 0
|
||
ego_min = scalar, U08, 8, "AFR", 0.1, 0.0, 7, 25, 1
|
||
ego_max = scalar, U08, 9, "AFR", 0.1, 0.0, 7, 25, 1
|
||
ego_sdelay = scalar, U08, 10, "sec", 1, 0, 0, 120, 0
|
||
egoRPM = scalar, U08, 11, "rpm", 100, 0.0, 100, 25500, 0
|
||
egoTPSMax = scalar, U08, 12, "%", 1, 0, 0, 120, 0
|
||
egoLoadMax = scalar, U08, 13, "%", 1, 0, 0, 120, 0
|
||
egoLoadMin = scalar, U08, 14, "%", 1, 0, 0, 120, 0
|
||
brvBins = array, U08, 15, [6], "V", 0.1, 0, 6, 24, 1 ; Bins for the battery reference voltage
|
||
injBatRates = array, U08, 21, [6], "%", 1, 0, 0, 255, 0 ;Values for injector pulsewidth vs voltage
|
||
airDenBins = array, U08, 27, [9], "C", 1.0, -40, -40, 215, 0 ; Bins for the air density correction curve
|
||
airDenRates = array, U08, 36, [9], "%", 1.0, 0.0, 0, 255, 0 ; Values for the air density correction curve
|
||
unused45 = scalar, U08, 45, "RPM", 100.0, 0.0, 100, 25500, 0
|
||
unused46 = scalar, U08, 46, "RPM", 100.0, 0.0, 100, 25500, 0
|
||
unused47 = scalar, U08, 47, "RPM", 100.0, 0.0, 100, 25500, 0
|
||
unused48 = scalar, U08, 48, "RPM", 100.0, 0.0, 100, 25500, 0
|
||
unused49 = scalar, U08, 49, "RPM", 100.0, 0.0, 100, 25500, 0
|
||
unused50 = scalar, U08, 50, "RPM", 100.0, 0.0, 100, 25500, 0
|
||
unused51 = scalar, U08, 51, "RPM", 100.0, 0.0, 100, 25500, 0
|
||
unused52 = scalar, U08, 52, "RPM", 100.0, 0.0, 100, 25500, 0
|
||
unused53 = scalar, U08, 53, "RPM", 100.0, 0.0, 100, 25500, 0
|
||
unused54 = scalar, U08, 54, "RPM", 100.0, 0.0, 100, 25500, 0
|
||
unused55 = scalar, U08, 55, "RPM", 100.0, 0.0, 100, 25500, 0
|
||
unused56 = scalar, U08, 56, "RPM", 100.0, 0.0, 100, 25500, 0
|
||
unused57 = scalar, U08, 57, "RPM", 100.0, 0.0, 100, 25500, 0
|
||
unused58 = scalar, U08, 58, "RPM", 100.0, 0.0, 100, 25500, 0
|
||
unused59 = scalar, U08, 59, "RPM", 100.0, 0.0, 100, 25500, 0
|
||
unused60 = scalar, U08, 60, "RPM", 100.0, 0.0, 100, 25500, 0
|
||
unused61 = scalar, U08, 61, "RPM", 100.0, 0.0, 100, 25500, 0
|
||
unused62 = scalar, U08, 62, "RPM", 100.0, 0.0, 100, 25500, 0
|
||
unused63 = scalar, U08, 63, "RPM", 100.0, 0.0, 100, 25500, 0
|
||
|
||
;--------------------------------------------------
|
||
;Start idle control (Page 7
|
||
;--------------------------------------------------
|
||
page = 7
|
||
iacCLValues = array, U08, 0, [10], "RPM", 1.0, 0.0, 100.0, 255, 0
|
||
iacOLStepVal = array, U08, 10, [10], "Steps", 1.0, 0, 0, 255, 0
|
||
iacOLPWMVal = array, U08, 20, [10], "Duty %", 1.0, 0, 0, 100, 0
|
||
iacBins = array, U08, 30, [10], "C", 1.0, -40, -40, 215, 0
|
||
iacCrankSteps= array, U08, 40, [4], "Steps", 1.0, 0, 0, 255, 0
|
||
iacCrankDuty = array, U08, 44, [4], "Duty %", 1.0, 0, 0, 100, 0
|
||
iacCrankBins = array, U08, 48, [4], "C", 1.0, -40, -40, 215, 0
|
||
|
||
iacAlgorithm = bits , U08, 52, [0:2], "None", "On/Off", "PWM", "PWM Closed Loop", "Stepper", "Stepper Closed Loop"
|
||
iacStepTime = bits , U08, 52, [3:5], "1", "2", "3", "4", "5", "6"
|
||
unused52 = bits , U08, 52, [6:7], "One", "INVALID", "INVALID", "INVALID"
|
||
|
||
#if CELSIUS
|
||
iacFastTemp = scalar, U08, 53, "C", 1.0, -40, -40, 215, 0
|
||
#else
|
||
iacFastTemp = scalar, U08, 53, "F", 1.0, -40, -40, 215, 0
|
||
#endif
|
||
|
||
iacStepHome = scalar, U08, 54, "Steps", 1.0, 0, 0, 255, 0
|
||
iacStepHyster= scalar, U08, 54, "C", 0.1, 0.0, 0.0, 25.5, 1
|
||
|
||
|
||
;-------------------------------------------------------------------------------
|
||
|
||
[ConstantsExtensions]
|
||
requiresPowerCycle = nCylinders
|
||
requiresPowerCycle = pinLayout
|
||
requiresPowerCycle = reqFuel
|
||
requiresPowerCycle = numteeth
|
||
requiresPowerCycle = onetwo
|
||
requiresPowerCycle = injOpen
|
||
requiresPowerCycle = IgInv
|
||
|
||
defaultValue = pinLayout, 1
|
||
defaultValue = TrigPattern, 0
|
||
defaultValue = inj1Ang, 355
|
||
defaultValue = inj2Ang, 355
|
||
defaultValue = inj3Ang, 355
|
||
defaultValue = inj4Ang, 355
|
||
defaultValue = dutyLim, 100
|
||
|
||
[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.
|
||
;
|
||
; There are four special menu names, which when used append to the standard
|
||
; menus of the same name instead of creating a new one. The menu names
|
||
; are "File", "Communications", "Tools" and "Help".
|
||
;
|
||
;----------------------------------------------------------------------------
|
||
|
||
menu = "&Settings"
|
||
;subMenu = std_injection, "&Constants"
|
||
subMenu = engine_constants, "Engine Constants"
|
||
subMenu = injChars, "Injector Characteristics"
|
||
subMenu = triggerSettings, "&Trigger Setup"
|
||
subMenu = OLED, "OLED Setup"
|
||
subMenu = airdensity_curve, "IAT Density"
|
||
|
||
menu = "&Tuning"
|
||
subMenu = std_realtime, "&Realtime Display"
|
||
subMenu = accelEnrichments, "&Acceleration Wizard"
|
||
subMenu = egoControl, "AFR/O2", 3
|
||
subMenu = RevLimiterS, "Rev Limits", 2
|
||
subMenu = veTable1Tbl, "&VE Table", 0
|
||
subMenu = sparkTbl, "&Spark Table", 2
|
||
subMenu = afrTable1Tbl, "A&FR Table", 5
|
||
|
||
|
||
menu = "&Spark"
|
||
subMenu = sparkSettings, "&Spark Settings"
|
||
subMenu = sparkTbl, "Spark Table", 2
|
||
;subMenu = IdleAdvance, "Idle Advance settings",
|
||
;subMenu = Knock, "Kn&ock System"
|
||
;subMenu = IatCltIg, "&IAT/Clt Related Ignition"
|
||
subMenu = dwellSettings, "Dwell settings"
|
||
subMenu = dwell_correction_curve, "Dwell Compensation"
|
||
;subMenu = wheelsim, "Stim for wheel"
|
||
;subMenu = oddwheel, "Oddfire Wheel settings", 7, { wheelon && oddfire }
|
||
|
||
menu = "&Starting/Idle"
|
||
subMenu = crankPW, "Cranking Settings"
|
||
subMenu = std_warmup, "&Warmup Enrichment"
|
||
subMenu = std_separator
|
||
;subMenu = idleSettings, "Idle Control"
|
||
subMenu = iacPwm_curve, "PWM Duty Cycle"
|
||
subMenu = iacPwmCrank_curve, "PWM Cranking Duty Cycle"
|
||
|
||
menuDialog = main
|
||
menu = "T&ools"
|
||
;subMenu = sensorCal, "Calibrate MAP/Baro"
|
||
;subMenu = battcalib, "Calibrate Battery Voltage"
|
||
;subMenu = std_separator ;----------------------------------------------
|
||
;subMenu = flash_unlock, "Un/Lock calibrations"
|
||
subMenu = std_ms2gentherm, "Calibrate T&hermistor Tables", 0 ;, {flashlock}
|
||
subMenu = std_ms2geno2, "Calibrate &AFR Table", 0;, {flashlock}
|
||
|
||
menuDialog = main
|
||
menu = "3D &Tuning Maps"
|
||
subMenu = veTable1Map, "Fuel Table"
|
||
subMenu = sparkMap, "Spark Table", 3
|
||
subMenu = afrTable1Map, "AFR Target Table"
|
||
|
||
;-------------------------------------------------------------------------------
|
||
|
||
[UserDefined]
|
||
; define a MegaTune compatible version here
|
||
; no need to for std_enrichments, it is built in.
|
||
|
||
|
||
[UserDefinedTS]
|
||
; Enhanced TunerStudio dialogs can be defined here
|
||
; MegaTune will over look this section
|
||
; These dialogs will over-ride those in the UserDefined Section
|
||
; User defined ar loaded first, then if one by the same name is defiend here,
|
||
; it will replace the MegaTune definition
|
||
|
||
; dialog = name, Title, Layout
|
||
;
|
||
; valid options for layout are xAxis, yAxis, border
|
||
; for an xAxis, each field added will be added from right to left
|
||
; A yAxis layout will add fields from top to bottom
|
||
; A border layout will expect an additional constraint to determine placement
|
||
; valid border constraints are north, South, East, West, Center
|
||
; all 5 do not need to be filled.
|
||
|
||
; The field name can be either a constant reference, or a reference to another
|
||
; dialog which will be added.
|
||
; dialogs can be nested and can be mixed with fields
|
||
|
||
dialog = engine_constants_south
|
||
field = "Injector Timing", injTiming, { nCylinders <= 4 }
|
||
field = "Board Layout", pinLayout
|
||
|
||
dialog = engine_constants, ""
|
||
panel = std_injection, North
|
||
panel = engine_constants_south, South
|
||
|
||
|
||
dialog = accelEnrichments_south, ""
|
||
field = "TPSdot Threshold", tpsThresh
|
||
field = "Accel Time", taeTime
|
||
; field = "Cold Accel Enrichment", taeColdA
|
||
; field = "Cold Accel Mult", taeColdM
|
||
field = "Decel Fuel Amount", tdePct
|
||
|
||
dialog = accelEnrichments_north, "", xAxis
|
||
panel = time_accel_tpsdot_curve
|
||
;panel = time_accel_tpsdot_tbl
|
||
|
||
dialog = accelEnrichments, "Acceleration Enrichment"
|
||
panel = accelEnrichments_north, North
|
||
panel = accelEnrichments_south, South
|
||
|
||
dialog = injChars, "Injector Characteristics"
|
||
field = "Injector Open Time", injOpen
|
||
field = "Injector close times"
|
||
field = "Channel 1", inj1Ang
|
||
field = "Channel 2", inj2Ang, { nCylinders > 1 }
|
||
field = "Channel 3", inj3Ang, { nCylinders > 4 || nCylinders == 3 }
|
||
field = "Channel 4", inj4Ang, { nCylinders > 6 }
|
||
field = "Injector Duty Limit", dutyLim
|
||
panel = injector_voltage_curve
|
||
|
||
dialog = egoControl, ""
|
||
field = "Sensor Type", egoType
|
||
field = "Algorithm", egoAlgorithm, { egoType }
|
||
field = "Ignition Events per Step", egoCount, { egoType && (egoAlgorithm < 3) }
|
||
field = "Controller Step Size", egoDelta, { egoType && (egoAlgorithm == 0) }
|
||
field = "Controller Auth +/-", egoLimit, { egoType && (egoAlgorithm < 3) }
|
||
field = "Only correct above:", ego_min, { egoType && (egoAlgorithm < 3) }
|
||
field = "and correct below:", ego_max, { egoType && (egoAlgorithm < 3) }
|
||
|
||
field = "Active Above Coolant", egoTemp, { egoType && (egoAlgorithm < 3) }
|
||
field = "Active Above RPM", egoRPM, { egoType && (egoAlgorithm < 3) }
|
||
field = "Active Below TPS", egoTPSMax, { egoType && (egoAlgorithm < 3) }
|
||
field = "Active Below Load", egoLoadMax, { egoType && (egoAlgorithm < 3) }
|
||
field = "Active Above Load", egoLoadMin, { egoType && (egoAlgorithm < 3) }
|
||
field = "EGO delay after start", ego_sdelay, { (egoAlgorithm < 3) }
|
||
field = "PID Proportional Gain", egoKP, { egoType && (egoAlgorithm == 2) }
|
||
field = "PID Integral", egoKI, { egoType && (egoAlgorithm == 2) }
|
||
field = "PID Derivative", egoKD, { egoType && (egoAlgorithm == 2) }
|
||
|
||
|
||
dialog = crankPW, "Cranking Pulsewidths (ms)"
|
||
#if CELSIUS
|
||
field = "Cranking RPM (Max)", crankRPM
|
||
field = "Flood Clear level", tpsflood
|
||
field = ""
|
||
field = "Priming Pulsewidth", primePulse
|
||
field = "Pulsewidth at -40<34>C", crankCold
|
||
field = "Pulsewidth at 77<37>C", crankHot
|
||
field = ""
|
||
field = "Cranking Enrichment %", crankingPct
|
||
#else
|
||
field = "Cranking RPM (Max)", crankRPM
|
||
field = "Flood Clear level", tpsflood
|
||
field = ""
|
||
field = "Priming Pulsewidth", primePulse
|
||
field = "Pulsewidth at -40<34>F", crankCold
|
||
field = "Pulsewidth at 170<37>F", crankHot
|
||
field = ""
|
||
field = "Cranking Enrichment %", crankingPct
|
||
#endif
|
||
|
||
dialog = aseSettings, "Afterstart Enrichment"
|
||
field = "Enrichment %", asePct
|
||
field = "Number of Sec to run", aseCount
|
||
|
||
|
||
;dialog = egoSettings, "Exhaust Gas Oxygen"
|
||
;field = "EGO Sensor Type", egoType
|
||
;field = "EGO Switch Point (v)", egoSwitch
|
||
;field = "Coolant Temp Activation", egoTemp
|
||
;field = "Ignition Events Per Step", egoCount
|
||
;field = "EGO Step", egoDelta
|
||
;field = "EGO <20> Limit", egoLimit
|
||
;field = "EGO Active Above", egoRPM
|
||
|
||
dialog = triggerSettings,"Trigger Settings",4
|
||
topicHelp = Shelp3
|
||
field = "Trigger Pattern", TrigPattern
|
||
field = "Primary base teeth", numteeth, { TrigPattern != 1 }
|
||
field = "Primary trigger speed", TrigSpeed, { TrigPattern != 1 }
|
||
field = "Missing teeth", onetwo, { TrigPattern == 0 }
|
||
field = "Secondary teeth", onetwo, { TrigPattern == 2 }
|
||
field = "Trigger Angle ", TrigAng
|
||
field = "This number represents the angle ATDC when "
|
||
field = "tooth #1 passes the primary sensor."
|
||
field = ""
|
||
field = "Skip Revolutions", StgCycles
|
||
field = "Note: This is the number of revolutions that will be skipped during"
|
||
field = "cranking before the injectors and coils are fired"
|
||
field = "Trigger edge", TrigEdge
|
||
|
||
dialog = sparkSettings,"Spark Settings",4
|
||
topicHelp = Shelp3
|
||
field = "Cranking advance Angle", CrankAng
|
||
;field = "Hold Ignition", IgHold
|
||
field = "Spark Output Inverted (see F1)", IgInv
|
||
field = ""
|
||
field = "Fixed Angle (0 = use map)", FixAng
|
||
;field = "Trim Angle", Trim
|
||
|
||
dialog = dwellSettings, "Dwell Settings", 4
|
||
topicHelp = DwellHelp
|
||
field = "Dwell control", dwellcont
|
||
field = "Or:"
|
||
field = " Cranking dwell", dwellcrank, { dwellcont }
|
||
field = " Running dwell", dwellrun, { dwellcont }
|
||
;field = "Minimum discharge period", mindischg, { dwellcont }
|
||
field = ""
|
||
field = "#Note"
|
||
field = "The above times are for 12V. Voltage correction"
|
||
field = "is applied. At higher voltages the time is reduced"
|
||
field = "and when low it is increased"
|
||
field = ""
|
||
field = "Overdwell protection"
|
||
field = "Max dwell time", dwellLim
|
||
field = "Note: Set the maximum dwell time at least 3ms above"
|
||
field = "your desired dwell time (Including cranking)"
|
||
|
||
dialog = RevLimiterS, "Rev Limiter", 4
|
||
topicHelp = Fhelp7
|
||
field = "Rev Limiter"
|
||
field = "Soft rev limit", SoftRevLim
|
||
field = "Soft limit absolute timing", SoftLimRetard
|
||
field = "Soft limit max time", SoftLimMax
|
||
field = "Hard Rev limit", HardRevLim
|
||
|
||
dialog = OLED, "OLED Display", 2
|
||
field = "Display Type", display
|
||
field = "#Note"
|
||
field = "ECU must be rebooted after changing above value"
|
||
field = "Field 1", display1, { display }
|
||
field = "Field 2", display2, { display }
|
||
field = "Field 3", display3, { display }
|
||
field = "Field 4", display4, { display }
|
||
;field = "Bar 1", displayB1, { display }
|
||
;field = "Bar 2", displayB2, { display > 2 }
|
||
|
||
|
||
; -------------------------------------------------------------
|
||
; Help down here
|
||
help = helpEnrichments, "Enrichments Help"
|
||
text = "<strong>Priming Pulse</strong><br><br>"
|
||
text = "The duration in milliseconds of a priming pulse that is applied when the MS controller is powered up. If you don<6F>t want a priming pulse, set this field to zero.<br>"
|
||
|
||
text = "<br><strong>Cranking Pulsewidth</strong><br><br>"
|
||
text = "Cranking pulse width determines how long the injector will be open in milliseconds for each pulse while the engine is cranking (i.e., the RPM is below 300). The actual pulse width is determined by performing linear interpolation on the line described by the end points you enter for the "-40 degrees F" and "170 degrees F" values. For instance, if you enter 10.0 ms as the pulse width at -40 F and 2.0 ms at 170 F, the pulse width will be 6.0 ms when you start your engine at 65 F.<br>"
|
||
text = "Note: Cranking pulse occur at every ignition event, while running pulses only occur at the interval specified on the constants page; if you have a 4 cylinder engine and are taking the tachometer signal from the coil, then you will get four (4) cranking pulses per cycle and depending on settings one injection per cycle while running.<br>"
|
||
|
||
text = "<br><strong>Afterstart Enrichment</strong><br>"
|
||
|
||
text = "<br><strong>Exhaust Gas Oxygen Sensor Parameters</strong><br>"
|
||
text = "These parameters define the closed loop behavior of MS. You must have a narrow band O2 sensor hooked up for this mode to work in v.1.0 controller code; either a narrow band or wide band will work with v.2.0 of controller code. To disable closed loop operation altogether, set the EGO Step value to zero.<br>"
|
||
|
||
text = "<br><strong>EGO Sensor Type</strong><br>"
|
||
text = "Specify either a narrow band sensor or wide band sensor. Functionally this merely sets the direction sense of the sensor voltage. For narrow band sensors, the voltage rises as the mixture is richening and drops as the mixture becomes lean. The wide band setting corresponds to the opposite sense, i.e., voltage drops to indicate enrichment (this is how the DIY-WB operates, not necessarily all WB sensors!). (Available in v 2.0 controller code.)<br>"
|
||
|
||
text = "<br><strong>EGO Switch Point (v)</strong><br>"
|
||
text = "This is the switching point voltage that indicates stoichiometric combustion (approximately 14.7:1 with gasoline). For narrow band sensors this is 0.5 v*; for the DIY-WB wideband sensor it is 2.5 v (for other wideband sensors this voltage may be quite different). (This value is only active in v 2.0 controller code.)<br>"
|
||
text = "*This is true for zirconia NB sensors, which are used almost exclusively in modern vehicles. The titania NB sensor has a different voltage range (1-5 v), but is rarely used.<br>"
|
||
|
||
text = "<br><strong>Coolant Temp Activation (<28>F)</strong><br>"
|
||
text = "This is the temperature below which closed loop operation is disabled. If this value is too low, then closed loop will try to lean out the warmup enrichments and you may experience rough running. Typical value is 160 F and should somewhat above the point at which warmup enrichment stops (see the Warmup Enrichment Bins settings and find the lowest on which contains 100).<br>"
|
||
text = "The value "EGOTEMP" stores this quantity.<br>"
|
||
|
||
text = "<br><strong>Ignition Events Per Step</strong><br>"
|
||
text = "This value determines the rate at which the closed loop algorithm applies correction. The default value of 32, when used on a four cylinder engine with four ignition events per cycle, wait for 8 cycles before changing the current correction factor.<br>"
|
||
|
||
text = "<br><strong>EGO Step (percent)</strong><br>"
|
||
text = "Once the closed loop algorithm has decided to change the correction factor, it adds or subtracts this percentage from the current value. This should move slowly to avoid unstable response, so make sure it is small, 1% being the default.<br>"
|
||
|
||
text = "<br><strong>EGO Limit (%)</strong><br>"
|
||
text = "Closed loop operation should not be substituted for proper tuning! This value limits the correction that can be made by the closed loop algorithm, the default of 10% indicates the correction factor cannot go outside the range 90-110%.<br>"
|
||
|
||
text = "<br><strong>EGO Active Above RPM</strong><br>"
|
||
text = "This value specifies the lower limit above which closed loop operation occurs. Typically, your engine will idle best when it is richer than stoich, so turning off closed loop for low RPMs allows this to happen. The default value for the RPM limit is 1200. (Available only in v 2.0 MS, older versions have a fixed 1200 RPM value in the controller code.)<br>"
|
||
|
||
text = "<br><strong>Warmup Enrichment Bins</strong><br>"
|
||
text = "Warmup enrichment is based on coolant temperature. Since warmup enrichment requirements are usually non-linear, several bins are provided to specify different rates in different temperature domains.<br>"
|
||
text = "Place values in the "-40" through "160 degrees F" fields, typically running from about 120 at -40 F to 100 at 100 F; make sure the values are all 100 or greater.<br>"
|
||
text = "The MS array "WWU" contains these enrichment values.<br>"
|
||
|
||
text = "<br><strong>Acceleration Enrichment</strong><br>"
|
||
text = "Acceleration enrichment (AE) occurs when you open the throttle "rapidly" to avoid bogging the engine. In v.1.01 MS, this is done solely based upon the rate of change in the throttle position sensor (also called TPSDOT).<br>"
|
||
|
||
text = "<br><strong>TPSDOT Thresh</strong><br>"
|
||
text = "This is the threshold in v/sec below which no acceleration enrichment will occur (you can move the throttle from idle to full open without acceleration enrichment, if you open it slowly enough). Depends grossly upon the range of your TPS, a typical value might be 1.2 v/sec.<br>"
|
||
|
||
text = "<strong>Tuning Note:</strong> While you are tuning the VE table you should set this threshold artificially high (maybe 40.0) to disable acceleration enrichment completely. After the VE table is fairly well-defined, set this back to 1.2 and begin tuning AE.<br>"
|
||
text = "MS stores this value in the "TPSTHRESH" variable.<br>"
|
||
|
||
text = "<br><strong>Cold Accel Enrichment (ms)</strong><br>"
|
||
text = "The acceleration enrichment pulse also varies depending upon coolant temperature. The value specified here is the pulse width added to the value from the bin calculations at -40 F. The Cold Acceleration Enrichment amount is linearly interpolated from full amount at -40 F down to zero at 165 F. A typical value might be 2.0 ms.<br>"
|
||
|
||
text = "<br><strong>Cold Accel Multiplier (%)</strong><br>"
|
||
text = "Another means for increasing the amount of fuel delivered by the acceleration enrichment pulse is supplied by this value; it is likewise interpolated from the full specified amount at <20>40F down to zero at 165 F. Before the Cold Acceleration Enrichment value is added to the base acceleration enrichment pulsewidth, it is multiplied by this value.<br>"
|
||
text = "Total AE = Base AE * CAM + CAE<br>"
|
||
text = "The difference between the two types of AE cold modify can be easily seen with a few examples:<br>"
|
||
text = "1) Assume we have a calculated AE pulse of 5.0 ms. Say our coolant temperature is 40 F, giving a CAE pulse of 2.0 ms and CAM is turned off (100%). The result is 5.0+2.0 = 7.0 ms.<br>"
|
||
text = "2) Assume same base AE and temperature, but now we turn off CAE (0.0 ms) and set CAM to give 140%. The result is the same, we get 5.0*1.4 = 7.0 ms.<br>"
|
||
text = "3) Take the first case, but hit the accelerator faster, giving 8.0 ms base AE pulse. We now have a result of 8.0+2.0 = 10.0 ms.<br>"
|
||
text = "4) Take case 2, but with the higher base AE pulse, giving 8.0*1.4 = 11.2 ms.<br>"
|
||
text = "The bottom line is that the CAE modifier is constant and independent of the base pulse, where on the other hand, the CAM modifier has a proportional effect on the AE, bigger base pulse means bigger result.<br>"
|
||
|
||
text = "<br><strong>Decel Fuel Amount (%)</strong><br>"
|
||
text = "When you let off the throttle rapidly (that is the closing rate exceeds TPSDOT Thresh) and the engine is turning faster than 1500 RPM, then deceleration fuel cutoff is performed. Deceleration fuel amount is multiplied by the "normal" pulse width, that is, if the calculated pulse is 12.0 ms and you have 20% decel amount, then the resulting pulse width is 2.4 ms. A value of 100% causes the fuel to remain at its calculated value, and can cure bucking on deceleration in vehicles with manual transmissions; those with automatic transmissions may benefit in fuel economy by using values below 100%.<br>"
|
||
|
||
text = "<br><strong>Acceleration Enrichment Bins (ms)</strong><br>"
|
||
text = "These bins specify the actual enrichment in terms of pulse width. They are linearly interpolated to determine a value that is ultimately added to the computed pulse width.<br>"
|
||
|
||
[CurveEditor]
|
||
|
||
;time-based accel enrichment
|
||
curve = time_accel_tpsdot_curve, "TPS based AE"
|
||
columnLabel = "TPSdot", "Added"
|
||
xAxis = 0, 1200, 6
|
||
yAxis = 0, 48, 4
|
||
xBins = taeBins, TPSdot
|
||
yBins = taeRates
|
||
;gauge = cltGauge
|
||
|
||
; Correction curve for dwell vs battery voltage
|
||
curve = dwell_correction_curve, "Dwell voltage correction"
|
||
columnLabel = "Voltage", "Dwell"
|
||
xAxis = 6, 22, 6
|
||
yAxis = 0, 255, 6
|
||
xBins = brvBins, batteryVoltage
|
||
yBins = dwellRates
|
||
|
||
; Correction curve for injectors vs battery voltage
|
||
curve = injector_voltage_curve, "Injector voltage correction"
|
||
columnLabel = "Voltage", "%"
|
||
xAxis = 6, 22, 6
|
||
yAxis = 0, 255, 6
|
||
xBins = brvBins, batteryVoltage
|
||
yBins = injBatRates
|
||
|
||
|
||
|
||
; Correction curve for Air Density vs temperature
|
||
curve = airdensity_curve, "IAT density correction"
|
||
columnLabel = "Air Temperature", "C"
|
||
xAxis = -40, 215, 6
|
||
yAxis = 0, 255, 6
|
||
xBins = airDenBins, iat
|
||
yBins = airDenRates
|
||
|
||
; Curves for idle control
|
||
; Standard duty table for PWM valves
|
||
curve = iacPwm_curve, "IAC PWM Duty"
|
||
columnLabel = "Coolant Temperature", "C"
|
||
xAxis = -40, 215, 6
|
||
yAxis = 0, 100, 4
|
||
xBins = iacBins, coolant
|
||
yBins = iacOLPWMVal
|
||
|
||
; Cranking duty table for PWM valves
|
||
curve = iacPwmCrank_curve, "IAC PWM Cranking Duty"
|
||
columnLabel = "Coolant Temperature", "C"
|
||
xAxis = -40, 215, 6
|
||
yAxis = 0, 100, 4
|
||
xBins = iacCrankBins, coolant
|
||
yBins = iacCrankDuty
|
||
|
||
[TableEditor]
|
||
; table_id, map3d_id, "title", page
|
||
table = veTable1Tbl, veTable1Map, "VE Table", 1
|
||
; constant, variable
|
||
xBins = rpmBins, rpm
|
||
#if SPEED_DENSITY
|
||
yBins = mapBins, map
|
||
#else
|
||
yBins = tpsBins, throttle
|
||
#endif
|
||
zBins = veTable
|
||
|
||
gridHeight = 2.0
|
||
gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees.
|
||
upDownLabel = "(RICHER)", "(LEANER)"
|
||
|
||
table = sparkTbl, sparkMap, "Ignition Advance Table", 3
|
||
xBins = rpmBins2, rpm
|
||
#if SPEED_DENSITY
|
||
yBins = mapBins2, map
|
||
#else ALPHA_N
|
||
yBins = tpsBins2, throttle
|
||
#endif
|
||
zBins = advTable1
|
||
gridHeight = 3.0
|
||
upDownLabel = "ADVANCED", "RETARDED"
|
||
|
||
;table = afrTbl, afrTableMap, "AFR Table", 5
|
||
table = afrTable1Tbl, afrTable1Map, "AFR Table", 5
|
||
xBins = rpmBinsAFR, rpm
|
||
#if SPEED_DENSITY
|
||
yBins = mapBinsAFR, map
|
||
#else ALPHA_N
|
||
yBins = tpsBinsAFR, throttle
|
||
#endif
|
||
zBins = afrTable
|
||
gridHeight = 1.0
|
||
upDownLabel = "RICHER", "LEANER"
|
||
gridOrient = 250, 0, 340
|
||
|
||
;-------------------------------------------------------------------------------
|
||
|
||
[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
|
||
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
|
||
#batVoltGauge = batteryVoltage, "BAT V", "", 0, 255, -1, -1, 256, 256, 0, 0
|
||
|
||
;#if NARROW_BAND_EGO
|
||
; egoGauge = egoVoltage, "Exhaust Gas Oxygen", "volts", 0, 1.0, 0.2, 0.3, 0.6, 0.8, 2, 2
|
||
;#else
|
||
; egoGauge = egoVoltage, "Exhaust Gas Oxygen", "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 = accelEnrich, "Accel Enrich", "%", 50, 150, -1, -1, 999, 999, 0, 0
|
||
afrGauge = afr, "Air:Fuel Ratio", "", 7, 25, 12, 13, 15, 16, 2, 2
|
||
clockGauge = secl, "Clock", "Seconds", 0, 255, 10, 10, 245, 245, 0, 0
|
||
deadGauge = deadValue, "---", "", 0, 1, -1, -1, 2, 2, 0, 0
|
||
dutyCycleGauge = dutyCycle, "Duty Cycle", "%", 0, 100, -1, -1, 70, 80, 1, 1
|
||
egoCorrGauge = egoCorrection, "EGO Correction", "%", 50, 150, 90, 99, 101, 110, 0, 0
|
||
|
||
gammaEnrichGauge = gammaEnrich, "Gamma Enrichment", "%", 50, 150, -1, -1, 151, 151, 0, 0
|
||
mapGauge = map, "Engine MAP", "kPa", 0, 255, 0, 20, 200, 245, 0, 0
|
||
pulseWidthGauge = pulseWidth, "Pulse Width", "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
|
||
tpsGauge = tps, "Throttle Position2", "%TPS", 0, 100, -1, 1, 90, 100, 0, 0
|
||
veBucketGauge = veTuneValue, "VE Value", "%", 0, 120, -1, -1, 999, 999, 0, 0
|
||
veGauge = veCurr, "VE Current", "%", 0, 120, -1, -1, 999, 999, 0, 0
|
||
voltMeter = batteryVoltage,"Battery Voltage", "volts", 0, 25, 8, 9, 15, 16, 2, 2
|
||
warmupEnrichGauge = warmupEnrich, "Warmup Enrichment", "%", 100, 200, 130, 140, 140, 150, 0, 0
|
||
|
||
#if CELSIUS
|
||
cltGauge = coolant, "Coolant Temp", "TEMP", -40, 215, -15, 0, 95, 105, 0, 0
|
||
iatGauge = iat, "Inlet Air Temp", "TEMP", -40, 215, -15, 0, 95, 100, 0, 0
|
||
#else
|
||
cltGauge = coolant, "Coolant Temp", "TEMP", -40, 215, 0, 30, 200, 220, 0, 0
|
||
iatGauge = iat, "Inlet Air Temp", "TEMP", -40, 215, 0, 30, 200, 210, 0, 0
|
||
#endif
|
||
advanceGauge = advance, "Spark Advance", "deg BTDC", 50, -10, 0, 0, 35, 45, 0,
|
||
loopGauge = loopsPerSecond,"Main loop speed", "Loops/S" , 0, 20000, -1, 500,1800, 4000, 0, 0
|
||
memoryGauge = freeRAM, "Free memory", "bytes" , 0, 8000, -1, 1000,8000, 1000, 0, 0
|
||
|
||
;-------------------------------------------------------------------------------
|
||
|
||
[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
|
||
|
||
gauge1 = tachometer
|
||
#if SPEED_DENSITY
|
||
gauge2 = throttleGauge
|
||
#else
|
||
gauge2 = tpsGauge
|
||
#endif
|
||
gauge3 = pulseWidthGauge
|
||
gauge4 = dutyCycleGauge
|
||
gauge5 = mapGauge
|
||
gauge6 = iatGauge
|
||
gauge7 = cltGauge
|
||
gauge8 = gammaEnrichGauge
|
||
|
||
;----------------------------------------------------------------------------
|
||
; Indicators
|
||
; expr off-label on-label, off-bg, off-fg, on-bg, on-fg
|
||
|
||
|
||
indicator = { ready }, "Not Ready", "Ready", white, black, green, black
|
||
indicator = { crank }, "Not Cranking", "Cranking", white, black, green, black
|
||
indicator = { startw }, "ASE OFF", "ASE", white, black, green, black
|
||
indicator = { warmup }, "WUE OFF", "WUE", white, black, green, black
|
||
indicator = { tpsaccaen }, "TPS Accel", "TPS Accel", white, black, green, black
|
||
indicator = { mapaccaen }, "MAP Accel", "MAP Accel", white, black, green, black
|
||
indicator = { tpsaccden }, "TPS Decel", "TPS Decel", white, black, green, black
|
||
indicator = { mapaccden }, "MAP Decel", "MAP Decel", white, black, green, black
|
||
indicator = { (tps > tpsflood) && (rpm < crankRPM) }, "FLOOD OFF", "FLOOD CLEAR", white, black, red, black
|
||
;-------------------------------------------------------------------------------
|
||
|
||
|
||
[RunTime]
|
||
barHysteresis = 2.5 ; Seconds
|
||
#if CELSIUS
|
||
coolantBar = -40, 215
|
||
matBar = -40, 215
|
||
#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 = "Courier", 14
|
||
spotDepth = 2 ; 0 = no indicators, 1 = Z only, 2 = XYZ indicators.
|
||
cursorDepth = 2 ; Same as spot depth.
|
||
|
||
; 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.
|
||
|
||
;----------------------------------------------------------------------------
|
||
; Notes on tuning screen gauges:
|
||
; pageButtons = Labels for radio buttons at bottom of tuning dialog.
|
||
;
|
||
; Gauge 2 previously switched automatically to be tpsGauge when alpha-n
|
||
; was enabled, but you need to do it manually now.
|
||
;----------------------------------------------------------------------------
|
||
; Page 1 Page 2 Page 3 Page 4
|
||
pageButtons = "&EGO", "&WUE", "PW&1", "PW&2"
|
||
gauge1 = tachometer, tachometer, tachometer, tachometer
|
||
gauge2 = mapGauge, mapGauge, mapGauge, mapGauge
|
||
gauge3 = egoGauge, egoGauge, egoGauge, egoGauge
|
||
gauge4 = egoCorrGauge, warmupEnrichGauge, pulseWidthGauge, pulseWidthGauge
|
||
gauge5 = veBucketGauge, veBucketGauge, veBucketGauge, veBucketGauge
|
||
gauge6 = accelEnrichGauge, accelEnrichGauge, dutyCycleGauge, dutyCycleGauge
|
||
|
||
;-------------------------------------------------------------------------------
|
||
|
||
[OutputChannels]
|
||
; The number of bytes MegaTune should expect as a result
|
||
; of sending the "A" command to MegaSquirt is determined
|
||
; by the value of ochBlockSize, so be very careful when
|
||
; you change it.
|
||
|
||
deadValue = { 0 } ; Convenient unchanging value.
|
||
|
||
ochGetCommand = "A"
|
||
|
||
ochBlockSize = 30
|
||
|
||
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
|
||
ready = bits, U08, 2, [0:0]
|
||
crank = bits, U08, 2, [1:1]
|
||
startw = bits, U08, 2, [2:2]
|
||
warmup = bits, U08, 2, [3:3]
|
||
tpsaccaen = bits, U08, 2, [4:4]
|
||
tpsaccden = bits, U08, 2, [5:5]
|
||
mapaccaen = bits, U08, 2, [6:6]
|
||
mapaccden = bits, U08, 2, [7:7]
|
||
baroADC = scalar, U08, 3, "ADC", 1.000, 0.000
|
||
mapADC = scalar, U08, 4, "ADC", 1.000, 0.000
|
||
#if CELSIUS
|
||
iatRaw = scalar, U08, 5, "<22>C", 1.000, 0.000
|
||
coolantRaw = scalar, U08, 6, "<22>C", 1.000, 0.000
|
||
#else
|
||
iatRaw = scalar, U08, 5, "<22>F", 1.000, 0.000
|
||
coolantRaw = scalar, U08, 6, "<22>F", 1.000, 0.000
|
||
#endif
|
||
tpsADC = scalar, U08, 7, "ADC", 1.000, 0.000
|
||
batteryVoltage = scalar, U08, 8, "V", 0.100, 0.000
|
||
#egoADC = scalar, U08, 9, "ADC", 1.000, 0.000
|
||
afr = scalar, U08, 9, "O2", 0.100, 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
|
||
rpm = scalar, S16, 13, "rpm", 1.000, 0.000
|
||
accelEnrich = scalar, U08, 15, "%", 1.000, 0.000
|
||
baroCorrection = scalar, U08, 16, "%", 1.000, 0.000
|
||
gammaEnrich = scalar, U08, 17, "%", 1.000, 0.000
|
||
veCurr = scalar, U08, 18, "%", 1.000, 0.000
|
||
afrTarget = scalar, U08, 19 "O2", 0.100, 0.000
|
||
pulseWidth = scalar, U08, 20, "ms", 0.1, 0.000
|
||
TPSdot = scalar, U08, 21, "%/s", 10.00, 0.000
|
||
advance = scalar, U08, 22, "deg", 1.000, 0.000
|
||
tps = scalar, U08, 23, "%", 1.000, 0.000
|
||
loopsPerSecond = scalar, S16, 24, "loops", 1.000, 0.000
|
||
freeRAM = scalar, S16, 26, "bytes", 1.000, 0.000
|
||
batCorrection = scalar, U08, 28, "%", 1.000, 0.000
|
||
dwell = scalar, U08, 29, "ms", 0.1, 0.000
|
||
|
||
; Computed output channels. See "megatuneExamples.ini" for all the
|
||
; pre-defined variables, search for "???" and you'll see them.
|
||
|
||
accDecEnrich = { accelEnrich + ((engine & 0b00100000) ? tdePct : 100) }
|
||
coolant = { coolantRaw - 40 } ; Coolant sensor temperature in user units.
|
||
iat = { iatRaw - 40 } ; Manifold temperature in user units.
|
||
; egoVoltage = { egoADC / 255.0 * 5.0 } ; EGO sensor voltage.
|
||
time = { timeNow } ; "timeNow" is a parameterless built-in function.
|
||
seconds = { secl };
|
||
|
||
afrtarget = { 0 }
|
||
; #include "lambdaSensors.ini"
|
||
|
||
#if 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") }
|
||
throttle = { tps }, "%"
|
||
|
||
altDiv = { alternate ? 2 : 1 }
|
||
;cycleTime = { 60000.0 / rpm * (2.0-twoStroke) }
|
||
cycleTime = { 60000.0 / rpm }
|
||
nSquirts = { nCylinders/divider }
|
||
;dutyCycle = { 100.0*nSquirts/altDiv*pulseWidth/cycleTime }
|
||
dutyCycle = { 100.0*pulseWidth/cycleTime }
|
||
|
||
#if EXPANDED_CLT_TEMP
|
||
clt_exp = { 1 }
|
||
#else
|
||
clt_exp = { 0 }
|
||
#endif
|
||
|
||
#if CELSIUS
|
||
cltlowlim = { clt_exp ? -40 : -40 }
|
||
clthighlim = { clt_exp ? 230 : 120 }
|
||
cltlowdang = { clt_exp ? 65 : 10 }
|
||
cltlowwarn = { clt_exp ? 93 : 65 }
|
||
clthighwarn = { clt_exp ? 162 : 93 }
|
||
clthighdang = { clt_exp ? 176 : 104 }
|
||
mathigh = { 110 }
|
||
#else ; fahrenheit
|
||
cltlowlim = { clt_exp ? -40 : -40 }
|
||
clthighlim = { clt_exp ? 450 : 250 }
|
||
cltlowdang = { clt_exp ? 150 : 50 }
|
||
cltlowwarn = { clt_exp ? 200 : 150 }
|
||
clthighwarn = { clt_exp ? 325 : 200 }
|
||
clthighdang = { clt_exp ? 350 : 220 }
|
||
mathigh = { 215 }
|
||
#endif
|
||
|
||
;-------------------------------------------------------------------------------
|
||
|
||
[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
|
||
; -------------- ---------- ----- ------
|
||
entry = time, "Time", float, "%.3f"
|
||
entry = secl, "SecL", int, "%d"
|
||
entry = rpm, "RPM", int, "%d"
|
||
entry = map, "MAP", int, "%d"
|
||
entry = tpsADC, "tpsADC", int, "%d"
|
||
entry = tps, "TPS", int, "%d"
|
||
entry = afr, "O2", float, "%.3f"
|
||
entry = iat, "IAT", int, "%d"
|
||
entry = coolant, "CLT", int, "%d"
|
||
entry = engine, "Engine", int, "%d"
|
||
entry = squirt, "Squirt", 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 = accelEnrich, "TPSacc", int, "%d"
|
||
entry = veCurr, "VE", int, "%d"
|
||
entry = pulseWidth, "PW", float, "%.1f"
|
||
entry = afrTarget, "AFR Target", int, "%d"
|
||
entry = pulseWidth, "PW2", float, "%.1f"
|
||
entry = dutyCycle, "DutyCycle1", float, "%.1f"
|
||
entry = dutyCycle, "DutyCycle2", float, "%.1f"
|
||
entry = TPSdot, "TPS DOT", int, "%d"
|
||
entry = advance, "Ignition Advance", int,"%d"
|
||
entry = batteryVoltage, "Battery V", float, "%.1f"
|
||
|
||
[LoggerDefinition]
|
||
; valid logger types: composite, tooth, trigger, csv
|
||
|
||
;loggerDef = uniqueName, Display Name, type
|
||
loggerDef = tooth, "Tooth Logger", tooth
|
||
;dataReadCommand = "r\\x00\\xf4\\x00\\x00\\x04\\x00" ; standard TS command format
|
||
dataReadCommand = "T" ; Basic TS command format
|
||
dataReadTimeout = 10000 ; time in ms
|
||
;dataReadyCondition = { ( status3 & 0x02 ) == 0x02 }
|
||
;dataLength = 1024 ; in bytes, including headers, footers and data (not used)
|
||
|
||
;recordDef = headerLen. footerLen, recordLen
|
||
recordDef = 0, 0, 2; in bytes, the recordLen is for each record, currently limited to 4 bytes
|
||
|
||
;recordField = Name, HeaderName, startBit, bitCount, scale, units, updateCondition
|
||
recordField = toothGap, "ToothTime", 0, 8, 1.0, "uS"
|
||
|