This page lists important changes to the firmware. Check this before downloading a firmware that is meant for production
When updating the board with latest firmware, please check if any of the changes affects your configuration and take action!. Read everything between the old and new revision.
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
Warning
We have found 2 urgent problems!
- First, acceleration enrichment is broken on at least 1.0.17 (compiled by you, or the released vems.hex?), havent had time yet to check when it stopped working.
- likely misconfiguration. Provide the config you used.
- Also, ignition advance interpolation is not working properly.
- remember that config and tables are always required for reports (although I cannot see how the n[] interpolation could be turned off from config though)
This is a possible showstopper for some cars, and has to be fixed ASAP
For anyone that reads this, it would be very nice if you could test these 2 things (just check in megatune, advance gauge and Acc enrichment under Realtime Display)
//Emil
Downloadable firmware releases
Download
- [1.0.17] - marginal changes compared to 1.0.16, only minor boostcontrol improvements. But yet untested !
- [1.0.16] - tested
- [1.0.14 with precompiled 12x12 size maps]
- [1.0.13]
Although it has a compiled vems.hex binary (=> no compiling needed by the enduser), at the minimum check my_make if using it. It has MSNS option defined, that should work with MegaTunix or MegaTune. vems.hex and my_make files should probably move to subdirs (several meaningful different my_make options - feel free to compile + package)
Changelog - from 20041124 release
- a small patch that allows tps_low > tps_high configuration for silly TPS sensor that reads higher voltage for lower throttle opening
- AlphaN
- engine.batt displayed on LCD mlp06
- BoostControl low freq PWM configurable
- injector PW reading changed to 10 usec on LCD
- MegaTunix stores VE to both ve_ref and learnt VE table
- send the real ("learnt" if learning is enabled) VE table to MegaTunix not the ve_ref table (that can be confusing to the unaware)
- highest RPM and kPa bin can be written from MegaTunix too
- internal rx21 variables dropped in favor of a faster interpolation implementation
since 1.0.17
- boostcontrol configured with MAP-target considers the scaled MAP (not the MAP sensor input voltage)
- boost_conf bit3:2 00,01,10,11 means 20,40,60,80% reference position for the solenoid. 40% or 60% recommended if otherwise no idea. (TODO: someone check the generated assembly code for overflow at the 8*8 bit multiplication - result should be 16bit).
- small firmware bugfix: from megatune config.primep was altered instead of element 0 of the b[] table (boostcontrol-target)
- the new (1.0.14) fuelcut_kpa is renamed to fuelcut_min_kpa. Meaning is unchanged, read below
- new variable to prevent overboost (useful until the boostcontrol PID is tuned) fuelcut_max_kpa=FF to disable; fuelcut_max_kpa=F0 to cut fuel above MAP > 240 kPa (assuming the default MY_CONF += -D KPA_CONFIG_RESOLUTION=1; naturally same meanse 480 kPa for MY_CONF += -D KPA_CONFIG_RESOLUTION=2)
- tach_channel=FF to disable
- tach_divider=.. is not used. Use FF for now, I think 00 will be used finally to disable completely
since 1.0.14:
- 8,10,12 or 16 cyl support with multitooth wheel
- Compiled with 12x12 maps. Known (optical) bug: h-table is apparently 12 element wide on LCD
- fixed the boostcontroller bug, that effected boost-target (calculated from the TPS and t[] and b[] table). If you are planning to use boost control, get this bugfix.
- the firmware intro has been re-introduced to the LCD code and tested. This is an optical feature but tells the user what firmware revision they are running.
- some boostcontroller items have been added to the display
- changed airdenfactor to not lean any more above MAT > 60C (actually, it enriches above MAT > 60C with appr. +0.1%/C ). Below MAT < 50C the universal gas-law is followed (which is appr -0.33%/C). A small plateu is applied from appr. MAT=50..60C
- added lowmap_fuelcut function: config.fuelcut_kpa=0E recommended (fuelcut under 14 kPa) or up to 12 (fuelcut under 18kPa). The hysteresis is compile-time (3kPa, and applied as config.fuelcut_kpa + LOWMAP_FUELCUT_HYSTERESIS). Those who use KPA_CONFIG_RESOLUTION=2 (for extreme boost; rare) know that every MAP-kpa related config values must be multiplied by 2 (so max range is 510kPa and 09 means 18 kPa): fuelcut_kpa is no exception. fuelcut_kpa=00 gives old behavior (disables lowmap_fuelcut), but why would anyone do that ? It is extremely difficult to tune injopen, injocfuel, kpaoffs and other config variables that become significant at low-MAP so that engine work well at 0..10 kPa . The result was engine-stumbling when you suddenly get your foot off the throttle - the iac reference positions, config.iac_integral_limit_dec and overrun_fuelresume can be tuned to eliminate the stumbling by ensuring MAP > 10kPa always holds at RPM < overrun_fuelresume, but appropriate fuelcut_kpa value ensures fuel is cut even if those crazy-low MAP values - and therefore short pulsewidths - are reached. This works so well that config.tpsdq related decel-fuelcut seems quite useless, scheduled for demolition in the near future.
since 1.0.13 rc5:
- Tested with MegaTune r021, the high resolution MAP and RPM shows correctly in megatune.
- New config variables: use config.toothrel_normal=0x76 in every case. For config.toothrel_missing=0xB5 (for N-2, eg. 60-2) and config.toothrel_missing=0x00 (for N-1, eg. 36-1). Actually, these only matter if config.primary_trigger bit3=1 and multitooth is configured bit1=0 (thus primary_trigger=09 instead of 01) but don't do that. Keep on using the same values as recommended earlier: primary_trigger=01 for multitooth and primary_trigger=FF/FE for coil type trigger (rising/falling edge) unless you know what you are doing. That way the new variables do not effect operation.
since 1.0.13:
- camsync improvements
- resync if VR trigger has noise during cranking
- unfortunately rc5 was compiled with decreased trigger resync-noise-suppression (mostly used at first-crank) values (since than reverted, to decrease chance of firstcrank misfire in case of noisier setups)
since 1.0.12:
- better MegaTune compatibility (vemsv3.ini r16 or newer)
since 1.0.11:
- kpa configuration resolution can be changed to 2kPa (but is 1kPa by default) for very high boost engines: add MY_CONF += -D KPA_CONFIG_RESOLUTION=2 to my_make
- Note1: changes also needed in MegaTune vemsv3.ini
- Note2: all the following config variables change to max 510kPa range (2kpa unit):
- k[] table
- ego_maxmap
- config.inj_stage2_start_map
- tpsdot rates
- hybrid_rpm_a
- hybrid_rpm_m
- some kpa text on LCD will become 2 kPa (eg. the axis in mtt menu)
- misc1out_minmap
- misc1out_maxmap
- misc2out_minmap
- misc2out_maxmap
- ve_learn_kpa_scale (this is not in 2kPa units, but it needs to be doubled ?)
- restart not needed after adjusting wbo2_nernstdc_target (from menu) to take effect.
- iac integral starts at max value, not 0 (higher iac position => faster startup without throttle)
- better wbo2 leave_warmup condition (leaves warmup and starts normal heater control earlier if sensor was warm for some reason; eg. because of mde02)
- after mdd02 command, fuel is cut if throttle is pressed (above tps_thresh). This can be used to calibrate WBO2 free-air calibration with WOT and fuelcut (or as a minimalistic "antitheft"). mdd00 changes back to normal behaviour.
- comm.c changed for recent r008 MegaTune (more variables logged)
- in the r1.0.11 minor lcd_display changes: "RPM:" string was addded (back), and fixed the scale of free-air o2 on LCD
- in the r11 there is a new feature on LCD page00 (mlp00): La:... shows Lambda (like "0.95" or "1.02") or O2% (like "20.7" - note that the dot moves to different position in this case!) or undefined (??.?)
- note: there was a small problem with 02 display, so in the r11_v2 in lcd_print_current_o2() a small fix was made to lcd_print_XX_X( t32 >> 8 );
- note: 'mde02' command must be used to switch on WBO2 unless engine is running (trigger is applied). This is intended this way.
since 1.0.9: camsync with coil-type primarytrigger (not restricted to multitooth). VERY IMPORTANT: USE secondary_trigger=02 if you don't use camsync, otherwise (eg. with commonly used FF value, that works no more) you won't get spark nor fuel nor automaticly activated WBO2 !!!!!
Remember:
- WhatEverYouDoYouDoItAtYourOwnRisk
- GenBoard/Manual/License/WBSensor applies to the release, since it has WBO2 enabled in my_make
Developers
NOTE: diff for lanuch control and ALS. [1]. I don't want to commit it yet, because have problem with my board and can't through test it.
NOTE: someone please review [zipped diff] prepared for review: made appr 1/3 size mainly by ripping offending $Id comments. Already commited to CVS branch STABLE1_0
Use the above list to identify changes. Takes appr. 1.5 hours. Note that boostcontrol.[ch] must be checked separately and there is ongoing work on lcd_display.c
STABLE1_0 is for testing, it's not released stuff (we use the announced zip for releases).
The STABLE1_0 branch can be obtained via read-only cvs from windows, start-menu, cmd:\n
set CVSROOT=:pserver:anonymous@cvs.sourceforge.net:/cvsroot/megasquirtavr <enter> set HOME=c: <enter> cvs login<enter> ( <enter> again for password, ignore any error messages ) cvs update -d -r STABLE1_0 or (if no working copy yet): cvs checkout -r STABLE1_0 firmware
2005-02-20
- committed 2x20 LCD support. This is identical to 4x20 except that it has twice the number of pages. Every second page is just the bottom 2 lines of the 4x20 version.
2005-02-08
- stable revision of 2004/11/24 16:00 was tagged as STABLE_1_0. This was done in order to separate alpha quality code found in HEAD with tested production quality code we should be running. Each revision tag will only be modified with bugfixes.
2004-10-31
- BoostController (old variables not changed) and improved injector-opening rampup control. injocfuel semantics changed, see GenBoard/Manual/Config/InjectorOpening
2004-10-27
- Improved idle control. Ignition advance is adjusted to maintain a constant idling rpm. To disable this feature, set iac_ign_advance_change=00, iac_ign_retard_change=00, iac_ign_advance_limit=00, iac_ign_retard_limit=00, iac_ign_threshold=ff.
2004-10-10
- speed-density precision bumped up greatly. The first chance ever for the diy-ers to do precise fueling for turbo engines. The old semantics we used earlier (inherited from motorola-megasquirt) used 4% (!) steps at 25kPa MAP (and 1% steps at 100kPa). This was the last remained inferior signal precision in the whole fuel-calculation (we made everything nice in the meantime, eg. ego correction. this waited somehow...). Now this signal is 11 bit internally (1/20 %).
- set config.kpafac to your MAP range [2kPa].
- 2.5 bar MAP sensor: 7D
- 1.15 bar MAP sensor: (hexa) 39
- 5.1 bar MAP sensor (impressive boost !!): FF (max value)
Note that this makes GenBoard/VerThree the first diy ECM that supports boost pressure higher than 150 kPa without hack. (this was the main reason for the change: a racecar runs at 200..240 kPa boost and they asked us to make precision superior)
2004-09-17
- eventqueue changed in some ways:
- more reasonable inlining
- faster reaction
- better readability
CVS head, with eventqueue.c 1.96 (or earlier 1.94, but not 1.95 experiment) is good for production.
Played with eventqueue, make it simpler and faster. For readability and marketing reasons; because some people are concerned about parameters that cannot be measured in engine output, only on oscilloscope. At 15000 RPM measured 6/20 degree average delay in the ign signal, this is now lowered to about 4 / 100 degree (could be even better with further changes). This is so close to theoretical optimum 0.000000 sec that it means less than 0.3C degree in intake temps (MAT).
2004-09-12
- comm.c tabledump improved so it can send out the 16x8 table (if someone forgot what he sent in :-), someone please test mct command (write here) -> mct command verified, j/l/n/r 16 wide, h/k 8 wide - DB . If VE_TABLE_FIX is defined in my_make (what a bad name !!!) the 16 bit learnt VE table is outputted in j[x]=xxxx xxxx xxxx ... format, possibly 16 values on a line (if VE_SIZE_RPM=16).
2004-08-27
- config.cwl, cwh, injpwmt and primep can be configured to higher than 25.5 msec : see GenBoard/Manual/Config/CoolantTemperature
2004-08-25
- knock sensor code is now allowed to modify ignition advance. Unless you have mounted a knock sensor, set config.knock_conf = 00 AND config.knock_default_retard = 00 such that the actual ignition advance, as specified in the n-table, is unaffected.
2004-08-08
- the multitooth branch initialized engine.igncount properly => cranking was long for coil-type setup. (it was immediately obvious from TimingLight table tests, so I guess everyone uses multitooth trigger). Anyway, anyone with coil-type setup should upgrade.
2004-07-28
- synchronized o2() to WBO2 calc_afr(). This allows setting faster EGO convergence, without the risk of divergent behavior for bad (speed_limit =) config.ego_pid_kp; config setting.
- maybe we could make calc_afr() even more frequent, with increasing the frequency of nernst sampling or just running the pump controller more often. Someone could experiment with it.
2004-07-27
- multitooth setup improved.
- Dave will test it soon (and document the new variable), and than it worths to upgrade (with multitooth setup).
- preparations done for time from last possible pulse
2004-07-25
- change config.tooth_wheel_twidth2 to include the config.tooth_wheel_twidth1 as well (add tooth_wheel_twidth1 at upgrade if you had it configured before);
- 2 * tooth_wheel_twidth1 for a 36-1 and
- 3 * tooth_wheel_twidth1 for a 60-2
2004-07-07
variable intake actuator (simple RPM-based switch) and WOT actuator (that switches at WOT, but only above a certain RPM) for NOS made easily configurable.
Both the RPM and the output channel is configurable. On GenBoard/VerThree you can select a free channel, which can be a 100A FET if you like (like IRL2203, but the connector cannot handle that current). Even several channels (this is only for the injector FETs) can be selected to switch at the same time, according to GenBoard/Manual/DigitalOut
Set all these config variables to FF if you don't need the feature:\n
uint8_t act_wot_rpm; // WOT switch RPM threshold (FF=disable) uint8_t act_wot_channel; // WOT switch output channel selector (P259_0) uint8_t act_rpm_rpm; // RPM switch RPM threshold (FF=disable) uint8_t act_rpm_channel; // RPM switch output channel selector
Iac.conf is extended to select between a ON/OFF idle air valve, and a PWM controlled type by unsetting/setting bit 3 of iac.conf
2004-05-26
Lambdacorr table is now unconditionally used. If no l-table was used before, then add the following (stoich) table to tables.txt\n
### lambdacorr: afr=14.7 ### l[0]=38 38 38 38 38 38 38 38 l[1]=38 38 38 38 38 38 38 38 l[2]=38 38 38 38 38 38 38 38 l[3]=38 38 38 38 38 38 38 38 l[4]=38 38 38 38 38 38 38 38 l[5]=38 38 38 38 38 38 38 38 l[6]=38 38 38 38 38 38 38 38 l[7]=38 38 38 38 38 38 38 38
The lambdacorr-values are a multiplied enrichment: \n
lambdacorr = (l+200)/256
You can see that 56 (hexadecimal 38) means a 1.0 (stoich) lambdacorr value.