ARDUINO CLONE With ATMEGA328-PU Non P

Step 1: The Beginning

Step 1: The Beginning

Last week I decided to make a classic Arduino clone with an ATMEGA328P-PU. I seemed to be so easy and quick but a very bad surprise for me: I odered the cheaper ATMEGA328-PU (non P!!) that is to say: non pico power.

The difference: this IC needs a bit more energy and IS NOT COMPATIBLE with the Arduino ISP bootloader (see the wrong signature). So I was a bit disappointed.

I looked on the net for a method to boot load this kind of circuit: a lot of methods found but none of them would run with Arduino 1.0.6. So I tested one of mine: a sort of mix between all this tricks. I will give it to you nowโ€ฆ

Step 2: The Schematic and the Bootloader to Use:

The Schematic and the Bootloader to Use

You can find it easily on:

https://www.arduino.cc/en/Tutorial/ArduinoISP

I use a prototype board to connect all the cables on the photo (components on the top of the board are decorative).

Then you have to follow these steps:

1-download in your arduino the famous example โ€œarduinoISPโ€, then close Arduino 1.0.6

2-backup the arduino/hardware/tools/etc/avrdude.conf and do the following change (at line 8080 for me in notepad++):

#โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”

# 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; # do not change it

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;

ocdrev = 1;

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โ€;

;

;

part parent โ€œm328โ€

id = โ€œm328pโ€;

desc = โ€œATmega328Pโ€;

#signature = 0x1e 0x95 0x0F; # change this to:

signature = 0x1e 0x95 0x14;

ocdrev = 1;

;

#โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”-

#โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”-

I give you the initialย avrdude.confย and the modified file in 2 archives.

3-run ARDUINO 1.0.6

4-select the board Arduino Duemilanove or Diecemilia

5-select the good pprocessor: Atmega328

6-select Arduino s ISP

7-burn the bootload

8-shut off ARDUINO 1.0.6, replace avrdude modified by the original file you back up.

9-now you have to change the file arduino/hardware/arduino/avr/boards.txt to make appear the new board name with this kind of circuit. I called it:ย Arduino Uno w/ ATmega328 (non-P)

The text you have to insert in it:

##############################################################

uno328.name=Arduino Uno w/ ATmega328 (non-P)

Source: ARDUINO CLONE With ATMEGA328-PU Non P

About The Author

Muhammad Bilal

I am highly skilled and motivated individual with a Master's degree in Computer Science. I have extensive experience in technical writing and a deep understanding of SEO practices.

Scroll to Top