3

I have an Arduino Uno R3 and would like to use it to program a blank ATmega328 on a breadboard. I've followed the instructions for the 8 MHz version on http://arduino.cc/en/Tutorial/ArduinoToBreadboard with an added 10K pullup resistor on the RESET pin of the ATmega328 on the breadboard; and I've uploaded the ArduinoISP sketch from the Arduino 1.0.5 distribution to my Uno.

I've also added the metadata for my setup: the following is the contents of ~/sketchbook/hardware/breadboard/boards.txt:

atmega328bb.name=ATmega328 on a breadboard (8 MHz internal clock)
atmega328bb.upload.protocol=stk500v1
atmega328bb.upload.maximum_size=30720
atmega328bb.upload.speed=57600
atmega328bb.bootloader.low_fuses=0xE2
atmega328bb.bootloader.high_fuses=0xDA
atmega328bb.bootloader.extended_fuses=0x05
atmega328bb.bootloader.path=arduino:atmega
atmega328bb.bootloader.file=ATmegaBOOT_168_atmega328_pro_8MHz.hex
atmega328bb.bootloader.unlock_bits=0x3F
atmega328bb.bootloader.lock_bits=0x0F
atmega328bb.build.mcu=atmega328
atmega328bb.build.f_cpu=8000000L
atmega328bb.build.core=arduino:arduino
atmega328bb.build.variant=arduino:standard

I've also added the following section to my ~/.avrduderc file:

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";
 ;
;

So I thought I'd be good to go: I've set the programmer type to ArduinoISP and the board type to ATmega328 on a breadboard (8 MHz internal clock) in the IDE.

However, when I try to either upload the Arduino bootloader, or use the Upload using programmer feature on the Blink example, I get this:

avrdude: Device signature = 0x000000
avrdude: Yikes! Invalid device signature.
 Double check connections and try again, or use -F to override
 this check.

Full output:

/usr/share/arduino/hardware/tools/avrdude -C/usr/share/arduino/hardware/tools/avrdude.conf -v -v -v -v -patmega328 -cstk500v1 -P/dev/ttyACM0 -b19200 -Uflash:w:/tmp/build6008715511691559175.tmp/Blink.cpp.hex:i 
avrdude: Version 5.11.1, compiled on Apr 28 2013 at 18:46:46
 Copyright (c) 2000-2005 Brian Dean, http://www.bdmicro.com/
 Copyright (c) 2007-2009 Joerg Wunsch
 System wide configuration file is "/usr/share/arduino/hardware/tools/avrdude.conf"
 User configuration file is "/home/cactus/.avrduderc"
 Using Port : /dev/ttyACM0
 Using Programmer : stk500v1
 Overriding Baud Rate : 19200
