Running ATMEGA328 at less than 3.6v

I have a raw ATMEGA328 loaded for 8Mhz internal clock. I have uploaded a simple sketch with serial output and it runs without the external oscillator.

However it will not run below 3.6v. According to the ATMEL documentation this looks like the lower operational limit for when the chip is running at 16MHz. The chip should run at a lot lower voltage than this (1,8v?).

These are the fuse settings on my chip as per Gammon's Programmer for the Lilypad.

Low fuse is 0xE2 (b11100010)which means CKSEL3..0 is b0010 which I read from the ATMEL docs as meaning the clock speed is 8MHz internal (Calibrated Internal RC Oscillator)

High fuse is 0xDA
Ext fuse is 0xFD
Lock Byte is 0xEF
Clock calib is 0x8C

What am I overlooking? Is my uploaded sketch conflicting with what has been set? I note the fuse settings in boards.txt are different.

Here is the info from boards.txt for the target device

atmega328bb.name=ATmega328 on a breadboard (8 MHz internal clock)

atmega328bb.upload.protocol=arduino
atmega328bb.upload.maximum_size=30720
atmega328bb.upload.speed=57600

atmega328bb.bootloader.low_fuses=0xE2
atmega328bb.bootloader.high_fuses=0xDA
atmega328bb.bootloader.extended_fuses=0x05

atmega328bb.bootloader.file=atmega/ATmegaBOOT_168_atmega328_pro_8MHz.hex
atmega328bb.bootloader.unlock_bits=0x3F
atmega328bb.bootloader.lock_bits=0x0F

atmega328bb.build.mcu=atmega328p
atmega328bb.build.f_cpu=8000000L
atmega328bb.build.board=AVR_ATMEGA328BB
atmega328bb.build.core=arduino:arduino
atmega328bb.build.variant=arduino:standard


atmega328bb.bootloader.tool=arduino:avrdude
atmega328bb.upload.tool=arduino:avrdude

I have battled for some time now to get this to run at a lower voltage - please jump across to http://forum.arduino.cc/index.php?topic=487297.0 get more details. I've confirmed its operating at 8MHz...

What do you do to get the 328 to run at low voltages?

Cheers
Alan

We assume you have proper decoupling on the controller.
How are you confirming the oscillator is 8MHz?

.

What do you mean by "it will not run" below 3.6v?

Is it doing nothing? Printing garbage to serial? What?

If it's printing garbage to serial, that's no surprise; serial doesn't work reliably over the spec'ed voltage range using the internal oscillator. The internal oscillator is only +/- 10% over the spec'ed operating conditions (the actual speed depends strongly on voltage and temperature), but serial will only work when it's within about +/- 2% of 8mhz. So you need to either tune it or use an 8mhz crystal.

If nothing, then it's something else... I would think you'd be in the clear on the BOD settings - it looks like it's set to 2.7v. You don't have the 3.6v coming into the input of a voltage regulator with ~1v of dropout by any chance?

As larryd notes - it is critical to ensure that you are using proper decoupling. There should be a 0.1uf ceramic cap between Vcc and Gnd, and between AVcc and Gnd, right next to the chip. Omitting these results in weird, inconsistent failures - sometimes it works, other times it may reset randomly, fail to write, or misbehave in other ways, and said failures depend on the specific chip (process variations mean different specimens of the same part behave differently) as well as temperature and voltage. It is horrifying and depressing that so many tutorials omit this necessary component.

larryd:
We assume you have proper decoupling on the controller.
How are you confirming the oscillator is 8MHz?

.

I have run a loop for 500mS on an 8Mhz chip and a standard 16Mhz UNO with a simple counter.

The 8MHz counted 29102 loops and the 16MHz 58247. That was really to confirm the fuse settings

I checked the loop was actually taking 500mS on both by hooking up a logic analyser and pin state change around the loop and they both recorded 500mS

Decoupled and tried battery and power supply

DrAzzy:
What do you mean by "it will not run" below 3.6v?

Is it doing nothing? Printing garbage to serial? What?

If it's printing garbage to serial, that's no surprise; serial doesn't work reliably over the spec'ed voltage range using the internal oscillator. The internal oscillator is only +/- 10% over the spec'ed operating conditions (the actual speed depends strongly on voltage and temperature), but serial will only work when it's within about +/- 2% of 8mhz. So you need to either tune it or use an 8mhz crystal.

It stops completely runnning around 3.2v, Gets a bit dodgy as it gets that low when the LED doesn't light up for its half of the cycle... it just 'tweaks' on and seems to fade.

I have a loop with a LED (like blink) and also serial output. I test with and without serial output with no difference.

I'd have guessed I could have gotten a lot closer to 1.8v than I am

I believe that there is a fuse that check for voltage, you have to disable this.