Ignition parameters for odd fire coil type configuration.

In the descriptions, let's always use the teeth after the short gap ( short gap=30 deg, not the long 90 deg gap) as a reference,

Yes 10° before TDC is confirmed by the manual when adjusting the VR sensor position, and the eprom code it self since 10° is subtracted from the ignition map value to make a refence for teeth pulse.

Indeed on can start counting from the crank teeth after the short gap which follows the cam tooth after the short cam gap (double dot on the pic).

However if one does not that the first cylinder to fire is with the 30° delay it should be better that the fist fire comes for the first tooth of the short gap so that the next firing commes at 120° +30°delay which is in phase with the 2nd tooth of the next short gap (yes after the long gap !!).

For Microplex everything seems more simple, see below.

The first achievement I would reach is

- get VEMS firing for bankA and for Bank B the same way that it is done by the biturbo Ecu. Remember firing for bankA is related to the first crank teeth of short gap and bankB for the second - or the reverse, it does not matter. Then, since the firing on each bank are evenly timed, it would just remain a matter of wiring the thing properly.

- have this firing robust with regards to noise or errors (robustness and tests are to be defined)

All non-conforming descriptions should be changed or deleted. Any misunderstanding can result in problems and lots of wasted time for all involved.

As I understand from the eprom code, the Marelli microplex logic for starting the ignition is the following

Event Do
On First CamTooth? read Start Count Crank teeth
On Second CamTooth? read IF CrankCount? = 2 Do next cycle Ignition ELSE wait for CamTooth?

Indeed it is even more robust than that since there is a switch case for the 12 crank teeth of an ignition cycle and the 2 Cam teeth are expected the first before the 11th and the other after the 12th.

Besides they simply put a constant 120° dwell time

  • (but this is too long at low RPM)
since there is always 120° (that is 30°+90° or 90°+30°)between the 2 previous teeth and the firing tooth.

Cyl2 TDC is 100 degrees from that Crankcount=2 pulse.

BLEU : IgnitBiturbo?1000.wav - JAUNE: IgnA? - VERT IgnB?



Lets note the 6 tuples of 2 crank teeth which are seen by the VR sensor during a double revolution of 720 ° by the following:

/t01/.30°./t02/ .. 90°.. /t03/.30°./t04/ .. 90°.. /t05/.30°./t06/ 90°

/t11/.30°./t12/ .. 90°.. /t13/30°/t14/ .. 90°.. /t15/.30°./t16/ 90°

Genboard has to fire 10° before the following teeth

/t01/ ..... 150° .... /t04/ .. 90°.. /t05/ ..... 150° ....

/t12/ .. 90°.. /t13/ ..... 150° .... /t16/ .. 90°..

Can we do odd firing with coil type triggers?


Anyway I don't even know on which crank tooth Firmware 1.1.90 start counting. I should make a triggerlog next time.

As for the use of spark delay, I think I have understood :

Because of the odd fire configuration of genboard, it remains 6 reference trigger pulse per double cycle from the 12 crank triggers, hence they are 120 ° apart. That is

/t01/. 120°.. /t03/.120°.. /t05/.. 120°

/t11/..120° /t13/ ..120° /t15/..120°


/t02/. 120°.. /t04/.120° etc depending of when firmware does the sync from the cam trigger (I have to find out that)

Indeed if we note d03,d11, d15 the ignition events delayed by 30°, we get what we need:

/t01/.150°. /d03/.90°./t05/. 150°. /d11/.90°./t13/.150°/d15/. 90°.

Help for ignout config

So that we can help with ignout config that matches your wiring, fill this in:


I am not yet at this point. I would connect the firings lines (with diodes)* for the bank A all together, do the same for bank B and fire the engine through the distributor the same way it is done with the Microplex (we are still far from there).

I finally understood that this is useless since it is possible to drive freely any ignition event to any ignition output of the genboard (yes Versatility)!! and this is already done by the config file since

h[2]=70 40 70 40 70 40 70 70

As we see only 2 output ports are used in order to fire the cylinders of bankA or bank B.

Of course now one needs to know which is which and the Triggerlog which now records the ignitions events would be of great help for that.

I also found out the delay parameters from the VemsTune menus "Cyl separated Spark delay" and was surprised to see it is already set as one wanted, this is also define, I presume, by the table h[3] of the config file (MembersPage/OddFireSixCyl):

h[3]=00 78 00 78 00 78 00 00

because 0x78 = 120 = 4*30°.

First Bench tests

- Here after some bench test from the board ...

- Then mine ...

I made the Vems and Marelli Microplex running in // on a the bench. Vems EC26 Pin10 was for ignition bank A, Pin11 for bank B

After having tried TDC After Trigger =10, 40°, TDC After Trigger = 100° gave identical ignition signal respectively on each bank. It runs well for some time as seen on logic analyser


From top to down: Ignition BankA? Mplx, BankA? Vems, BankBMplx?, BankB? Vems. Ignition is done at rising edges.

This is perfect.

However later on, after switching on and off, testing a 5000 RPM .wav file(the signal from the trigger play is not strong enough to stimulate the Mplex at this speed) etc... I got some desync of Vems ignition


Besides I quoted that VemsTune shows off alarms from time to time: "Too many Primary Trigger" "Less sec trig" etc..

