with better resolution than PULSIN?
Here's how .. with an example from the Microchip CCP & ECCP Tips & Tricks modified to
work with PBP.
' Measuring signal pulse widths with capture module ' Procedure for high-going pulse: ' 1. Configure CCP to capture on rising edge ' 2. Setup Timer1 so it will not overflow during max pulse width time ' 3. Enable ccp capture ' 4. Once capture flag bit is set, save captured value as T1 ' 5. Reconfigure CCP to capture on falling edge ' 6. On 2nd capture, save 2nd value as PW ' 7. Subtract T1 from PW for the pulse width value DEFINE OSC 4 Symbol Capture = PIR1.2 ' CCP1 capture flag T1 VAR WORD ' 1st capture value PW VAR WORD ' 2nd capture value & ultimately final pulse width TRISC.2 = 1 ' CCP1 input pin (Capture input on 18F242) INTCON = 0 ' Interrupts off ReLoad: CCP1CON = %00000101 ' Capture mode, capture on rising edge T1CON = 0 ' TMR1 prescale=1, clock=Fosc/4, TMR1=off TMR1H = 0 ' Clear high byte of TMR1 counter TMR1L = 0 ' Clear low byte T1CON.0 = 1 ' Turn TMR1 on here Capture = 0 ' Clear capture int flag bit While !Capture ' Wait here until capture on rising edge Wend ' Rising edge detected / stuff 'captured' Timer1 value in T1 T1.HighByte = CCPR1H T1.LowByte = CCPR1L CCP1CON.0 = 0 ' Configure capture for falling edge now Capture = 0 ' Clear capture interrupt flag bit While !Capture ' Wait here until capture on falling edge Wend ' Falling edge detected / stuff 'captured' Timer1 value in PW PW.HighByte = CCPR1H PW.LowByte = CCPR1L PW = PW-T1 ' High pulse width = PW-T1 HSEROUT [DEC PW,"uS High",13,10] ' Output to RS232 display GOTO ReLoad END
the falling edge first with CCP1CON = %00000100, and rising edge next with
CCP1CON.0 = 1.
Real simple ... real effective ... and spot-on timing. Even works on tiny little PICs
like the 12F683 12F615, etc...;o)
Re: K42 and Timer Interrupts
Thanks for the explanation.
Ioannis - 28th April 2025, 19:28I misinterpreted these paragraphs. My understanding was to have ASYNC cleared and use Fosc/4.
Ioannis