はちゅねタコメーター製作(妄想中)
出来事
- AVRSPImkIIが届く
- 準備試験用のパーツ(フォトカプラとか各種電子部品群)が届く
- 作業用ノートにAVRstudio等を突っ込んで環境作成
- タコメーターの作成に必要な基礎情報の収集完了
- 基本仕様と大まかな処理フロー完成
- 元絵の収集開始(はちゅね、かぐぁみね)
暫定仕様(案)
大まかな全体のイメージが固まってきたので箇条書きにしてみる。
- 表示系(優先順位順)
- 点火信号の受信
- 周囲明度の測定
- 外気温の測定(将来実装。ポートを確保)
- 気温表示
大きめのデジタル表示を数秒間隔で更新
- 気温表示
- 方位の測定(将来実装。ポートを確保)
- デジタルコンパスによる進行方向の表示
方位角(3桁)を表示、北の方向を16分割で大雑把に表示
(参考1:http://www.sparkfun.com/commerce/product_info.php?products_id=7915)
(参考2:http://wiring.org.co/learning/examples/HMC6352sparkfun.html)
- デジタルコンパスによる進行方向の表示
動作についての基本情報
パルスの間隔が 4ms とする時、その周波数は 1/0.004=250Hz。これをrpmに換算すると 250Hz*60sec=15,600rpm。
ms単位のパルス幅を Pms とすると、60,000/Pms=rpm でrpm化できる。
Timer0 = 8bit = 256Ticks
Timer1 = 16bit = 65536Ticks
AVR基準クロックが20MHzの場合(Timer0)
周比が1の時 20MHz 1パルス0.05μS 一周12.8μS
分解能について
単純にTimer0のオーバーフロー割込"のみ"でパルス幅計測を行うと、15000rpm付近で600rpm以下の分解能となってしまう。
パルス検知時にオーバーフロー回数に加えてタイマー値も拾う事で、20000rpm付近でも10rpm前後の分解能を得られる。
なお低回転側の分解能は、Word型の限界である65535カウントから、72rpm(概ね1.0Sec)が限界となる。
処理フローイメージ
割込設定
- ピン変化割込(PCIx)を設定。
- Timer0を設定(クロック20MHzの分周比1/1)、オーバーフロー割込を設定
演算フロー
- ピン変化割込を有効化。Timer0を有効化。
- 一定間隔で表示フローをコール。
- 必要に応じてその他の計測処理もコール。
- 2へ戻る。
※ここの表示インターバルは、液晶実機の反応速度を確認してから決定する。
なお、気温や方位は1sec〜数十sec間隔でもよい。
ピン変化割込
- TurnとTimer0を表示制御用変数(cTurnとcTick)へ代入。
- TurnとTimer0をリセット。
- 戻る。
Timer0オーバーフロー割込
- Turnをインクリメント。
Turnインクリメント時にオーバーフローする(下記の閾値を超える)場合は、Stallフラグを立ててTurnをゼロクリア。
閾値は200rpm(0.3sec)にあたる23437(=(15 * 20000000) / (64 * 200))。 - 戻る。
表示フロー
懸案事項
- 使用予定液晶の応答速度や実寸法。
- エンジン点火信号の安全な取得方法。