私は、誤った思い込みや、読み込み不足、理解不足が多数あるという状態で、何事も前に進まない方が良いと思うのです。

それらが原因で発生している「決めつけ」は本当に注意しなければなりません。
最も恐れなくてはならない事は、自分が普通であり、他者が特殊である、と考える事だと思います。
これが普通だとか、それは特殊だとかを決めつける事は、物事を様々な尺度で見れていない事を端的に表します。
使いたくない言葉ですが、それをステレオタイプと呼ぶのかもしれません。Wikipediaから引用します。
多くの人が持つ観念には、先入観やタブロイド思考を含み偏見や差別的な意識とも関係している。
「紋切り型」という言葉が示すように、多数の人において同じような考え方や見方が類型化されて共有され、何故その思考や見方が妥当と確信するのかということについても、メディアや周囲の人が皆そう言っているとか、主体的に吟味することなく、そのまま無批判に取り入れ鵜呑みにしていることが一般である。
その為、客観的根拠もなく、個々人が抱く考え方・観念に対する理解にも乏しく、底が浅く、また複雑なものごとを単純化しているため、当人は理解しているとの錯覚に陥っているが、迷妄であって固定観念になっている場合も多々ある。
自分がもしそのような状態になっている事を気付くにはどうしたら良いでしょうか。
何も手段が無い様にも思えますが、そういう時に必要なのはちょっとした事実の振り返りなのかもしれないと思い、自作CDIの記録を漁ってみました。

基板の遍歴


残っている限りだと、これだけの基板発注履歴がありました。
2018/06/13 107440-osr-cdi-v120.zip
2018/06/13 107441-osr-cdi-v120-samall.zip
2018/05/04 101881-osr-cdi-v111-samll.zip
2018/05/04 101882-osr-cdi-v111.zip
2018/03/26 95882-osr-cdi-v111.zip
2018/03/26 95885-osr-cdi-v111-samll-v3.zip
2017/11/19 77010-osr-cdi-v103-samll-v3.zip
2017/10/25 73186-osr-cdi-v103-small.zip
2017/10/15 71540-osr-cdi-v103.zip
2017/09/04 65670-1455osr-cdi-v102-fixed.zip
2017/07/31 60477-1455osr-cdi-v101-fixed.zip
2017/07/28 60230-1455osr-cdi-v101-fixed.zip
2017/07/12 57972-1455osrcdi100.zip
2017/06/04 52897-1455RCDI-v240-rel1.zip
2017/02/26 40584-1455RCDI-v230.zip
2016/11/04 27852-1455CDI-v222.zip
2015/05/24 D164660_96778_1455CDI02_04.zip
2014/09/07 D129830_61232_1455CDI_rev9.zip
2013/12/03 D101426_31955_sdrcdiusb.zip
最初が2013年12月03日で、これ以前は手組みだったVersion1.xだったんだろうと思います。
この頃はFusionPCBに頼んでも部品が届くのに20日位掛かってましたね。

思い出深いのは、発売されたばかりのPIC16F1455、これのエラッタに悩まされたUSB版初号機です。
最初の版は殆どPIC16F1455のテストに費やされています。
結局このエラッタはマイクロチップにて修正されたのですが、それまでの間は本当に色々と試行錯誤したのを覚えています。
その後暫くレーサー号でテストを重ねていたのですが、2017年後半から2018年前半にかけて、かなりのペースで更新することになります。
これは複数機種に対応する為に色々と改変を重ねていた時期です。
細かい改善はバージョンを上げていない所もあり、皆さん基板に直接部品を追加ハンダしたりして色々試してくださりました。

ザクっと残っていた歴代の基板です。
IMG_9312
最初の2〜3種は捨ててしまっていました。

同じ種の色違いで残っているものはこれ位です。
IMG_9313
随分処分したと思っていましたが、無精なのでまだこれだけ残ってました。

それぞれの版で1〜3個、多い時は5〜6個作っているので、様々な機種用を含めて作成総数は30機は超えていると思います。アホですね。

使えない基板は思い切って捨ててるんですが、なんかまだ試験用にとして残っているのがこれだけありました。
IMG_9314

ファームウェア


