Internal or external oscillator

As others have said, accurate frequency and frequency stability are reasons to use a external ceramic resonator or crystal. A resonator is several times more accurate than the internal R-C oscillator and good enough for UART communication. A crystal is much more accurate, and necessary if you are doing some other types of communication like CAN, USB, or ethernet.

Another reason for a external crystal is choice of frequency. Crystals come in a wide range of frequencies whereas the internal oscillator is usually one frequency with maybe a choice of 4x PLL enabled. Some newer 24 bit core PICs have both a multiplier and divider in the clock chain so you can hit a wide choice of frequencies from the single internal oscillator frequency.

There are of course various applications that inherently require accurate frequency or timing other than communications. Time is the property in electronics that we can measure most accurately cheaply, so sometimes the problem is transformed into one of measuring time or producing pulses with accurate timing.

Then there are applications which require some long term synchronization with other blocks. A 1% oscillator would be off by over 14 minutes per day if used as the basis for a real time clock. Accurate long term time may also be needed without having to know real time. For example, suppose you want a bunch of low power devices to wake up once every hour to exchange data for a few seconds and then go back to sleep. A 50ppm crystal (very easy to get) will be off no more than 180ms in a hour. A 1% R-C oscillator could be off by 36 seconds though. That would add significant on-time and therefore power requirements to the devices that only needed to communicate for a couple of seconds every hour.


  1. Precision. Internal clocks are not precise, can be affected by noise.

  2. Temperature independent precision. Typical oscillators can vary wildly. Specialty temperature compensating oscillators can be needed in low or high temp applications, or if temperature varies wildly.

  3. Speed. Internal oscillators may not reach the highest speed of the IC. External ones can be needed for that.

  4. Voltage. The speed of an internal timer may be dependent on the voltage it is being run at.

  5. Multiple clocks are needed. Some applications want to share an oscillator.

  6. Special applications where the internal clock may not be easily used. Dividing the internal clock might be harder than throwing a cheap 31 kHz watch crystal at it, for time keeping applications.

Off the top of my head, the ATMEGA 328 the arduino uses requires an external crystal at 5V for its max speed. The lily pad version runs at 8 MHz, on the internal oscillator because it's limited to that at 3.3v. The MSP430 Value Line launchpad is limited to 10 MHZ at 3V, 8 at 2.5V.


Frequency stability will be higher with an external one. So if you have a application that really depends on the mcu freq, then you may need to use a external one.

But most modern mcu:s has a quite stable internal osc, therefore I think this used to be a bigger question a couple of years ago. Also there is more and more ways to trim the internal one, and compensate for temperature drift (etc etc).

On the other hand there is other ways to make sure that you are synchronized, in some countries the freq stability in the power net is 50Hz ±0.01Hz and other places like Sweden actually has ±0.001Hz and I have seen projects using this to keep things in sync. And then you are no longer as dependent on the mcu freq and you can use the internal one. But this is a little bit of topic :)