Go Down

Topic: ATMEGA328-PU vs. ATMEGA328P-PU (Read 9 times) previous topic - next topic

michael_x

I could not find a difference in the data sheet
I just found a big difference in price and slighly different description at mouser.com (one being a "new" product)
The case size seems different, altough both are 28pin DIL

Any more relevant differences ? 
What does the first P in ATMEGA328P-PU  stand for ? ( I noticed other MCU also come in those two flavors ? ) 

strykeroz

Hi,

According to this page on Atmel's naming convention, the additional P indicates it's the picoPower version of the chip.

Quote from: the original article
So many things are going wireless, and so many devices are becoming battery powered, that power consumption is a very important thing. AVR has a new marketing term called picoPower. PicoPower is a new thing from AVR, and it leverages all the previous technology we have in lower power, and adds to it. One of the big differences with picoPower versus the other AVRs was the power save mode. It has gone and completely redesigned the 32 KHz oscillator to have a zero-power 32 KHz oscillator. That's allowing 0.6uA in power save with that oscillator running. Finally, in full run mode, it can do as low as 220uA per MIP in full active mode. These devices run from 1.8-5.5V. The 1.8V device is a true 1.8V device. That means that everything works at 1.8V. The designers can write to Flash, SRAM and EEPROM.


Looks like Element14 prefers to stock that version too, having far deeper inventory compared to the non-P (though that might be a function of the P having a pricing premium...so being a more attractive sale).

Cheers ! Geoff
"There is no problem so bad you can't make it worse"
- retired astronaut Chris Hadfield

wanderson

It would be worth reviewing the errata for both devices.  Since the P is a newer version (I believe), it may well be that it has fewer bugs that could affect performance.
New true random number library available at: http://code.google.com/p/avr-hardware-random-number-generation/

Current version 1.0.1

michael_x

#3
Jun 05, 2012, 01:42 pm Last Edit: Jun 05, 2012, 02:15 pm by michael_x Reason: 1
Thanks,
minimal power asleep is not my concern.

I understand for a simple "wall-wart via 7805" driven device on a breadboard and later on a soldered protoboard , I could try use the non-P version as well.
First of all, I hope the burn bootloader / upload sketch via ArduinoISP description (http://arduino.cc/en/Tutorial/ArduinoISP) is applicable.

Re Errata: I understand these are the same for both 328 and 328P ( as well as for others like 48, 88, 168 etc ) and it depends just on the Revision A ... D
Instead of googling and probably digging deep into AVR details myself: How can I read the Hardware Revision Info of my actual controllers ?

( I've got an original Arduino UNO Rev3 (ATMEGA328P-PU) with preinstalled bootloader
  and ordered 2 additional bare ATMEGA328-PU from a very suspectable (cheaper than 3 €) source. )   


Erni

the have a differnt device signatur
ATmega328   0x1E 0x95 0x14
ATmega328P 0x1E 0x95 0x0F

See this thread for a solution

http://arduino.cc/forum/index.php/topic,98956.0.html

michael_x

Thanks Erni !

Quote
Easiest fix, IMO, is to add another signature entry into avrdude.conf and boards.txt.) 
Once it has your bootloader on it, it acts exactly like an Uno.

... sounds promising.

Now let's hope my new source does deliver.

kf2qd

#6
Jun 05, 2012, 04:20 pm Last Edit: Jun 06, 2012, 07:05 pm by kf2qd Reason: 1
I have used both - bought the 328 because it was a few pennies cheaper than the 328P. I modified a couple files - avrdude.conf and boards.txt in Arduino.

In the Boards.txt I copied the uno section and changed it to uno328. Change was this line - uno.build.mcu=atmega328p to uno328.build.mcu=atmega328

##############################################################
uno328.name=Arduino328
uno328.upload.protocol=arduino
uno328.upload.maximum_size=32256
uno328.upload.speed=115200
uno328.bootloader.low_fuses=0xff
uno328.bootloader.high_fuses=0xde
uno328.bootloader.extended_fuses=0x05
uno328.bootloader.path=optiboot
uno328.bootloader.file=optiboot_atmega328.hex
uno328.bootloader.unlock_bits=0x3F
uno328.bootloader.lock_bits=0x0F
uno328.build.mcu=atmega328
uno328.build.f_cpu=16000000L
uno328.build.core=arduino
uno328.build.variant=standard
for AVRDude.conf i copied the ATMega329P section and modified the name and the signature lines.
#------------------------------------------------------------
# ATmega328
#------------------------------------------------------------

part
   id         = "m328";
   desc      = "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 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";
   ;
;

If you make those additions then Arduino can use the ArduinoISP to load without having to change the files back and forth to load them the next time. It also allows you to use AVRDude to load programs directly if you wish.

Color codes don't work inside code blocks...

CrossRoads

"Since the P is a newer version (I believe), it may well be that it has fewer bugs that could affect performance."
Faulty logic.
The P is Picopower as noted.

You have to read the datasheet to see the differences between non-P and P, such as Para 10.2:

Note: 1. BOD disable only available in picoPower devices ATmega48PA/88PA/168PA/328P

Or 10.11.2 (same note found in several places):

Note: 1. BODS and BODSE only available for picoPower devices ATmega48PA/88PA/168PA/328P

So a subtle difference, probably not used my most folks, but  a difference none the less.
Designing & building electrical circuits for over 25 years. Check out the ATMega1284P based Bobuino and other '328P & '1284P creations & offerings at  www.crossroadsfencing.com/BobuinoRev17.
Arduino for Teens available at Amazon.com.

Go Up