avrdude: Send: 0 [30] [20] 
avrdude: Send: 0 [30] [20] 
avrdude: Send: 0 [30] [20] 
avrdude: Recv: . [14] 
avrdude: Recv: . [10] 
 AVR Part : ATMEGA328
 Chip Erase delay : 9000 us
 PAGEL : PD7
 BS2 : PC2
 RESET disposition : dedicated
 RETRY pulse : SCK
 serial program mode : yes
 parallel program mode : yes
 Timeout : 200
 StabDelay : 100
 CmdexeDelay : 25
 SyncLoops : 32
 ByteDelay : 0
 PollIndex : 3
 PollValue : 0x53
 Memory Detail :
 Block Poll Page Polled
 Memory Type Mode Delay Size Indx Paged Size Size #Pages MinW MaxW ReadBack
 ----------- ---- ----- ----- ---- ------ ------ ---- ------ ----- ----- ---------
 eeprom 65 20 4 0 no 1024 4 0 3600 3600 0xff 0xff
 Block Poll Page Polled
 Memory Type Mode Delay Size Indx Paged Size Size #Pages MinW MaxW ReadBack
 ----------- ---- ----- ----- ---- ------ ------ ---- ------ ----- ----- ---------
 flash 65 6 128 0 yes 32768 128 256 4500 4500 0xff 0xff
 Block Poll Page Polled
 Memory Type Mode Delay Size Indx Paged Size Size #Pages MinW MaxW ReadBack
 ----------- ---- ----- ----- ---- ------ ------ ---- ------ ----- ----- ---------
 lfuse 0 0 0 0 no 1 0 0 4500 4500 0x00 0x00
 Block Poll Page Polled
 Memory Type Mode Delay Size Indx Paged Size Size #Pages MinW MaxW ReadBack
 ----------- ---- ----- ----- ---- ------ ------ ---- ------ ----- ----- ---------
 hfuse 0 0 0 0 no 1 0 0 4500 4500 0x00 0x00
 Block Poll Page Polled
 Memory Type Mode Delay Size Indx Paged Size Size #Pages MinW MaxW ReadBack
 ----------- ---- ----- ----- ---- ------ ------ ---- ------ ----- ----- ---------
 efuse 0 0 0 0 no 1 0 0 4500 4500 0x00 0x00
 Block Poll Page Polled
 Memory Type Mode Delay Size Indx Paged Size Size #Pages MinW MaxW ReadBack
 ----------- ---- ----- ----- ---- ------ ------ ---- ------ ----- ----- ---------
 lock 0 0 0 0 no 1 0 0 4500 4500 0x00 0x00
 Block Poll Page Polled
 Memory Type Mode Delay Size Indx Paged Size Size #Pages MinW MaxW ReadBack
 ----------- ---- ----- ----- ---- ------ ------ ---- ------ ----- ----- ---------
 calibration 0 0 0 0 no 1 0 0 0 0 0x00 0x00
 Block Poll Page Polled
 Memory Type Mode Delay Size Indx Paged Size Size #Pages MinW MaxW ReadBack
 ----------- ---- ----- ----- ---- ------ ------ ---- ------ ----- ----- ---------
 signature 0 0 0 0 no 3 0 0 0 0 0x00 0x00
 Programmer Type : STK500
 Description : Atmel STK500 Version 1.x firmware
avrdude: Send: A [41] . [80] [20] 
avrdude: Recv: . [14] 
avrdude: Recv: . [02] 
avrdude: Recv: . [10] 
avrdude: Send: A [41] . [81] [20] 
avrdude: Recv: . [14] 
avrdude: Recv: . [01] 
avrdude: Recv: . [10] 
avrdude: Send: A [41] . [82] [20] 
avrdude: Recv: . [14] 
avrdude: Recv: . [12] 
avrdude: Recv: . [10] 
avrdude: Send: A [41] . [98] [20] 
avrdude: Recv: . [14] 
avrdude: Recv: . [00] 
avrdude: Recv: . [10] 
 Hardware Version: 2
 Firmware Version: 1.18
 Topcard : Unknown
avrdude: Send: A [41] . [84] [20] 
avrdude: Recv: . [14] 
avrdude: Recv: . [00] 
avrdude: Recv: . [10] 
avrdude: Send: A [41] . [85] [20] 
avrdude: Recv: . [14] 
avrdude: Recv: . [00] 
avrdude: Recv: . [10] 
avrdude: Send: A [41] . [86] [20] 
avrdude: Recv: . [14] 
avrdude: Recv: . [00] 
avrdude: Recv: . [10] 
avrdude: Send: A [41] . [87] [20] 
avrdude: Recv: . [14] 
avrdude: Recv: . [00] 
avrdude: Recv: . [10] 
avrdude: Send: A [41] . [89] [20] 
avrdude: Recv: . [14] 
avrdude: Recv: . [00] 
avrdude: Recv: . [10] 
 Vtarget : 0.0 V
 Varef : 0.0 V
 Oscillator : Off
 SCK period : 0.1 us
