愛車のバイクVFR750F(RC36)で、長距離高速巡航中の暇つぶし"MP3プレーヤーの搭載"と、"アマチュア無線機を搭載"してしまう作業を、暇を見つけてはゆっくりと進めています。
ハードウェアの設計はなんとなく完了し、ブレッドボードでのとりあえずの実験もクリアしたので、いよいよ車速検知して連動する部分のソフトウェア作りこみです。
https://…/2007/10/27/ 速度連動アンプ・ソフトウェア製作その2
https://…/2007/10/21/ 速度連動アンプ・ソフトウェア製作その1
※車速連動アンプ回路
ワンチップマイコンPIC16F84Aには2つの割込み源があります。
・PIC16F84Aマイコンチップ |
1つ目は、外部入力信号に寄るもので、この為にインタラプトという名の入力ピンがあります。このピンの信号の立ち上がり、もしくは立ち下がりで割込みが発生します。
2つ目は、タイマー割込みです。PICチップ内にタイマー回路が内蔵されていて、タイムアップすると割込みが発生します。
そこで、ハードウェア設計では、フューエルカットリレーからのエンジン点火信号をインタラプトピンに接続して、点火と同期して割込みがかかるようにしました。
そして、ソフトウェアは次の用に設計してみました。
- エンジン回転数(1秒あたり)用のカウンタメモリを設ける
- 現在の回転数を保持するメモリを用意する
- タイマーを1秒でアップするように設定する
- 外部割込みが発生すると、エンジン回転数カウンタを1加算する
- タイマー割込みが発生すると、エンジン回転数カウンタの中身を回転数保持メモリに転送して、エンジン数カウンタをゼロリセットする
このようにすると、割込み処理だけでエンジン回転数の検知が出来て、常に回転数保持メモリには最新の回転数が格納されている事になります。
メイン処理は、エンジン回転数に応じた音量の制御をします。
エンジン回転数を、
- Aゾーン:00,000rpm~00,999rpm
- Bゾーン:01,000rpm~01,999rpm
- Cゾーン:02,000rpm~02,999rpm
- Dゾーン:03,000rpm~03,999rpm
- Eゾーン:04,000rpm~04,999rpm
- Fゾーン:05,000rpm~05,999rpm
- Gゾーン:06,000rpm~06,999rpm
- Hゾーン:07,000rpm~07,999rpm
- Iゾーン:08,000rpm~08,999rpm
- Jゾーン:09,000rpm~09,999rpm
- Kゾーン:10,000rpm~10,999rpm
- Lゾーン:11,000rpm~
のように区切り、予めそのゾーン毎に決めてある左右音量値をデジタルボリューム制御チップにシリアル通信で送出します。
データ送信中にも割込み処理が走る可能性がありますが、シリアルデータ送信のビット毎のタイミングが多少ズレても大丈夫な事は前回確認済みなのです。
おっと、チップのマニュアルを読むと想定通りにはいかないようですよ・・・。タイムアップ時間を計算すると・・・、
タイマーは1クロック毎にカウントダウン --> クロック周波数10MHz --> 0.0000001[S] --> 0.0001[mS] --> 0.1[uS]
内蔵プリスケーラでクロックを256分周 --> 0.1[uS] * 256 = 25.6[uS]
タイマーカウンタは8bit --> 25.6[uS] * 256 = 6,553.6[uS] = 6.5536[mS]
チップ内蔵のタイマー回路の最長アップ時間がたったの6.5536[mS]なので、タイマーアップ自体の回数をカウントしなければなりません。
つづく。