自作イグナイタ その6

MOS-FET増設で調子よく走れるようになったオリジナルイグナイター。
 
先日、島チャンのCB750Fourとツーリングに行ってきました。
 
島チャンのFourは慣らしも終わり、私のCB-Fはキャブのリセッティングとオリジナルイグナイターで調子は上々、
二人とも調子ノリノリでした。
 
イメージ 1
 

すっかり寒くなったので天草方面に出かけてきました。
 
海へのツーリングもいいですね~~!
 
 
課題は、このイグナイタはMOS-FETを4個も使ってもったいないので、もう一度見直す予定です!
 
さて、前回案内したオリジナルイグナイターのプログラムです。
数回に分けて内容を少し説明したいと思います(^^)
解りづらいですが太文字がプログラムソースです。
 

ここからプログラム↓
  errorlevel -302 ; Suppress message 302
  errorlevel -305 ; Suppress message 305
       LIST    P=12f683
        #INCLUDE <p12f683.inc>
        __CONFIG _CP_OFF & _CPD_OFF & _WDT_ON & _BOD_ON & _IESO_OFF& _PWRTE_ON & _INTOSCIO & _MCLRE_OFF
 CBLOCK 020h
 W_TEMP    ;割り込み時Wレジスタセーブ用;
 STATUS_TEMP   ;ステータスセーブ用;
 PCLATH_TEMP   ;PCLATHセーブ用;
 T05mCNT           ;1mSループカウンタ;
 T1mCNT    ;100msループカウンタ;
 T50mCNT    ;20msループカウンタ;
 TH    ;TIM1HIカウンター;
 TL    ;TIM1LOWカウンター;
 LMHI    ;リミッターHIカウンター;
 LMLO    ;リミッターLOカウンター;
 OV_F    ;タイマー1オーバーフロー用;
 DETIM    ;ドエルタイム設定用;
 DETIM2    ;ドエルタイム計算用;
 DETIM4    ;気等判別フラグ;
 OPNF    ;オープニングデモフラグ;
 OPN    ;オープニングデモカウンタ1;
 OPN2    ;オープニングデモカウンタ2
 ENDC

ここ↑では使用するPICの指定とCONFIG、変数の設定。
PICはP12F683を使用。CONFIGの設定はよくわからないから他のサイトをご覧下さい(^^)
 
 

 ORG  0   ;Reset Start
 GOTO  INIT

 ORG  0X4
 MOVWF  W_TEMP  ;Wレジスタセーブ
 SWAPF  STATUS,W
 CLRF  STATUS
 MOVWF  STATUS_TEMP
 MOVFW  PCLATH
 MOVWF  PCLATH_TEMP ;
 CLRF  PCLATH
 BTFSC  PIR1,0
 GOTO  T1
 GOTO  T0 
T1
 BCF  PIR1,0  ;TMR1割り込みフラグリセット;
 BSF  OV_F,1
 GOTO  WA

T0
 BCF  INTCON,2 ;TMR0割り込みフラグリセット;
 BTFSC  DETIM4,0
 GOTO  TT100
 BSF  GPIO,2
 BSF  GPIO,5
 BCF  INTCON,5 ;TMR0割り込み禁止;
 BTFSC  DETIM4,7
 GOTO  TTT1
 GOTO  WA
TT100
 BSF  GPIO,4
 BCF  DETIM4,0
 BCF  INTCON,5 ;TMR0割り込み禁止;
 BTFSC  DETIM4,7
 GOTO  TTT1
 GOTO  WA
TTT1
 BCF  GPIO,2
 BCF  GPIO,4
 BCF  DETIM4,7
 GOTO  WA
WA
 MOVFW  PCLATH_TEMP
 MOVWF  PCLATH
 SWAPF  STATUS_TEMP,W
 MOVWF  STATUS
 SWAPF  W_TEMP,F
 SWAPF  W_TEMP,W
 RETFIE
 
ここ↑では割込み処理、TMR0でドエルタイムの設定とTMR1で回転数カウンターのオーバーフロー処理を実施。
 
 
; PICの初期化
INIT
    ; GPIO(GP2-5)をデジタルI/Oに設定
 MOVLW  B'00011110' 
 MOVWF  CMCON0  ;GP0,1コンパレーター入力; 
 BSF  STATUS,RP0 ;バンク1;
 MOVLW  B'01110000' ;内部クロックを8MHzに設定;
 MOVWF  OSCCON  ;CLOCK=8MHz;
 MOVLW  B'10000101' ;10100010;
 MOVWF  VRCON  ;基準電圧の設定 低電圧2.03V;
 MOVLW  B'00000001'   ;
 MOVWF  PIE1  ;TMR1割り込み許可;
 MOVLW  B'11100000'   ;
 MOVWF  INTCON   ;割り込み許可;
 MOVLW  B'11010111'   ;
 MOVWF  OPTION_REG   ;;
  CLRF   ANSEL
 MOVLW  B'00000011'  ;1=入力;
 MOVWF  TRISIO  ;GP0,1は入力、その他は出力;
 BCF  STATUS,RP0 ;バンク0;
 MOVLW  B'00010100'  ;;
 MOVWF  WDTCON  ;ウォッチドッグON 1024ms;
 
ここ↑ではPICの初期化。端子の入出力、コンパレーターの基準電圧、ウォッチドッグの設定等々。
 
 
 
 
 MOVLW  D'23'  ;1us*256=256us*23=5888us;
 MOVWF  LMHI  ;リミッター設定HI;
 MOVLW  D'112'  ;112us+5888=6000us=10000rpm;
 MOVWF  LMLO  ;リミッター設定LOW;
 MOVLW  D'54'  ;128*54=6912us;
 MOVWF  DETIM  ;ドエルタイム設定;
 
ここ↑ではリミッター、ドエルタイムの指定。
リミッターはLMHIはHIカウンタなので1カウント=256usとなり、LMLOはLOカウンタで1カウント=1us。
上記では10000rpmに設定なので23*256=5888us+112us=6000us=6ms-10000rpm。
例えば12000rpmに設定の場合はLMHI=19、LMLO=136。19*256=4864us+136=5000us=5ms=12000rpm。
ドエルタイムは変数DETIMに54を設定。TMR0で制御して1カウントあたり0.5us間隔なので0.5*256=128us*54=6912us=6.9msがドエルタイム(通電時間)
 
 
 
 
 
 BCF  PIR1,3
 BCF  GPIO,2
 BCF  GPIO,4
 BCF  GPIO,5
LOWST
 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
 BCF  CMCON0,3 ;GP1選択;
 

ここ↑ではイグナイタの初期作動設定(通電させない)と、始動時作動設定。
上記4サイクルでIGコイルの通電をストップ等。
VRCONでコンパレータの基準電圧設定。ここでは2.03V、車両からの信号に合わせて設定可能。
TMR1のプリスケーラを4倍にして最大230rpmまで制御。
スタート時等の極低回転ではTMR0の割り込みを禁止してドエル制御はしない。
 
 
ってこんな感じで初期設定を行います。
かなりマニアックなネタにお付き合いありがとうございました。
次回はタコメーターのオープニングデモの説明となります。