What's the difference 328-PU and 328P-PU

What is the difference between the Atemga328-PU a d Atmega328P-PU?

And while I am at it, is it the same across the range, as in Atmega1284P-Pu V Atmega1284-PU?

What would I use in an Uno? (Of the 328s that is)

The chip with the extra P is supposed to use less power, and that's the one you get in genuine Arduino Unos. These two MCU models also have a different "signature", so the Arduino IDE will shout at you if you simply put the Atemga328-PU on the board. There's a way around it though, see here:

Many thanks for that. So if you want a high power Uno, you would fiddle around and us the 328-XX and a proper Uno would use the 328P-XX? All you have to do is fiddle with the boot loader? That is good to know.

Also I know realise I should have posted this in the Micro controller section. I expect a moderator will move it....

ChilliTronix:
Also I know realise I should have posted this in the Micro controller section. I expect a moderator will move it....

Yes, well, until they do... just remember it's not a "high power Arduino", just a "more power-hungry Arduino" :wink:

igendel:
Yes, well, until they do… just remember it’s not a “high power Arduino”, just a “more power-hungry Arduino” :wink:

Ah. So does it have more current drive and sink ability, or is it electrically the same but just wastes more power?

ChilliTronix:
Ah. So does it have more current drive and sink ability, or is it electrically the same but just wastes more power?

The latter. Don't know if it's older technology, or just a tiny bit cheaper...

OK, so the only advantage to the 328-XX over the 328P-XX may be price but... the P-XX variant is better supported so would be best to stick to?

Many thanks, that is really helpful as that is not clear from a skim of the data sheet.

ChilliTronix:
OK, so the only advantage to the 328-XX over the 328P-XX may be price but... the P-XX variant is better supported so would be best to stick to?

Definitely go with the standard.

Now, if you're really into saving power, you should probably ditch the board altogether and use just the microcontroller, with slow clock and sleep mode whenever possible. Of course it's much less convenient, but the Uno peripheral components takes up more power than the ATmega itself...

I was going to but some chips... just making sure I ordered the right ones!

And yes I appreactiate that all the added bits like the USB to serial which is seldom needed waste power. (One of the reasons a pro mini is good).

ChilliTronix:
One of the reasons a pro mini is good

A Pro Mini is good if you do not need the USB interface - but it still has a really bright power LED!

Paul__B:
A Pro Mini is good if you do not need the USB interface - but it still has a really bright power LED!

If you need to remove the power LED that can be done with a but of brutality surely?

Anyway I am looking to get some of each and some crystals and have a play. I may even sell some Shrimp it type kits.

ChilliTronix:
If you need to remove the power LED that can be done with a but of brutality surely?

No brutality, just a fine-point soldering iron and a steady hand :smiley:
I did it once, it saved about 3mA.

igendel:
No brutality, just a fine-point soldering iron and a steady hand
I did it once, it saved about 3mA.

Removing of course, the resistor and not the LED, so that you can either re-enable it later or use a much larger (value) resistor.

In sleep mode, that would be the difference between 3 mA and a couple of hundred microamps.

The annoyance of the LED is that is simply too bright! Only occasionally do you ever need to be reassured that the power is actually on.

Paul__B:
Removing of course, the resistor and not the LED, so that you can either re-enable it later or use a much larger (value) resistor.

There is truth in what you said :slight_smile:

Paul__B:
In sleep mode, that would be the difference between 3 mA and a couple of hundred microamps.

Absolutely - I wasn't downplaying it, just stating a fact.

The too-bright LEDs are everywhere, not just on Arduinos. It's a real annoyance - especially the blue ones.

igendel:
It's a real annoyance - especially the blue ones.

Blue LEDs are an annoyance in general.

One has to ask - why are they used at all? They are unpleasant to look at and not the optimum colour for visibility.

The actual answer is - "because we can". Blue LEDs were the second last to be developed - white LEDs are of course, a blue LED with a fluorescent phosphor added, similar to a "standard" fluorescent lamp. Presumably with a longer life than a fluorescent lamp because the phosphor is not attacked by the intense deep ultraviolet from the mercury arc.

