Pages: 1 [2] 3   Go Down
Author Topic: bootloading the atmega328-pu  (Read 41881 times)
0 Members and 1 Guest are viewing this topic.
San Francisco, CA
Offline Offline
Newbie
*
Karma: 0
Posts: 8
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Sure thing, here is the schematic! Thanks for your help!


* Screen Shot 2012-05-26 at 3.28.21 AM.png (63.54 KB, 1128x639 - viewed 142 times.)
Logged

SF Bay Area (USA)
Offline Offline
Tesla Member
***
Karma: 106
Posts: 6374
Strongly opinionated, but not official!
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

You really should have ALL the gnd and vcc pins of the IC connected.  Preferably, each set of power pins should also have its own bypass cap.

It's hard to say whether this is causing your problem.  Chip behavior with incomplete power connections is "undefined."
Logged

San Francisco, CA
Offline Offline
Newbie
*
Karma: 0
Posts: 8
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

So you mean Pins 3, 6 and 21 need their connection? I could do a quick patch with some thin wire so those are connected.

What do you mean by each set should have its own bypass cap? Is that to say that I should use an x F capacitor for 3 and 4, then 5 and 6?, then one for 21 and ?

When I see implementations of the simplest arduino board you can build, they only connect the minimal set of pins, so that's what I did...I guess I was wrong assuming that was ok?

Assuming that is not the problem, does everything else look sensible and fine?
Logged

SF Bay Area (USA)
Offline Offline
Tesla Member
***
Karma: 106
Posts: 6374
Strongly opinionated, but not official!
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Most of the "minimal" designs are based on the DIP, so they only have two sets of power connections, but I think most of them DO have both sets connected.  It's "standard practice" that all power pins need to be connected, and pretty common to put a bypass cap on each set of power pins.  Whether it's necessary or not depends on the internal construction of the chip.  Some chips will simply have the multiple external power pins connected to the same internal nets.  Some will have the same nets, but with a path on the chip that is higher in resistance than the external power grid ought to have.  Some will have separate power nets with only common GND (especially if there is a VCC and an AVCC), but it's not easy to tell from outside exactly which internal parts are connected to which supply, and not connecting the analog supply just because you weren't using what you thought was the analog part of the chip is a bad idea.
Logged

San Francisco, CA
Offline Offline
Newbie
*
Karma: 0
Posts: 8
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Got it, makes sense, thanks for the explanation.

From my schematic, I would have to connect 3, 6 and 21. What capacitor should I use and how should I connect them?

Thanks for all your help, I'm learning a bunch!
Logged

SF Bay Area (USA)
Offline Offline
Tesla Member
***
Karma: 106
Posts: 6374
Strongly opinionated, but not official!
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Traditional is a 0.1uF ceramic (which is what the commercial Arduinos use.)  For a 16MHz it's probably not too critical, and especially since modern SMT caps avoid some of the issues that caused 0.1uF to be a popular size back in the old days.)  Most of the home-built boards I have (TH DIP-based) use 0.22uF ceramics, because I happen to have picked up a big bag of them for cheap...)

https://www.adafruit.com/blog/2011/10/06/eebookshelf-choosing-and-using-bypass-capacitors-an1325-0/
Logged

Pittsburgh, PA, USA
Offline Offline
Faraday Member
**
Karma: 58
Posts: 4020
I learn a bit every time I visit the forum.
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Does clock speed affect the need for bypass caps?
Logged

Examples can be found in your IDE.

Offline Offline
Full Member
***
Karma: 0
Posts: 167
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Not the need for, just the size of.  At higher speeds you need smaller caps to be able to react fast enough to do their job.
Logged

0
Offline Offline
Newbie
*
Karma: 0
Posts: 1
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hi,

This post seems to be the solution to my troubles.
But i have  a question, by  changing the signature or using the solution below, you assume that all the fuses are the same for both chips version. Is it really true ?

As a variation on this theme, I copied the existing ATmega328P entry in avrdude.conf, modified the id, desc, and signature to match the 328, and pasted it before the existing entry.


Code:
#------------------------------------------------------------
# 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";
    ;
;

Also, added a new entry in boards.txt like so:

Code:
##############################################################

uno328.name=Arduino Uno 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

