CCS C Software and Maintenance Offers
FAQFAQ   FAQForum Help   FAQOfficial CCS Support   SearchSearch  RegisterRegister 

ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

CCS does not monitor this forum on a regular basis.

Please do not post bug reports on this forum. Send them to CCS Technical Support

About timers - Ticks and Microseconds

 
Post new topic   Reply to topic    CCS Forum Index -> General CCS C Discussion
View previous topic :: View next topic  
Author Message
rajeshkhan808



Joined: 29 Aug 2012
Posts: 17

View user's profile Send private message

About timers - Ticks and Microseconds
PostPosted: Sat Sep 01, 2012 5:21 am     Reply with quote

I had a few questions regarding timers and I though I would ask them here

Q1) When we do setup_timer_1(T1_INTERNAL | T1_DIV_BY_1)
What does T1_DIV_BY_1 or T1_DIV_BY_8 mean ?

Q2) I read that the instruction clock is the oscillator divided by 4, so if 20MHz is then we get, 0.2us. I wanted to know why is it divided by 4 ?

Q2)I wanted to know whats the difference between microsecond ticks and Microseconds. Why do we divide microsecond ticks by 5 to get the microseconds ? Is it because (this is just a guess an explanation would be appreciated) 5 microsecond ticks have 1 microsecond ?
jeremiah



Joined: 20 Jul 2010
Posts: 1346

View user's profile Send private message

PostPosted: Sat Sep 01, 2012 5:58 am     Reply with quote

Q1) TMR1_DIV_BY_1 means divide the timer by 1 (EX: 4MHz/1 = 4MHz), TMR1_DIV_BY_8 means divide the timer by 8 (EX: 4MHz/8 = 500kHz). They are used to slow down the clock incase you don't need your timer to run very fast. TMR_DIV_BY_1 is typically the default as this doesn't change the clock.

Q2) I don't know the exact reason why, but it is for hardware purposes. I am assuming it takes 4 ticks of the clock to execute an instruction on that platform, but that is just a guess. As a point of interest, PIC24 and dsPIC33 have FCY=FOSC/2 instead of 4.

Q3) I typically use "microsecond ticks" to mean the number of clock ticks (or even just FCY cycles, depends if you are referencing an external clock or an internal) per microsecond (as you described), however, the number is purely based on the clock value you pick, so it is not typically 5 nor is it always the same number.
rajeshkhan808



Joined: 29 Aug 2012
Posts: 17

View user's profile Send private message

PostPosted: Sat Sep 01, 2012 6:09 am     Reply with quote

@jeremiah Thank you for the great post. So how would you calculate the number of ticks if the Clock was 20MHz ? Any suggestions ?
jeremiah



Joined: 20 Jul 2010
Posts: 1346

View user's profile Send private message

PostPosted: Sat Sep 01, 2012 4:38 pm     Reply with quote

You calculate FCY (the clock divided by 4 you mentioned)
Invert that value to find the time it takes one tick.
Divide that time into the time you are interested to find the number of ticks.
bkamen



Joined: 07 Jan 2004
Posts: 1615
Location: Central Illinois, USA

View user's profile Send private message

PostPosted: Sat Sep 01, 2012 5:03 pm     Reply with quote

jeremiah wrote:

Q2) I don't know the exact reason why, but it is for hardware purposes. I am assuming it takes 4 ticks of the clock to execute an instruction on that platform, but that is just a guess. As a point of interest, PIC24 and dsPIC33 have FCY=FOSC/2 instead of 4.