I should say that the 2nd LM1815 I fitted was for some reason in mode 3 Pin5=0V, that is input arming=0V. So I went to set mode 2 Pin5=5V (arming at 0.2V)but when I desolder some wires on the chip I had set to stimulate logical outputs, I think I burn it and I did not made tests for Mode2 Pin5=5V.

I cannot say if the desync of Vems ign out is a consequence of the trigger errors (my bench facilities are limited), but anyway If it is the case, one main point is that misplaced firing are done by Vems despite these error :

Does Vems handles these defaults?.

I think in case of non recoverable trigger error there should be no ignition. May be safer to have these features on firmware before running the ecu on the car.

First log files

I have recorded the following .vemsLog

and triggerlog

".VemsLog? files"

Alright I wanted to show the log history for

TriggerErrorType? log + disp_spark10 + disp_spark11

from a .vemslog file.

So, after playing sometime with the menus options

- I created a MultiGraphDescriptor? named dbgIgn, then

- I open the Editor to reference the data names, then

- I append new empty node (why is it called a node?), then

- I edit this empty node by giving the name of the data (say disp_spark10

-> does not work

Then I convert the .vemslog to .csv. -> Bug: it freeze at the end of the conversion Auto-close option ?

Anyway, fine tool but the data I wanted to watch was not recorded.

Allright, learning the hard way, I should have told VemsTune which data I wanted to log.

No No, no way, you cannot set your record profile.

Going to do something with the .csv file …

Suggestion : VemsTune is becoming a huge tool. Why not to split it and have an independent log viewer/analyser tool (weighting 80KO ;p) ) with easy access to basic functions!!

triggerlog files

Tried to read my triggerlogs on VemsTune stand alone with Tools/ Analyse/recordTriggerLog. The File is 165k.

What I have noticed (see underneath):

- Primary time is alright 5ms, 15ms, 5ms, 15ms etc

(Remark : Primary dif takes the dif between last primary time and secondary time whenever a end trigger occurs between the 2 primary)

- At some moment there is a lot (say 7) of secondary pulses which are recorded at short time, the smaller being say every 0.024ms.

- When this occurs the primary pulses are separated by 20 ms, it means that one primary trigger is off

12210.320(7) 14.9963.00  MISSING TOOTH:2cycle=8
14230.316(9)15.0003.00  MISSING TOOTH:2cycle=2
16250.312(11)14.9963.00  MISSING TOOTH:2cycle=2
17   253.776(5)3.464 
18   253.800(6)0.024 
19   253.828(7)0.028 
20   253.856(8)0.028 
21   253.904(9)0.048 
22   253.928(10)0.024 
23   253.956(11)0.028 
24   254.884(12)0.928 

I measure the width of pulse out signal from the chip LM1815 as 0.030 ms. "Pulse width" is shown as 20-22 by VemsTune when running.

Hence the multi 2nd trigger pulses I get can be LM1815 related and due to the fact that I set the arming threshold to 0V by setting the mode 2.

I have to change the mode and the threshold (200mV Mode 3)

(Remark: The TriggerLog? tools should use preferably ";" as separator instead of "," because "," is used in the log text and some parser still split cells even for "," in text enclosed by quotes.

Successful Ignition Bench Tests

(June 2011)

I use for these tests the brand new ECU just received (SN V3.3_4003856).

VemsTune is 11-06-04

After some trials, I get the Firmware 1.1.91 uploaded.

I first redo the previous tests (see First Bench Tests) by running in // with Vems the car ignition ecu (Microplex) in order to compare the ignition outputs signal by pulldown resitors from 5V.




  • I did not test with noisy trigger signal

I then test dynamic ignition, firing each plugs separately. I set the following simple ignition config: 0 : I259-0, 1 : I259-1, ..., 5 : I259-5


plot 4 and 8 are the Microplex bankA and bank B ignition output. REMARKS

On the VemsTune 2nd Ignition window, the one which figures out the output pins for the choosen ignition config, the ouput 0 appears in RED and an alarm message asks to "Press validate button for details" , I did so but nothing came up ???

(July 2011)

I replace the LM1815 (thanks for the mailed chip) on the other ECU (I burnt it during my first tests) and set the LM1815 mode to for 200mv threshold


Ignition config concerns and solution

I thought that TDC = 100° and SparkDelay? (SPD) of 0°,30°,0°,30° etc were good parameters for ignition pattern.

However I have not taken care of the Spark Angle from the ignition Map and pid attention to sync with crank triggger!

Setting Spark Angle=10° at 1000rpm and plotting ignition versus crank trigger gives:


On that picture the logic plots n°4 and 8 are for MPlex ignition (bank A and B), SPA for Mplex is little more than 10° and crank trigger is 10° TDC

I tried several other settings

Finally I set TDC=100 and SPD 30 60 30 60... .With SPA=10° this gives:


Alternatively I could have set TDC=110 and SPD 20 50 20 50 ...

Copy of the biturbo ignition map to genboard

This biturbo map is a 16x16 array where lines are for MAP and columns for RPM. I found out the scale for the MAP, I also need the RPM scale precisely...

Alright I found out the coefficient and what the timer of the 6803U is doing. We would be able to do a good compare.

Q. The Ignition map from 1.1.94 appears to be a 12x12 table. I had to make choices when copying the 16X16 MPlex table onto Vems.

Why not run a 16x16 table as the 25 years old MPlex firmware does?

Inj outputs - same order as ign

Use the same injout entry as the ign (if topmost ign is, say, cyl3, topmost inj should be also cyl3 output for unbiased inj-angle positions).