avrdude: Send: A [41] . [81] [20] 
avrdude: Recv: . [14] 
avrdude: Recv: . [01] 
avrdude: Recv: . [10] 
avrdude: Send: A [41] . [82] [20] 
avrdude: Recv: . [14] 
avrdude: Recv: . [12] 
avrdude: Recv: . [10] 
avrdude: Send: B [42] . [86] . [00] . [00] . [01] . [01] . [01] . [01] . [03] . [ff] . [ff] . [ff] . [ff] . [00] . [80] . [04] . [00] . [00] . [00] . [80] . [00] [20] 
avrdude: Recv: . [14] 
avrdude: Recv: . [10] 
avrdude: Send: E [45] . [05] . [04] . [d7] . [c2] . [00] [20] 
avrdude: Recv: . [14] 
avrdude: Recv: . [10] 
avrdude: Send: P [50] [20] 
avrdude: Recv: . [14] 
avrdude: Recv: . [10] 
avrdude: AVR device initialized and ready to accept instructions
Reading | avrdude: Send: V [56] 0 [30] . [00] . [00] . [00] [20] 
avrdude: Recv: . [14] 
avrdude: Recv: . [00] 
avrdude: Recv: . [10] 
avrdude: Send: V [56] 0 [30] . [00] . [01] . [00] [20] 
avrdude: Recv: . [14] 
avrdude: Recv: . [00] 
avrdude: Recv: . [10] 
################avrdude: Send: V [56] 0 [30] . [00] . [02] . [00] [20] 
avrdude: Recv: . [14] 
avrdude: Recv: . [00] 
avrdude: Recv: . [10] 
################################## | 100% 0.06s
avrdude: Device signature = 0x000000
avrdude: Yikes! Invalid device signature.
 Double check connections and try again, or use -F to override
 this check.
avrdude: Send: Q [51] [20] 
avrdude: Recv: . [14] 
avrdude: Recv: . [10] 
avrdude done. Thank you.

I've double-checked and triple-checked, I've rebuilt the whole circuit on another breadboard with another ATmega328, I've even checked the jumper cables one by one, they all work.

How do I use my Arduino Uno as an ISP to upload code to this blank ATmega328?

asked May 24, 2014 at 14:37

3 Answers 3

3

Feeling really stupid about it in retrospect...

One last thing I tried was taking the ATmega328P out from the Arduino Uno and plugging the blank ATmega328 in its place, thinking I could use the Uno programmer as such to burn the bootloader on the chip. That didn't work and I don't know if it's supposed to work.

However, to plug the new chip into the DIL on the Uno, I had to bend the DIP legs inwards slightly to give it a smaller straddle. After seeing that it didn't work, I plugged the ATmega328P back into the Uno and plugged the ATmega328 back into the breadboard. However, this time, because of the smaller straddle, it slipped in deeper into the breadboard, the plastic package actually touching the board. And with this setup, wiring it up again via the Arduino and using the ArduinoISP I was able to burn both the bootloader and (via the 'Upload with programmer' functionality) test programs to it.

TL;DR: I didn't have the blank ATmega328 properly plugged into the breadboard...

answered May 25, 2014 at 7:02
4
  • 2
    Hehe so many times I've done something similar. :P Commented May 25, 2014 at 8:14
  • 2
    By the way, when checking connections it is always good to test for continuity from pin to pin. That way you pick up these kind of problems. Commented May 25, 2014 at 8:22
  • @geometrikal: how would I do that? I don't see how I could clip an alligator clip onto the tiny part of the DIP leg that sticks out of the breadboard. Commented May 25, 2014 at 8:52
  • 2
    Buy a multimeter with probes (e.g. thomasnet.com/articles/image/digital-multimeter.jpg). Can get a cheap set for < 20ドル. Pretty handy for troubleshooting. Commented May 25, 2014 at 8:57
2

Do you have another UNO or similar? Try getting the boot loader upload working on a stock board just to confirm it is not the programmer. 0x000000 usually means it can't talk to the chip being programmed.

answered May 24, 2014 at 23:45
0
0
avrdude: Device signature = 0x000000
avrdude: Yikes! Invalid device signature.
 Double check connections and try again, or use -F to override
 this check.

This is the clue to the solution. The signature is different between different versions of the ATmega328, for example:

  • ATmega328-PU
  • ATmega328P-PU

and so on...

You can google on "arduino signature error ATmega328P" to find the solution.

One hint is: http://forum.arduino.cc/index.php?topic=201920.0

I can be more specific if you post the version off the ATmega328 you have.

The Guy with The Hat
5,2927 gold badges30 silver badges51 bronze badges
answered May 24, 2014 at 22:03
1
  • 2
    No (valid) AVR has a 0x000000 signature. Commented May 24, 2014 at 22:22

Your Answer

Draft saved
Draft discarded

Sign up or log in

Sign up using Google
Sign up using Email and Password

Post as a guest

Required, but never shown

Post as a guest

Required, but never shown

By clicking "Post Your Answer", you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.