Electronic – arduino – Atmega328 reset pin not working after re-burning Arduino boot loader

arduinoatmegabootloaderfuse-bitsreset

For a bit of background you might want to read

ATmega328 with Optiboot not compatible with Arduino?

But I will summarize anyway. I have some Atmega328 chips that shipped with the optiboot bootloader burnt onto them that appeared corrupted, To get the chips to work I purchased and used a USBASP and re-burnt the bootloader. The process works OK and the chips reboot and run the blinky sketch without issue but when I pull the reset pin to ground the chip does not appear to reset and run the Arduino loader. While the reset pin is held to ground the sketch will stop running and when released the blinky sketch will start without delay.

If connecting the Reset pin to DTR of my USB-TTL the sketch will stop running when trying to upload a sketch via the Arduino IDE then fail the upload with a not connected error.
Using the USBASP I can re-burn the bootloader and it appears to reset correctly

The reset worked before reburning the boot loader, The reset circuits I use work on the atmega168 chips I have.

For the bootloaders I have tried flashing chip to use the internal clock
http://arduino.cc/en/Tutorial/ArduinoToBreadboard
and as a lilypad and duemilanove but the reset pin still does not appear to work correctly.

I have also used the software that came with the USPASP and read the Fuse&lock bits and the High/Low fuses look ok, not sure about the extended and lock bits.

Chip reads;
Low= E2, High= DA, Ext= FD, Lock=CF

board.txt reads;

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

Best Answer

There is a fuse on AVRs called RSTDISBL, which disables the functionality of the reset pin and allows you to use it as a normal I/O pin. If you program this fuse then resets will obviously not work and you will not be able to program the chip via ISP. This also means you can't unprogram the fuse via normal methods.

If this is the case then you can unprogram this fuse via High Voltage Programming. If you have an AVR Dragon board handy then you can do this easily by connecting the right pins on the HVSP header to your chip. Be careful if you're doing this in-circuit though, as the high voltage programming options uses 12 volts, which may fry the rest of your circuit. Best is to program it exclusively on the dragon via a ZIF socket or similar.

Here is a video from Atmel on how to unprogram the fuse via High Voltage Parallel Programming: http://www.youtube.com/watch?v=32CkOkpOcSc