This allows selecting my breadboard Uno-clone as a bootloader target.  Trying to upload a sketch fails because the compiler doesn't have a matching target, but switching back to the proper Uno target works fine for that anyway.  It's still easier than editing the conf file every time I swap chips.

I'm sure this can be made better, so if anyone wants to point out how...  smiley-grin
Logged

Offline Offline
Sr. Member
****
Karma: 1
Posts: 334
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

So recently i ordered a bunch of atmega chips (atmega328-pu as opposed to the atmega328p pico power series) as i dont need the extra power saving gains so i decided to save myself some money. However I had a heck of a time trying to burn the bootloader on them and it took me several hours to find the info i needed so i thought i would just archive the info for anyone looking for the same. If you have any tips or suggestions please add them as i am still quite new to all of this. The chips loaded in this process seem to work fine ...

Please note this is for the non picopower atmega328-pu chips  signature = 0x1e 0x95 0x14 (1E 95 14) vs atmega328p-xx (1E 95 0F)

I tried to load the optiboot and the demillinauve bootloaders via the arduino ide v22 but all i could get was this message - Expected signature for ATMEGA328P is 1E 95 0F Double check chip, or use -F to override this ...

After much searching I found you need to modify the avrdude.conf file ( mac = arduino -show package contents - resources/java/hardware/tools/avr/etc )

Make a backup copy of this file in case something gets messed up.

Open the file with text edit and about 2/3 the way down under atmega 328 find   " signature       = 0x1e 0x95 0x0F; "

change the 0F to 14 save it and restart the arduino ide, you should now be able to bootload your atmega328-pu chips.

Make sure to change the 14 back to OF and restart when your done loading the bootloaders otherwise it will fail with - Expected signature for ATMEGA328P is 1E 95 14 Double check chip, or use -F to override this ...

Good luck  smiley


I do not understand why I should change back the 14 to 0F ?? Since I am using atmega 328 instead of atmega 328P, so I change the setting and then why I need to change back to atmega 328P setting again since I am using atmega 328 ??
Logged

SF Bay Area (USA)
Offline Offline
Tesla Member
***
Karma: 106
Posts: 6374
Strongly opinionated, but not official!
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Quote
why I need to change back to atmega 328P setting again since I am using atmega 328 ?
Because the IDE does not know about the 328, and the bootloader will be telling it that the chip is a 328P to make up for that.  This is "OK" because the 328 and 328P are nearly identical, and certainly identical as far as Arduino is concerned.  So the only time you need anything to know about the 328 is when you are burning the bootloader, because in that case the software is reading the chip type directly off of the chip.  (thereafter, the IDE reads the chip type from the bootloader, and the bootloader lies.)
Logged

Offline Offline
Sr. Member
****
Karma: 1
Posts: 334
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

I am still very blur about it. When burning bootloader, I have to change the setting..but when uploading code, Atmega 328 is the same as Atmega 328P ? So that is why the bootloader for atmega 328 lies ? Because the IDE recognise only Atmega328P bootloader ?
Logged

SF Bay Area (USA)
Offline Offline
Tesla Member
***
Karma: 106
Posts: 6374
Strongly opinionated, but not official!
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

That's close enough...
Logged

Offline Offline
Sr. Member
****
Karma: 1
Posts: 334
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Means I am correct ?
Logged

BHZ, MG, Brazil
Offline Offline
Sr. Member
****
Karma: 10
Posts: 346
Android developer; Arduino enthusiast
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

I just burned the bootloader in 5 Atmega328 (non-P) in a row using this technique. My ISP was an Arduino UNO R3.

After that, I changed the .conf file back, removed the original 328P from my UNO R3, placed each of the 5 ICs in there and tested every one with 3 simple sketches. They all worked flawlessly.

The funny thing is that in order for the 328(non-P) to work in the UNO R3 (where the 328P was originally), I had to change the file back to its original setting.

Anyhow, I had great success (YOU WIN!) with this! Thanks for the explanation.

I hope that in the next release of the IDE the 328(non-P) and the Atmega1284 are added to repository of boards.
Logged

Learn to live: Live to learn.
Showing off my work: http://arduino.cc/forum/index.php/topic,126197.0.html

Pages: 1 [2] 3   Go Up
Jump to: