Do-It-Yourself Computer Programmable
Ignition Advance Controller
Data Logger

Disclaimer: This system is experimental and is not for use in aircraft!


The MegaSpark is a micro-processor unit to control the timing advance/retard in distributor based ignition system.  MegaSpark controls only one coil, it is not a multi-coil waste spark system.  A separate ignitor or CDI system is required to drive the coil.  This system was originally constructed to control a MSD 6AL Ignition Module, but potentionally any ignition module that accepts convention point input and internally handles dwell (does not depend on the input for dwell) could work.  The input to MegaSpark is one (and only one) trigger for each spark - no multi-toothed wheels.  This input trigger needs to occur about 5 crank degrees before the greatest desired ignition advance and must always occur the same number of degrees before TDC.  MegaSpark controls the timing by delaying this input trigger.  This delay is based on a 1 usec clock, which provides 1/10 degree resolution at 8000 RPM.  The desired timing curve emulates a distributor and is calculated to 1/2 degree.  Base timing is controlled by RPM (mechanical advance) with a MAP adjustment added in (vacuum/boost advance/retard).  Further, TPS or RPM thresholds can allow the "feathering" in of the MAP adjustment to simulate a "ported" vacuum source.


* Run on MegaSquirt v2.2 Hardware w/ no modifications (no EFI support)
* Supports Even or Odd Fire Engines -
    4-stroke: 2,3,4,5,6,8,10,12 cylinders
    2-stroke: 1,2,3,4,5,6 cylinder
* Base Advance by RPM
* MAP Adjustment - vacuum/boost advance/retard
* Emulation of "ported vacuum" from non-ported MAP via TPS or RPM (boost condition is not feathered)
* 115 or 250 KPa MAP sensor support
* (2) outputs can be activated by RPM, MAP, TPS, etc, for shift lights, NOS, etc.
* rev limiter w/ (9) hardness levels, spark drop or retard
* Realtime Data Logging w/ file play back
* RPM calculated to +/-5 RPM @ 8000 RPM - potential for in vehicle HP/torque measurements
* 3-D contour plot of ignition timing

For details on installation & operation, please see -

MegaSpark Manual


uP software, RevNum 89
    includes S19
PC software, Vers 1.6.1, Visual Basic source code
    includes a sample Data Log file, 030329160304.csv - my first 1/4 ET in the 13's thanks to MegaSpark
    please ignore the RPM glitches, they where from a software "feature" that has since been fixed!

Project Status/ Revisions

Oct '02 - started project, initially to monitor the ignition advance
Nov '02 - system being used to monitor the ignition advance of the distributor
Dec '02 - wrote the code to actually control the ignition advance


Finally connected the to MSD point input to actually control the ignition timing.  Started right up with no problems!  Ran in the garage, verifying the timing with a timing light.  Seeing about a 1 degree "jitter" as it idles.  I believe this is probably being caused by my magnets not being exactly 180 degrees apart - they were mounted by hand.
I had been concerned that only having (2) crank references (magnets) would cause error when the crank accels/decels.  I set the timing to a constant 14 degrees for all RPM's and then repeatedly rev'd the engine.  I did not see any change in timing beyond the "jitter".  The software includes a crank accel/decel compensation - for fun I comment this out, and tried again.  This time I saw about 2-3 degree dip in the timing when I rev'd the engine.  Much less than what I had anticipated!


A break in the rain, so I went for a drive!  Went about 20 miles.  The timing curve needs a little adjusting, but no bogs or hesitation off-idle, which I has concerned about.  This was done with RPM only advance, no MAP.  Only two problems -
1) miss starting at 6500 RPM - actually this feels/sounds like the MSD rev limiter kicking in, but it is set at 8000.  I can remove the rev limiter chip (disabling it) to verify this.  If so then my initial guess is that dwell on the MSD's point input is some how causing the problem.
2) one CPU reset - may need to put an opto-isolator in MSD driver circuit.  I was getting *lots* of CPU resets when I initially started monitoring the ignition timing but didn't have the opto on the MSD tach-out.  None since installing the that opto until now.


Changed the duty cycle on the MSD point input from 75% (!) to 50%.  Now it to pulls cleanly to 8000 RPM!  However, I'm having more CPU resets.  Will breadboard a new MSD driver circuit w/ an opto-isolator, but this have to wait until I can get the parts.  Also notice a few glitches in the RPM signal.  I think this will be a matter of adjusting the hall effect to magnet distance.


I think the CPU resets are fixed!  I disconnected the MSD driver GND from the MegaSquirt board and attached it directly to the chassis - no opto needed.  Ran great during a short test drive!  But need more miles to make sure.


Was only able to get out for one test drive in the last week, but the MegaSpark performed well.  An hour of mixed city & highway driving was trouble free.  Posted latest software which is now configurable for the number of cylinders.


MegaSpark spends a day at the drapstrip.  Ran my first 13 - 13.985!!!   Running .3 faster than my previous typical ET.  Only change is now running the MegaSpark.  Ran all today with no problems.  I estimate my MegaSpark has now delivered 1 million sparks.


Major software & web site update.  Many new features and a few bug fixes.  I am going to call this the first "real" release, PC V1.0.0, uP RevNum 80.


Update PC V1.1.0, uP RevNum 81 -
added drop/retard option to rev limiter
added option to invert spark output, INJ-2
update manual - ignition box interfacing


Update PC V1.2.0, uP RevNum 82 -
added analog dials to realtime screen
swapped Reset/Knock/Input and RevLimit LEDs
allow negative Ignition and IgnMSD values to -32 (retard ATDC)
fixed RPM outputs and RevLimit LED remaining on after stall detected


Update, uP RevNum 83 -
fixed problem with negative Ignition and IgnMSD values


Update PC V1.4.0, uP RevNum 85 -
added odd-fire support


Update uP RevNum 86 -
more changes for odd-fire support


Update PC V1.4.2 -
fixed default directory to short cut's "Start In:" directory


Update PC V1.4.4 -
fixed problem with unexpected retard


Update PC V1.4.5, uP RevNum 87 -
Knock Sensor retard parameters on screen - hardware interface still in development!
changed uP low-voltage reset from 3V to 5V


Update PC V1.4.6 -
Fix realtime dials hidden by graphs on some versions of windows


Update uP RevNum 88 -
fixed "Pulses Until 1st Spark" not initialized properly on power up - could cause long cranking times


Update PC V1.5.0, uP RevNum 89 -
added selection for O2 AFR (DIY-WB) or voltage on realtime display
added selection to choice the variable (RPM, MAP, TPS, etc) for triggering the activated outputs


Update PC V1.6.0
added 3-D contour plot of ignition timing


Update PC V1.6.1
enhancements to 3-D contour plot


MegaSpark Manual
MegaSquirt EFI
MegaSquirt Forums

If you have comments, suggestions, questions, etc, please go to

This page has been hit  times. Last updated 11/29/04    Some of my other projects