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