It's possible to generate each cylinder's spark at the right time by simply knowing TDC #1 instantaneously (almost), and given that provides accurate crankshaft speed, the appropriate time interval, or number of pulses counted, determines subsequent spark times. Gets a bit hairy.
Actually you don't want to measure TDC of #1 because that would be to late. You would never be able to have advanced ignition timing, it would be like try to predict the future. If you did measure TDC then your ignition would be 1 or 2 revolutions behind, 1 for wasted spark. You have to put your crank sensor at least 5 derees more advanced than your maximum timing advance to give the cpu time to do the calculations. ECM's, ECU's, or elctronic ignition units can only delay the spark firing they can't advance it. Less delay = more ignition advance seen, more delay = less ignition advance seen. On one engine I setup a ignition by sensing when the intake rocker closed the #1 intake valve and then it used the crank sensor to fire the cylinders at the correct advance.
Jack,
You still need more than one pulse per revolution to measure the rpm for the purposes of controlling when to fire each cylinder.
My context was referring to using this technology in a model engine ignition application.While you could do it with a single sensor as you describe, it would require a relative fast microcontroller and some sophisticated software to do the pulse width measurement and comparison.
Tim
We use a single pulse per rev. and use the pulse width to calculate the rpm, it's actually quite accurate. We use a PIC12F1840 at 16mhz, it's not that fast or expensive at $1.50 each for a 8 bit cpu. The code isn't that complicated either.
Ray