''Step driver VAR long Stack[20] long Cog long pinPz long low_time long cRamp long cInc long count1 long count2 long count3 long cSteps long cfinished PUB start(pin, lowSp, ramp, rampInc, steps) : oKay pinPz := |< pin low_time := lowSp cRamp := ramp cInc := rampInc cSteps := steps count1 := ramp count2 := steps-(ramp * 2)+1 count3 := steps cfinished := 0 stop okay := cog := cognew(@entry, @pinPz) + 1 PUB stop if Cog cogstop(Cog~ - 1) PUB done : fnd fnd := cfinished DAT entry mov p,par rdlong _pinPz,p add p,#4 rdlong _low_time,p add p,#4 rdlong _cRamp,p add p,#4 rdlong _cInc,p add p,#4 rdlong _count1,p add p,#4 rdlong _count2,p add p,#4 rdlong _count3,p add p,#4 rdlong _finished,p mov pf,p mov _pinmask,_pinPz or dira, _pinmask or outa, _pinmask mov time,cnt add time,_low_time :acel waitcnt time,sec xor outa ,_pinmask sub _count1,#1 wz sub _count3,#1 waitcnt time,_low_time xor outa,_pinmask sub _low_time, _cInc tjnz _count1, #:acel :slu waitcnt time,sec xor outa ,_pinmask sub _count2,#1 wz sub _count3,#1 waitcnt time,_low_time xor outa,_pinmask tjnz _count2, #:slu :decel waitcnt time,sec xor outa ,_pinmask sub _count3,#1 waitcnt time,_low_time xor outa,_pinmask add _low_time, _cInc tjnz _count3, #:decel mov _finished,_cInc wrlong _finished,pf or dira,#15 or outa,#15 waitcnt time,_cInc cogId Cognum cogStop cognum ' data sec long 800 Cognum long 0 time res 1 _pinmask res 1 _pinPz res 1 _low_time res 1 _cRamp res 1 _cInc res 1 p res 1 _count1 res 1 _count2 res 1 _count3 res 1 pf res 1 _finished res 1