To quickly see what ports are the. Print the sheet below:
Stickers Arduino Atmega328
Components can be found here:
- ATMEGA328-PU
- ATMEGA328P-PU (draws a little less power)
To quickly see what ports are the. Print the sheet below:
Stickers Arduino Atmega328
Components can be found here:
I bought a bunch of new Atmega328-PU. Since there are two variants of this chip namely Atmega328p-pu and Atmega328-pu. P after 328 means “pico-power” meaning it uses less power. When trying to burn a bootloader on a non pico-power chip, you get error message about invalid signatures:
Expected signature for ATMEGA328P is 1E 95 0F Double check chip, or use -F to override this
Fastest way to solve this is to add non-pico-power as an Arduino-type. Go to the folder where the Arduino IDE is installed. Open the file / hardware / tools / avr / etc / avrdude.conf. Add to this:
#------------------------------------------------------------
# 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"uot;;
timeout = 200;
stabdelay = 100;
cmdexedelay = 25;
synchloops = 32;
switching delay = 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,xBE7A, 0x6B, 0x7B,x010xBE, 0XFD, 0x00, 0x0x000x00, 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;
programs cover polling timeout = 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"
size == yes;
spage_size =8;
page_size = 128;
num_pages = 256;
min_write_delay = 4500;
max_write_readback_p1 = 0xffadbareadback_p2 = 0xffadback_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" a1 a0",
" o o o o o o o oloadpage_lo =oadpage_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" i i i i iwritepage = writepage = " 0 1 0 0 1 1 0 0",
" a13 a12 a11 a10 a9 a8"uot;,
" a7 a6 x x x x x x"x x x x x x x x" x x xmode = 0x41
delay =0x41;
blocksize =6;
bloreadsize =28;
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 the the the the the the"uot;;
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"uot;;
;
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";
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 xmin_write_delay =
;
max_write_delay =;quot;lock"
size " 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 twrite = "1rite = "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 = &qo o o o o o o o " 0 0 x x x x x",
"0 0 0 0 0 0 0read = o o o o o ox x x x x"size = 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 the the the the the the the";
;
;
Find then file / hardware / arduino / boards.txt and add:
############################################################## uno328.name = Arduino w / ATmega328 (Non-P) 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
Thereafter it should look like this from Arduinos IDE:

Components can be found here:
Since I do not have my own programmers to burn bootloaders to ATMEGA chip, I chose to make my own. Here it is:
I'm using a DIP socket and can easily program a bunch of chips one by one if I want to. Just snap out one and put in the next.
One advantage of having a dedicated programmer to Arduino is that you do not need to run wires from an official Uno whenever you want bootload a new ATMEGA.
Arduinos website also has some guides that describe this in more detail: http://arduino.cc/en/Tutorial/ArduinoISP
Components can be found here: