;=========================================================================
;;CDI for model engines
;Based on "Bike Advance" 4.23
;V1.0 09.14.2005 Jon-Magne Johansen
;=========================================================================
;==========================================================================
; Title "Zenoah Advance"
;
http://www.modelbouw.gompy.net/cdi/cdi.htm
; 23 01 06 Version 1.00 for 16F84a GOMPY
; -------------------------------------------------------------------------
;============================================================================
;переработка программы и исправление ошибок by how_eee для своих нужд. 27.04.2010
;
;Моя первая версия. Поправил назначение portА в качестве входа и перенес
;вход ДХ со второй ноги на первую.
;Подправил время проверки что двиг не работает 0.5сек.
;Изменил проверку выключения тестового джампера. Изменил
;время открытия тиристора с 0.002 на 0.001сек во время теста.
;Добавил индикатор первой искры. Первичное опережение определяется выбранным джамперами
;графиком.
;Нарисовал новый график. ДХ стоит в положени 32 гр до ВМТ.
;1500 об - 0,5 гр
;2500 об - 9 гр
;3500 об - 13 гр
;5000 об - 25 гр
;6000 об - 32 гр и до 16000 об.
;Добавил еще два графика, которые выбираются джамперами на 17 и 18 ноге. Если
;джямперов нет, то первый график, если джампер стоит на 17 ноге, то второй,
;если на 18, то третий.
;
;проверил работу прошивки на самолете. все ОК!
;==========================================================================
;
; Ign advance starts at 1500 engine RPM
;
; Ign full advance is at 16000 engine RPM
;
; dwell time is fixed at 1mS, = 10 X 100uS loops
;
; After 1500 RPM, the ignition advance is calculated in 116 steps.
; This continues up until 16000 RPM is reached.
;
;
; At a engine speed of 1200 RPM;
;
; 1200 / 60 = 20 revs per second
; 1 / 20 = 50mS per rev
; 1 rev = 360 degrees
;
; 36 degrees at 1200 RPM = (36 / 360) X 50 = 5mS
;
; Therefore maximum retard at 1200 RPM = 0mS after the firing
; point is reached. This figure remains constant down to 0 RPM.
;
; At a engine speed of 16000 RPM, maximum advance will have been reached,
; and ignition is immediately after the firing point is reached.
;
; The intermediate values will be looked up in an advance table map
; and will correspond to engine speed from 1500 RPM to 16000 RPM.
;
; Map holds retard values in 100uS loops for every loop change
; in rpm rate.
;
;
;
;==========================================================================
;
; PIC 16F84 wiring
;
;==========================================================================
;
; pickup32°-----------> RA2 1+--O--+18 RA1 ------ map3 jumper select
; RA3 2| |17 RA0 ------ map2 jumper select
; test jumper---------> RA4 3| |16 Osc ------ 4MHz
; +5V--+----R---------> MCLR 4| |15 Osc ------ Quartz
; Ground--------------- Vss 5| |14 Vcc ------ +5Vdc
; Thyristor <RB0>PickupLED
; LEDrpmLimit <------- RB1 7| |12 RB6
; ReverseOutput<------- RB2 8| |11 RB5
; Strobe<RB3> 1400h, 5120 x 100us=0.5 Secs, then it is assumed that the
; motor has stopped. Reinitialize system.
movlw 0x14
subwf rpmhi,W
btfsc STATUS,Z ; rpmhi - 14 = 0 ?
goto start ; yes
;
;rotchk btfss rotor ; + is rotor high or low?
rotchk btfsc rotor ; (- detect pickup low) (CH ignitions sensor)
goto rnowlw ; low нету магнита
;
movf rotflg,W ; high, is it flagged high also? rotflg=FF?
btfss STATUS,Z
goto coilck ; yes
;
movlw 0xff ; no
movwf rotflg ; flag rotor as up
bsf led ; turn ignition pickup led on
clrf spkflg ; reset flag for one spark
goto rpmcalc ; calculate RPM
;
rnowlw movf rotflg,W ; is it flagged low already ? rotflg=0?
btfsc STATUS,Z
goto coilck ; yes, wasn't flagged high
;
dolow bcf led ; no, turn ignition pickup led off
clrf rotflg ; flag rotor as down
goto mnloop
;
decret decf retard,F ; no, decrement retard then wait
goto mnloop
;
coilck movf coilflg,W ; is coil flagged high? coilflg=FF?
btfss STATUS,Z
goto upcoil ; yes, then decrement dwell count
movf retard,W ; is retard = 0 ?
btfss STATUS,Z
goto decret ; no, then decrement retard
;
movf spkflg,W ; yes, a spark have been done? spkflg=FF?
btfss STATUS,Z
goto mnloop ; yes, no more spark
;
bsf coil ; no, go on for the first spark
bsf strobe ; same for strobe
bcf revcoil
movlw 0xff ; set flag for high coil
movwf coilflg
movwf spkflg ; set flag for one spark
; ****************** YOU CAN MODIFY THE DWELL VALUE BELLOW ********
movlw .1 ; 10 X 100uS = 1ms
movwf dwell ; set dwell time
;
goto mnloop
;
upcoil ; if dwell # 0 then dwell - 1
; if dwell now = 0, turn on coil
;
decfsz dwell,F ; dwell = dwell - 1
goto mnloop ; dwell <> 0, wait
bcf coil ; dwell = 0, turn coil off
bcf strobe ; same with strobe
bsf revcoil ; dwell = 0, turn revcoil on
clrf coilflg ; set flag for low coil
goto mnloop
;
rpmcalc ; engine RPM <1500>= 16000 at maximum advance, = 3.8mS
; 3.8mS = 38 X 100uS loops, = 26h
; ( 16000RPM for a 1cyl - 4stroke with one spark loose )
; ( 16000RPM for a 1cyl - 2stroke )
; ( 8000RPM for a 4cyl - 4stroke = 266Hz )
;
; this routine determines whether the engine RPM
; value is below 38 loop counts - max advance, or above
; 400 loop counts - max retard, or some where in between.
;
;
; high RPM: ; > 16000RPM
; Если ИСКРА ПЕРВАЯ, то идем сразу в maxret
movf firstspk,W
btfss STATUS,Z ; is firstspk = 0?
goto maxret ; no
movf rpmhi,W ; yes
btfss STATUS,Z ; is rpmhi = 0?
goto bigfv ; no
;
movf rpmlo,W
xorlw 0x26 ; yes, is rpmlo = 26h ?
btfsc STATUS,Z
goto maxadv ; yes, do max advance
;
movlw 0x26
subwf rpmlo,W ; no, is rpmlo < 26h ?
btfss STATUS,C
goto maxadv ; yes, do max advance
;
; medium RPM:
goto caladv ; no, calculate new advance
;
;
; low RPM: ; <1500RPM> 1 ?
btfsc STATUS,C
goto maxret ; yes, do max retard
;
goto caladv ; no, calculate new advance
;
resfv movf rpmlo,W
xorlw 0x90 ; rpmhi = 1, does rpmlo = 90h ?
btfsc STATUS,Z
goto maxret ; yes, do max retard
;
movlw 0x90
subwf rpmlo,W ; no, is rpmlo > 90h ?
btfsc STATUS,C
goto maxret ; yes, do max retard
;
;
; the formula to get the data stored in the map is as follows
;
; rpmhi/lo count - 37
; 116 - ---------------------------
; 4
;
caladv movlw d'37' ; rpmhi/lo - 37
subwf rpmlo,F ; rpmlo = rpmlo - 37
btfss STATUS,C
decf rpmhi,F
;
; divide result by 4
;
bcf STATUS,C
rrf rpmhi,F
rrf rpmlo,F ; / 2
;
bcf STATUS,C
rrf rpmhi,F
rrf rpmlo,F ; / 4
;
;bcf STATUS,C
;rrf rpmhi,F
;rrf rpmlo,F ; / 8
;
movlw .116 ; 116 entries in map list
movwf math
;
movf rpmlo,W
subwf math,W ; W = 116 - result
btfss k2 ;ПРОВЕРКА джампер стоит? к2=0?
goto selmap2 ;Да, ИДТИ selmap2
btfss k3 ;ПРОВЕРКА джампер стоит? к3=0?
goto selmap3 ;Да, ИДТИ selmap3
;
selmap1 bcf PCLATH,1 ; be sure to go h'100'
bsf PCLATH,0 ; where is the map1.
call map1 ; read map1
movwf rtdset ; come back with new retard value
goto rpmset
;
selmap2 bcf PCLATH,0 ; be sure to go h'200'
bsf PCLATH,1 ; where is the map2.
call map2 ; read map2
movwf rtdset ; come back with new retard value
goto rpmset
;
selmap3 bsf PCLATH,1 ; be sure to go h'300'
bsf PCLATH,0 ; where is the map3.
call map3 ; read map3
movwf rtdset ; come back with new retard value
rpmset clrf rpmhi ; clear RPM counters
clrf rpmlo
movf rtdset,W ; transfert advance value
movwf retard
goto mnloop ; (therefore minimum retard is 1 loop-100us)
;
maxret clrf firstspk ;очищаем флаг первой искры
btfss k2 ;ПРОВЕРКА джампер стоит? к2=0?
movlw 0x32 ;Да, задержка вторая 5,0 на 1500 это 27 гр
btfss k3 ;ПРОВЕРКА джампер стоит? к3=0?
movlw 0x28 ;Да, задержка третья 4,0 на 1500 это 36 гр
movlw 0x23 ;нет, задержка первая 3,5 на 1500 это 31,5 гр
movwf rtdset ; retard value
bcf rpmmax ; turn off maxrpm led
goto rpmset
;
maxadv clrf rtdset ; retard value = 0ms
bsf rpmmax ; turn on maxrpm led
goto rpmset
;
map1 org h'100' ; store map at100h
addwf PCL,1 ; add W + PCL
; *********** INSERT YOUR OWN VALUES HERE *******************
retlw 23h ; 3.5ms
retlw 23h ; 3.5ms 1503rpm
retlw 23h ; 3.5ms 1517rpm
retlw 22h ; 3.4ms 1531rpm
retlw 22h ; 3.4ms 1545rpm
retlw 22h ; 3.4ms 1559rpm
retlw 21h ; 3.3ms 1573rpm
retlw 21h ; 3.3ms 1587rpm
retlw 20h ; 3.2ms 1601rpm
retlw 20h ; 3.2ms 1616rpm
retlw 20h ; 3.2ms 1631rpm
retlw 1Fh ; 3.1ms 1646rpm
retlw 1Fh ; 3.1ms 1661rpm
retlw 1Eh ; 3ms 1677rpm
retlw 1Eh ; 3ms 1692rpm
retlw 1Eh ; 3ms 1708rpm
retlw 1Dh ; 2.9ms 1724rpm
retlw 1Dh ; 2.9ms 1741rpm
retlw 1Dh ; 2.9ms 1758rpm
retlw 1Ch ; 2.8ms 1775rpm
retlw 1Ch ; 2.8ms 1792rpm
retlw 1Ch ; 2.8ms 1809rpm
retlw 1Bh ; 2.7ms 1827rpm
retlw 1Bh ; 2.7ms 1846rpm
retlw 1Ah ; 2.6ms 1864rpm
retlw 19h ; 2.5ms 1883rpm
retlw 19h ; 2.5ms 1902rpm
retlw 19h ; 2.5ms 1922rpm
retlw 18h ; 2.4ms 1942rpm
retlw 18h ; 2.4ms 1962rpm
retlw 17h ; 2.3ms 1983rpm
retlw 17h ; 2.3ms 2004rpm
retlw 16h ; 2.2ms 2026rpm
retlw 16h ; 2.2ms 2048rpm
retlw 15h ; 2.1ms 2070rpm
retlw 15h ; 2.1ms 2093rpm
retlw 15h ; 2.1ms 2116rpm
retlw 14h ; 2ms 2140rpm
retlw 14h ; 2ms 2165rpm
retlw 13h ; 1.9ms 2190rpm
retlw 13h ; 1.9ms 2215rpm
retlw 13h ; 1.9ms 2241rpm
retlw 12h ; 1.8ms 2268rpm
retlw 12h ; 1.8ms 2295rpm
retlw 12h ; 1.8ms 2323rpm
retlw 11h ; 1.7ms 2351rpm
retlw 10h ; 1.6ms 2381rpm
retlw 10h ; 1.6ms 2411rpm
retlw 10h ; 1.6ms 2441rpm
retlw 10h ; 1.6ms 2473rpm
retlw 0Fh ; 1.5ms 2505rpm
retlw 0Fh ; 1.5ms 2538rpm
retlw 0Fh ; 1.5ms 2572rpm
retlw 0Fh ; 1.5ms 2606rpm
retlw 0Eh ; 1.4ms 2642rpm
retlw 0Eh ; 1.4ms 2679rpm
retlw 0Eh ; 1.4ms 2716rpm
retlw 0Eh ; 1.4ms 2755rpm
retlw 0Dh ; 1.3ms 2795rpm
retlw 0Dh ; 1.3ms 2836rpm
retlw 0Dh ; 1.3ms 2878rpm
retlw 0Ch ; 1.2ms 2921rpm
retlw 0Ch ; 1.2ms 2965rpm
retlw 0Ch ; 1.2ms 3011rpm
retlw 0Bh ; 1.1ms 3059rpm
retlw 0Bh ; 1.1ms 3107rpm
retlw 0Bh ; 1.1ms 3158rpm
retlw 0Bh ; 1.1ms 3210rpm
retlw 0Ah ; 1ms 3263rpm
retlw 0Ah ; 1ms 3319rpm
retlw 0Ah ; 1ms 3376rpm
retlw 9h ; 0.9ms 3435rpm
retlw 9h ; 0.9ms 3496rpm
retlw 9h ; 0.9ms 3560rpm
retlw 8h ; 0.8ms 3626rpm
retlw 8h ; 0.8ms 3694rpm
retlw 8h ; 0.8ms 3765rpm
retlw 7h ; 0.7ms 3838rpm
retlw 7h ; 0.7ms 3914rpm
retlw 6h ; 0.6ms 3994rpm
retlw 6h ; 0.6ms 4077rpm
retlw 5h ; 0.5ms 4163rpm
retlw 5h ; 0.5ms 4262rpm
retlw 5h ; 0.5ms 4346rpm
retlw 4h ; 0.4ms 4444rpm
retlw 4h ; 0.4ms 4546rpm
retlw 3h ; 0.3ms 4653rpm
retlw 3h ; 0.3ms 4765rpm
retlw 3h ; 0.3ms 4883rpm
retlw 2h ; 0.2ms 5006rpm
retlw 2h ; 0.2ms 5136rpm
retlw 2h ; 0.2ms 5273rpm
retlw 1h ; 0.1ms 5417rpm
retlw 1h ; 0.1ms 5569rpm
retlw 1h ; 0.1ms 5729rpm
retlw 1h ; 0.1ms 5899rpm
retlw 0h ; 0ms 6080rpm
retlw 0h ; 0ms 6272rpm
retlw 0h ; 0ms 6476rpm
retlw 0h ; 0ms 6693rpm
retlw 0h ; 0ms 6926rpm
retlw 0h ; 0ms 7176rpm
retlw 0h ; 0ms 7443rpm
retlw 0h ; 0ms 7732rpm
retlw 0h ; 0ms 8044rpm
retlw 0h ; 0ms 8381rpm
retlw 0h ; 0ms 8748rpm
retlw 0h ; 0ms 9149rpm
retlw 0h ; 0ms 9587rpm
retlw 0h ; 0ms 10070rpm
retlw 0h ; 0ms 10604rpm
retlw 0h ; 0ms 11196rpm
retlw 0h ; 0ms 11859rpm
retlw 0h ; 0ms 12605rpm
retlw 0h ; 0ms 13451rpm
retlw 0h ; 0ms 14418rpm
retlw 0h ; 0ms 15534rpm
; *********** END OF YOUR OWN VALUES ******************************
retlw 8h ; in case of overlap
; line544
;
; reset vector
;
;
map2 org h'200' ; store map at200h
addwf PCL,1 ; add W + PCL
; *********** INSERT YOUR OWN VALUES HERE *******************
retlw 1Eh ; 3ms
retlw 1Eh ; 3ms 1503rpm
retlw 1Eh ; 3ms 1517rpm
retlw 1Eh ; 3ms 1531rpm
retlw 1Dh ; 2.9ms 1545rpm
retlw 1Dh ; 2.9ms 1559rpm
retlw 1Dh ; 2.9ms 1573rpm
retlw 1Dh ; 2.9ms 1587rpm
retlw 1Dh ; 2.9ms 1601rpm
retlw 1Dh ; 2.9ms 1616rpm
retlw 1Dh ; 2.9ms 1631rpm
retlw 1Dh ; 2.9ms 1646rpm
retlw 1Dh ; 2.9ms 1661rpm
retlw 1Dh ; 2.9ms 1677rpm
retlw 1Dh ; 2.9ms 1692rpm
retlw 1Dh ; 2.9ms 1708rpm
retlw 1Dh ; 2.9ms 1724rpm
retlw 1Dh ; 2.9ms 1741rpm
retlw 1Dh ; 2.9ms 1758rpm
retlw 1Dh ; 2.9ms 1775rpm
retlw 1Ch ; 2.8ms 1792rpm
retlw 1Ch ; 2.8ms 1809rpm
retlw 1Ch ; 2.8ms 1827rpm
retlw 1Ch ; 2.8ms 1846rpm
retlw 1Ch ; 2.8ms 1864rpm
retlw 1Bh ; 2.7ms 1883rpm
retlw 1Bh ; 2.7ms 1902rpm
retlw 1Bh ; 2.7ms 1922rpm
retlw 1Bh ; 2.7ms 1942rpm
retlw 1Ah ; 2.6ms 1962rpm
retlw 1Ah ; 2.6ms 1983rpm
retlw 1Ah ; 2.6ms 2004rpm
retlw 19h ; 2.5ms 2026rpm
retlw 19h ; 2.5ms 2048rpm
retlw 19h ; 2.5ms 2070rpm
retlw 18h ; 2.4ms 2093rpm
retlw 18h ; 2.4ms 2116rpm
retlw 18h ; 2.4ms 2140rpm
retlw 17h ; 2.3ms 2165rpm
retlw 17h ; 2.3ms 2190rpm
retlw 16h ; 2.2ms 2215rpm
retlw 16h ; 2.2ms 2241rpm
retlw 16h ; 2.2ms 2268rpm
retlw 15h ; 2.1ms 2295rpm
retlw 15h ; 2.1ms 2323rpm
retlw 14h ; 2ms 2351rpm
retlw 14h ; 2ms 2381rpm
retlw 14h ; 2ms 2411rpm
retlw 13h ; 1.9ms 2441rpm
retlw 13h ; 1.9ms 2473rpm
retlw 13h ; 1.9ms 2505rpm
retlw 12h ; 1.8ms 2538rpm
retlw 12h ; 1.8ms 2572rpm
retlw 12h ; 1.8ms 2606rpm
retlw 12h ; 1.8ms 2642rpm
retlw 11h ; 1.7ms 2679rpm
retlw 11h ; 1.7ms 2716rpm
retlw 11h ; 1.7ms 2755rpm
retlw 11h ; 1.7ms 2795rpm
retlw 10h ; 1.6ms 2836rpm
retlw 10h ; 1.6ms 2878rpm
retlw 10h ; 1.6ms 2921rpm
retlw 0Fh ; 1.5ms 2965rpm
retlw 0Fh ; 1.5ms 3011rpm
retlw 0Fh ; 1.5ms 3059rpm
retlw 0Eh ; 1.4ms 3107rpm
retlw 0Eh ; 1.4ms 3158rpm
retlw 0Eh ; 1.4ms 3210rpm
retlw 0Dh ; 1.3ms 3263rpm
retlw 0Dh ; 1.3ms 3319rpm
retlw 0Dh ; 1.3ms 3376rpm
retlw 0Ch ; 1.2ms 3435rpm
retlw 0Ch ; 1.2ms 3496rpm
retlw 0Bh ; 1.1ms 3560rpm
retlw 0Bh ; 1.1ms 3626rpm
retlw 0Ah ; 1ms 3694rpm
retlw 9h ; 0.9ms 3765rpm
retlw 8h ; 0.8ms 3838rpm
retlw 7h ; 0.7ms 3914rpm
retlw 6h ; 0.6ms 3994rpm
retlw 5h ; 0.5ms 4077rpm
retlw 4h ; 0.4ms 4163rpm
retlw 4h ; 0.4ms 4262rpm
retlw 4h ; 0.4ms 4346rpm
retlw 3h ; 0.3ms 4444rpm
retlw 3h ; 0.3ms 4546rpm
retlw 2h ; 0.2ms 4653rpm
retlw 1h ; 0.1ms 4765rpm
retlw 1h ; 0.1ms 4883rpm
retlw 0h ; 0ms 5006rpm
retlw 0h ; 0ms 5136rpm
retlw 0h ; 0ms 5273rpm
retlw 0h ; 0ms 5417rpm
retlw 0h ; 0ms 5569rpm
retlw 0h ; 0ms 5729rpm
retlw 0h ; 0ms 5899rpm
retlw 0h ; 0ms 6080rpm
retlw 0h ; 0ms 6272rpm
retlw 0h ; 0ms 6476rpm
retlw 0h ; 0ms 6693rpm
retlw 0h ; 0ms 6926rpm
retlw 0h ; 0ms 7176rpm
retlw 0h ; 0ms 7443rpm
retlw 0h ; 0ms 7732rpm
retlw 0h ; 0ms 8044rpm
retlw 0h ; 0ms 8381rpm
retlw 0h ; 0ms 8748rpm
retlw 0h ; 0ms 9149rpm
retlw 0h ; 0ms 9587rpm
retlw 0h ; 0ms 10070rpm
retlw 0h ; 0ms 10604rpm
retlw 0h ; 0ms 11196rpm
retlw 0h ; 0ms 11859rpm
retlw 0h ; 0ms 12605rpm
retlw 0h ; 0ms 13451rpm
retlw 0h ; 0ms 14418rpm
retlw 0h ; 0ms 15534rpm
; *********** END OF YOUR OWN VALUES ******************************
retlw 8h ; in case of overlap
map3 org h'300' ; store map3 at300h
addwf PCL,1 ; add W + PCL
; *********** INSERT YOUR OWN VALUES HERE *******************
retlw 23h ; 3.5ms
retlw 20h ; 3.2ms 1503rpm
retlw 20h ; 3.2ms 1517rpm
retlw 20h ; 3.2ms 1531rpm
retlw 1Fh ; 3.1ms 1545rpm
retlw 1Fh ; 3.1ms 1559rpm
retlw 1Fh ; 3.1ms 1573rpm
retlw 1Fh ; 3.1ms 1587rpm
retlw 1Eh ; 3ms 1601rpm
retlw 1Eh ; 3ms 1616rpm
retlw 1Eh ; 3ms 1631rpm
retlw 1Dh ; 2.9ms 1646rpm
retlw 1Dh ; 2.9ms 1661rpm
retlw 1Dh ; 2.9ms 1677rpm
retlw 1Ch ; 2.8ms 1692rpm
retlw 1Ch ; 2.8ms 1708rpm
retlw 1Ch ; 2.8ms 1724rpm
retlw 1Bh ; 2.7ms 1741rpm
retlw 1Bh ; 2.7ms 1758rpm
retlw 1Bh ; 2.7ms 1775rpm
retlw 1Ah ; 2.6ms 1792rpm
retlw 1Ah ; 2.6ms 1809rpm
retlw 1Ah ; 2.6ms 1827rpm
retlw 19h ; 2.5ms 1846rpm
retlw 19h ; 2.5ms 1864rpm
retlw 19h ; 2.5ms 1883rpm
retlw 18h ; 2.4ms 1902rpm
retlw 18h ; 2.4ms 1922rpm
retlw 17h ; 2.3ms 1942rpm
retlw 17h ; 2.3ms 1962rpm
retlw 17h ; 2.3ms 1983rpm
retlw 16h ; 2.2ms 2004rpm
retlw 16h ; 2.2ms 2026rpm
retlw 15h ; 2.1ms 2048rpm
retlw 15h ; 2.1ms 2070rpm
retlw 15h ; 2.1ms 2093rpm
retlw 15h ; 2.1ms 2116rpm
retlw 14h ; 2ms 2140rpm
retlw 14h ; 2ms 2165rpm
retlw 14h ; 2ms 2190rpm
retlw 14h ; 2ms 2215rpm
retlw 14h ; 2ms 2241rpm
retlw 13h ; 1.9ms 2268rpm
retlw 13h ; 1.9ms 2295rpm
retlw 13h ; 1.9ms 2323rpm
retlw 12h ; 1.8ms 2351rpm
retlw 12h ; 1.8ms 2381rpm
retlw 12h ; 1.8ms 2411rpm
retlw 12h ; 1.8ms 2441rpm
retlw 11h ; 1.7ms 2473rpm
retlw 11h ; 1.7ms 2505rpm
retlw 11h ; 1.7ms 2538rpm
retlw 11h ; 1.7ms 2572rpm
retlw 10h ; 1.6ms 2606rpm
retlw 10h ; 1.6ms 2642rpm
retlw 10h ; 1.6ms 2679rpm
retlw 0Fh ; 1.5ms 2716rpm
retlw 0Fh ; 1.5ms 2755rpm
retlw 0Eh ; 1.4ms 2795rpm
retlw 0Eh ; 1.4ms 2836rpm
retlw 0Eh ; 1.4ms 2878rpm
retlw 0Dh ; 1.3ms 2921rpm
retlw 0Dh ; 1.3ms 2965rpm
retlw 0Dh ; 1.3ms 3011rpm
retlw 0Ch ; 1.2ms 3059rpm
retlw 0Ch ; 1.2ms 3107rpm
retlw 0Ch ; 1.2ms 3158rpm
retlw 0Bh ; 1.1ms 3210rpm
retlw 0Bh ; 1.1ms 3263rpm
retlw 0Bh ; 1.1ms 3319rpm
retlw 0Ah ; 1ms 3376rpm
retlw 0Ah ; 1ms 3435rpm
retlw 0Ah ; 1ms 3496rpm
retlw 0Ah ; 1ms 3560rpm
retlw 9h ; 0.9ms 3626rpm
retlw 9h ; 0.9ms 3694rpm
retlw 9h ; 0.9ms 3765rpm
retlw 8h ; 0.8ms 3838rpm
retlw 8h ; 0.8ms 3914rpm
retlw 8h ; 0.8ms 3994rpm
retlw 7h ; 0.7ms 4077rpm
retlw 7h ; 0.7ms 4163rpm
retlw 7h ; 0.7ms 4262rpm
retlw 6h ; 0.6ms 4346rpm
retlw 6h ; 0.6ms 4444rpm
retlw 5h ; 0.5ms 4546rpm
retlw 5h ; 0.5ms 4653rpm
retlw 5h ; 0.5ms 4765rpm
retlw 5h ; 0.5ms 4883rpm
retlw 4h ; 0.4ms 5006rpm
retlw 4h ; 0.4ms 5136rpm
retlw 4h ; 0.4ms 5273rpm
retlw 3h ; 0.3ms 5417rpm
retlw 3h ; 0.3ms 5569rpm
retlw 3h ; 0.3ms 5729rpm
retlw 2h ; 0.2ms 5899rpm
retlw 2h ; 0.2ms 6080rpm
retlw 2h ; 0.2ms 6272rpm
retlw 2h ; 0.2ms 6476rpm
retlw 2h ; 0.2ms 6693rpm
retlw 2h ; 0.2ms 6926rpm
retlw 1h ; 0.1ms 7176rpm
retlw 1h ; 0.1ms 7443rpm
retlw 1h ; 0.1ms 7732rpm
retlw 1h ; 0.1ms 8044rpm
retlw 1h ; 0.1ms 8381rpm
retlw 1h ; 0.1ms 8748rpm
retlw 1h ; 0.1ms 9149rpm
retlw 1h ; 0.1ms 9587rpm
retlw 1h ; 0.1ms 10070rpm
retlw 0h ; 0ms 10604rpm
retlw 0h ; 0ms 11196rpm
retlw 0h ; 0ms 11859rpm
retlw 0h ; 0ms 12605rpm
retlw 0h ; 0ms 13451rpm
retlw 0h ; 0ms 14418rpm
retlw 0h ; 0ms 15534rpm
; *********** END OF YOUR OWN VALUES ******************************
retlw 8h ; in case of overlap
org 385h ; if the program is loose,
;
;
;
goto start ; It goes back home.
;
;
;===================JMJ================================
;Test routine, sends ignition pulses to the thyristor at 4hz/140hz,
;selectable by rotor input.
testdelay
btfsc test ; checks the jumper to disconnect test mode
goto start
bsf rpmmax
bcf led
btfss rotor ; checks hall device. slow test if low, fast test if high
goto slowtest
goto fasttest
slowtest
bsf led
; Delay = 0.005 seconds
; Clock frequency = 4 MHz
;4998 cycles
movlw 0xE7
movwf d1
movlw 0x04
movwf d2
Delay_0
decfsz d1, f
goto $+2
decfsz d2, f
goto Delay_0
goto $+1
goto trigger ; triggers the thyristor
goto testdelay
fasttest
bsf led
; Delay = 0.3 seconds
; Clock frequency = 4 MHz
;299998 cycles
movlw 0x5F
movwf d1
movlw 0xEB
movwf d2
Delay_1
decfsz d1, f
goto $+2
decfsz d2, f
goto Delay_1
goto $+1
goto trigger ; triggers the thyristor
goto testdelay
trigger
bsf coil ; set output
bcf revcoil ; set reverse output
; Delay = 0.001 seconds
; Clock frequency = 4 MHz
movlw 0xC7
movwf d1
movlw 0x01
movwf d2
Delay_3
decfsz d1, f
goto $+2
decfsz d2, f
goto Delay_3
;2 cycles
goto $+1
bcf coil
bsf revcoil
goto testdelay
;
;=============================End JMJ=============================
end