Electronic – arduino – Operating an ATmega328P-PU at 2.5V


For my job, I was tasked with creating a board to interface with a 2.5V device we've made. So, to keep things simple, I decided to interface it with an ATmega328P-PU running the Arduino firmware at 2.5V. All the specifications say the chip has an operating voltage of 1.8V-5.5V, so I didn't bother testing any circuit at 2.5V until today. That was a dumb mistake.

I was testing the low voltage setup by running the simple blink sketch on a breadboard and found it would stop working just below 2.7V. The power supply would also show 0mA current draw as opposed to the 2mA it was showing before. I checked the pin with a DMM and the LED unplugged to confirm that no output was coming from the pin.

After some research, I found a site that seemed to say that, at lower voltages, it needs to run at a slower speed. So, I burned the bootloader to have the chip used the 8Mhz internal oscillator. However, it still turns off below 2.7V.

How can I get access to these lower voltages? I am guessing that this has to do with some internal fuse setting, but can't find anything about it. I'm well within the operating voltage for both the I/O pins and Supply rail. I know it can run at 2.5V as the Arduino BT can have an input voltage as low as 2.5V. Is there something I'm forgetting?

Best Answer

At 2.5V nominal supply voltage, you have to limit the clock frequency to maybe 7MHz (depending on the tolerance on your 2.5V supply). I'm not an Arduio aficionado, but I believe at least some incarnations run at 16MHz. See this:


As you noted, the BOD has to be either set to an appropriate value or disabled (and if it's disabled you'd probably want to use an external supervisor chip).


Note that with the setting 0x06 (the only possible setting where the BOD is enabled) the BOD is not guaranteed to work properly, even with clock frequency of 4MHz because it won't necessarily be active until the supply voltage drops to 1.7V.

So, if you want a reliable design, you should disable the BOD and use an external supervisor chip, such as the ADM811 and limit your clock frequency to the lowest possible voltage trip of the supervisory circuit.


In the above case, it's 2.25V so around 6-7MHz (or less) would be safe.