Latest summary:

VEMS team implemented a special firmware solution for Maserati startup

This page was used for conversation during the implementation and testing, mostly historical now. We will do some cleanup on MembersPage/OddFireSixCyl and post good config (and related ign/inj output wiring for the Maserati firing order).

..July 2012..

I did the full install of the wasted spark ignition on the engine biturbo, the injection being still done by the OEM IAW Weber ecu of the biturbo. The coil I used was the Bosch 3x2.

I had run the Vems ignition through the distributor for about 3000 km. I made the OEM Microplex Marelli ignition ecu (2 oem ecus : one for the injection, one for the ignition) to run in // with Vems and I got a switch to commute the origin of the firing signal to the coils (there are 2 on the biturbo). I did so for two purposes:

1) to keep the benefit of the knock control of Microplex

2) to start the engine faster in a quarter of a turn with the Microplex instead of the 2 revolutions and more( yes 4 pi) given by Vems ( fw <= 1.2.5 , that was before the "kickstart" implementation ).

There has been some discussion about this sluggish start here where one might say that DIS was the cause of it. However without DIS I get the same results and even worse because of the wasted sparks

Wasted spark

Wasted spark for this odd engine is not obvious. The best that one can do is to pair cylinders in such a way that one cylinder is TDC and the other one is 30 deg admission.

I previously done some successful testing by firing 4 cylinders through the DIS and 2 directly wasted spark from the Bosch coil.


Config : Vems Maserati config (see MembersPage/OddFireSixCyl) :TDC delay after trigger is 127deg, spark delays are 3,33,3,33,3,33, (TDC = 130 deg is not allowed), spark advance is 10 deg.

The test is done by increasing from zero the level of the z012 triggers signals.


One sees:

- the 2 sec trig from the cam pulley per each revolution (4 pi)

- the 6 pairs of prim trig per each revolution: 3 pairs are on the crank pulley 90-30-90-30-90-30

- odd firing 150-90-150-90-150-90

- first fire after 2 revolutions (and more)

-> It is unclear to tell which sec trig from the cam pair is used

-> I checked another config: TDC delay after trigger 10 deg, spark delay 30,0,30,0,30,0 which should give the same. For some reason, the fire comes 30 deg sooner.


On the first picture the firing given by Vems (4 pi) is not used since the engine is quicklystarted by the Microplex(same as on bench)

On the second picture

- the first fire (f1) is given by Vems after 4pi (and more)

- the next fire is at f1+150+90

- other fires are a kind of mess for a while but everything comes in order after 2 more revolutions

-> the firing @ f1+150 might be missing because it was off the DIS finger. Indeed Vems probably computes the next time to fire from the time interval of the last two prim triggers, since these triggers are 120 deg apart and the acceleration is high, the time to fire may be off the DIS finger.

-> All together the engine truly start up takes 8 pi +


This is when engine is stopped so sectrig is just missed, the first sectrig will come ~1.99 camrot

Unfortunately at least +1/3 camrot is wasted (so final worst-case is ~2.4 instead of 2.1 camrot ) in current implementation because it's internally flagged "out-of-sync" before the campulses come, and the sync only really starts after that (not taking angle-measurements before the 2 sectrig pulses come)


The first try was done with 7 deg spark advance at 399 rpm during crank and 22deg at 1000deg 1bar .... The engine says "bang"

Next try done after increasing the crank spark advance to 25 deg


I did not got the bang in that case but the trigs and the fires seem out of sync, engine appears to slow down even when the fire is not too badly timed.

The reasons for these failures were that the high Vems delay to fire when cranking adds up to the 30deg delay of the wasted spark during admission and makes ignition to occur on the paired cylinder.

Finally, still increasing the spark advance during cranking (25 deg @ 299 rpm, 35deg @900 rpm )I was able to start the engine


Do you have a *.triggerlog of this (or similar) real startup ?

  • 1 triggerlog for bad start

Trying to improve the start, I reach this final config:

(45 deg @ 400rpm!!! see REF2 files) which is obviously non tractable.

Aiming to get a reasonably good ignition control, better than the Marelli Microplex(6803 processor), I think that

  • the 720 deg delay before the first fire should be reduced
  • Vems delay to fire during the acceleration of the cranking due to the few (3) trigs used for the computation should be corrected
  • wasted spark ignition is too much border limit to be used on this odd engine

Some computation to explain the hard startup

A rough computation shows that the current firmware's strategy for this trigger cranking may not allow a clean start (or require ignadv compensation).

I believe that Vems computes the time of the next firing from the time interval (Told) of the last 2 triggers (120 apart).

Let the starter cranks at 300rpm. When started with the Microplex ecu, the engine reaches 800 rpm quite fast say in 600deg (5x120) So the speed increase of 100 rpm each 120deg phase.

Hence after the first fire, speed has increased by 30% (100rpm) at the next 120 deg trig. Which means that this 2nd trigger is 30% or 36 deg sooner than expected (or more in the case of firing with the 30deg spark delay)from Told.

So at best the startup is messed up, at worse, with wasted spark, the paired cylinder is ignited at 60 deg on admission (30+36 - 7 advance)...

Thanks for the detailed triggerlogs.

We implemented "trigonLONGgap" in 1.2.5 firmware, effecting the "short-gap-trigger". see 1.2.5 on GenBoard/UnderDevelopment/FirmwareChanges

