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.
Code: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 loopCode: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




Bookmarks