プログラムの概略
始めに、点火CDIはマイコンを使っています、小型化するためになるべく小さなマイコンを選択しています。
最初はマイクロチップのPIC12F675の8ピンタイプで作成しようと思いました、内部クロック使用で4メガヘルツ動作ですが、
ADコンバーター、16ビットタイマーでどうにかなるかと少しずつ作成していきました、
そこそプログラムが出来てテスト基板を作り動作テストをしていると、どうしても信号がゆれる、どう頑張ってもゆれる。
(動作テストするために擬似信号発生器などこれもマイコンで作成しています、
本当はクランクにモーターを取り付けてパルスジネレーターを強制的に動かしたほうが本物の信号が出るのでより近い環境ですが、
パルスジネレーターは360度で3度の正の信号をと3度の負の信号を出すので、
マイコンで360度3度の正の信号を作った方が私も簡単なのでマイコンで200回転から500回転刻みに20000回転まで
出力する擬似信号発生器を作りました。)
エンジンで例えると、10000回転で動作中点火時期が2度、3度と前後にずれる、これでは使えません。
マイクロチップのマイコンPIC12Fシリーズは、内部クロック4MHZと8MHZが有ります。
4MHZの場合16ビットタイマーを使うと分解能が最大、1万5千回転360度2000カウント、
1万回転の時360度3000カウントですから、360/3000で
1カウント0.12度です約8カウントで1度ですからどうにか使えます。
マイコンの動作が遅いのは致命的な問題ではなく、信号タイミングが前後にずれることが致命的な問題です。

もともとマイクロチップのマイコンは遅いから動作クロックで力任せにどうにかなるものでは無いので、半分あきらめていました。
次に新しいマイクロチップの12F683という8ピンのチップが出ました、これは内部クロックが8メガヘルツに
マイクロチップの上位機種に使える命令、コンペアという16ビット比較命令が使えます、
この命令があればもう完成も同然です、

信号の計算はいたって簡単です、
パルス信号の山から山の時間を16ビットタイマーで計測して、計測した時間が360度ですから、
またジョルカブの場合信号の山の始まりのクランク角度はBTDC25度ですから、
30度に進角したかったら16ビットタイマーから5度分差し引いて、
その値を常時16ビットタイマーと比較して、同じ値になった時点火信号を出力するようにすればプログラムは完成です、

プログラムで難しい所は例外処理プログラムが一番手間です、すべての動作を想定しなければならないのが、面倒。