Unable to program ATtiny84A with Arduino Nano as ISP – “Invalid device signature”

I have been at this for a while, trying to program my ATtiny84A using an Arduino as ISP. But I seem to be stuck and cannot figure out why. I am trying to transfer my arduino nano project to smaller footprint using the ATtiny to eventually print a custom PCB. In any case, I can’t seem to connect to my Attiny to even begin programming and testing. I am a novice, but I have learned a lot in the last few weeks. Any help would be greatly appreciated.

Originally I tried programming my ATtiny84A using an Arduino Mrga, and couldn’t get the bootloader to run due to a connection error. After reading some other people with similar issues. I switched to using a Nano to run the Arduino as ISP to program the ATtiny84a. I am still getting the same error. I can’t seem to figure out what I am doing wrong and get past this connection error.

I’m trying to program an ATtiny84A (DIP-14) using an Arduino Nano as an ISP programmer in the Arduino IDE, but I keep getting the error:

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

Failed chip erase: uploading error: exit status 1

I uploaded ArduinoISP from File → Examples → 11.ArduinoISP → ArduinoISP

Arduino IDE settings for target ATtiny84A:

  • Board: ATtiny24/44/84 (No bootloader)

  • Chip: ATtiny84

  • Clock: 8 MHz (internal)

  • Pin Mapping: Clockwise

  • Programmer: Arduino as ISP

Wiring from Nano → ATtiny84A: pictured below….

  • Nano 5V → ATtiny pin 1 (VCC)

  • Nano GND → ATtiny pin 14 (GND)

  • Nano D13 → ATtiny pin 9 (SCK)

  • Nano D11 → ATtiny pin 8 (MOSI)

  • Nano D12 → ATtiny pin 7 (MISO)

  • Nano D10 → ATtiny pin 4 (RESET)

  • 10 µF electrolytic capacitor across ATtiny VCC and GND (long leg to VCC)

I used this video for reference. https://www.youtube.com/watch?v=Z_MhVSlMZI8&t=4s

What I’ve tried:

  • Verified pin numbering matches ATtiny84 datasheet

  • Swapped MOSI/MISO just in case — same error

  • Tried a fresh breadboard area and new jumper wires

  • Tried multiple “Burn Bootloader” attempts before uploading a sketch

Any help or advice would be appreciated. Ultimately what I am trying to do is signal a button press from a momentary push button, to an Attiny then to an NRF24L01 wireless module to send the button press signal wirelessly. I have everything working wirelessly from nano to mega, but the nano is too big for my project, so i need a smaller microcontroller (with a width less than or equal than 15mm) that can be programmed by Arduino IDE.

EDIT: rewired with jumpers. took a new photo. i was using solid core wire, not stranded wire, because i was trying to copy the video linked above as closely as possible. Also added wiring schematic below, and the pinout for the ATTiny84a for reference.



2(!) requests:

  1. Please post code, in code tags.

  2. Please convert the words to schemaics.

Failed attempts not useful.

Also, turn on “verbose” for upload in the preferences panel, so that you can see both the expected signature AND the signature that was read.

mismatched signatures are usually wiring errors, but you could also have a chip that needs an external clock…

verbose for uploading also turned on in preferences now. detailed error message below.

Uefuse:w:0xFF:m -Uhfuse:w:0b11010111:m -Ulfuse:w:0xE2:m "-Uflash:w:C:\Users\oliho\AppData\Local\Arduino15\packages\ATTinyCore\hardware\avr\1.5.2/bootloaders/empty/empty_all.hex:i"

avrdude: Version 6.3-20201216
Copyright (c) 2000-2005 Brian Dean, http://www.bdmicro.com/
Copyright (c) 2007-2014 Joerg Wunsch

     System wide configuration file is "C:\Users\oliho\AppData\Local\Arduino15\packages\ATTinyCore\hardware\avr\1.5.2/avrdude.conf"

     Using Port                    : COM14
     Using Programmer              : stk500v1
     Overriding Baud Rate          : 19200
     Setting bit clk period        : 5.0
     AVR Part                      : ATtiny84
     Chip Erase delay              : 15000 us
     PAGEL                         : P00
     BS2                           : P00
     RESET disposition             : possible i/o
     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     6     4    0 no        512    4      0  4000  4500 0xff 0xff
       flash         65     6    32    0 yes      8192   64    128  4500  4500 0xff 0xff
       signature      0     0     0    0 no          3    0      0     0     0 0x00 0x00
       lock           0     0     0    0 no          1    0      0  9000  9000 0x00 0x00
       lfuse          0     0     0    0 no          1    0      0  9000  9000 0x00 0x00
       hfuse          0     0     0    0 no          1    0      0  9000  9000 0x00 0x00
       efuse          0     0     0    0 no          1    0      0  9000  9000 0x00 0x00
       calibration    0     0     0    0 no          1    0      0     0     0 0x00 0x00

     Programmer Type : STK500
     Description     : Atmel STK500 Version 1.x firmware
     Hardware Version: 2
     Firmware Version: 1.18
     Topcard         : Unknown
     Vtarget         : 0.0 V
     Varef           : 0.0 V
     Oscillator      : Off
     SCK period      : 0.1 us