But white is of course not so "modern" as we have been using incandescent indicators for over a century. Blue LEDs on computers and the like showed that they were the most "modern".

But not now. It really is time that we forgot about blue LEDs other than for decoration (which might include an indicator that needs to be different.)

Apple seems to be fairly sensible on this. I have an old(er) Mac - the last sort with the CRT - with the white "throbber" sleep indication. They could of course have used blue at the time, but clearly thought better of it.

Paul__B:
It really is time that we forgot about blue LEDs other than for decoration (which might include an indicator that needs to be different.)

Let the revolution begin :smiley:
Thanks for the interesting info!

You just need a little pot of the yellow fluorescent gel that they embed blue LEDs in to
turn them white, paint on to any blue LEDs that annoy! The coolest LEDs I've seen recently
are pinky-purple (again really a blue emitter and blob of phosphor).

Wouldn’t have to do so much fooling with the bootloader to use Atmega328-PU if avrdude.conf included a section for that chip vs only having a section for Atmega328P-PU.
1.0.6 file is date 9/2/2011, so it hasn’t been updated.
Copying this section and changing 3 lines is what’s needed to start the whole process:

#------------------------------------------------------------
# ATmega328P
#------------------------------------------------------------

part
    id			= "m328p";                        <<<< "m328";
    desc		= "ATMEGA328P";               <<<< "ATMEGA328";
    has_debugwire	= yes;
    flash_instr		= 0xB6, 0x01, 0x11;
    eeprom_instr	= 0xBD, 0xF2, 0xBD, 0xE1, 0xBB, 0xCF, 0xB4, 0x00,
			  0xBE, 0x01, 0xB6, 0x01, 0xBC, 0x00, 0xBB, 0xBF,
			  0x99, 0xF9, 0xBB, 0xAF;
    stk500_devcode	= 0x86;
    # avr910_devcode	= 0x;
    signature		= 0x1e 0x95 0x0F;      <<<< 0x1e 0x95 0x14
    pagel		= 0xd7;
    bs2			= 0xc2;
    chip_erase_delay	= 9000;
    pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1",
		 "x x x x x x x x x x x x x x x x";

    chip_erase = "1 0 1 0 1 1 0 0 1 0 0 x x x x x",
		 "x x x x x x x x x x x x x x x x";

    timeout	= 200;
    stabdelay	= 100;
    cmdexedelay	= 25;
    synchloops	= 32;
    bytedelay	= 0;
    pollindex	= 3;
    pollvalue	= 0x53;
    predelay	= 1;
    postdelay	= 1;
    pollmethod	= 1;

    pp_controlstack =
	0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F,
	0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F,
	0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B,
	0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00;
    hventerstabdelay	= 100;
    progmodedelay	= 0;
    latchcycles		= 5;
    togglevtg		= 1;
    poweroffdelay	= 15;
    resetdelayms	= 1;
    resetdelayus	= 0;
    hvleavestabdelay	= 15;
    resetdelay		= 15;
    chiperasepulsewidth	= 0;
    chiperasepolltimeout = 10;
    programfusepulsewidth = 0;
    programfusepolltimeout = 5;
    programlockpulsewidth = 0;
    programlockpolltimeout = 5;

    memory "eeprom"
	paged		= no;
	page_size	= 4;
	size		= 1024;
	min_write_delay = 3600;
	max_write_delay = 3600;
	readback_p1	= 0xff;
	readback_p2	= 0xff;
	read = " 1 0 1 0 0 0 0 0",
	       " 0 0 0 x x x a9 a8",
	       " a7 a6 a5 a4 a3 a2 a1 a0",
	       " o o o o o o o o";

	write = " 1 1 0 0 0 0 0 0",
	      	" 0 0 0 x x x a9 a8",
		" a7 a6 a5 a4 a3 a2 a1 a0",
		" i i i i i i i i";

	loadpage_lo = " 1 1 0 0 0 0 0 1",
		      " 0 0 0 0 0 0 0 0",
		      " 0 0 0 0 0 0 a1 a0",
		      " i i i i i i i i";

	writepage = " 1 1 0 0 0 0 1 0",
		    " 0 0 x x x x a9 a8",
		    " a7 a6 a5 a4 a3 a2 0 0",
		    " x x x x x x x x";

	mode		= 0x41;
	delay		= 20;
	blocksize	= 4;
	readsize	= 256;
    ;

    memory "flash"
	paged		= yes;
	size		= 32768;
	page_size	= 128;
	num_pages	= 256;
	min_write_delay = 4500;
	max_write_delay = 4500;
	readback_p1	= 0xff;
	readback_p2	= 0xff;
	read_lo = " 0 0 1 0 0 0 0 0",
		  " 0 0 a13 a12 a11 a10 a9 a8",
		  " a7 a6 a5 a4 a3 a2 a1 a0",
		  " o o o o o o o o";

	read_hi = " 0 0 1 0 1 0 0 0",
		  " 0 0 a13 a12 a11 a10 a9 a8",
		  " a7 a6 a5 a4 a3 a2 a1 a0",
		  " o o o o o o o o";

	loadpage_lo = " 0 1 0 0 0 0 0 0",
		      " 0 0 0 x x x x x",
		      " x x a5 a4 a3 a2 a1 a0",
		      " i i i i i i i i";

	loadpage_hi = " 0 1 0 0 1 0 0 0",
		      " 0 0 0 x x x x x",
		      " x x a5 a4 a3 a2 a1 a0",
		      " i i i i i i i i";

	writepage = " 0 1 0 0 1 1 0 0",
		    " 0 0 a13 a12 a11 a10 a9 a8",
		    " a7 a6 x x x x x x",
		    " x x x x x x x x";

	mode		= 0x41;
	delay		= 6;
	blocksize	= 128;
	readsize	= 256;

    ;

    memory "lfuse"
	size = 1;
	min_write_delay = 4500;
	max_write_delay = 4500;
	read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0",
	       "x x x x x x x x o o o o o o o o";

	write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0",
	      	"x x x x x x x x i i i i i i i i";
    ;

    memory "hfuse"
	size = 1;
	min_write_delay = 4500;
	max_write_delay = 4500;
	read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0",
	       "x x x x x x x x o o o o o o o o";

	write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0",
	      	"x x x x x x x x i i i i i i i i";
    ;

    memory "efuse"
	size = 1;
	min_write_delay = 4500;
	max_write_delay = 4500;
	read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0",
	       "x x x x x x x x x x x x x o o o";

	write = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0",
	      	"x x x x x x x x x x x x x i i i";
    ;

    memory "lock"
	size = 1;
	min_write_delay = 4500;
	max_write_delay = 4500;
	read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0",
	       "x x x x x x x x x x o o o o o o";

	write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x",
	      	"x x x x x x x x 1 1 i i i i i i";
    ;

    memory "calibration"
	size = 1;
	read = "0 0 1 1 1 0 0 0 0 0 0 x x x x x",
	       "0 0 0 0 0 0 0 0 o o o o o o o o";
    ;

    memory "signature"
	size = 3;
	read = "0 0 1 1 0 0 0 0 0 0 0 x x x x x",
	       "x x x x x x a1 a0 o o o o o o o o";
    ;
;

Then a new entry in boards.txt

uno.name=Arduino Uno            <<< = Arduino328 perhaps
uno.upload.protocol=arduino
uno.upload.maximum_size=32256
uno.upload.speed=115200
uno.bootloader.low_fuses=0xff
uno.bootloader.high_fuses=0xde
uno.bootloader.extended_fuses=0x05
uno.bootloader.path=optiboot
uno.bootloader.file=optiboot_atmega328.hex
uno.bootloader.unlock_bits=0x3F
uno.bootloader.lock_bits=0x0F
uno.build.mcu=atmega328p               <<< =atmega328
uno.build.f_cpu=16000000L
uno.build.core=arduino
uno.build.variant=standard

and I’m sure some other minor tweaks here & there. Then either 328 or 328P could be used.

It's useful to know that the boot loader can be re configured!

Paul__B:
The actual answer is - "because we can".

Yeah I hate them - they instantly became a fashion statement and then like all fashions, just as quickly went out the window, and now we are left with a legacy of out of style gear.
For power indicators, all you need is just visible red or green for a timeless look.