Re: Elapsed Timer findings
Consider it tested :D
GPS PPS signal (yellow trace) compared to DT’s Elapsed Timer (red trace)... port bit pulse every hundred interrupts at 100Hz in the ISR (1 PPS also).
Pic is clocked with 10MHz rubidium module.
At 1uS resolution on the scope, even one instruction cycle error would cause the clocks to run away from each other very quickly!
https://www.youtube.com/watch?v=RbzhVSpJVAM
http://img.photobucket.com/albums/v1...psyyxmeuz6.png
Re: Elapsed Timer findings
Re: Elapsed Timer findings
Quote:
Originally Posted by
Art
...For the 20MHz example where the constant is 03B7h, it's the reverse of this:
FFFFh - 03B7h = C348h (49992 decimal),
49992 + 8 = 50000 (it must take eight instruction cycles to reload the timer)
50000 / 10000 = 5
5 x 4 = 20MHz
... Art.
For the next guy that needs to incorporate the Prescaler into Art's formula (like when you want to calculate Preload for faster oscillators):
65535 - (((( MHz / Prescaler ) / 4 ) x 10000 ) - 8 )
Then set T1CON prescaler accordingly.
Re: Elapsed Timer findings
did you see this
Code:
'***************************************************************************
'* Name : Elapsed_INT-18.bas *
'* Author : Darrel Taylor *
'* Date : JUL 11, 2006 : 7/11/2010 *
'* Version : 1.2 *
'* Notes : Must have DT_INTS-18.bas loaded first *
'* ver 1.2: Now works at any OSC frequency without using the prescaler *
'***************************************************************************
the pic16 ver can work up to and including 32MHz without the need of a prescaler if necessary
Code:
'****************************************************************
'* Name : Elapsed_INT.bas *
'* Author : Darrel Taylor *
'* Date : Jan 10, 2006 *
'* Notes : Must have DT_INTS-??.bas loaded first *
'****************************************************************
DISABLE DEBUG
; syntax = Handler IntSource, Label, Type, ResetFlag?
DEFINE Elapsed_Handler TMR1_INT, _ClockCount, PBP, yes
; the above define can be used in the INT_LIST macro, if desired (optional)
Ticks var byte ' 1/100th of a second
Seconds var byte
Minutes var byte
Hours var byte
Days var word
SecondsChanged var bit
MinutesChanged var bit
HoursChanged var bit
DaysChanged var bit
SecondsChanged = 1
MinutesChanged = 1
Goto OverElapsed
' ------------------------------------------------------------------------------
' To calculate a constant for a different crystal frequency - see this web page
' http://www.picbasic.co.uk/forum/showthread.php?t=2031
' ------------------------------------------------------------------------------
Asm
IF OSC == 4 ; Constants for 100hz interrupt from Timer1
TimerConst = 0D8F7h ; Executed at compile time only
EndIF
If OSC == 8
TimerConst = 0B1E7h
EndIF
If OSC == 10
TimerConst = 09E5Fh
EndIF
If OSC == 16
TimerConst = 063C7h
EndIF
If OSC == 20
TimerConst = 03CB7h
EndIF
If OSC == 32
TimerConst = 25539
EndIF
Re: Elapsed Timer findings
Nope. The one I just downloaded today (just to be certain) only went up to 20 MHz.
Code:
IF OSC == 4 ; Constants for 100hz interrupt from Timer1
TimerConst = 0D8F7h ; Executed at compile time only
EndIF
If OSC == 8
TimerConst = 0B1E7h
EndIF
If OSC == 10
TimerConst = 09E5Fh
EndIF
If OSC == 16
TimerConst = 063C7h
EndIF
If OSC == 20
TimerConst = 03CB7h
EndIF
Can you get to that number using Art's formula?
The link in the comments is dead.
Re: Elapsed Timer findings
Maybe I have obsolete includes. These are the versions I have:
Code:
'***************************************************************************
'* Name : ReEnterPBP.pbp *
'* Author : Darrel Taylor *
'* Version : 3.4 (8/13/2010) *
'* Notes : Allows re-entry to PBP from an ASM interrupt *
'* : Must have DT_INTS-14.bas loaded first *
'***************************************************************************
'* ver 3.4 (8/13/2010) *
'* Changed Restore to use 1 less stack level *
'* ver 3.3 (1/16/2010) *
'* compatability with PIC16F1 chips *
'* ver 3.2
'* Bug Fix, RS1/RS2 were being restored incorrectly *
'***************************************************************************
Code:
'***************************************************************************
'* Name : DT_INTS-14.bas *
'* Author : Darrel Taylor *
'* Version : 1.10 (8/13/2010) *
'* Date : OCT 13, 2009 *
'***************************************************************************
'* REV 1.10 Fixes Duplicate label error when Handlers cross page boundary *
'* Fixes error with 16F1's and MPLAB 8.53 (high) *
'* REV 1.00 Completely re-written, with optimization and F1 chips in mind *
'* REV 0.93 Fixed CMIF and EEIF problem with older PIC's *
'* that have the Flags in PIR1 instead of PIR2 *
'* Rev 0.92 solves a "Missed Interrupt" and *
'* banking switching problem *
'***************************************************************************
I have the same version of Elapsed_INT.bas as you.
1 Attachment(s)
Re: Elapsed Timer findings
Quote:
Originally Posted by
Demon
Can you get to that number using Art's formula?
nope
looks like i snuck in 2:1 prescale with nill comments or anything
picmulticalc says it all
Attachment 9734
i don't know where the pic18 vers came from , its not something i would ever use these days
Re: Elapsed Timer findings
I'm happy you shared that image. I have the Interrupt Frequency at 10 usec, not 10 msec. I suppose that could have just been a default value.
I'm using the timer to count Ticks between encoder pulses. I control when the Elapsed Timer starts and stops, so do I really want such a fast interrupt that probably will take resources from other operations?
I'm assuming that the Interrupt Frequency triggers code in the background.