自作イグナイタ

昨日同様プログラムの簡単な説明です。
 
詳しく説明すると長くなるし、実は私もよくわからないので・・・
 
前回はオープニングデモ~エンジンスタートの待機まで、今回はいよいよエンジンスタート&低回転(945rpm以下)の制御です。
 
エンジン始動直後のため、ドエル制御は前の点火20ms後通電とおおざっぱな制御となります。
 
太文字がプログラムソースです。

;**************************
;低回転用;
;**************************
LOW50
 BSF  STATUS,RP0 ;バンク1;
 MOVLW  B'10000101' ;10100010;
 MOVWF  VRCON  ;基準電圧の設定 低電圧2.03V;
 BCF  STATUS,RP0 ;バンク0;
 MOVLW  B'00100001'  ;プリスケーラ4倍 2us;
 MOVWF  T1CON  ;4us1カウント、LOW1024us、HI262.144ms、229rpm;
 BCF  INTCON,5 ;TMR0割り込み禁止;
 BCF  OV_F,1
 CLRWDT
 BCF  CMCON0,3 ;GP1選択;
 
ここまではPICの設定、ピックアップ信号のON-OFFの基準電圧の設定(2.03V)&タイマー1のカウンター速度を遅くして262ms(229rpm)まで制御&タイマー0の割り込みを禁止してドエル制御の停止。
 
 
 
 
LOW1
 BTFSS  PIR1,3   
 GOTO  LOW1
 BSF  GPIO,2
 BSF  GPIO,5
 CLRWDT
 
Aシリンダー用のピックアップ信号の入力待ち。
信号が入力される(ONになる)まで待つ。
 
 
 

LOW2
 BTFSS  PIR1,3    
 GOTO  LOW3
 BCF  PIR1,3
 GOTO  LOW2

Aシリンダー用のピックアップ信号がOFFになるまで待つ。
 
 
 
 
 
LOW3
 BCF  GPIO,2
 BCF  GPIO,5
 BCF  PIR1,3 
 MOVFW  TMR1L 
 MOVWF  TL
 MOVFW  TMR1H 
 MOVWF  TH
 CLRF  TMR1L
 CLRF  TMR1H
 
Aシリンダー点火、タイマー1LOWとHIの値を変数に記録。
 
 
 
 
 BTFSC  OV_F,1
 GOTO  LOW4
 MOVLW  D'62'  ;62*512us*2=63.488ms 945rpm
 BCF  STATUS,C
 SUBWF  TH,0
 BTFSS  STATUS,C
 GOTO  MAINST200
 
タイマー1(HI)の値が63ms(945rpm)以上なら通常制御へ飛ぶ、以下なら低回転制御を続行。
 
 
 
 

LOW4
 BCF  OV_F,1
 CALL  T50mS  ;20ms待つ
 BSF  GPIO,4
 BSF  CMCON0,3 ;GP0選択;
 GOTO  LOW100 
 
20ms待ってBシリンダー用コイル通電。
LOW100ラベルへ飛ぶ。
 
 
 

LOW500
 BSF  STATUS,RP0 ;バンク1;
 MOVLW  B'10000101' 
 MOVWF  VRCON  ;基準電圧の設定 低電圧2.03V;
 BCF  STATUS,RP0 ;バンク0;
 MOVLW  B'00100001' ;B'00110001'  ;プリスケーラ4倍 2us;
 MOVWF  T1CON  ;4us1カウント、LOW1024us、HI262.144ms、229rpm;
 BCF  INTCON,5 ;TMR0割り込み禁止;
 BCF  OV_F,1
 CLRWDT
 BSF  CMCON0,3 ;GP0選択;
 

ここは通常点火制御から回転が落ち込んだ時にPICの設定を変更。
 
 
 
 
 
LOW100
 BTFSS  PIR1,3   
 GOTO  LOW100
 BSF  GPIO,4
 CLRWDT

Bシリンダー用のピックアップ信号の入力待ち。
信号が入力される(ONになる)まで待つ
 
 
 
 

LOW200
 BTFSS  PIR1,3    
 GOTO  LOW300
 BCF  PIR1,3
 GOTO  LOW200

Bシリンダー用のピックアップ信号がOFFになるまで待つ。
 
 
 
 
 
LOW300
 BCF  GPIO,4
 BCF  PIR1,3 
 MOVFW  TMR1L 
 MOVWF  TL
 MOVFW  TMR1H 
 MOVWF  TH
 CLRF  TMR1L
 CLRF  TMR1H
 
Bシリンダー点火、タイマー1LOWとHIの値を変数に記録。
 
 
 

 BTFSC  OV_F,1
 GOTO  LOW400
 MOVLW  D'62'  ;62*512us*2=63.488ms 945rpm
 BCF  STATUS,C
 SUBWF  TH,0
 BTFSS  STATUS,C
 GOTO  MAINST

タイマー1(HI)の値が63ms(945rpm)以上なら通常制御へ飛ぶ、以下なら低回転制御を続行。
 
 
 

LOW400
 BCF  OV_F,1
 CALL  T50mS  ;20ms待つ
 BSF  GPIO,2
 BSF  GPIO,5
 BCF  CMCON0,3 ;GP1選択;
 GOTO  LOW1

20ms待ってAシリンダー用コイル通電。
最初に(LOW1ラベル)戻る。