;
; capture junction discharge time
;
discharge
incf binl,F ; bump counter |B0
skpnz ; |B0
incf binh,F ; |B0
DelayCy(1*msecs-6) ; 1 msec -6 cycle loop time |B0
btfsc PORTA,1 ; discharged? yes, skip, else |B0
goto discharge ; loop again |B0
movlw 255 ; |B0
btfsc binh,0 ; 256..511? no, skip, else |B0
movwf binl ; limit value to 255 msecs |B0
;
; Avg' += ( New - Avg )/16
;
filter16
movf avg,W ; |B0
subwf binl,F ; NEW = NEW - AVE |B0
swapf binl,W ; |B0
andlw 0x0F ; get /16 int part |B0
skpc ; result is neg? |B0
iorlw 0xF0 ; yes |B0
addwf avg,F ; |B0
swapf binl,W ; |B0
andlw 0xF0 ; get /16 frac part |B0
addwf avgfrac,F ; |B0
skpnc ; |B0
incf avg,F ; |B0