Thanks for the help on getting the RPM working right.
Next question, when I want to incorporate this into other code how do I keep it from taking up as much time as just measuring the pulse width with Pulsin? I can't have it in the little CaptureLoop routine waiting for the next rpm pulse.
Looking through the spec sheet on the 4620, I see CCP1IE (PIE1.2). If I enable that bit, will I get an interrupt on each cylinder fire? I know there is a way to start and stop timer1 based on the cylinder firing and not just looping for the cylinder firing.
Here is what I am working on assuming that is the right path to take. I haven't worked with interrupts much so I am sure I need more work.[HTML][/HTML]Code:DEFINE OSC 20 Prefix con $FE ' needed before each command LcdCls CON $51 ' clear LCD (use PAUSE 5 after) CursorPS con $45 'Cursor Position Capture VAR PIR1.2 ' CCP1 capture flag CCP1IF Overflow VAR PIR1.0 ' Timer1 overflow flag TMR1IF: RPM var word period var Word TotalTime var word 'Holds seconds and tics Counter var word Detect var bit LCD VAR PortC.6 'LCD output ADCON0 =0 'A/D Off ADCON1.3=1 'All AN channels digital ADCON1.2=1 ''' ADCON1.1=1 ''' ADCON1.0=1 ''' TRISE.0=1 'EO input TRISE.1=1 'E1 input CCP1CON = %00000110 ; Capture mode, every rising edge 0101 , Fourth 0110 T1CON.7=1 'enable timer 16 bit ` T1CON.6=1 'Timer1 OSC T1CON.5=1 '1:4 prescaler T1CON.4=0 '1:4 prescaler T1CON.3=0 'Timer1 OSC off T1CON.2=0 'sychro clock T1CON.1=0 'internal clock T1CON.0=0 'stop timer PIE1.2=1 'Enables the CCP1 interrupt pause 10 SEROUT2 LCD,84, [Prefix, LcdCls] Include "modedefs.bas" ' Mode definitions for Serout SEROUT2 LCD,84, [Prefix,CursorPS,0,"RPM test"] pause 500 TMR1H = 0 'Clear 8-bit register TMR1L = 0 'Clear 8-bit register capture = 0 'Clear Timer Detect = 0 ON Interrupt goto Measure_Time Loop: Counter = Counter + 1 SEROUT2 LCD,84, [Prefix,CursorPS,0,dec5 Counter] SEROUT2 LCD,84, [Prefix,CursorPS,20,"RPM ",dec5 RPM, " ", #Detect] goto loop Disable Measure_Time: SEROUT2 LCD,84, [Prefix,CursorPS,40,"Int ",dec5 RPM] If Detect = 0 then T1CON.0=1 detect = 1 capture = 0 endif If Detect = 1 then T1CON.0=0 detect = 0 period.LowByte=CCPR1L period.HighByte=CCPR1H capture = 0 TMR1H = 0 TMR1L = 0 RPM = 10000 RPM = RPM * RPM ' 100,000,000 RPM = DIV32 period ' 100,000,000 / RevCount RPM = RPM * 60 ' Per minute RPM = DIV32 1600 RPM = (RPM*5) endif Enable return




Bookmarks