Note:
The following headings give practical calculations showing the typical errors you will encounter when using a clock of a specific type with a specific accuracy.
If you look at a day's worth of timekeeping then you have 24 x 60 x 60 = 86400 seconds in a day. So the maximum error after a day has passed is 1% of 86400 = 864 seconds = 14.4 minutes!
Error: 14.4 minutes error per day.
A typical crystal has an error of 100ppm (ish) this translates as 100/1e6 or (1e4) So the total error on a day is 86400 x 1e4= 8.64 seconds per day. In a month you would loose 30x8.64 = 259 seconds or 4.32 minutes per month.
Error: 8.64 seconds per day
A watch crystal has an error of 20ppm (ish), but you have to design the board layout well, this translates as 20/1e6 (2e5) which gives an error over a day of 86400 * 2e5 = 1.73 seconds per day so in a month it looses 30x1.72 = 51 seconds or 1 minute a month (approx).
Error: 1.73 seconds per day.
One of the other factors in a wrist watch is that you wear it on your wrist
 and the human body is at a constant temperature. Crystals have a
temperature coefficient graph meaning that another source of error is
temperature (This is why you can buy an OCXO or Oven Controlled Crystal
Oscillator  that generates heat and keeps a constant temperature). The
watch crystal will be better because you keep it at a constant
temperature!
A typical spec might be ±1 x 10^{9} (1ppb) so the error after a day would be 86.4us and after a month 2.6ms (2.6e3 seconds or 2.6 thousandths of a second!). They are not quoted in ppm as it becomes inconvenient to write e.g. this OCXO has a ppm value of 0.001 ppm or 1ppb.
Error: 84.6us per day.
Note: there are
many types designed for many different applications and
all costing different amounts!
This is also known as an atomic clock.
A rubidium clock has an accuracy of about ±1 x 10^{12} so the error
after a day would be 86.4ns (84e9 seconds 84 billionths of a second!) so the
error after a month would be 2.6us. Again using ppm is also inconvenient for
writing : 0.000001ppm or 0.001ppb
Error: 86.4ns per day.
Error: 2.6us per month.
This is also known as an atomic clock.
Cesium beam atomic clocks are stable to 1 x 10^{13} (8.64ns/day 8
billionths of a second!) or 259ns (259e9 seconds) a month (ppm is 0.0000001ppm
! or 0.0001ppb).
Error: 8.46ns per day.
Error: 0.259us per month.
Note: A Cesium fountain is stable to 1 x 10^{15}.
Type  Accuracy (ppm/ppb)  Accuracy  Aging / 10 Year 
Aging / 10 Year 
Crystal  10ppm100ppm  10^{5}  10^{4}  1020ppm  10x10^{6} 
TCXO  1ppm  10^{6}  3ppm  3x10^{6} 
OCXO 510Mhz  0.02ppm (20ppb) 
2x10^{8}  ~0.2ppm (200bpp)  0.2x10^{6} 
OCXO 15100MHz 
0.5ppm (500ppb) 
5x10^{7}  ~10ppb  1x10^{8} 
Rubidium Atomic  1x10^{6}ppm (0.001ppb)  10^{12}  0.005ppm (5ppb)  5x10^{9} 
# Calculate the ppm given a nominal frequency and actual frequency.
# ppm? 20e6 19998485 Returns 75.75 ppm
proc ppm? { nomf f } {
return [expr (abs($f$nomf)/$nomf)*1e6 ]
}
# given ppm return decimal e.g. ppm 200 is 0.0002
proc ppm { ppmv } { return [expr $ppmv/1e6] }
# given ppm return decimal e.g. ppb 10 is 1e8
proc ppb { ppbv } { return [expr $ppbv/1e9] }
# ppm range show max and min of freq:nomf and ppm value
proc ppm_r { nomf ppmv } {
puts [expr $nomf+([ppm $ppmv]*$nomf) ]
puts [expr $nomf([ppm $ppmv]*$nomf) ]
}
Download TCL from Active state (free) and download tkcon. Double click tkcon to start it and paste the above procedures into tkcon, then use the them by typing in commands at the tkcon command prompt (Turn on calculator mode in preferences):
e.g. ppm? 20e6 19999391
results in 30.450000000000003
i.e. It shows you the ppm value: 30ppm for given nominal frequnecy and actual measured frequency..
Jump from ppm calculations to
BestMicrocontrollerProjects Home Page
Mar 04, 15 01:33 AM
How to drive multiple LEDs with very few microcontroller outputs.
Nov 25, 14 12:00 PM
An PIC Ultrasonic Distance meter project using a PIC microcontroller which is ideal since it has a capture timer that can accurately measure the ultrasonic echo time, so calculating the distance is ea…
Nov 20, 14 04:58 AM
How to drive a dot matrix LED display. This project shows you how to drive one with 64 LEDs (8 rows by 8 columns) or less e.g. 35 LEDs (7 rows by 5 columns).
Sign up for MicroZine: ''The'' Microcontroller Newsletter Enter your first Name and primary email address in the form below: And receive absolutely FREE a full project for: "Measuring Analogue Voltages Without An ADC" (Using only one pin). Instant Download: You Can Get It Right Now
You can only get it through this newsletter. To get exclusive access Enter your first name Name and primary email address Now in the form above.: But wait ! There's more... You'll receive more free and exclusive reports as well as site information and site product updates. Scroll up to the form above and sign up NOW. Don't forget it's FREE and if you don't like it you can unsubscribe at any time. Click Here Now to use the form above to get your Valuable information absolutely free.

Social
Bookmarking

"I wanted to thank you so so so much for all the information you have provided in your site it's SUPERB and FANTASTIC."  Ranish Pottath 
"This site really is the best and my favorite. I find here many useful projects and tips."  Milan bursach<at>gmail.com 
Learn
PIC C Now

"Awesome site, very, very easy and nice to navigate!"  Matt matt_tr<at> wolf359.cjb.net 
"I am a newbie to PIC and I wanted to say how great your site has been for me."  Dave de_scott<at>bellsouth.net 
Learn Microcontrollers

"Your site is a great
and perfect work. congratulations."  Suresh integratredinfosys<at> yahoo.com 
"I
couldn't find the correct
words to define yourweb site. Very useful, uncovered, honest and clear. Thanks so much for your time and works. Regards."  Anon 