This page lists important changes to the firmware. Check this before downloading a firmware that is meant for production
IMPORTANT: when uploading new firmware to a controller (even with a motronic55 connector!), to prevent filling cylinders with fuel or possible igncoil or igndriver damage:
- remove ignition fuses
- remove injector connectors and remove fuelpump relay
- or otherwise make sure the fuelpump is off, eg. hidden anti-theft switch
- Upload and verify config, and measure voltage in the injector connectors before powering the fuelpump
- Explanation: when table positions change inside EEPROM (as between 1.0.73 and 1.0.78), the h[0] and h[2] might get corrupted (might fill the cylinders with fuel).
- to avoid filling cylinders with fuel (or other problem), after firmware upload, always upload config and tables, reboot, verify, measure, than power ign and inj only if all is well.
- always upload config after firmware upgrade - even an unrelated old config from a very different setup is better than nothing. Do not even try to set everything manually without a config upload. It will take many hours or days, and it will not work ! You have been warned. It is of course recommended to go through all dialogs, but only after uploading a saved config.
- but first of all: READ EVERYTHING BETWEEN OLD AND NEW REVISION and check if any of the changes affects your configuration. Take action if necessary. For example, if you used an 1.0.13 firmware, and upgrading to (eg. 1.0.23), when reading through all changes for intermediate releases, you will see (at 1.0.14) that fuelcut_min_kpa must be adjusted reasonably. If you skip 10 mins to read through, you'll sit in the cold car for hours and wonder why the engine does not start and notice injector pulsewidth is 0.
Developers: please update GenBoard/Manual matrix when configuration semantics change. Ask on that page (in the relevant matrix element; make a line if necessary and start to put in links you find) for questions about config variables.
You can report problems/bugs on this page: IssueReports
Users upgrading to 1.0.36 and above please note:
There are some issues with the ALS configuration that may not be apparent when upgrading your configs from an earlier version.
These are detailed MembersPage/GaborRacz/NewAlsLaunchAndOthers
Windows users have an easy solution to solve this issue detaile at MembersPage/PhatBob/ALSConfigFix
Downloadable firmware releases. These are not intended for compilation. See SubVersionSvn if you want to get involved in development. Publish the my_make on your MembersPage if you just want a firmware compiled with some special options.
The "Genboard Public Licence" allows modification of firmware (algorithimic changes, additions etc) if the modifications are sent back to authors. Much of the sourcecode was published, and everyone so far who sent modifications got read-write access to the firmware tree. Because of repeated (intentional or unintentional) violations of the copyright, developers decided to apply control over the sourcecode that allows well-intended use but prevents violation
- "normal" customers don't (and shouldn't) need to modify firmware
- anyone with skills to modify firmware who want to do so: apply for access. See SubVersionSvn . Don't forget to detail your plans ("I implemented / I want to implement ..., concept is ..., any simulations, or PC-testcode, etc...)
- an NDA is necessary that allows modifications (algorithimic changes, additions etc) for self-use or use in reselled VEMS products, but does not allow carrying the code (or concept) to competitive products.
Changelog - missing tooth trigger installs (N-1 or N-2 with or without camsync) and InputTrigger/AudiTrigger (135+ tooth wheel) users (especially with big-ignadv-window ALS) will likely prefer 1.1.x, while others usually still stay with 1.0.x for now (though this will change)
- 1.1.x always supported 60-2 trigger and supports dual config since 1.1.3x (read below).
- 1.0.x is unlikely to support TableSwitch
[1.1.8x] - brainstorming - not decided yet unless testing
- another 8x1 table enrichment(analog_input*configurable_const - MAP) or enrichment (analog_input). The absolute_
- the MAT/TPS could also be more generic if some other input could be used instead of MAT (than the in-flash MAT enrichment could be applied, or configurably none)
- brainstorming: Kevin requested second wheelspeed(freq) input for shiftlight based on non-driven wheelspeed. Also for traction control (spark retard and sparkcut according to non-driven wheelspeed)- I support this to be added (Gunni)
- 2nd VVT control loop for exhaust cam control (using 2nd camsync via SDA or SCL - currently internal pins but will be available on requiest, with some protection)
- more VVT features, like the 2-solenoid output (per control loop) mode (BMW)
[1.1.81] - released
- got many positive feedback.
- upgrade properly (always upload config after upgrade - even an unrelated old config from a very different setup is better than nothing). Do not even try to set everything manually. It will not work !
- easily configurable injection angle
- better trigger-error indication
- we'll work for more graceful handling of trigger errors (related to injection-angle)
- VVT (variable valve timing) reimplemented (not using anything from the old code). Only 1 control loop now, but target table reserved for 2nd control loop too.
[1.1.80] - release candidate
- easily configurable injection end-angle (angular position when the injector output switches off) in function of RPM
- mostly matters at low load loadsites with aggressive cam engines. With a port-injected audi 20-VT (with cyl1 injector output in same position as cyl1 ignition output) smoothest idle and best throttle-reaction was achieved around 300 ATDC = 420 BTDC (was not very sensitive to precise adjustment, a window of at least +-30 degrees)
- secondary-trigger need to be configured as cam-sync for inj-angle to work properly. Without camsync (eg. with a missing tooth wheel) after startup, the chance for the sweet half is 50% at best.
[1.1.79] - will not be released
- better low-RPM cranking behavior. Display calculated RPM (reading not stick to 100) well below 100 RPM. Also lowered min RPM for expected behaviour output actuation. Ign and inj outputs off below that. 28-70 RPM for most triggers (if signal is reasonably good). The real minimum RPM also depends on cylinder count, HW setup and trigger type and setup.
- the price is +1/2 crankrot to get initial sync in most situations.
- config12=20 (bit5=1) means wheelspeed is sent in km/h in the AIM packet
- config12=00 means wheelspeed is sent in 0.1 km/h (VEMS internal value *10) as in the [aim specs] . Fero says that unfortunately the AIM display does not follow the AIM specs, so AIM display shows 10 times higher than the sent value interpreted in 0.1km/h
- to enable/disable this divby10 one needs to upload small config12=20 configfile manually, or use 2010-06-28 or newer VT (or apply http://www.vems.hu/files/pacsa/aim_wheelspeed_patch.zip ini files to recent VT)
- known bug: no TPS update under certain circumstances (harder to reproduce in real engine, easier on bench)
[1.1.78] - release candidate
- note: coiltype withOUT camsync (c008 distributer) that didn't sync earlier also passed tests
- stop the coolant-fan during cranking if RPM < cranking threshold
- Subaru 36-2-2-2 support with camsync InputTrigger/SubaruThirtySixMinusTwoMinusTwoMinusTwo
- the code was backported to experimental/1.1.76 (see 1.1.76 below)
- InputTrigger/TriggerLog changed so secondary trigger pulse timestamps (if secondary trigger is enabled) are also sent through the serial port to help installing and verifying camsync+crankwheel setups (like the subarutrigger that has 2 low-toothcount VR wheels).
- CRC also added so higher than 19200 baud can be used => not just for cranking log, but multiple thousand RPM can be logged as well. 19200 baud limits triggerlogging a 60-2 wheel (with or without camsync) to 900 RPM, and the 135 tooth auditrigger (45 teeth logged) to appr 1200 RPM. (ManmcB08mde40) 115200 baud allows much higher RPM (with 135 tooth auditrigger triggerlog is not recommended above 7000 RPM anyway).
- to support the sectrig timestamp and CRC, the format is incompatible with old format. The old tools will not work (mde40 can be captured with brayterm, but uptodate VemsTune needed to analyze the file or VT can also read directly from the controller). Actually the format was changed twice, now it allows other type of timestamps for future extensions (like ignition events)
- for the curious: mde40 output has 0x7E marked frames. Frames need unescape (0x7D,0x5D => 0x7D and 0x7D,0x5E => 0x7E). Each frame has N* primtrig + <optional sectrig> + 1byte type + 2 byte CRC (+ 0x7E frame-marker). With type=2 the sectrig is there (2 byte big endian timestamp in 4 usec resolution), while type=1 lacks sectrig timestamp.
- VemsTune Tools / Record, Analize Triggerlog is being prepared for displaying the additional data (from captured file or real-time data from controller)
- if the missing tooth advanced filter (primary trigger bit3=1) is enabled with auditrigger (c270 pulsetrain), than div-by-27 is applied instead of divby3. With this it's internally not a 90+1 any longer but a 10+1 trigger with tooth width=72 degrees, another_trigger_tooth=02 and h[1]=00 08 06 04 02 ... See 11500 RPM auditrigger log on InputTrigger/AudiTrigger (while most triggers have 25500 RPM limit, traditionally the 135 tooth auditrigger had sub-10k RPM limit, now beyond 10k RPM).
[1.1.77] - will not be released
- unfortunately with the original HALL-dirac implementation missing-tooth + camsync did not syncronise at all (fixed in 1.1.78 experimental 2010-06-21)
- using matching vemstune ini-s is absolutely essential. The new functions will cause serious problems with random values (think about injection and ignition trims). Review all the related dialogs carefully !
- individual cylinder fuel pulsewidth adjustments
- multiplicative: most effect at high load. Greater or less than 100% allowed. Can be used to compensate slight deviations in flowrate, or cool the 5th cyl of a BMW I6 a bit (the hottest and most sensitive of all, closest to detonation point)
- additive: Most effect at low load / idle. Before tuning a new engine, set it to 52 usec so individual shortening can be applied too. (After upgrade use 0-12 usec for compatibility)
- individual cylinder ignition sparkadvance trimming: Decreases spark advance for each cylinder with a given amount (default 0).
- tach_div=1..5 can be used for non 50% duty for special tachometer gauges (some Nissan?).
- Lower than 50% normally, but you can invert the output.
- Output active and inactive for N and 32-N units of time
- It follows that for example tach_div=4 means 4/32 = 12.5% duty
- up to 3 anytrim inputs, that can apply adjustment to fuelpw, lambdatarget, boosttarget, boostpwm and ignadv. Turn the feature off unless you really know what you are doing.
- Trailing spark support for any trigger (except fiatstilo/subaru "shortgaptrigger"), usually InputTrigger/RotaryTrigger as in Mazda Wankel engines
- reftooth=128 means time from the same tooth as the previous event, just with some delay ("trailing spark"). The exact delay is configurable in function of RPM. See InputTrigger/RotaryTrigger
- HALL dirac filtering. config12 bit7 and bit6
- Highly experimental. Can filter very short spikes on HALL trigger input (usually from capacitive coupled noise from ignition wires - also depends on harness arrangement).
- only enable it for low toothcount HALL trigger, if the pulse after the chosen edge is min 10 crankdegree long (or min 180 usec) and if you have mysterious trigger errors that you cannot get rid of, even with properly shielded trigger cable.
- Must be disabled for VR trigger. Useless with VR trigger anyway (the LM1815 makes a constant pulse anyway if the signal goes below 0.0 V ... and that must not be filtered out for the trigger to work).
- like for any VR, HALL-dirac filter must be disabled in both primtrig and sectrig with InputTrigger/ShortGapTrigger , InputTrigger/SubaruTrigger, (MembersPage/FiatStilo fiatstilo and subarutrigger).
- config12=80 bit7=1 : HALL-dirac filtering for primary trigger
- config12=40 bit6=1 : HALL-dirac filtering for secondary trigger (only very short pulses can be filtered on sectrig, even a 3-5 usec pulse might be accepted as a normal pulse)
- config12=C0 HALL-dirac filtering for both trigger
- warning: the old hybridRPM based blending is gone (will not be supported in future: the new method is easier to understand and tune)
- If one uses MAP sensor at all, he can set up kPa based switching point for lambdatarget, ignadv, etc... Eg MAP used for table lookup above 120 kPa, TPS used below. Keep threshold=0 kPa unless you know what you are doing
- there is no such single switchpoint threshold for VE, because mapcorr is used for fuel pulsewidth with adjustable bins
- bugfix: iac stepper sync ("initial step-dance") was started too late (not at powerup but during cranking) for quite some time (also in 1.1.75 !). Stepper iac users will likely prefer 1.1.78 or newer.
[1.1.76] - not released
- subaru 6+7 (toothcounting implementation) and subaru 36-2-2-2 and the newest secondary-triggerlog (normally available from 1.1.78) was backported on top of the stable 1.1.75
- this 1.1.76 is only for those subarus, no advantage at all for any other triggers
- note: Jorgen had a private 1.1.76 with HALL-dirac for his problematic noisy 24+1 nissan which is not included in this. Any new installs that really need HALL-dirac filter can only use 1.1.78 or newer.
[1.1.75] - released when 2010-05-xx VemsTune is available for it.
- CRC protected runtime comm for the "D" command. (firmware upgrade was protected earlier too)
[1.1.74] - released
- more precise tach output frequency even at very high RPM
- up to 36000 output pulses per minute, that is 18000 RPM for "4 cyl" tachometer (which can be used even for 5-6-8-12 or other cyl count, just adjust the tach divider)
- LCD updates are synchronized to LCD refresh (when lambda changes from 1.00 to 0.99, 1.99 should not be intermittently displayed). Disable "forced goto" in LCD menu for higher refresh rate
- cranking pulsewidth shown after powerup (even before trigger)
[1.1.73] - not released
- improved ignition when trigger signal is extremely noisy during cranking
- at least for missing tooth trigger - not much can be done for "coiltype" trigger of course.
[1.1.72] - not released
- InputTrigger/SubaruTrigger implemented. Unlike with 1.0.x, configured as coiltype (not missing tooth type). primary_trigger=A3
- (or AB, as the missing tooth advanced filter can be enabled and configured for this, even though derived from the coiltype family. Than we trig from the short "normal tooth", max 100% and neglect the long "missing tooth" eg. min 125% )
- the weird subaru multipulse camsync requires another_trigger_tooth=03 and secondary_trigger=59 (bit6=1)
- for the simpler fiatstilo campulse, another_trigger_tooth=01 applies and either secondary_trigger=59 or 19 should work.
- InputTrigger/LanciaCosworth (which was "coiltype" before, theoretically not changed, must also be retested.)
- some small other changes, eg. warninglight sent instead of warmup (warmup light on when warmup_enrichment > 100% is calculated in vemstune)
- for launch, flamebit (a config bit) enables launch_enrich fadeout (partial sparkcut is good, but partial launch_enrichment will be normally disabled by most tuners to avoid exhaust bang and flame effects)
[1.1.71] - not released. For experts only
- als_iacpos;// iac position when ALS active (0 disables)
- communication protection against unauthorized (write / read) access
- (perhaps only in 1.1.71 : not certain if this will be available in the default compile after 1.1.71 )
- only applied if config_ext.pwcommlock0 == DE ( decimal 222 )
- than serialnum dependent password is needed for communication. Request password for the given serialnr when ordering.
- Use GenBoard/Firmware/BootLoaderLoopback to upload an old firmware if you accidentally locked yourself out (that's why this is for experts only).
- no need to reenter password if reconnecting; Only needed after reboot (might be asked for only once on a certain notebook: if VemsTune saves it on the notebook harddrive and sends it automatically after that)
[1.1.70] - RELEASED
- important scheduler priority changes (effecting ign and lambda_target lookup)
- This also means that 1.1.6x will never be released. Any 1.1.6x MUST be upgraded - with the usual care of course.
- new VemsTune required
[1.1.69] - NOT RELEASED
- anytrim: 17 entry array for compensation (78-178 % range for fuel injector pulsewidth). Useful for dynamic barometric BARO compensation, LPG temperature and pressure compensation, even for nonlinear EGT enrichment or ambient referenced Fuel Pressure Regulator compensation.
- config_ext.anytrim1 bit7:4 F: disabled. 0=trim fuel pulsewidth.
- 1..E values reserved for later when lambdatarget, sparkadv, boosttarget will also be option. Only use F or 0 now.
- config_ext.anytrim1 bit3:0 :
- 0..7: analog input=mcp3208 ch0..7 Eg 115 kPa absolute sensor connected for BARO-comp.
- 8: MAP (calibrated, 0-1024 kPa). In naturally aspirated, alpha-N mode the internal (or EC18/6 connected external) MAP sensor can also be used for BARO. 115 kPa sensor or other can be used.
- 9-15: 700 kPa pressure sensor (slope=778 kPa / 5V) connected to mcp3208 ch1..7 (ch0 not available for this). Pressure-MAP is calculated internally, giving the differential_pressure (across injectors). Useful when (eg. limitation of some LPG setups) ambient-referenced or absolute pressure sensor used, instead of (MAP referenced) differential pressure sensor.
- config_ext.anytrim1 bit7:4 F: disabled. 0=trim fuel pulsewidth.
Most recommended fuel pressure setup (in this order):
- Fuel pressure REGULATOR referenced to MAP
- as almost always, by the way. Unfortunately some LPG kits are ambient referenced
- Measure fuel pressure relative to MAP (with a 2-nipple differential pressure sensor)
- than use the simple 0..7 mode.
- this is the easiest measurement to give an early warning when fuel pressure drops (because fuelpump cannot handle the flow, fuel filter dirty or fuel pressure regulator reference hose forgotten or blown off by boost)
- Measure fuel pressure relative to ambient
- either with a differential pressure sensor (with reference nipple = ambient) or "gauge" type sensor
- Measure fuel pressure relative to vacuum (with an absolute 700 kPa sensor)
- same mode (9..15) as above, just the 17 point curve X axis is not 45-781 kPa but -45..681kPa. This mode is NOT recommended. If you really insist, subtract 100 kPa in your head.
[1.1.68] - not released
- config_ext.iac_conf2 bit 4 enables wheel_err warning light for 1.6 second
- trigger error light in vemstune lights up for 1.6 second regardless of this config bit
- minor change: accel retard (if non-0) was "sticking" longer (after the accel enrichment decayed)
[1.1.67] - experimental
- see BoostControl : consolidated the plurality of strategies
[1.1.66] - will not be released
- cranking and afterstart changed (again). Max value is 1694 (+1594%) to allow E85 in extremely cold (possibly without batchfire-all-injectors during cranking). This is on top of warmup enrichment (and possibly higher cranking VE than normal VE).
- write the old enrichments to paper, and look up the real injector pulsewidth in logs as well - take note.
- set the enrichment values in config so the real injector pulsewidth is as desired.
- there is currently no automatic upgrade of the iac values.
[1.1.65] - not released
- minor iac and boostalt changes (no intended change in semantics)
- afterstart enrichment change: got smaller and smoother.
- note that for first few events, higher than configured afterstart enrichment is applied (like cranking enrichment, afterstart is also ON TOP OF WARMUP ENRICHMENT - so rather small values are best, often around 10..20% but this varies). Afterstart enrichment decayes to configured value in about 30 engine cycles. Than it continues to decay, becomes 0 after the configured number of cycles. Always consult pulsewidth in your log when tweaking to verify that your understanding of settings matches actual behavior!
- also remember that cold-start behavior depends on cranking, afterstart and iac-duty. Usually not trivial to tell what to change and what direction, so experiments are needed (use pencil or a laptop to take notes when your pen freezes ;-). Surprisingly in very cold, some engines start better with relatively low iac-duty.
[1.1.63] - withdrawn.
- many changes, like cranking and afterstart table separated
- for E85 the cranking fuel amount climbs steeply as CLT drops around 27C, because mostly just the gasoline part burns during cranking. The alcohol part also burns right after the engine has started.
- afterstart enrichment does not need the excessive amount of E85 like cranking
- INJ STAGE2 now has an additive offset (+-2048 usec) to be able to smooth fuel quantity around the transition (something is very wrong if more than +-300 usec deviation needed: likely the relative size of staged inj).
- Inj staging also has some (fixed) hysteresys now.
- more indication flags:
- Realtime byte 47 bit0 is N2O active
- Realtime byte 47 bit4 is INJ STAGE2 active
- throw away old copy if you downloaded on 2009-11-25 and re-download:
- The PS2 version was actually too big to fit when 1.1.63 was uploaded for some testers before release. WARNING beep/light output was disabled on 2009-11-26 and vems.hex that actually fits was put into the zip.
[1.1.62] PS2 version released. (tested on more cars than the non-PS2 = wheelspeed version). When VemsTune is released for 1.1.63, from than on 1.1.63 will become the supported version (and 1.1.62 not).
- Under VemsTune defaultfirmwareconfigs directory copy 1.1.61 to 1.1.62 before uploading config (saved from 1.1.x or 1.0.x) to assist you. Review everything before starting. set Primary trigger/tooth width and refernce tooth table. Patience and lots of care needed !
- tachout inactivated (so gauge should not flicker) when RPM=0
- old GM and kickstart motorbike trigger: for coiltype trigger if trigtooth=0 and ign_tdcdelay <= 42 degrees (normally 10-15 deg in this special case), and ignadv > ign_tdcdelay, we allow spark timing from prev tooth (not just dwell timing).
- For precise cranking you place coiltype trigger 15..10 BTDC
- during cranking, if (eg.) ign_tdcdelay=10 degrees and crank_advance=7..10 degrees (too close) dwell will start immediate from the trigger pulse, and spark might be slightly late (timing dwell from a long distance from prev tooth during cranking would be bad idea because of the high relative RPM variations)
- ign_tdcdelay in the 20-50 degrees range not recommended, but should work
[1.1.61] testing
- decrease dwell at high RPM for a target of DWELL_MIN_INACTIVE time (defined as 400 usec). Automatically detects if same ign output channel is configured in neighbor events (distributer), 288 deg apart (2/5 of wasted spark 5 cyl), 360 deg (normal wasted spark) or other reftooth distance
- the advanced conditions for misc1 and misc2 MUST be set (do not forget to set them, otherwise these outputs could be effected in an unexpected way)
- for the PS2 MY_CONF += -D EXPENSIVE_MISC1OUT -D EXPENSIVE_MISC2OUT
- note: -D KNOCK_ALTERNATIVE is not available in this. PS2 keyboard, time-based launch are available of course.
- for the NON-PS2 MY_CONF += -D EXPENSIVE_MISC1OUT -D EXPENSIVE_MISC2OUT -D KNOCK_ALTERNATIVE
- so wheelspeed, wheelspeed-based launch and the experimental knock-threshold-map is available.
[1.1.60] not released.
- low toothcount wheels like 4-1 (m031) and c004, c008 supported, without camsync too For 4-1, use h[1]=00 06 04 02 00 00 00 00 wether with or without camsync ("camsyncpretender" inside).
- lambdatarget table can be read-written directly too - without loss of precision (or with the traditional ugly hack required for megatune lacking 1/x conversion function: some values cannot be represented this way)
[1.1.59] released for testing.. Seems quite good so far. We expect to release this (or newer with no new functions just minor changes and bugfixes)
- dwell_limit: if dwell is configured too high (at actual dwell base value, RPM, VBATT and MAP) it will be automatically limited to allow appr 400 usec coil inactive time (similar as it has been in 1.0.x for ages). Most significant for distributer ignition 5..8 cyl.
[1.1.58] released for testing.
- supports low toothcount missing tooth wheels like 4-1 crankwheel without camsync (the simplest type of trigger that allows DIS ignition). See 1.1.60 note
- supports low toothcount "coil-type" wheels like 2..3..4 tooth on crank without camsync (with distributer of course, as this is not sufficient for DIS).
- supports InputTrigger/LanciaCosworth, good at very high RPM and also seems good at cranking initial syncup (required special code for this trigger)
- Unsure about the very special fiatstilo/subaru-trigger though. Benchtesting is essential before using with such trigger.
[1.1.56] released for experts only. Seems quite good though.
- launch light (flag) is on when launch button is on (not when launch function is on): better indiction, no need to wait before launch-RPM is hit
- smoother decay of launch-retard as RPM goes down or MAP goes up. This provides some regulation: way too high boost during launch can be prevented.
- most recent VemsTune needed. Menus are arranged for ergonomy. Firmware menu is under tools (rarely used anyway)
- upload [working config] before uploading your (eg. 1.1.27) config. This way the missing variables are more likely to be initialized to sane values, and less likely to cause headache and problems.
- We found that we need low map_dwell=03 or lower (possibly 01 or 00) because too high (>4.5msec) dwell due to high MAP on a turbo-audi could froze the controller (repeatably) in a case (due to harness, ground and supply-related issue, not software) with an audi 3B harness modified for DIS ignition.
- 2 (none-missing, even spaced) or 3-1 (missing-toothed) cranktooth without camsync are unfortunately not yet supported in 1.1.x (some missing sparks at certain RPM), but we hope to support them later. Use 1.0.xx in the meantime.
[1.1.54] not released
- Note: 1.1.53 uses a different lambda (runtime vars, offset=10) value above 1,0, (eg. not compliant with 20.9 reading at 20.9% O2). Higher resolution around 1.0 though. Likely we're forking 1.1.53 and 1.1.54 vemstune.ini and vemsv3.ini to make it work with both.
- PS2 version is more thoroughly tested
- non-PS2 (wheelspeed) version will see some changes later around wheelspeed-launchRPM (and launch-flag). You can (should?) continuously activate launch: RPM-limit will be adjusted automatically according to table as wheelspeed goes up
- requires [VemsTune 2009-04-24] or newer. No known megatune yet. Andrey, can you publish your 1.1.5x vemsv3.ini for megatune ? Pls, make a Megatune usable for this firmwares! Race season is ON. MembersPage/GintsK
- time dependent launccontrol RPM (PS2 enabled firmware only): after launch button is released and X time passed (X=first entry in speed/time table, 64usec unit), there is no enrichment and no retard, but RPM-limit (partial ign-cut in the softrpm-control-range) can be specified in 8 time => RPM steps.
- also tested with shiftcut and launch on same (shared) analog (activation) inputs.
- Set all 8 entries to revlimit or to 25500 RPM if not using this feature.
- launch will show as active in runtime flags even after X time/speed is passed (X=first entry in speed/time table), but there is no enrichment and no retard. Launch flag means that RPMlimit is controlled according to launch.
- wheelspeed dependent launchcontrol RPM-limit (non-PS2 firmware only, where PS2-CLK is used for wheelspeed freq 0/5V signal). You will want to use the wheelspeed input from a non-driven wheel.
1.1.52 testing only
- almost seemed fine, but MembersPage/MarcellGal/PowerAndTraction engine was flooded with fuel. Not during upgrade, but after it seemed to be running well. After removing sparkplugs the engine runs well again. Under investigation (if it's misconfiguration, eg. injector staging related, or. sg. else). We could not reproduce it either on the bench or on car.
- The first 1.1.x firmware that supports coil-type trigger without camsync (eg. distributer)
1.1.51
- MAT-retard (MAT, TPS).
- MembersPage/Andrey/Cranking
- MembersPage/Andrey/KnockEGTRich
- MembersPage/Andrey/FuelFilm
- Gearboost use same RefDC as PID, so BoostDC table could be used for altboost out when speedsensor FW used.
[1.1.50] - testing only
- coolant range changed (in 1.1.4x) to -100..+155C . See GenBoard/Manual/Config/CoolantTemperature
- [vemstune 2009-03-05] or more recent version needed for upgrade and tuning => vemsv3.ini boost (and other) dialogs updated
- upload a [working config] before uploading your (eg. 1.1.27) config. This way the missing variables are more likely to be initialized to sane values, and less likely to cause headache and problems.
- lotsof new variables when upgrading from 1.1.27, lotsof room for error. Take care and review everything, preferrably on the bench (don't forget the staging, n2o, MAP filter, configurable coolant bins in warmup enrichment, and other dialogs in vemstune). Apply caution. Fuelpump off, injectors off, igncoils no supply etc... when upgrading, until all dialogs and variables are verified.
- the standard firmware also has 16x14 VE table (the good old and practical 12x12 VE table is not supported any longer).
- my_make.16x14/vems.hex also has 16x14 VE size, but has no PS2KEYBOARD support. It supports wheelspeed input (0/5V HALL sensor connected to PS2 clock signal, aka "INT6")
- If you use speedsensor (PS2 undefined) and boostcontroller, another calcs used (named gearboost), and it cannot be used with altboost at the same time, because it use ref table as refpos for PID, will be fixed at 1.1.51
- boost_channel is always the output actuator of the PID boost.
- boost PID P value internally multiplied by 4, so change P to quarter its previous value. Earlier P=255 had to be used for many setups - if yours too, start with P=64..70 or so.
- warning: boostalt simple_closedloop uses TPS scaling array for different purpose (not for boosttarget, but scaling output DC). Therefore when using boostalt simple_closedloop, PID boost will not use TPS scaling (assume 100%). Simpleboost closed loop works by taking refdc value from rpm/map table, downscales it if 8kpa over boosttarget graph and then scales refdc directly by tpsboost graph. BoostSW is for downscaling whole refdc table. Key here is directly scale boostDC according TPS values and not by the target. Boost target is there for limit boost if refDC table is badly configured and also helps to tune that table when you see that target start
- boostalt has 12x12 table and separate output config_ext.boostalt_channel so it can operate simultaneously with the PID boost. Boostalt can be configured in 4 different operation mode (or strategy) coded in boost_conf bit1:0
- 00: boostalt relative lookup. Boost reference table lookup ( RPM, MAP - boost), where MAP - boost range is -155 .. +100 kPa (for 0..0xFF vemsv3.ini update needed so it does not show confusing 0..510 in this mode). Solenoid inactive when MAP < boost_minpressure. Boosttarget is calculated the same way (from same config variables) as for the PID boost. Relative mode is useful for wastegate: eg. bottom can be controlled with PID and the top with a table-lookup, or the other way around (although most setups connect the 2 solenoids in parallel electrically, and opposite pneumatically). Highly flexible - versatile.
- 01: boostalt absolute lookup. Boost reference table lookup ( RPM, MAP ), MAP range is 0 .. +510 kPa (for 0..0xFF). boost_minpressure is neglected. ** absolute mode is useful for water injection or other PWM output (can be used eg. for a gauge or an analog output).
- 10: boostalt "simpleboost" closed loop - for compatibility with existing installs that utilize "boost alternate"
- 11: boostalt "simpleboost" open loop. Boost reference table lookup ( RPM, analin) where analin is an mcp3208 analog input (like a 0..5V potentiometer)
[1.1.48] - testing only. AlphaN new strategy added (upgrade possible with 2009-01-08 VemsTune or newer)
- to use AlphaN without MAP sensor:
- hybrid_rpm_m=FE or lower, but not 0 (so the load is sent in position 4-5 byte of the realtime vars, not MAP)
- important: fill mapcorr table with all 00 (hint: at least set the 4 corners).
- new mapcorr (boost map correction) strategy available for AlphaN with a MAP sensor (eg. charged + ITB):
- hybrid_rpm_a=FF
- hybrid_rpm_m=FF
- config13 bit5=0 to lookup ign and lambda according to kpa (even at low RPM).
- config13 bit2=1 for no automatic "alltime" load multiplication (yes, this is no mistake: because you do not want load multiplication below 100 kPa!)
- important: fill mapcorr table (i/I comm commands). All 100 means neutral. With this configuration *MAP/100 is also applied above 100 kPa, automatically, so table stays flat and tuning becomes very easy. Maybe a small slope is a good idea to start with: 100 @ 100 kPa (below 100 kPa the table is not used at all) and 110 @ 320 kPa. If you need more than +10% at high kPa, that suggests the fuel system is not up to the job.
- the old "hyprid tps and kpa smooth gradient" strategy is still available: which uses TPS for lookup RPM<hybrid_rpm_a and MAP when RPM>hybrid_rpm_m and interpolation in between. However, at high gear, boost might appear at rather low RPM (especially in a streetcar). The mapcorr strategy is also easier to tune
- hybrid_rpm_a=14 (2000 RPM for example)
- hybrid_rpm_m=1E (3000 RPM for example)
- config13 bit5=0 to lookup ign and lambda according to kpa (even at low RPM). On the countrary bit5=1 means load (tps or kpa or mix depending on RPM, hybrid_rpm_a, hybrid_rpm_m relation) is used, the only option for a normally aspirated engine without MAP sensor.
- config13 bit2=1 for no automatic load multiplication
[1.1.47] - release candidate (still testing)
- misconfiguration of inj_staging_conf (FF instead of 00) can cause symptom like: only first element of h[0] (injector output table) actuates (injects).
- in general extreme care is needed for the relatively new n2o options and matcorr
- VemsTune is being updated to warn about certain misconfigurations.
- partial fuelcut (special case when overrun_fuelcut - overrun_fuelresume = 10 or 11 that is
- RPM difference = 1000 RPM is configured : higher TPS => higher RPM-range for the partial fuelcut
- when RPM difference = 1100 RPM is configured : when TPS > iac_tps_threshold, partial_fuelcut=min( ft(TPS), fr(RPM) ). This means higher TPS can never increase fuelcut.
[1.1.46] - will not be released
- partial fuelcut (special case when overrun_fuelcut - overrun_fuelresume = 10 that is 1000 RPM configured).) TPS pushes the 1024 RPM partial fuelcut window up by +4000 RPM / 24% TPS
- 3 new options for ego, freeze corr for openloop, minkpa, reactivation delay.
- boost mat and egt (added?) to boostpage
- cranking pulsewidth tenpoint curve
[1.1.42] - will not be released
- tooth_wheel_twidth endianness swapped (to allow user friedly interface with megatune's constraints). Check primary trigger helppage, AND CHECK YOUR SETTING, CAUSES UPGRADE PROBLEM! VemsTune will consider this automatically during upgrade: new settings are calculated by:
- tooth_wheel_twidth[0]=tooth_wheel_twidth2 (upper byte)
- tooth_wheel_twidth[1]=tooth_wheel_twidth1 (lower byte)
- starts up in 19200 baud (not 9600, so megatune must be configured 19200,8n1). Note if 1.1.42(or newer) already in board, upload any (newer or older) firmware with command "tools\megaloader.exe firmware\vems.hex -wtE -b 19200 -c com1" ("-b 19200" added) and if config.lcd_c0 bit2=1 open and close MT before upgrading firmware to disable AIM stream.
- config.lcd_c0 bit2=1 will start AIM stream automatically for round (with 2008-09 firmware) or aim display
- aim stream stops for Man command, or megatune A command or 'o' (config read) command, so it should not confuse MegaTune
- Cosworth initial syncup sequence fixed. Hopefully no more backfire during cranking
- for any test report, mention if 16x14 or 12x12. Although technically not justified, for marketing, we are migrating towards 16x14. Perhaps 12x12 support will be dropped at some point. Watch injector injgroups, does the h[0] first entry squirt with 12x12 firmware ? (we've seen in not squirt once, for 16x14 we haven't seen that)
- problem: apparently with PID-boost the boost(RPM) table is not considered. Workaround: raising map-target offset. Under investigation: likely related to the gear-dependent boost code.
[1.1.41] will not be released. (Fero.uses it on racecar with success. not sure if 12x12 or 16x14). No config change.
- ego correction works even in the very special case when partial fuelcut is configured: overrun_fuelcut - overrun_fuelresume = 10 (that is 1000 RPM).
- shiftcut is disabled when launch input is active (so partial clutch will not accidentally activate shiftcut retard)
- Make sure MAP filter configured properly. Andrey's starting values MAP samples = 15, Triggers num = 1 for 4cyl, MAP samples = 10, Triggers num = 2 for 6cyl.
[1.1.40] - not released yet, only for bench testing. Many new variables (vemsv3.ini must be used with megatune), upgrading (even from 1.1.39) is quite problematic
- launch disables shiftcut (even if not configured to same analog input). After launch inactivation, shiftcut rearming is needed (not to interfere with launch, even if clutch partially engaged)
- shiftcut_time=FF (max, 1020 msec) means shiftcut holds as long as input is kept active (but min 150msec. Good for practicing, or if gearshift 1=>2 takes much more time than 2=>3 and 3=>4, like in case of short-first-gear long-second-gear audi gearboxes)
- special case handled for 5cyl engine with 60-2 and camsync (does not wait indefinitely for nonexisting tooth 10+24+24 and 11+24+24)
- Stall-O2 feature in runtime vars (position 16 and 17) sending O2 (percentage * 2560, so 20.95% is 53632 ) instead of PW when engine is stalled but LSU4 is on) - makes mde02 WB calibration procedure much-much simpler for those without LCD. Use StallO2 MT gauge, but not PW gauge.
[1.1.38] - not released yet, only for testing.
- smooth come out of partial fuelcut idle if TPS pressed
- iacref_matslope added
- internal (scheduler) changes that might break things
1.1.37 is placeholder.
- if we find problem with 1.1.38, than we patch the 1.1.38 features to 1.1.36 firmware so it can be released 2008-08-16
[1.1.35] for bench testing only (Fero uses on engine with 12-1 trigger). [vemsv3.ini] still needs some more work and testing, eg. the nice 2D warmup wizard was disabled in this, and the new boost settings are temporarily in the shiftcut dialog)
- supports [internal logging] to [SDcard]
- shiftcut input thresholds for picky sequential gearboxes:
- shiftcut_potlow: activates below this lo-threshold (19.6mV unit, use 95 for a normal input switch that is appr 1.9V threshold )
- shiftcut_pothi: activates above this hi-threshold (19.6mV, use 255 with normal input switch so it never activates)
- shiftcut TPSthreshold: shiftcut will not activate below this
- shiftcut igncut (0..100%) not necessarily 100% as earlier
- shiftcut retard (0..60 deg ATDC)
- boosttarget decrease above adjustable MAT
- boosttarget decrease above adjustable EGT
- partial fuelcut idle, if overrun_fuelresume + 1000 == overrun_fuelcut (0..100% in the 1000 RPM range if TPS <= tps_thresh. Smoothly adding power if TPS pressed NOT applied before 1.1.37)
- with an ALS engine with always-open throttle, this is smoother on the environment and the exhaust than an igncut based idle
1.1.34 do NOT use
- dropping VE learning. PC based VE analysis is much better now, no use for this smartness in firmware
- power shiftcut (partial igncut and retard configurable, not just full igncut)
- overrun fuelcut and fuelresume not injector 0 or 100%, but partial (even dropping) is possible
- more testing on 16x14 tablesize which is likely to become recommended in future. (12x12 might be finally not supported in megatune)
- more testing with InputTrigger/MultiToothNoneMissing (eg c010 5cyl 5 crankpulse + camsync)
- RS232 port alternative use: either sending AIM-protocol data (to several rounds or aliens) or talking to MT. But not simultaneously. 19200baud (always, even in MT) considered
[1.1.33] for testing new features on the bench. Although a bug that made outputs (including ign) misbehave in 1.1.28-1.1.32 was fixed, prefer 1.1.27 unless testing the new features (like switch-table).
- MAT enrichment is not firmware-upload time any
- ... other changes ?
1.1.32 - do NOT use
- very important to read all changes between versions you upgrade from-to. Notably a very important change in 1.1.30: missing-tooth wheel users likely need to adjust tooth_wheel_twidth2 (labelled "width of missing tooth" in MegaTune), likely to 00. This (width of tooth!!!) effects spark timing. This is very important.
- solenoid PWM iac compensates with measured VBATT, so it's somewhat easier to tune with a Bosch alternator where VBATT depends on RPM at idle (unwanted positive feedback).
- Solenoid iac duty=0 (unpower iac) after pump_on_mintime (same behavior as fuelpump), and only apply cranking iac position after cranking starts
- config.ign_dwellmap configurable MAP-based dwell scaleup (VBATT based is automatic)
- 00 no dwell extension at all (neither VBATT nor MAP based): ign_dwell14 is used
- 01 only VBATT based dwell extension (max *2, when VBATT <= 7V)
- values 02..FF : VBATT based extension is automatic. Slope of MAP-based dwell-extension is configured with this variable. MAP-based extension is max *1.4 (+40%), while total scaleup (vbattmultiplier * mapmultiplier) is max *2
- dwell is extended by (map - 70kPa) * ign_dwellmap/4096 but no more than +0.4 (40% extension that is *1.4). Examples:
- ign_dwellmap=0A (decimal 10) max dwell-extension +40% reached at 234 kPa because (234 kPa - 70 kPa) * 10 /4096 = 0.4
- ign_dwellmap=14 (decimal 20) max dwell-extension +40% reached at 152 kPa because (152 kPa - 70 kPa) * 20 /4096 = 0.4
- higher value means higher slope (so max dwell extension reached earlier). Take care not to overload the ignition output or the coil (use lower ign_dwell14 so you only get extended dwell when really necessary).
- config.iac2load see GenBoard/UnderDevelopment/AlphaNIAC
- When rpm < hybrid_rpm_m the iac.position is added to load before table-lookup (for all tables: VE, ign, lambda). Basically proportional to the iac/throttle ratio. Formula: iac.position * config.iac2load /256 / 8 is added to load, that is max 31 if iac.position=FF and iac2load=FF. iac2load=FF is throttle/8 size (area) iac, that would be extremely big. Probably iac2load=06 or similar values could be more realistic (iac 341 times smaller area than throttle). Because of the throttle shape (special at low-TPS) you might need some experiment and logging to tune it
- the P and D terms in PID boost became asymmetric. The main difference between simple-boost and PID boost was this (simple-boost was asymetric and therefore easier to tune)
- switch-activated full-table-and-config-swap see TableSwitch. Expert feature, must upload valid config+tables to both storage (2 completely different permanent storage area inside the ECU) separately. Same ignition and injection outputs must be used in same positions (otherwise => risk of blowing ignition fuse and flooding cylinders with gasoline. Therefore this does not allow additional injector-staging-hack features, besides the existing staging functionality). Configuration of storage0 (eg. confswitch=C3) can allow to change to storage1. If you want to be able to switch back to storage0 without reboot, config of storage1 (eg. confswitch=D3) must allow to change to storage0. MegaTune does not know about which storage it reads/writes (closing megatune windows before switching to alternate storage seems wise). Useful for bi-fuel, or special different tables like N2O or similar. Switching can also depend on misc1 condition (TPS, RPM, MAP). After switching, the misc1 condition of the new storage will be used (which can be slightly different, eg. to allow hysteresis). For most applications, rpm < 100 (engine off) is recommended, or at least rpm < 1500 (idle). For N2O, the condition will be different of course.
- confswitch=00 disables switching
- confswitch=C3 does load_variables(1) if mcp3208 ch3 goes low
- confswitch=D3 does load_variables(0) if mcp3208 ch3 goes high
- confswitch=83 does load_variables(1) if mcp3208 ch3 goes low AND misc1 condition is true
- confswitch=93 does load_variables(0) if mcp3208 ch3 goes high AND misc1 condition is false
- any mcp3208 analog input channel (mcp3208ch 0..7) can be chosen with confswitch bit 0:3
- use it with known-good config manually uploaded to storage1 first (mcS1 command). When tweaking from megatune, verify the result after (both storage0 and storage1)
- compiled with BOOSTGAUGE (linear analog voltage output on an internal s259 channel for audi dash boost input)
1.1.30 do NOT use any 1.1.28 - 1.1.32 !
- low-RPM improvements for 8 ( InputTrigger/LanciaCosworth ) and 10+1 ( InputTrigger/MultiToothNoneMissing ) triggers
- 4-1 trigger supported (a 4 cyl VW Golf running on it) since 1.1.29
- IMPORTANT: tooth_wheel_twidth2 must be 0 when normal tooth < 64 crankdeg (as usual). tooth_wheel_twidth2 is NOT the width of the missing tooth (any more, as annotated in megatune), but always the upper byte of the normal toothwidth. Normal toothwidth is in 0.25 crankdeg resolution (no change here). So for a 60-2 the toothwidth is 6 deg ( in 0.25 deg unit that is decimal 24=0x0018)
- tooth_wheel_twidth1=18 (24 in megatune)
- tooth_wheel_twidth2=00
- for a 10+1 where a tooth is 72 degrees (decimal 288=0x0120),
- tooth_wheel_twidth1=20 (32 in megatune)
- tooth_wheel_twidth2=01
- so how will the code know the width of missing tooth for a missing tooth wheel ? If the "special N-1" is enabled (primary_trigger bit4=1) than 2xnormal tooth. Otherwise (N-2 assumed) 3x normal tooth.
1.1.27 Released [v3_firmware_1.1.27.zip]
- seems to run well on many cars (60-2, auditrigger and others)
- almost same as 1.1.26, only change is InputTrigger/MultiToothNoneMissing N+1 trigger supported where N<=11
1.1.26 [v3_firmware_1.1.26.zip] for testing ONLY - several cars running well on it (including 60-2 triggers)
- should work with missing tooth as well (and auditrigger of course). Eliminated a rare-case condition which resulted in ignitioncut (when ecu had to be rebooted)
- more testing is under progress, also with N+1 type trigger (like 24+1 non-missingtooth "coiltype"). Note that overlapping dwell cannot be disabled: distributer is still not supported (except with manually limited dwell considering rev_limit).
- launch does not retard spark if RPM drops considerably (control-range) below launch_rpm (allows high retard with otherwise weak turbo engines)
- TPS-dot (and MAP-dot) acceleration enrichment kicks in sooner, and fades out gradually. Minor retune of the accelerichment enrichment added fuel amount might be necessary
- knock_chan=F0 disables knock. Other values select bank individually for each ignition event (practical for V8, V6, I6 and even I5 where there are more than 1 knock sensors).
- knock_chan=00 selects knock channel 0 for all ignition entries
- knock_chan=FF selects knock channel 1 for all ignition entries
- knock_chan=AA selects knock channel 1 for every other ignition entries. Bit7 is for entry0 (belongs to the topmost entry in the MegaTune ignition output and reftooth tables). 0x55 is obviously the inverse, bit7=0 so the sensor belonging to the cyl fired by the topmost ignition entry must be connected to knoch channel 0 (the only knock channel normally).
[1.0.78] seems good so far, officially testing, but basically ready for release.
- after uploading config, you MUST __MANUALLY__ ADJUST
- MAT correction (enrichment) (X and Y axis, 8+8 values, use defaults)
- N2O (disable)
- use recent [vemstune]
- and to set SD log parameters (automatic logging to SD card after engine start) and save [SD log] and convert to csv for analysis
- behaviour change: improved accel enrichment.
- firmware with 16x14 maps will be tested and released in later versions
1.0.73 [v3_firmware_1.0.73.zip] - released (the most widely used 1.0.x firmware in 2009-03)
- smarter predictive idle-air control (that worked extremely well, or rather awesome in 1.1.x) merged over (in exact form)
- Also included an experimental 16x14 firmware compilation under my_make.16x14 for those who think they need more than 12x12 tables. This will be standard practice from now. Recent vemsv3.ini files have the 16x14 tables as well (but default is 12x12), so easy to use it if you really think you need it.
- ALS problem (with ALS configured engine refuses to rev up even without als-switch enabled) was reported: under investigation
- Can I get this compiled (a new release) with INJECTOR_STAGING enabled in my_make? Jorgen and I will both need this. Thanks, Jason.
1.0.72 [v3_firmware_1.0.72.zip] experimental (but likely fine)
- stepper chip always enabled, even if non-stepper iac configured. (from now, no need for the dirty trick to enable the internal 0x76 (s259_ch7) through misc output)
1.0.71 [v3_firmware_1.0.71.zip]
- minor MAP related changes: speed-density resolution improved further (slightly)
- ign dualout (very special config) was broken in last few releases: fixed
- please do NOT use non-released 1.1.23 (except for auditrigger) without bench-testing ! 1.1.23 is only well-tested for auditrigger and not tested for missing-tooth or other. If really want to try newer than 1.1.18 (why?) than prefer 1.1.22 to 1.1.23
- smarter "predictive" idle air control
- minor MAP related changes: speed-density resolution improved further (slightly)
- ign dualout (very special config) was broken in last few releases: fixed
v3_firmware_1.1.16
- minor ALS change: nonzero corr.als (actual als enrichment) disables ego-correction, but ALS otherwise not (eg. when TPS fully pressed=> ALS enrichment not applied anyway)
v3_firmware_1.1.15
- ALS deactivation time (config.als_deact_time) unit changed (from 1 sec) to 0.1 sec. If using an old megatune (that rounds 6.3 to 6.0), set 63 for 6.3 seconds
- ALS improvements: after TPS released, softrpm (ignitioncut) is not activated for als_deact_time seconds, even if RPM drops under als_retard_rpm1 and under als_igncut_rpm1
[v3_firmware_1.1.12_12x12.zip] is the recommended 1.1.x version
- use this instead of older 1.1.x (1.1.x branch recommended for missingtooth and "none-missing" multitooth wheels)
- not tested with fiatstilo/subarutrigger (probably won't work, so use 1.0.x)
- not yet tested with coiltype trigger with another_trigger_tooth=01 (but should work, obviously trigger_tooth=00 and remember to set missing tooth wheel as recommended by 1.1.11 SUPRA note). Test on bench first, or use 1.0.x
- interpolation updates
- added individual cylinder power information to find misfiring cylinder (even in a v8, easily), or other problems
- YOU WILL NEED [VemsMT1.1.12] to take logs from 1.1.12 (including individual cyl power info)
1.1.11 - old
- Tested with none-missing style 24+1 trigger of MembersPage/Fero/SUPRA - check the few config values that matter now for "coiltype" that did not matter earlier. Since 1.1.11 also supports the 5 tooth on crank 5cyl with camsync, called 10+1)
[1.1.10_12x12] - old
- MAT-retard disabled when tps <= iac_tps_thresh (so will not effect retard even if MAT sensor is heatsoaked at idle)
- MAT-retard takes full effect above tps > iac_tps_thresh + 12%
- interpolation in between
- Beware: undocumented staging changes; Dave used it successfully, but do not upgrade to this (before he documents it) if using staging
[1.1.6 ALS changes midway: NOT recommended]
- ALS retard and igncut RPM ranges, see MembersPage/GaborRacz/NewAlsLaunchAndOthers
- als_enrich fades with retard (no als enrichment applied at max TPS)
- only in 1.1.6 (dropped later, and candidate for rework; see ignition-cut based idle on MembersPage/GaborRacz/NewAlsLaunchAndOthers) overrun fuelcut enabled even if ALS switch is on: if the ALS timeout or high-RPM limit is reached
- below (iac_cold_rpm + launch_rpm)/2 RPM, the shiftcut is not activated (that is daily street driving or idle). But activated during race driving.
- in the highly experimental http://www.vems.hu/files/Firmware/release/EXPERIMENTAL/ VemsMT-1.1.5-pre6.zip see the README.txt and beware of a few catches:
- firmware 1.1.5 included, but use at least 1.1.6 anyway, and you might need to upload firmware with the help of utils from an old megatune (the COMx.txt solution does not seem to work on all win, even within XP it works some PCs, not on others. Will not be fixed, because soon replaced by a new GUI firmware upload application)
- avoid changing h[2] ign sequence from MT for now (or verify in mct if you do); get it right in the initial setup (ign wires don't change by themselves), change h[1] reference tooth instead
- als_retard changed to 0.5 degree resolution, so max retard is 127.5 degree. In 1.1.8 and later the specified ALS retard is "absolute", that is from TDC (not relative retard).
1.1.x overlapping dwell and timing from last tooth (coil-type is not supported in 1.1.x yet) Running well on 15-1 and 60-2 wheel with camsync and without camsync (any other multitooth N-1 and N-2 should work).[1.1.4 NOT YET RELEASED]. Several variables need to be set properly for it to work
- already mentioned in 1.0.69, but repeat here, just in case: h[2] sematics changed, now allows the use of stepper outputs as ignition outputs (for instance to drive an stock/oem external amplifier/ignition module).
- YOU WILL LOSE IGNITION DURING FIRMWARE UPGRADE, FROM ALL CHANNELS EXCEPT ignch00 UNLESS YOU CAREFULLY READ, UNDERSTAND AND APPLY THIS SIMPLE CHANGE TO h[2]: i259 IGNITION outputs ignch0 .. 7 are 00,10,20,30,40,50,60,70 respectively (that is ign259 channel moved to the upper nibble, bit 6:4, while bit7 and bit3:0 must be zero). Eg. if you had h[2]=00 03 02 01 .. .. .. .. than use h[2]=00 30 20 10 .. .. .. ..
- tooth_wheel_twidth1=18 # normal tooth width in quarterdegrees. decimal 24 quarterdegree that is 6 degrees (for 60-2 wheel)
- tooth_wheel_twidth2=00 # upper byte of normal tooth width
- for missing tooth wheels this variable is actually not used at all before 1.1.27. It was labelled "missing tooth width" in megatune. For best compatibility, set the upper byte of normal tooth width (for either missing tooth or coiltype trigger).
- reset_engphase_after - this is a bit stupid now, might change in future:
- reset_engphase_after=40 # with camsync # since 720 degrees = 2880 quarterdegrees = 64 (modulo 256)
- reset_engphase_after=A0 # when NO camsync # since 360 degrees = 1440 quarterdegree = 160 (modulo 256)
- h[1] is the reference tooth array (trigger_tooth and ign_tdcdelay is added to this to get TDC), for each output specified in respective h[2] entry. Examples:
- h[1]=1E 00 1E 00 .. .. .. .. # 60-2 4 cyl (tooth 00 and 30)
- another_trigger_tooth=1E
- h[1]=8A 3C 1E 00 .. .. .. .. # 60-2 4 cyl with camsync (tooth 00,30,60 and 90)
- another_trigger_tooth=1E
- h[1]=60 48 30 18 00 .. .. .. # 60-2 5 cyl with camsync (tooth 00, 24,48,72 and 96)
- h[1]=1E 00 1E 00 .. .. .. .. # 60-2 4 cyl (tooth 00 and 30)
- also, set camsync if appropriate
- als_retard changed to 0.5 degree resolution so max 127.5 deg retard is allowed (relative retard: it was absolute in 1.1.2 but we decided orig behavior relative is the way to go so interpolation works best)
[1.0.69] (MegaTune release available).
- h[2] sematics changed, now allows the use of stepper outputs as ignition outputs (for instance to drive an stock/oem external amplifier/ignition module).
- YOU WILL LOSE IGNITION DURING FIRMWARE UPGRADE, FROM ALL CHANNELS EXCEPT ignch00 UNLESS YOU CAREFULLY READ, UNDERSTAND AND APPLY THIS SIMPLE CHANGE TO h[2]: i259 IGNITION outputs ignch0 .. 7 are 00,10,20,30,40,50,60,70 respectively (that is ign259 channel moved to the upper nibble, bit 6:4, while bit7 and bit3:0 must be zero). Eg. if you had h[2]=00 03 02 01 .. .. .. .. than use h[2]=00 30 20 10 .. .. .. ..
- s259 (stepper A..D) outputs can be used for ignition with bit 3:0 > 0 eg. 0x38,0x48,0x58,0x68)
- staging code calculations reworked; at stage point the pw is recalculated based on the size of both sets, duty (/pw) of both sets is matched. With properly set config.inj_stage2_rate variable this results in unnoticable crossover from single to both sets.
- config.inj_stage2_rate unit is 1/32 (0.03125), where inj_stage2_rate has the size rate agains the first set; both sets same size would yield config.inj_stage2_rate = 0x20 = 1.00 ratio. second set 3.2 times as big as the first set would be config.inj_stage2_rate = 0x66
- Note: Dual Output ignition not supported in this release
Since [1.0.53] - old
- LCD config routines have been reworked. The PWM controlled backlight and other options are not correctly enabled when their bits are set to 1 not 0. This is not consistant with the documentation found in global.h and the behaviour of megatune (see latest vemsv3.ini file).
- Software brightness has been implemented for noritake VFD screens.
Since 1.0.50 - old
- mdd04 has more useful InputTrigger/AudiTrigger (primary trigger toothcount at the time secondary trigger) triggerlog that works high RPM too (mdd0c only useful for cranking because of serial baudrate!)
Since 1.0.49
- compiled with -D ONLY_LAST_TOOTHTIME allowed extremely fast revvup MembersPage/YasecElise to start
Since 1.0.46 - http://www.vems.hu/files/Firmware/release/v3_firmware_1.0.46.zip COUNTER-recommended, interpolation-problem, compiled with new compiler... stick to 1.0.45 or a recent version
- injpwm6 was dropped (reasonable injpwm-DC calculated automatically from battery voltage)
- als_launch_input ( ALS and Launch activation input channel selection) was added in place (so with MegaTune injpwm6 "added pwm-duty" can be used to tweak it, until MegaTune vemsv3.ini gets updated; verify with mcd anyway).
- 0xFF = ALS and Launch activation are original default SDA and SCL
- 0x43 (decimal 67) ALS is mcp3208 channel 4, Launch is mcp3208 channle 3
- 0x62 (decimal 98) ALS is mcp3208 channel 6, Launch is mcp3208 channle 2
- ... you get the idea. Pull to 5V with a (1k .. 20k) pullup resistor, and pull to GND with a switch / button.
- als_launch_input ( ALS and Launch activation input channel selection) was added in place (so with MegaTune injpwm6 "added pwm-duty" can be used to tweak it, until MegaTune vemsv3.ini gets updated; verify with mcd anyway).
Since 1.0.45 - http://www.vems.hu/files/Firmware/release/v3_firmware_1.0.45.zip
- very minor change: for idle solenoid, if PWM period=0 configured, than original extremely-fast softpwm applied (instead of the nicely controlled period as now). Some audi idle solenoids like it.
Since 1.0.44 - [1.0.44 experimental prelease]
- ego.correction initialized to start from 100% (no leaning for a split second when WBO2 just warms up and ego starts to act that caused hickup)
Since 1.0.43 - [1.0.43 experimental prelease]
- tach output tach_div changed to allow precise fine-tune of the output. 16 (hexa 10) is the default, results in 1 tach pulse for each event. For a 5cyl equipped with a 6cyl tach gauge use tach_div=0D (decimal 13: 6 * 13 /16 / 5 = 0.975 that is 2.5 % error);
- note: >100% injector duty code rewritten because of a misunderstanding. This should be good (but not well tested), but testing didn't reveal problem with old code either (only found some strange unreasonable config eg. injpwmt=24msec injpwm=6% duty that - although does what it should, can confuse the unaware).
- 1.0.43 has better initial sync for multitooth N-2 or N-1 wheel with camsync (note that it needs lucky missing-tooth and camsync relative position to work always well with in 1.0.42 and before).
Multitooth advanced filter changed - neglect if you don't use it (but read if you like primary_trigger=09)
- toothrel_normal=Nn #tg_prev * n/16 <= tg <= tg_prev * (1+N/16)
- toothrel_missing=Mm #tg_prev * (1.25 + m/8) <= tg <= tg_prev * (2.5 + M/8)
Multitooth advanced filter OLD semantics - before 1.0.40
If the tg (time-gap) between 2 teeth compared to tg_prev (previous time-gap)
- if( tg_prev * (1-n/16) <= tg <= tg_prev * (1+N/16)) than it's considered normal tooth
- if( tg_prev * (1.5 + m/8) <= tg <= tg_prev * (2.5 + M/8)) than it's considered missing tooth
Multitooth advanced filter NEW semantics - since 1.0.41
If the tg (time-gap) between 2 teeth compared to tg_prev (previous time-gap)
- if( tg_prev * n/16 <= tg <= tg_prev * (1+N/16)) than it's considered normal tooth
- if( tg_prev * (1.25 + m/8) <= tg <= tg_prev * (2.5 + M/8)) than it's considered missing tooth