It is. It synchronizes the clock with the system's instruction execution. At a minimum, there's no sense in the clock running faster than that since that means you'd have a possible interrupt in between instructions -- and since that interrupt isn't going to get serviced until the next instruction anyway, why bother having those interrupts occur in between. (and we won't talk about synchronous/metastability here, but that might be part of it too)

Additionally... let us say you have the clock set for 2x the instruction clock. How will you service 2 a possibly 2 interrupts in between instruction clocks. You wouldn't. So again. Doesn't make sense to have a timer's clock run faster than the instruction clock in the normal sense of a timer.

Now you could argue that the timer is being used as a counter/capture (for doing something like freq measurement with a gate) and so now the rules are different... and to some extent the settings of the modules that support counting are different... but I'm not sure how that factors into the current internal design bringing legacy issues forward. I haven't dug that deep.

But getting back to terms of a timer being used to count ticks...

A nice thing about a prescaler is that it reduces the number of interrupts the system has to deal with for longer term events.

Example: you want to count 10ths of a second. So 100mS ticks with a system clock of 40MHz. (or 10MHz after Fosc/4)

With a 16bit clock and a DIV_1, a full run from 0-FFFF takes 6mS. You have to get interrupted about 16 times for a 100mS period to count those 6mS ticks to make a bigger 100mS tick.

All those interrupts. What a waste of CPU.

So, let's DIV_8 which makes 10MHz 1.25MHz - NOW to get from 0-FFFF and roll TIMER1 takes 52mS -- and you are only interrupted twice to count a 100mS tick.

Obviously, 10MHz doesn't work so well into some binary divisors (1,2,4,8,16) so we can adjust TIMER1 accordingly if we want even outcomes.

But the idea is this: If you want to count big numbers, doing it with a fast clock required HUGE timers or a lot of constant interrupt overhead. A prescaler allows you to adjust how big that timer is (in hardware) so it bothers your software less often and you can now use those cycles to process something else.

Compile in a simple TIMER1 interrupt and look how big it is... count up the instructions or run it through MPLAB's code execution time calculator.

now imagine if you want that routine to run as little as possible or more than it really needs to.

Make sense?

-Ben
_________________
Dazed and confused? I don't think so. Just "plain lost" will do. :D
rajeshkhan808



Joined: 29 Aug 2012
Posts: 17

View user's profile Send private message

PostPosted: Sun Sep 02, 2012 1:55 am     Reply with quote

Thanks for the great post, however what would I do if I wanted to find the number of ticks in a microsecond ? Say of a PIC running at 20 MHz.
bkamen



Joined: 07 Jan 2004
Posts: 1615
Location: Central Illinois, USA

View user's profile Send private message

PostPosted: Sun Sep 02, 2012 2:31 am     Reply with quote

rajeshkhan808 wrote:
Thanks for the great post, however what would I do if I wanted to find the number of ticks in a microsecond ? Say of a PIC running at 20 MHz.


The math.

There's a bunch of ways to figure it out depending on what you're doing.

You just say "a PIC @ 20MHz" -- are you using Timer1? Timer0?

PIC 18F or 16F?

I'll tell you what, tell me how many miles to a gallon my car gets if it's just me and a passenger, and I'll tell you how many ticks per uSec.

:D
_________________
Dazed and confused? I don't think so. Just "plain lost" will do. :D
rajeshkhan808



Joined: 29 Aug 2012
Posts: 17

View user's profile Send private message

PostPosted: Mon Sep 03, 2012 12:57 am     Reply with quote

I am using timer 1 and PIC 16F877A. Sorry I cant believe how I forgot that info.
bkamen



Joined: 07 Jan 2004
Posts: 1615
Location: Central Illinois, USA

View user's profile Send private message

PostPosted: Mon Sep 03, 2012 10:56 am     Reply with quote

rajeshkhan808 wrote:
I am using timer 1 and PIC 16F877A. Sorry I cant believe how I forgot that info.


:D


Now -- you need to read up on Timer1 and all it will do.

When you're learning any device, reading the datasheet several times helps.

Before bed helps
Then again in the morning helps.

But your answer is in the datasheet. I promise.

-Ben
_________________
Dazed and confused? I don't think so. Just "plain lost" will do. :D
Display posts from previous:   
Post new topic   Reply to topic    CCS Forum Index -> General CCS C Discussion All times are GMT - 6 Hours
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Powered by phpBB © 2001, 2005 phpBB Group