|
|
|
![]() |
|
|||||||
|
||||||||
![]() |
| Thread Tools | Rate Thread | Display Modes |
|
#1
|
||||
|
||||
|
Quick Timer Question
So we set up a timer to trigger an interrupt every time it overflows. However, I could not get OpenTimer1(), ReadTimer1(), etc. to work, so we had to manually set up the timer.
My question is, how do I get the timer to overflow faster? Right now it overflows 3 or 4 times per loop. Timer setup code: T1CONbits.T1CKPS0 = 1; // 1:8 Prescale (clock=1.25MHz/each tick=800ns) T1CONbits.T1CKPS1 = 1; T1CONbits.TMR1CS = 0; // = 0 Timer uses internal clock TMR1H = 0x85; // Sets most significant byte TMR1L = 0xED; // Sets least significant byte T1CONbits.TMR1ON = 1; // Turns on Timer1 IPR1bits.TMR1IP = 0; // Sets Timer1 as low priority PIE1bits.TMR1IE = 1; // Enables Timer1 overflow interrupt INTCONbits.GIEL = 1; // Enables low priority interruptions |
|
#2
|
|||||
|
|||||
|
Re: Quick Timer Question
You need to store a new value in TMR1H and TMR1L each time you service the interrupt. That value counts up every tick until it overflows and triggers the interrupt again. To make it happen faster, use a larger number to start with.
0x85ED is 34825 decimal, giving 31251 ticks until it overflows at 65536. At 800 ns per tick, that's 25 milliseconds. If you want to drop that to 5 milliseconds, you need 6250 ticks. Store 59286 in the timer, 0xE796. |
|
#3
|
||||
|
||||
|
Great, thanks alot! You also answered another question I had regarding the amount of time per tick (800 ns). Thanks!
|
|
#4
|
|||||
|
|||||
|
Re: Quick Timer Question
Here's an example of using the library calls.
In User_Initialization() (user_routines.c) Code:
OpenTimer1(TIMER_INT_ON & T3_16BIT_RW & T3_SOURCE_INT & T3_PS_1_8); // #ticks = elapsed_time(sec) * 10**7 / prescale // #ticks = .004sec * 10**7 / 8 #ticks = 5000 // Maximum for 16-bit 65535 - 5000 (4ms) = 60535 WriteTimer1(60535); /* Preload timer to overflow after 4ms */ Code:
if (PIR1bits.TMR1IF) /* TIMER 1 INTERRUPT */
{
PIR1bits.TMR1IF = 0; // clear the interrupt flag
WriteTimer1(60535); /* Reset Timer to overflow in 4ms */
}
Last edited by Mark McLeod : 02-02-2006 at 15:22. |
![]() |
| Thread Tools | |
| Display Modes | Rate This Thread |
|
|
Similar Threads
|
||||
| Thread | Thread Starter | Forum | Replies | Last Post |
| Accelerometer code | ImmortalAres | Programming | 28 | 04-06-2005 01:02 |
| a quick function question | Kashi Chan | Programming | 3 | 06-03-2005 20:44 |
| Accelerometer Timer Question | psquared | Programming | 3 | 12-02-2005 01:34 |
| A quick IR sensor question | PBoss | Programming | 7 | 28-03-2004 21:02 |
| A quick question | Joelster | Technical Discussion | 6 | 10-02-2002 09:09 |