Times from MUCH closer (less than half) compared to earlier.

[Some bench-tests with config included]

proposed mazerati z012 configlet: (Trigger settings for Maserati Oddfire 90+150 engine)












h[1]=00 05 04 03 02 01 00 00




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

August 17 2012

Thanks for the return and the new compile.

"please check that this helps to achieve predictable ign at the desired BTDC-angle during Maserati startup ?"

I will do it next week

"is the assumption good that the pulse after the (30 crankdegree) short-gap is the actual "10 crankdeg BTDC cranking ignadv" position (for every 2nd event) ?"

Yes each crank trigger occurs 10deg before relevant TDC

"[Some bench-tests with config included]"

humm... Anyway to bench test, better to set ignition advance = constant 10deg

pre_sync func (suggestion)

I do not know how the firmware is designed, but it should be possible to write some specific pre_sync func whenever the oem trigger sync is too much exotic. Its purpose would be to output a Vems standard sync.

In the case of Marelli ignition, this quite simple func would be (to complete):

INPUT: prim_trig_event, sec_trig_event

OUTPUT: sync_event

IF sec_trig_event START COUNT prim_trig_event

IF n_prim_trig_event = 2 AND new_sec_trig_event

RETURN sync_event

Fast startup algorithm (suggestion)

When the first fire is done, engine is in order and the following fires occur mostly at the same phase/times.

Hence an alternative to speed computation which leads to delays when there are too less trig events, could be (to complete) :

August 28 2012

fw upload trick

I messed up when uploading 1.2.5. Communications went dead after reboot. Hopefully the Vems suppor gives me the way to go.

- Switch-on Genboard with pin 2 an 3 of the rs232 link connected this tells the bootloader whitch is RS232 capable, that someone is speaking with him (that's himself). So you stay in Bootloader mode

- Remove Pin2-Pin3 connection, start VT and there VT is clever: it recognize genboard to be in bootloader mode and offer you to proceed fw upload.

Testing 1.2.5 on bench

To recall, we look for the first of the following trigger picture


There Ignition Advance = 10.

One sees that

- Prim trigger (90,30,90,30, ...) is for each cylinder and occurs 10deg before TDC.

- Sparks are 150,90,150,.. and with 10 Advance comes on time with the triggers.

  • To resume spark sync: spark occurs on first primTrig after first secTric (of the short gap) and next spark came 150 after.

1) Hereafter the result I get with 1.2.5


for this config



TDCafterTrigger? = 40deg



As done before, I used to increase the level of the trig signals do see the delay for the first ignition.

2) If the first spark gap above was 90 instead of 150 things should be better. So I took


This is what I get


with the following config

here IgnitionAdvance? = 35deg

3) In any case if the first spark is delayed of 30deg then to put it back on the primtrig, TDCAfterTrigger? should be = 10. Doing the test I got strange results having 12 ignitions per cycle!!. Anyhow it is know that te fw could not work with this short delay.


I put there the comments I got today for this page.

CCCC ++++++++++++++++++++++++++++++++++++++++++++++++++++++++

What is the angle of the primtrig tooth after the long-gap ?

  • short-gap is the actual "10 crankdeg BTDC cranking ignadv" position (for every 2nd event)": Yes each crank trigger occurs 10deg before relevant TDC

AA ++++++++++++++++++++++++++++++++++++++++++++++++++++++++

I do not understand what is long gap or short gap, neither ""10 crank deg BTDC cranking ignadv" "

Indeed crank trigger occurs 10deg before relevant TDC.

Do you need the delay between sectri and primTrig?

CCC ++++++++++++++++++++++++++++++++++++++++++++++++++++++++


See above, with spark delay = 30,0,30,0,30,0, to get the sync one needs TDCAfterTrigger?=10deg

2012-09-18 After the maserati was found to be good at normal running, but disgraceful at high RPM-variations during cranking, the maserati code was reimplemented in 1.2.6 for very quick sync at startup and using 10BTDC teeth during cranking (config also changed, see GenBoard/UnderDevelopment/FirmwareChanges and MembersPage/OddFireSixCyl ).


Hourrah!, I finally got the good configuration to successfully test fw1.2.6 ignition on the car (through DIS. It is based on MembersPage/OddFireSixCyl config, the last trick being to swap the 2 coil lines bankA/bankB.

See hereafter the 2 beautiful triggerlog. Note that underb crankingthreshold=499rpm the spark advance is always set to 10deg, hence by theory the sparks should occurs at the time of the corresponding crank trigger. Spark advance is 20deg @1000deg and it is interpolated when running between 499 and 1000rpm



One could object that on the second log, the 6th spark event is misplaced. This might be because the cross from cranking to running mode. Hence rpm slow down somewhat and cranking mode probably returns. The Vems team is aware of that.

In any case this is very successful. Even more since I guess there is not too many ECU which handle the Weber Marelli odd-fire timing from the actual OEM triggers. Hope this paves the way to many more good start oddfire engines.

Now I can mount the 3 coils (2x1 bosch-mercedes coil ) I have kept ready for the car secured in their home made cradle... (one can also see there my previous 3x2Bosch cradle)



Last, I should change the title of this page for: FromEvilToJollyGoodOddFireStartup? and thank the VEMS team for their fw support...