[Tinyos-help] Time counting

Philip Levis pal at cs.stanford.edu
Wed Jan 3 16:56:06 PST 2007


On Jan 3, 2007, at 4:41 PM, Michael Newman wrote:

> For time counts driven by a crystal the types of errors you are  
> talking about should result in time variations of seconds per day.  
> What I am seeing is seconds per minute.
>
> A repeating counter set to 1000 milliseconds should count seconds  
> with some jitter. I don't expect the events to be exactly on the  
> second, I do expect the number of events per hour to be correct.  
> Basically the timers are driven off of the watch crystal which  
> counts the ATmega128 counters. I expect to schedule an event every  
> time the ATmega128 counter passes the appropriate number of ticks.  
> I do not expect the events to get lost, nor do I expect extra  
> events. I expect the events to be near in time to the tick that  
> triggered them but not exact in time, because there may be other  
> tasks that compete for the exact time.
>
> In any case counting fast indicates a flaw, competing for resources  
> and failing to get them would result in slow counts.

As Cory mentioned, please note that the timer interfaces talk in  
terms of 2^10 ticks, not 10^3 ticks. So if you specify a time of  
1000, even if you had a perfect crystal you would see the timer run  
fast at  a rate of 1024/1000 Hz, which is 58.5 seconds. So you would  
see a 1-2 second difference. Can you quantify the results you've seen?

The reason for using 1024 rather than 1000 is one of accuracy. Since  
the underlying hardware is in terms of 1024ths, then converting to  
true milliseconds would introduce inaccuracies. In particular, it  
would be possible to choose ms values which should be in phase but  
would not be due to drift, unless you pay the overhead for partial  
counts. E.g., a 111ms timer and a 999ms timer would slowly move out  
of phase of one another.

Phil




More information about the Tinyos-help mailing list