In my last post I mentioned that there was a problem with missed injector and spark events. The problem was caused by my old program code not being able to compensate fast enough for changing engine speed. If the engine was speeding up rapidly, then the calculated values could be so far out that they don't have a chance to complete before the next combustion cycle.
To remedy this my new program also takes into account the rate of change. By determining the rate at which the speed changes (acceleration) and then applying that rate of change to all the calculated timing values, my code can get near perfect timing with fewer or no missed events.
Next thing to do is tying the injector pulse width to the measured air flow.
WOOO!! PROGRESS!!! :D