Truncated match.
PICList
Thread
'Timing using RTCC/TMR0'
1997\09\14@182536
by
Andy Shaw
|
Hi Folks,
I thought that I would pass this along just in case
anyone else finds it useful....
One of my favorite ways of producing timing loops
is to make use of the TMR0 free running timer.
Basically I sample the value of TMR0 at the start
of the period event and then simply subtract this
value from the current value of TMR0 to check on
the actual time. Obviously this requires that the
period to be measured falls within the range of
256 ticks of TMR0.
I use the PIC a lot to do
radio control stuff both decoding standard RC
signals and generating pulses for servos etc.
To do this you need to be able to both generate
and time pulses in the range 1-2ms. My usual
setup is to arrange for the TMR0 period to be just
over 2ms with a 4Mhz pic. (Actually the setup I use
gives a 1ms as a count of 125 in TMR0). To do this
I load the prescaler with the value 2 which gives a
divide by 8). With this setup the obvious way to
generate a 1ms period would be
movf TMR0, W ; Get current tick count
movwf start ; save it
loop
movwf start, W ; Get tick count now
subwf TMR0, W ; Subtract start time
addlw -.125 ; Subtract 1ms count
btfss STATUS, Z ; have we finished
goto loop ; no so carry on waiting
However if you actually use this type of code to drive a servo
you will find that the servo 'twitches'. The reason for this is that
at the start of the loop the pre-scaler register may have any value
in it and so you will have an uncertainty of up to 1/125ms in the
actual period. The 'fix' for this simply clear the pre-scaler at the
same time as saving the start point by saving the TMR0 value
back to the timer...
movf TMR0, W ; Get current tick count
movwf TMR0 ; clear pre-scaler counter
movwf start ; save start time
Anyway what a ramble this turned out to be! Hope somebody
out there finds this of some use. It took me a long time to learn this
particular lesson!
BTW I know you can probably do this sort of timing stuff without
having to use TMR0. But I hate all of that instruction counting stuff!
also I find having a standard timer very useful, I use it to schedule
various tasks, time pulse lengths etc. It also makes it very easy
to change timer resolution and/or clock frequency!
Andy
More... (looser matching)
- Last day of these posts
- In 1997
, 1998 only
- Today
- New search...