ファームウェアは基板以上に改変されてリリースされています。記録に残っているのはざっとこんな感じでした。
2014-08-04-rcdi10-sugo.zip
2016-11-07-rcdi211.zip
2016-11-07-rcdi221.zip
2016-11-07-rcdi231.zip
2017-06-04-rcdi233.zip
2017-06-13-rcdi233.zip
2017-06-17-rcdi240.zip
2017-09-18-osr-cdi102.zip
2018-01-01-osr-cdi104.zip
2018-03-04-osr-cdi110.zip
2018-03-10-osr-cdi110.zip
2018-03-11-osr-cdi110.zip
2018-03-11-v2-osr-cdi110.zip
2018-03-26-osr-cdi111beta1.zip
2018-03-30-osr-cdi111.zip
2018-04-07-osr-cdi111.zip
2018-04-15-osr-cdi111.zip
2018-04-28-osr-cdi111.zip
2018-06-13-osr-cdi120beta1.zip
2018-06-14-osr-cdi120beta2.zip
2018-07-14-osr-cdi120.zip
2018-08-04-osr-cdi120.zip
2015年あたりは手組みの基板とFusionPCBに発注した基板が並走しています。

当然ながらリリースする前に、毎回何度となくやり直しが入っていますので、実質的なバージョンは100を超えるとは思います。

毎回ある程度の妥協を残しながら進めて来てたのですが、2017年の秋からは本格的にソースコードの改修に入っています。
例えば高回転時の点火時期の振れや、正確なタイミングを実現する為のトリックが入っています。
それを実現する為にMPLAB上のシミュレーションはかなり沢山やりました。
ソースコードを追っている人なら途中からシミュレーションファイルがプロジェクトに追加された事に気が付いていると思います。

書き込みソフト

こちらもも少し振り返り。
もう随分と前になりますが、当初点火時期やYPVSのマップはエクセルで入力し、自動で書き出すような形でした。
wincdi000
8ピンマイコン時代ですね。
その後14ピンマイコンに移行したのは、とある御大に「エクセルは使えない」と言われた事が切っ掛けでした。
普通にサラリーマン生活を送ってしまっていた自分にとって、エクセルが使えない、というのはインパクトがありました。
その後、色々な事(参考:2016年05月27日 コントロールゼッツ!)もあり、自分が普通と思っている事が普通では無いんだと改めて認識した次第です。

そんなこんなで、もっと簡単にできないかと考えて、USBに対応して書き込みを実装する事を思いつきました。

余談ですけど、何か物を作る時、手離れの良さってのはとても大切な事です。
手離れが悪いと、どんどんと新しい事に割く時間が減少します。
これは全体を俯瞰して不幸な事にしかなりません。
ですので手離れが良いというのはとても大事な事なのです。
USBによる書き込みを可能にすることで、誰でも設定値を入れる事が出来る様になるんじゃないか。手離れ場良くなるんじゃないかと考えていました。
具体的には島田選手のSDRの事なんですが、結局最後まで設定値は自分が入れてましたね。

最初のUSB版書き込みソフトがこんな感じです。
wincdi100

Windowsで作るのかその他のOSで作るのかは簡単に決まりました。
当時から、液晶がついたコンピュータの中で最も安価だったのはWindowsだったのです。
MACは高価だし、開発環境が有料なので速攻却下です。
ただし、MACやLinux環境への移植性を高める為にFLTKライブラリはHIDAPIライブラリ等プラットフォーム非依存のものを使っています。

当時のUIの特徴としては、数値を設定するのが1000rpm単位、スライドバーによる設定になっている事です。
しかしこれはうまくありませんでした。
スライドバーによる数値設定はPCだと簡単なのですが、タブレット等のタッチパネルで操作するにはあまりにも繊細な操作が必要でした。

この頃分かったのは、みんな持ち出し用にタブレットを購入するって事です。
タブレットが大量に生産され、ハードウェアがとても安くなってきた頃で、AndroidとWindowsのデュアルブートの様な機種まで登場し始めた時期です。
なぜだかAndroidタブレットよりもWindowsタブレットの方が安くなるという現象まで発生していて、この頃のハードウェア原価は5千円を切っていたんじゃないかって思います。

なので、この間ノートPCを使うのが一般的で、タブレットを使うのは特殊だと考えている人もいるとは思いますが、自分は経験から逆だと思っています。
みんな高価なノートPCを持ち出す事はせず、安い1万円位のWindowsタブレットを購入します。少なくとも自分が知っている限りですと、殆どがそのようになっています。
自分はノートPCを使うのですが、テスト用に8千円でWindowsタブレットを買いました。今でもあきばお〜で買えます。
外に持ち出すときに、壊れてもいいやとか、盗まれてもいいやと思える金額なのかどうかは分かりませんが、オートバイに乗せて外に出る時に、高価で重量がかさむノートPCを選択せず、1〜2万円のタブレットを選択するのは確かにリーズナブルなんだろうと思います。


そこでタッチすると数値を入れるテンキーパッドが表示されるように改変しました。
wincdi230

これもあまりよい結果にはなりませんでした。
自分は主にノートパソコンを使って設定するんですが、このテンキーパッドの使い心地が非常に悪かったのです。なので裏技として直接数値を入れられる様に改造していますが、やはり使い心地が悪い。

