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: SERIN2 Receiving Wrong Data
The sending device has the typical 18F4550 USB setup and it is set to "Define OSC 48". The receiving device is set to "DEFINE OSC 16".
rsocor01 Yesterday, 19:56