Howto recover wrong fuses settings on a AVR
Yesterday, I ran into a issue with an ATMega32. In fact, I wanted to disable the Jtag support on the chips because I need to use the pins used by the Jtag (PC2-PC5). To disable the Jtag, you simply need to change some fuses. I changed the fuses with the help of the Avr Fuse Calculator, but I messed my ATMega with the wrong clock source. I don’t know how, but I choose the low freq clock. So my ATMega was totally frozen, as the clock settings was wrong, I was unable to reflash it, and worst, unable to change the fuses.
After a little googling, I found there is 3 ways to fixe this kind of issue:
- Use a Jtag (as it doesn’t need a clocked micro)
- Use a high voltage programmer (you can erase the fuse, with a programmer that do a parallel programming with RESET plug to a 12v PSU). This kind of programmer aren’t really easy to find. The only one I know right now is the STK500
- Use an external clock (This is what I used, and describe here)
As, I don’t have any Jtag, or STK500, the only way to fix that is to use an external clock. In fact, I decided to ask on the #avr channel on freenode. And a really kool guy (”rue_mohr”) give me this tips. On every AVR micro, you can use a external clock if you messed the fuses settings. Simply plug a external clock on the clock pin (XTAL1 on the Mega32), and changes the fuses by this way.
Of course, you need a external clock at something like 1Mhz. Of course I don’t have this kind generator at home, but this can be easily done with another AVR micro this something like this:
void main()
{
DDRA = 0xFF;
while (1)
{
PORTA = ~PINA;
nop(); // added some nop, to slow the clock a bit
nop();
}
}
- IV-18 VFD vacuum Russian Clock (part 1)
- Nixie clock at home ?
- IV-18 VFD vacuum Russian Clock (part 2)
- Lumex Graphic LCD 128×64 (S12864GSF) + AVR (Atmega32)
- IVL1-7/5 Russian Vacum Tube (VFD) Clock - Part 1
admin April 15th, 2007
- Electronics
- Comments(9)
How about my problem?
i have the same problem but i use atmega8535, assembly.
thank’s.
Moses just me this link on his weblog, but due to baysien filters, the url have been filtered. This post fix that issue.
Evil Mad Scientist
Thanks Mose
This really works, Thanks. I tried with an attiny13 and this code to simulate 1Mhz clock. Only i needs to set the ISP Freq. on the programmer to lowest rate (51.1hz) that is more slower but works.
Thanks a lot for the tip. It really helped!
i’d like to know if I need only set the external clock and the default values back, or I need make anything else
Santiago, you need to set the right fuse (clock, reset flag etc ..)
I was wondering.. can I use a similar method if I can only get a 32hz instead of 1mhz input? I have 3 atmega168 AVR that are unusable due to some fuse setting.. We switched tabs between fuse writes & now we can’t program/erase the chips any more.
I meant 32khz not 32hz..
I don’t know .. You should give it a try.