 |
PIC
Microcontroller Timer calculation
Do you get stuck doing PIC microcontroller timer calculation juggling
between datasheet, calculator and your design requirements?
If so then you need some tools to automate the process.
Calculations
Typically you will need to focus on the end
result which is usually to make the timer generate a frequency or
measure a time period. This is fairly difficult when you first have to
find the information in the datasheet and then account for prescalers
and postscalers etc.
PIC Timer 0 : Calculation example
Here is an example of the typical calculations
for creating an 18ms interrupt repeat rate using PIC Timer 0.
Selecting a prescaler ratio of 1:128 gives the following interrupt
period (with Fosc/4 or 4MHz/4 = 1MHz) and using the maximum overflow
from Timer 0.
1/(1MHz/128/256) = 32.768ms
Obviously this is longer than you need but you can cut it down by
changing the overflow point (in the interrupt). To do this you need the
period of the frequency input to Timer 0 which is:
1/(1MHz/128) = 128us
This is the period of time for each count in Timer 0 i.e.
256 * 128us = 32.768ms
So by manipulating the overflow point you can set the overall interrupt
period. The required period is 18ms so some calculations:
18ms/128us = 140.625 (nearest integer value is 141)
This is the number of counts required after which the interrupt is
generated. To use it Timer 0 it is loaded in the following manner:
TMR0 = 256-143; // need 141 but Timer 0 looses 2 at load.
From this point on every 128us is counted by Timer 0 and it will
overflow after 141 counts (or 18ms)
141 * 128us = 18ms
TCL Scripts for PIC Timer calculation
Every time you use any built in PIC timer you
have to do these type of calculations and the hardware in each timer is
different and you'll also have to do battle with interrupts.
To make the process easy you can use three on-line (free) interactive
script modules written in TCL (Tool Command Language). They operate in
a similar way to a Java applets.
Each of these scripts is geared towards the most typical use of each
timer and lets you change prescaler, postscaler or register value using
slider controls. This makes it easy to experiment with different values
as the result is immediately displayed in the web page (frequency and
period are displayed from each part of the timer e.g. after the
prescaler, after the register, after the postscaler).
The above calculation is now trivial just move the sliders around until
you get close to your desired PIC timer period and then adjust the
timer value to home in on the correct answer.
So you can do what-if type operations (all without a calculator in
sight) e.g. 'I need a 15ms repeat rate'.
From Timer 2 the closest I could get is 15.136 (took 1 minutes to test)
- perhaps I'll try timer 1 - Ah that gives an exact 15ms (took 30
seconds to test). Just check with Timer 0 - this gives 15.040ms (took
~30 seconds to test).
Of course you can also set the main clock frequency (internal or
external crystal) as well.
PIC Timer 0
This has an 8 bit prescaler and an 8 bit timer
and can be driven from an external clock.
Prescaler : 8 bit
Timer register : 8 bit
Link to PIC-Timer
0 calculator
PIC Timer 1
This has a 4 bit prescaler and an 16 bit timer
and can be driven from an external clock. It can also be driven from a
slow speed crystal e.g. 32kHz.
Prescaler : 4 bit
Timer register: 16 bit
Link to PIC-Timer
1 calculator.
PIC Timer 2
This has a 4 bit prescaler and an 8 bit timer and
an 8 bit period register and is only driven from the internal clock
(Fosc/4)
Note: the
Period register lets you create an output frequency with no further
processing i.e. you don't have to update the timer register value in an
interrupt routine as you do with Timer 0 or Timer 1 - this makes it
easy to use (although it's tricky to get right - unless you use the
calculator scripts).
Prescaler : 2 bit (1:1, 1:4, 1:16)
Timer register: 8 bit
Period register : 8 bit
Postscaler : 4 bit (1:1 to 1:16 inclusive)
Link to PIC-Timer
2 calculator.
Copyright © John Main 2006
Free to distribute if the article is kept complete.
http://www.best-microcontroller-projects.com
Jump from pic timer page to
Best Microcontroller Projects home page
|
|