一方、タブレットで操作している人は、ボタンが小さすぎて上手く押せない問題が発生していました。
その話を聞いた時は直ぐには信じられなかったのですが、実際その人が操作しているのをみて理解しました。
指の太さが自分の1.5倍位あったのです。
なるほど、これは駄目だなと思い作り直そうと思ってたのですが、なにせ突貫で作り上げたものだったので、ソースコードの整理にかなり時間が掛かってしまいました。

ノートPCもタブレットも、使い心地を改善する為の改造が出来たのは2017年の秋。
大きな指でも快適に操作できるようになりました。
設定ファイルも世界一速いSDRレーサーの要求によって500rpm単位で設定できるようになっています。
win005
自分はノートPCで使うので、ショートカットキーをじゃぶじゃぶに投入しています。マウス要らず。
ボタンが小さい問題は、3画面に分割する事によって回避しました。
タブ形式のUIに移行したおかげで、全てのボタンを大きくすることが出来ました。
例えば画面の下でこじんまりしていたスライドバーは、画面いっぱい使って設定できる様になっています。
win007
スライドバーは当然ながら長ければ長いほど操作性は良くなります。
最大〜最小値も細かく設定されています。

その他かなり多くの改善が盛り込まれていて、準正常系の操作にも耐えられる様になっています。

それまで手付かずだったインストーラもようやく最後の版で完成しました。
最初は実行ファイル(.exe)とライブラリ(.dll)を配置するだけの簡単なものだと思っていたんですが、これが上手くできない人が居る事が分かりました。
その為に、とある場所で使われている毎回タブレットを送ってもらっては更新していたのですが、流石に効率が悪いので、インストーラを作りました。
これで誰でももっと簡単にうまく動かす事が出来る様になりました。

とある場所で「自分が使いやすい様に改変しているだけだろう」と言われたのですが、自分一人が使う事を想定すれば、いつまでもエクセルでデータを作ってPicKitでの流し込みのまま終わったことでしょう。
何故なら自分にとっては、それが大して苦にならないからです。
USB経由での設定値書き込みは、Windows版の書き込みソフトやUSB通信部分を作るという、そこそこ面倒臭い作業があります。
エクセルでの流し込み作業とは比較にならなく面倒臭いです。

タブレット対応は前述の通り外に持ち出して使う多くの人達の必要性から対応している物ですが、自分の特殊な事情だけ言えばノートPCを外に持ち出しています。
流石にタブレットでソースコードを改変できませんから。

全体的なソースコードの整理

極力ソースコードはシンプルになる様に心がけていますが、それはきっと誰かがこれを元に改修したり改善をするだろうという希望的観測から続けています。

例えばどなたかが、クイックシフターは不要と言ったので、これをサイドエフェクト無くコメントアウトしやすい様に改修しています。
以前はクイックシフターの処理が、点火を制御する割り込み関数の中に入っていました。
OSR-CDI1.2からクイックシフター処理を関数化して外部に飛ばしています。
割り込み中はなるべく処理時間を短くするのがセオリーですが、関数化するとその分処理時間が掛かってしまいます。
新世代のミッドレンジコア(4桁型番)を持つPIC16F1455の関数呼び出しは、ハードウェアによるアシストが入っていて、かなり高速化されている事は文献を読んで知っていました。関数化してシミュレータを回してみるとと、全く問題ない事が分かったので、割り込み処理を行うところから分離しました。
コードの見通しは凄く良くなり、改変も楽になったと思います。

事の本質

OSR-CDIは本質的にはヤマハの2ストローク車に多く採用されているAC-CDIの電装が古くなって壊れていくという課題解決の為にあります。
しかしその目的を達成する為に様々な物を具備する事になりました。
点火時期やYPVSを調整できるのは、レース場での利用を促進し、公道ではなかなか評価できない極限状態での動作を確認する為です。
UIが改善されていくのは、そのレース現場で利用しやすくする為です。
お陰で一般的な利用方法では見えなかった沢山の事が分かりました。

また、沢山の方々が利用しやすくなった事によって、全体的な改善が進みました。
この改善は、決してどの機種の為だけ、という事ではありませんし、自分の為という訳でもありません。
これまで沢山の人達が使っていく過程で課題になっているところを改善してきたものです。
自分の為だけだったら、もっと簡単に事を済ませているでしょう。

本来、古くなった機械の代替品を目標に作っているものです。
当然ながらそれが原因で他の部分が悪くなっても仕方ありません。
その為にやる事をやっていたら、色々と広がったというだけの事です。

そういう趣味の取り組み方があっても良いじゃないですか。