avrdude: AVR device initialized and ready to accept instructions

Reading | ################################################## | 100% 0.02s

avrdude: Device signature = 0x000000 (retrying)

Reading | ################################################## | 100% 0.02s

avrdude: Device signature = 0x000000 (retrying)

Reading | ################################################## | 100% 0.02s

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

avrdude done. Thank you.

Failed chip erase: uploading error: exit status 1

All zeros instead of signature means that you have a connection problems between the target and programmer boards - i.e between Attiny and Nano.

Unfortunately, it's quite hard to tell from the photo which wires go where. Also, note that using multi-core wires does not provide good contact on the breadboard.

After rewiring with jumpers, making sure all connections are solid (again), and uploading the schematic above and changing preferences to show more details in the error message., I am still receiving the error below.

"C:\Users\oliho\AppData\Local\Arduino15\packages\arduino\tools\avrdude\6.3.0-arduino18/bin/avrdude" "-CC:\Users\oliho\AppData\Local\Arduino15\packages\ATTinyCore\hardware\avr\1.5.2/avrdude.conf" -v -pattiny84 -cstk500v1 -PCOM14 -b19200 -e -Uefuse:w:0xFF:m -Uhfuse:w:0b11010111:m -Ulfuse:w:0xE2:m "-Uflash:w:C:\Users\oliho\AppData\Local\Arduino15\packages\ATTinyCore\hardware\avr\1.5.2/bootloaders/empty/empty_all.hex:i"

avrdude: Version 6.3-20201216
         Copyright (c) 2000-2005 Brian Dean, http://www.bdmicro.com/
         Copyright (c) 2007-2014 Joerg Wunsch

         System wide configuration file is "C:\Users\oliho\AppData\Local\Arduino15\packages\ATTinyCore\hardware\avr\1.5.2/avrdude.conf"

         Using Port                    : COM14
         Using Programmer              : stk500v1
         Overriding Baud Rate          : 19200
         Setting bit clk period        : 5.0
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 1 of 10: not in sync: resp=0x03
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 2 of 10: not in sync: resp=0x03
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 3 of 10: not in sync: resp=0x03
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 4 of 10: not in sync: resp=0x03
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 5 of 10: not in sync: resp=0x03
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 6 of 10: not in sync: resp=0x03
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 7 of 10: not in sync: resp=0x03
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 8 of 10: not in sync: resp=0x03
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 9 of 10: not in sync: resp=0x03
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 10 of 10: not in sync: resp=0x03

avrdude done.  Thank you.

Failed chip erase: uploading error: exit status 1

i was using solid core copper wires, but i went back to jumpers as suggested.

On the Nano you are using as an ISP programmer, after you upload the ISP sketch install the 10uF capacitor from GND to Reset. Neg lead on GND. That prevents the serial session you open with avrdude from resetting the Nano. You don’t need any other electrolytic capacitors.

I suggest you get accustomed to drawing schematics, they will help us help you. A hand drawn schematic is fine.

Your photograph is too small by a factor of at least 3 or 4 to be able to make out anything useful.

And your attempt at Fritzing is contributing to confusing the issue. That's not a Nano that you're showing.

A successful outcome will only be achieved with clearer and consistent information.

1 Like

Solid core wires are generally better than jumper wires. They are more reliable and can be cut to length and laid flat to make it easy to check and find errors.

Jumper/Dupont wires are notoriously unreliable and are the first thing you should check when there's a problem.

Solid wires with a very narrow gauge can sometimes be a problem because the spring clips inside the breadboard may not make good contact, especially if the breadboard is old and worn out. Wire taken from ethernet cable can sometimes be quite narrow gauge.

A post was split to a new topic: Unable to initialize nRF24L01 using ATtiny84

Update: after days of frustration attempting to flash my ATtiny84 using a mega and a nano, i bit the bullet and purchased a Tiny AVR programmer for this purpose. That solution has worked great, and with fewer Dupont jumpers and less complex wiring, I have successfully flashed my ATTIny, having programmed blink sketches successfully, and confirmed success using an LED.

Have a read of Nick Gammon's (Gammon.au) articles on bare board programming and a now old item on High-Low Tech.

You might find the Technoblogy website useful for many devices like the ATtiny 85 programming.

Always a good start to use the Tiny programmer to gain confidence.

You can use the cheaper methods once you have things working.

Agreed.

Cheap breadboards can be a waste of time and money. The last one I bought had no support for the contacts other than the double-sided adhesive pad on the back.

It usually pays to match pins and wire cores to the receptacle. Ready made jumper leads can be poor quality and unreliable. In the long run, it can pay to buy reels of solid core wire or use alarm cable stranded wire and crimp your own pins etc.

I make a habit with solid core wire to cut the point on the end at an angle to ease insertion into a header..