I was wanting to measure engine rpm by sensing when the coil is triggered. Its a single coil system, with power to the coil at all times (with the key on) and to trigger the coil it is earthed.

So, to measure rpm I could detect when the coil is earthed, but how can I do this? I would need to protect the Arduino from voltage spikes etc, a optoisolator?

Or I could take a signal from the rev counter gauge in the dash, it is driven by a square wave signal, I think this would be possible to use PulseIn() to measure the squarewave, or is there a better way? Im also not sure if it is a 5v or 12v signal, again would I use a optoisolator to protect the arduino and maybe a voltage divider if the signal is 12v?

I dont have a oscilloscope, is there another way I could measure the voltage? I have a digital multimeter.

I think you would be better off tapping into the rev counter's clean square wave signal as opposed to looking at the coil (-) terminal. The signal on the (-) side of the coil is very dirty and worse if you affect it any way it could alter the performance of the ignition system.You should be able to use an opto isolator on the rev counter's signal with no problem too.

There's a more recent version of the board with a lot more options, including a true zero-point crossing detector for use with variable-reluctance, Hall Effect, HEI, and EDIS systems. Circuit diagrams and discussion here:

"Many ignition events per second" is not necessarily all that fast. An Arduino can do many, many things per second. :-)

If there aren't a lot of other things that the CPU needs to be doing at the same time, you could probably get away with a loop using DigitalRead() to watch the line. ("Polling loop," as people say.) Even for an 8-cylinder engine at 12,000 rpm, you have 20 us between pulses (assuming 4-cycle engine) which is enough time for a couple hundred AVR instructions.

Megasquirt has the coil input triggering an interrupt, since it needs to do a lot of other things at the same time--computing fuel delivery rates and turning injectors on and off, for example.

I think either way would probably work, and neither would be very hard to do. If all you do between coil pulses is process the results of the last pulse, as in a tachometer, then I see less advantage to using an interrupt.