#picaxe 20x2 'Default clock speed 8MHz
#no_table
'#no_data
#DEFINE freq64 ;Choose Clock speed
; =======================================================
; POV Propeller Clock Speed COntrol V1.
; Get Timing working
;
; Use SETTIMER to give an interrupt every 6deg (1 minute)
; AND Hall switch and Motor pulse for accurate Rev mark.
; =======================================================
SYMBOL Motor= C.1 ; Use Rev counter pulse (2 per rev)
SYMBOL Hall = C.2 ; with Hall switch to get 1/rev for Interrupt
SYMBOL Led5 = B.6 ; 5 minute mark light
SYMBOL Led12= B.7 ; 12 hour mark
SYMBOL Flag12 = bit0 ; Is it 12 hour or min?
SYMBOL minute = b2
SYMBOL test = b3
SYMBOL timcor = w25 ;b50,b51
SYMBOL Timr = w26 ;b52,b53
#IFDEF freq64
SYMBOL Startpause = 4000 ;0.5s wait at 64MHz
' SYMBOL Timr = 65328 ;SETTIMER for 6deg at 20rps
SETFREQ M64
#ENDIF
; Wait for the motor to speed up then look for passing 12 hour
LOW Led5
LOW Led12
READ 0, WORD Timr
PAUSE Startpause
Flag12 = 1
SETINT %110,%110 ; Wait for Hall switch and Motor pulse both - 12 o'clock
Interrupt: ; Either a minute or 12 o'clock
IF Flag12=1 THEN
timcor = timer
minute = 0
SETTIMER Timr
SETINTFLAGS %10000000,%10000000
HIGH Led12
timcor = - Timr - timcor / 60
IF timcor<>0 THEN
Timr = Timr - timcor
WRITE 0, WORD Timr
HIGH Led5
ENDIF
ELSEIF minute=58 THEN
timer = 0
SETTIMER 1
SETINTFLAGS OFF
SETINT %110,%110
minute = 59
ELSE
SETTIMER Timr
SETINTFLAGS %10000000,%10000000
INC minute
test = minute // 5
IF test=0 THEN
HIGH Led5
ELSE
LOW Led5
ENDIF
LOW Led12
ENDIF
RETURN
DATA 0,($30,$FF)