Once upon a time, I was reading about difficulties someone was having with his programmable ignition. On hot days, he would have to pop the cover and set it back one setting to keep it from knocking. I thought it would be rather easy for them to add a temperature sensor to back off timing on hot days. I had also been doing research about a complete do-it-yourself ECM that would control spark, fuel injection, etc. I put my background in computer programming with my background in electronics together and decided to make an electronic ignition that would take care of the temperature situation.
I didn't stop there. I was thinking to myself as if I was an ignition module that if I monitor the TPS and the time between sparks, I can get an accurate measure of acceleration of the engine. If I poke the ignition forward or backward a degree, I can measure the difference and decide what's the best advance for that RPM and TPS relationship, and grab the temperature as well. Note: I have found that the engine has maximum power for the burn when the ignition is advanced slightly past the point of knocking. That means I'm going to have to get a knock sensor to do this like I want.
My first prototype consisted of the power components on a circuit board and wires going to a prototyping board. I verified that I could get it to turn on the coil when the hall effect sensor saw the opening in the gap an turn off the coil when the gap closed, thereby causing a 0 degree spark. Great for idling and the occasional backfire, but not much else. Once I got that far, it was time to make my second prototype.
This second prototype attaches where the stock ignition was removed. I realized that I had 2 pins on my controller that could capture a timing signal or send out a signal based on a timer. I could use one for the hall effect sensor, and the other for the spark control. I wanted to set up an optical sensor to keep continuous track of crank speeds. Another factor I was thinking was that I only had 2048 bytes of flash memory for storing spark maps. This is plenty for that, but for history data, it was rather inadequate. The microcontroller I had was an 18 pin device. I went to the next step up, which had 28 pins. It didn't have any additional features, but the two input and output pins were on different pins, thereby giving me two inputs and two outputs at the same time. Rather than scrap my prototype, I opted to make a daughterboard. I put the 28 pin device and a 128K serial flash chip on the daughterboard. Since the new chip has two output pins, I can have the second one send a signal at twice the frequency of the first, providing a tach output for a V-Twin tachometer.
In the above picture, you can see stock wires connected at the bottom, courtesy of Swampy from BadWeb. The connector to the left, with white, black, and red wires, is the RS-232 connector for connecting to a computer for data swapping. The connector in the middle is my programmer. If RS-232 works well enough, I will use it to communicate with the in-dash controller. With the 28 pin device, I have two RS-232 interfaces on this board.