user24: Is it possible to upgrade the firmware on an Arduino so that it can do more things such as change undervolting/ overvolting in order to provide more processing power. To do this you would have to most likely re flash the chip itself, so how would that be accomplished?

user60: Note the below chart, in regard to your under/over volting the device for different F_CPU, indicates the relationship. As a result you find most Arduino's run at 5V and a clock rate of 16MHz. While there are some 3.3V variants that run at 8MHz. 

However, the core library provided with the IDE typically has specific #if's for both 8 and 16 MHz F_CPU speeds, not using a formula in most places.
Hence it is possible to do what you ask. However, you will find the core library limitations affecting. Tipping the cost vs benefit ratio, to that of the very intent. And then likely one would leave the Stock IDE and core libraries to a more makefile method.

user86: To answer the aspect of your question regarding the "firmware" on the ATmega328p MCU used in most of the Arduino boards:  
There is no firmware on the ATmega at all aside from the bootloader. The programs you write are running directly on the hardware. 
There are certain "fuse" settings which are set with a ISP programmer. However, there are only 24 of them (three bytes), and they largely relate to low-level configuration, and are not what I think you're asking:

There is also the Bootloader, which is a small program that sits in a separate segment of the MCU's program memory and allows it to update itself at startup (which is how all arduinos are programmed). However, it only runs for a short period of time at startup, and is completely removed from memory after the MCU has jumped to the main program.
Lastly, there are auxiliary MCUs (ATmega16U2/8U2) on most arduino boards that are used as USB-serial interfaces, that can be updated to behave differently (e.g. emulate a keyboard/mouse), but again, this isn't actually a change to the core processor, so whether it counts as "installing a different firmware" depends on how you define the arduino.
Really, I'd strongly reccomend reading the ATmega328P datasheet. This is the documentation for the MCU that basically forms the "Arduino". It should address what seems to be misconceptions. 

24: <p>Is it possible to upgrade the firmware on an Arduino so that it can do more things such as change undervolting/ overvolting in order to provide more processing power. To do this you would have to most likely re flash the chip itself, so how would that be accomplished?</p>
 60: <p>Note the below chart, in regard to your under/over volting the device for different F_CPU, indicates the relationship. As a result you find most Arduino's run at 5V and a clock rate of 16MHz. While there are some 3.3V variants that run at 8MHz. </p>

<p><img src="https://i.stack.imgur.com/qS5z1.png" alt="Freq vs Vcc"></p>

<p>However, the core library provided with the IDE typically has specific #if's for both 8 and 16 MHz F_CPU speeds, not using a formula in most places.</p>

<p>Hence it is possible to do what you ask. However, you will find the core library limitations affecting. Tipping the cost vs benefit ratio, to that of the very intent. And then likely one would leave the Stock IDE and core libraries to a more makefile method.</p>
 86: <p>To answer the aspect of your question regarding the "firmware" on the ATmega328p MCU used in most of the Arduino boards:  </p>

<p>There is no firmware on the ATmega at all aside from the bootloader. The programs you write are running <em>directly</em> on the hardware. </p>

<p>There are certain "fuse" settings which are set with a <a href="http://store.atmel.com/PartDetail.aspx?q=p:10500054" rel="nofollow noreferrer">ISP programmer</a>. However, there are only 24 of them (three bytes), and they largely relate to low-level configuration, and are not what I think you're asking:<br>
<img src="https://i.stack.imgur.com/wEPF9.png" alt="enter image description here"></p>

<p>There is also the <a href="http://code.google.com/p/optiboot/" rel="nofollow noreferrer">Bootloader</a>, which is a small program that sits in a separate segment of the MCU's program memory and allows it to update itself at startup (which is how all arduinos are programmed). However, it only runs for a short period of time at startup, and is completely removed from memory after the MCU has jumped to the main program.</p>

<p>Lastly, there are auxiliary MCUs (ATmega16U2/8U2) on most arduino boards that are used as USB-serial interfaces, that <em>can</em> be updated to behave differently (e.g. emulate a keyboard/mouse), but again, this isn't actually a change to the core processor, so whether it counts as "installing a different firmware" depends on how you define the arduino.</p>

<p>Really, I'd strongly reccomend reading the <a href="http://www.atmel.com/Images/Atmel-8271-8-bit-AVR-Microcontroller-ATmega48A-48PA-88A-88PA-168A-168PA-328-328P_datasheet.pdf" rel="nofollow noreferrer">ATmega328P datasheet</a>. This is the documentation for the MCU that basically forms the "Arduino". It should address what seems to be misconceptions. </p>
