kuroの覚え書き

96の個人的覚え書き

タコメータ+シフトタイミングライト+データロガー開発をスタート



とにかく回転数をカウントできるようにしないと。

回転数(rpm)を計るには周波数カウンタを作ればいいわけだ。

Vmaxの場合タコメータは1つのシリンダの点火パルスをカウントしているはずで、4サイクルなので2回転で

1点火と思いきや排気行程の時にも点火しているからつまり1回転1パルスという事になるらしい。

車の場合点火コイルは1つでそれをディストリビューターで割り振っている加減で4気筒なら1回転2パルス

となっており4気筒車のタコメータを流用すると表示が半分になるって寸法。(AUTOMETERとか)

というわけで例えば6000rpmだと1分間に6000回パルスが出ているから1秒間に100回つまり100Hzという事になるはず。

さて、周波数カウンタを作成する前に、デバッグ用にパルスジェネレータが欲しい。

適当に6000pmあたりのパルスを連続で出していてくれればいいので、PICで作れるはず。

100Hzだと1パルスあたり10msecなのでポートをON-OFFしたあと10msecのウエイトを入れればいいと思うので

LEDを1つ点灯させるだけのプログラムにちょっと手を加えて


LIST P=PIC16F84 ;PIC16F84を使う
INCLUDE "P16C84.INC" ;標準インクルードファイル読み込み
__config _HS_OSC & _WDT_OFF & _PWRTE_ON & _CP_OFF

BSF STATUS,RP0 ;Bankを1にする
CLRF TRISB ;ポートBを全て出力に設定
BCF STATUS,RP0 ;Bankを0に戻す
PULSE BSF PORTB,0 ;ポートBの0ビット目をON
BCF PORTB,0 ;ポートBの0ビット目をOFF
CALL TIME5M
CALL TIME5M
GOTO PULSE ;100Hz=6000rpmのパルス発生
;************************************
;タイマーサブルーチン10MHzオシレータの場合
;10MHzの場合周期は0.1usec、実行サイクルは0.4usec
;************************************
;***0.2msecサブルーチン 500サイクル*0.4usec***
TIME02M MOVLW 07CH ;1 124回まわす
MOVWF CNT1 ;1 2
TIMLP1 NOP ;1
DECFSZ CNT1,F ;1
GOTO TIMLP1 ;2 2+4*124-1=497
NOP ;1 498
RETURN ;2 500 500*0.4usec=0.2msec
;***5msec 12500サイクル***
TIME5M MOVLW 019H ;1 25回まわす
MOVWF CNT2 ;1
TIMLP2 CALL TIME02M ;2+500=502
DECFSZ CNT2,F ;1
GOTO TIMLP2 ;2 2+505*25-1=12626
RETURN ;2 12628 5.05msec
end

こんな感じでいいかな。

タコメーターは12000rpmまで表示させる。

(走行中にみることはとりあえず想定してないのでLCDにちっちゃく表示でいい)

12000/60=200なので200Hzのパルス入力時にカウンタが120を示すようにすればいい。

120/200=0.6なので0.6秒間のパルスをカウントするとそれが回転数になるはず。

さてカウンターの勉強をしないと。