user28153: Has anyone experience configuring the Atmega328P to work with an 8Mhz external clock?
I want to reduce the power consumption of the device. If I just connect an 8MHz external quartz oscillator then simple programs like LED blink still work (With the time delays doubled), but if I try to use communication like UART, then I am unable to. So no programming new sketches.

user28084: Firstly, you can buy 8MHz Atmega328P Pro-Minis from China. They are cheap and run at 3.3V. Look at eBay.
If you want to reduce the power consumption of Arduino boards, you have three primary attack vectors:

Removing the power LED
Removing the voltage regulator
A Low-Power library

All of these have different impacts on the power consumption of your respective board. 
An extensive comparison can be found here in this blog-post.

user4143: If you reduce the main clock speed by 50% then everything else is reduced by 50% as well.
The whole chip runs at half the speed. That includes things like the UART.
For example, the bootloader is set to run at 115200 baud on a 16MHz chip. If you run that same chip, with the same bootloader, at 8MHz then the bootloader will actually be running at half the baud rate, so 115200 / 2 = 57600 baud.
Unless you tell the IDE that your board is now running at 8MHz (by creating or using the correct board configuration information to set F_CPU to 8000000) then time runs at half the speed in your sketches too. So a delay of one second will last two seconds. Every two milliseconds a single millisecond will pass. And again baud rates will be wrong. If you use:
Serial.begin(9600);

you will actually be running at half that speed (4800 baud) and so you would have to set your serial terminal program to that speed instead of the one you requested.
To to do things properly you will have to:

Replace the crystal
Edit, compile, and install a new version of the bootloader that runs at 8MHz
Create (or edit) a suitable board definition (in boards.txt) to compile sketches that expect to run at 8MHz.


user26916: The easiest way is to use the settings:
Tools > Board > Arduino Pro or Pro Mini
Tools > Processor > ATmega328 (3.3V, 8MHz)
The problem with that is the Pro Mini bootloader is 2kB and has a bug that causes an endless reset loop if you do a watchdog reset.
The better option is to use https://github.com/MCUdude/MiniCore, which includes the Optiboot bootloader, saving 1.5kB of flash memory vs using the Pro Mini bootloader and doesn't have the watchdog bug.
After selecting the correct configuration for your hardware from the Tools menu, do Tools > Burn Bootloader, which will set the fuses on your ATmega328P and upload the correct bootloader.

28153: <p>Has anyone experience configuring the Atmega328P to work with an 8Mhz external clock?</p>

<p>I want to reduce the power consumption of the device. If I just connect an 8MHz external quartz oscillator then simple programs like LED blink still work (With the time delays doubled), but if I try to use communication like UART, then I am unable to. So no programming new sketches.</p>
 28084: <p>Firstly, you can buy 8MHz Atmega328P Pro-Minis from China. They are cheap and run at 3.3V. Look at eBay.</p>

<p>If you want to reduce the power consumption of Arduino boards, you have three primary attack vectors:</p>

<ul>
<li>Removing the power LED</li>
<li>Removing the voltage regulator</li>
<li>A Low-Power library</li>
</ul>

<p>All of these have different impacts on the power consumption of your respective board. </p>

<p>An extensive comparison can be found <a href="https://andreasrohner.at/posts/Electronics/How-to-modify-an-Arduino-Pro-Mini-clone-for-low-power-consumption/" rel="nofollow noreferrer">here in this blog-post</a>.</p>
 4143: <p>If you reduce the main clock speed by 50% then everything else is reduced by 50% as well.</p>

<p>The whole chip runs at half the speed. That includes things like the UART.</p>

<p>For example, the bootloader is set to run at 115200 baud on a 16MHz chip. If you run that same chip, with the same bootloader, at 8MHz then the bootloader will actually be running at half the baud rate, so 115200 / 2 = 57600 baud.</p>

<p>Unless you tell the IDE that your board is now running at 8MHz (by creating or using the correct board configuration information to set F_CPU to 8000000) then time runs at half the speed in your sketches too. So a delay of one second will last two seconds. Every two milliseconds a single millisecond will pass. And again baud rates will be wrong. If you use:</p>

<pre><code>Serial.begin(9600);
</code></pre>

<p>you will actually be running at half that speed (4800 baud) and so you would have to set your serial terminal program to that speed instead of the one you requested.</p>

<p>To to do things properly you will have to:</p>

<ol>
<li>Replace the crystal</li>
<li>Edit, compile, and install a new version of the bootloader that runs at 8MHz</li>
<li>Create (or edit) a suitable board definition (in boards.txt) to compile sketches that expect to run at 8MHz.</li>
</ol>
 26916: <p>The easiest way is to use the settings:</p>

<p><strong>Tools > Board > Arduino Pro or Pro Mini</strong></p>

<p><strong>Tools > Processor > ATmega328 (3.3V, 8MHz)</strong></p>

<p>The problem with that is the Pro Mini bootloader is 2kB and has a <a href="https://github.com/arduino/Arduino/issues/4492" rel="nofollow noreferrer">bug</a> that causes an endless reset loop if you do a watchdog reset.</p>

<p>The better option is to use <a href="https://github.com/MCUdude/MiniCore" rel="nofollow noreferrer">https://github.com/MCUdude/MiniCore</a>, which includes the Optiboot bootloader, saving 1.5kB of flash memory vs using the Pro Mini bootloader and doesn't have the watchdog bug.</p>

<p>After selecting the correct configuration for your hardware from the <strong>Tools</strong> menu, do <strong>Tools > Burn Bootloader</strong>, which will set the fuses on your ATmega328P and upload the correct bootloader.</p>
