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.
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: September 10, 2024).
Funding:
If you liked this content, please consider contributing. Any help is greatly appreciated.
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.
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.