Resuscitate Atmel AVR from CKSEL Fuse-Bit Death

The most common way to ‘kill’ a Atmel AVR microcontroller is by programming fuse bits wrong. Sooner or later every Atmel AVR enthusiast will stumble across a fuse-bit related problem. The most common mistake, a wrong clock source selection through the CKSEL fuse-bit, can be fixed easily.

The fuse-bits CKSEL0 through CKSEL3 let the microcontroller know what clock source to use. Most Atmel AVRs have an internal 1 MHz RC-oscillator (or 8 MHz oscillator with divide by 8 prescaler) selected as factory default. The internal oscillator is completely adequate for circuits which don’t require precise timing. Therefore, many circuits do not implement an external clock source.

If one accidentally changes the CKSEL fuse-bits so that the controller is looking for an external clock signal, the microcontroller will appear brain-dead. To make it worse, the controller will no longer respond to programming attempts. This can be very confusing and time-consuming to troubleshoot if one faces this problem for the first time.

But the fix is extremely simple: Your microcontroller is looking for an external clock signal, give the controller what it wants, an external clock signal.

Locate the XTAL1 / CLKI Pin on your microcontroller and connect an external clock source. The frequency doesn’t really matter all too much and the drive level should be around TTL level. Once the external clock signal is attached to the microcontroller, one can use one’s standard ISP-Programmer to program the fuses back to normal.

Simple LED flasher circuit with ATtiny45

Simple LED flasher circuit with ATtiny45

Please cite this article as:
Westerhold, S. (2012), "Resuscitate Atmel AVR from CKSEL Fuse-Bit Death". Baltic Lab High Frequency Projects Blog. ISSN (Online): 2751-8140., https://baltic-lab.com/2012/09/resuscitate-atmel-avr-from-cksel-fuse-bit-death/, (accessed: December 9, 2024).

Sebastian Westerhold

2 Comments

  1. Abdul Samad

    My microcontroller’s low fuse bit is setted to E9 on the place of E1, and now the programmer is not detecting the controller. Plz tell me solution to get it hardly reset.

    • KF5OBS

      Should be possible by applying an external clock signal to the clock input pin of the AVR. So if you have a signal generator, just inject a clock signal. ideally the same frequency as the default internal frequency, 1 MHz is always good to try. If you don’t have a sig gen, hook up an external crystal.

Leave a Reply

Your email address will not be published. Required fields are marked *