Fuse Bits : Changing your MCU speed and JTAG


When you begin with micro-controllers, and you are reading the datasheets or tutorials, you are very likely to have come across the term “Fuse Bits” which relate to the MCU speed and JTAG.
Being beginners and not having the slightest idea about both, it is generally left for “later, when I get more experienced” . The fact that even the tutorials promise to come to it later adds to this lack of confidence.

Three days ago, when I was trying to interface my LCD with my ATMEGA16, I found that the display was being printed too slow for my liking , and so I resolved to increase the MCU speed. (though that was not the real problem, as I later found)

So here I am, with no knowledge about fuse bits or JTAG or anything. So what I do ? Read the datasheet, of course !!

Here’s what the datasheet says :

There are two fuse bytes : lfuse (lower fuse byte) and hfuse (higher fuse byte). These represent atributes of the MCU, and can be programmed to change the attributes. See the table below for the attributes :

(Source : ATMEGA16 Datasheet)

For our purpose, in the hfuse byte we need to reset the JTAGEN to disable JTAG, and reset CKOPT to enable us to select a different internal clock. CKOPT, you can understand, but why change the JTAG part ? That’s because four pins of PORTC are JTAG enabled and sometimes give weird unexpected output if not disabled. The other bits can be left unchanged.

Now, we need to change the 4 bits of CKSEL in the lfuse byte to select the internal clock speed.
Here’s the table for different clock speeds.

(Source : ATMEGA16 Datasheet)

Now, how do I program it ? AVRDude or ICCAVR. Its very easy to do so in ICCAVR and you don’t even need to know about the above fuse bits, but I don’t use ICCAVR and find AVRDude better. So here’s how to go about it in AVRDude.

First make the makefile that you generally make for your programs. Then burn a program into your mcu. Keep the MCU and programmer connected during the whole process and never apply a reset until the whole thing is over. Note the first line of the output window below. It looks something like this :

avrdude -p m32 -c -bsd -u programname.hex

Now go over to DOS mode and follow the steps in the picture below.

(Image courtesy : Bibin John’s Ebooks)

Remember though. The above settings were an example. The bits might be different for your device. Just change the ones that you need after consulting the table above, leave the remaining ones unchanged, calculate the resulting hex number and replace it in the appropriate places.

I hope you all find it quite simple, just as I did.
Oh and ya, congratulation !! Your MCU has now become 8 times faster !!!


One thought on “Fuse Bits : Changing your MCU speed and JTAG

Comments are closed.