Tobias
- 5th January 2010, 08:51
16F877A measuring RPM. I have the timer style and PULSIN versions working fine. However my timer style of code is very slow. I toggle an output and on the scope I get 14 hz at 5000 rpm (4 counts/rev) when using the timer code. When I use the Pulsin I get 55 hz. Any ideas why its slower? I was under the impression the timer version would be alot faster than the Pulsin.
DEFINE OSC 20
RPM var word
Period var Word
HRPM var word
LRPM var word
RPM_Total VAR Word
LCD VAR PortC.6 'LCD output
RPMInput var PortC.2
Gate1 Var PortC.1
Prefix con $FE ' needed before each command
LcdCls CON $51 ' clear LCD (use PAUSE 5 after)
CursorPS con $45 'Cursor Position
pause 100
SEROUT2 LCD,84, [Prefix, LcdCls]
Include "modedefs.bas" ' Mode definitions for Serout
Low Gate1
OPTION_REG.7 = 0 'Pull Ups enabled
INTCON.7=0
ADCON0.0 =0
ADCON1 =7
Loop:
If RPMInput = 0 then
Pulsin RPMInput, 0, LRPM
PULSIN RPMInput, 1, HRPM
RPM_Total = HRPM + LRPM
RPM = 1000
RPM = RPM * RPM
RPM = DIV32 RPM_Total ' 1,000,000 / Pulse_Total
RPM = RPM * 60 ' Per minute
RPM = Div32 8 ' 4 pulses per rev
endif
toggle gate1
goto loop
DEFINE OSC 20
RPM var word
Period var Word
HRPM var word
LRPM var word
RPM_Total VAR Word
LCD VAR PortC.6 'LCD output
RPMInput var PortC.2
Gate1 Var PortC.1
Prefix con $FE ' needed before each command
LcdCls CON $51 ' clear LCD (use PAUSE 5 after)
CursorPS con $45 'Cursor Position
pause 100
SEROUT2 LCD,84, [Prefix, LcdCls]
Include "modedefs.bas" ' Mode definitions for Serout
Low Gate1
OPTION_REG.7 = 0 'Pull Ups enabled
INTCON.7=0
ADCON0.0 =0
ADCON1 =7
Loop:
If RPMInput = 0 then
Pulsin RPMInput, 0, LRPM
PULSIN RPMInput, 1, HRPM
RPM_Total = HRPM + LRPM
RPM = 1000
RPM = RPM * RPM
RPM = DIV32 RPM_Total ' 1,000,000 / Pulse_Total
RPM = RPM * 60 ' Per minute
RPM = Div32 8 ' 4 pulses per rev
endif
toggle gate1
goto loop
DEFINE OSC 20
RPM var word
Period var Word
HRPM var word
LRPM var word
RPM_Total VAR Word
LCD VAR PortC.6 'LCD output
RPMInput var PortC.2
Gate1 Var PortC.1
Prefix con $FE ' needed before each command
LcdCls CON $51 ' clear LCD (use PAUSE 5 after)
CursorPS con $45 'Cursor Position
pause 100
SEROUT2 LCD,84, [Prefix, LcdCls]
Include "modedefs.bas" ' Mode definitions for Serout
Low Gate1
OPTION_REG.7 = 0 'Pull Ups enabled
INTCON.7=0
ADCON0.0 =0
ADCON1 =7
Loop:
If RPMInput = 0 then
Pulsin RPMInput, 0, LRPM
PULSIN RPMInput, 1, HRPM
RPM_Total = HRPM + LRPM
RPM = 1000
RPM = RPM * RPM
RPM = DIV32 RPM_Total ' 1,000,000 / Pulse_Total
RPM = RPM * 60 ' Per minute
RPM = Div32 8 ' 4 pulses per rev
endif
toggle gate1
goto loop
DEFINE OSC 20
RPM var word
Period var Word
HRPM var word
LRPM var word
RPM_Total VAR Word
LCD VAR PortC.6 'LCD output
RPMInput var PortC.2
Gate1 Var PortC.1
Prefix con $FE ' needed before each command
LcdCls CON $51 ' clear LCD (use PAUSE 5 after)
CursorPS con $45 'Cursor Position
pause 100
SEROUT2 LCD,84, [Prefix, LcdCls]
Include "modedefs.bas" ' Mode definitions for Serout
Low Gate1
OPTION_REG.7 = 0 'Pull Ups enabled
INTCON.7=0
ADCON0.0 =0
ADCON1 =7
Loop:
If RPMInput = 0 then
Pulsin RPMInput, 0, LRPM
PULSIN RPMInput, 1, HRPM
RPM_Total = HRPM + LRPM
RPM = 1000
RPM = RPM * RPM
RPM = DIV32 RPM_Total ' 1,000,000 / Pulse_Total
RPM = RPM * 60 ' Per minute
RPM = Div32 8 ' 4 pulses per rev
endif
toggle gate1
goto loop