Tracking time is as old as… well, time itself really. FWIW, I stopped wearing a wristwatch about a year ago. When traveling, I often don’t have a convenient way to tell the time with me. I like it that way because it pushes me to leave a bit earlier and enjoy the journey a bit more, instead of stressing out to reach some location on earth at some particular point in time. “Onthaasten” as the Dutch say (“un-hurry”).
That wristwatch was one of the most beautiful time-pieces I ever owned, and darn accurate – less than a minute off per year. More than accurate enough for day-to-day use without ever adjusting it (except for DST).
Still, time is everything. Cell phones make very efficient use of bandwidth (and energy) by using time-division multiple access (TDMA), i.e. taking up specific time slots to get a transmitter to talk to the receiver it wants to reach, without collisions. It’s a common technique in many advanced networks, not just with cell phones.
TDMA requires all parties to be aware of time. No wonder that cell-phone towers need the Rubidium clock I described in the past two days. If your timing is off, you end up jamming others, and to avoid that the system then needs to introduce wider gaps around each slot. More gaps = more time & energy wasted, as each unit has to wait longer in receive mode to be certain it picks up the entire packet, and more gaps = more unused bandwidth.
For good timing, you need to have every node in sync within a millisecond or so. Perfect timing means a receiver can turn on exactly when the transmitter starts, and switch off right after the end. But the need for exact time is bad news for the simplest ultra-low power nodes, which tend to use an RC-controlled watchdog timer for the sleep modes. On an ATmega, watchdog accuracy is only about 10% in the worst case:
Ok, time to get into some terminology…
- one percent (%) is 1 per 100, of course
- one part per million (ppm) is 0.0001 percent
- one part per billion (ppb) is 0.0000001 percent
- one part per trillion (ppt) is 0.0000000001 percent
It’s easy to make mistakes with so many zero’s, so let’s approach it from another angle: a year has about 31.5 million seconds, so let’s specify time accuracy in the amount of error over a year. And let’s not fuss over 50%, I’ll round things up or down a bit for convenience.
My trusty old Seiko Lasalle wristwatch:
- estimated 1 min/year, i.e. an astoundingly good 2 ppm
ATmega watchdog accuracy:
- worst case: 10 % = can be over a month per year off
- if supply is 3.3V ± 0.1V and temp is 25°C ± 10°C: 1 % = within 3 days per year
The 16 MHz resonator used in a JeeNode:
- 0.5 %, i.e. less than 2 days per year off
The crystal normally used in RBBB’s, Arduino’s, RTC’s etc:
- 50 ppm, i.e within half an hour per year
The more accurate crystal used in a JeeLink:
- 10 ppm, i.e. within 5 minutes per year
The Precision RTC Plug, which will be released later:
- 2 ppm, i.e accurate within 1 minute per year
The calibrated Temperature Compensated Crystal Oscillator (TCXO), mentioned recently:
- 0.1 ppm, i.e. within 3 seconds per year
And then that new Rubidium clock:
- 10 ppt, off by no more than 0.3 milliseconds per year
Cesium clocks can do even better, by the way:
- 0.01 ppt, no more than 0.3 microsecond per year
And how’s this Quantum Logic Clock, mentioned in one of the recent comments:
- less than 0.3 nanoseconds off per year!
The clocks mentioned so far all try to be spot on as best as they can. That’s what a clock is for, after all.
But that’s not all there is. Next week I’ll describe how a fixed reference can be used to stabilize any frequency.