Your Federal Quarterly Tax Payments are due April 15th Get Help Now >>

Programming AVR fuse bits by songolikur

VIEWS: 123 PAGES: 10

									Programming AVR fuse bits – oscillator settings

I guess many of you were confused when programming
AVR fuse bits. I get many newbie questions like “I
programmed Atmega8 but it doesn’t work”. Then my
standard answer is: “Did you touch configuration bits?” and
if yes, then I am almost 90% sure that he did it wrong. Most
of them understands wrongly that programmed fuse bit in
configuration should be left unchecked and opposite. Let’s
take a look at widely used programming software –
PonyProg.

First thing you do before programming chip is set
configuration bits (Atmega8 in picture):




The first attention should be paid to clock sources. There are
Four bits controlling Atmega8 clock sources: CKSEL0,
CKSEL1, CKSEL2, CKSEL3.
As you may already know, Atmega8 can have 4 different
clock sources:

      External Crystal or Resonator;
      External Low Frequency Crystal;
      External RC Oscillator or Calibrated Internal RC
       Oscillator;
      External Clock source.

   In the table you see adequate CKSEL0..3 settings




As you may noticed, for most of them there are ranges of
settings left. For example External Crystal or Resonator

External Crystal or Resonator may be set from 1010 to 1111
(Note that “0” programmed while “1” means
unprogrammed). These ranges are left for user to select
microcontroller startup times to stabilize oscillator
performance before first instruction.

If you connect external Crystal oscillator or resonator to
XTAL1 and XTAL2
There comes another Fuse bit CKOPT. This bit selects two
different modes of oscillator amplifier. If CKOPT is
programmed (unchecked), then Oscillator oscillates a full
rail-to-rail output. This is handy when environment is noisy
or you use XTAL2 to drive another microcontroller or
buffer. But in other hand this takes more power. If CKOPT
is unprogrammed (checked), than the swing is smaller and
power consumption is less as well. Typically if resonator is
up to 8MHz then leave CKOPT (checked=unprogrammed)
and programmed (unchecked) above 8MHz.

In table you see selectable crystal oscillator modes:




CKSEL0, SUT0 and SUT1 bits in this case are used to
select startup times of microcontroller – how many clock
cycles to wait before execution first command. These
settings are necessary to ensure stability of ceramic
resonators and crystals.




Note 1 – These are fast startup times – not suitable for
crystals;

Note 2 – Most used with ceramic resonators to ensure
stabile startup. This is OK to use with crystals as well, but
device is not operating at maximum frequency.

So if you want stabile system startup, it is better to leave
CKSEL0, SUT0 and SUT1 programmed (unchecked) what
means about 65ms startup time.
Low frequency oscillator

There is only one bit set for CKSEL0, CKSEL1, CKSEL2,
CKSEL3 – 1001 (unchecked, checked, checked, unchecked)
For Low frequency oscillator. Low frequency crystal is
typical clock crystal where frequency is 32768kHz. The
main options for this mode are setting crystal startup times
with SUT0 and SUT1 fuse bits.




Note 1 – Less stabile startup.

External RC oscillator

The frequency in this mode is calculated by formula
f=1/(3RC) while C should be at least 22pF. If CKOPT is
programmed (unchecked), then Internal capacitor 36pF
between XTAL1 and GND is enabled, then there is only
resistor needed.
                                          ..




And again the table of operating modes:




And startup times:
Note 1 – don’t use this setting when close to the maximum
frequencies.

Calibrated internal RC oscillator

Calibrated internal RC oscillator is pretty often used,
because there is no need any external components and it can
provide fixed 1, 2, 4 and 8 MHz clock. This mode is
selected by programming fuse bits in range 0001 to
0100.Leave CKOPT bit unprogrammed for this mode
(checked).

Operating modes:




Note 1 – by default this option is selected for all Atmega8

And start up option table:
Note 1 – by default this option is selected for all Atmega8

About internal RC oscillator calibration read in device
datasheet.

External Clock




External clock - this is the main mistake the newbie’s are
making when starting their projects. To enable external
clock source you have to leave CKSEL0, CKSEL1,
CKSEL2, CKSEL3 bits unprogrammed – this means
checked. People make mistake checking them and thinking
that they are enabling external crystal resonator and then
they are wondering why it is not working.

And again there is a external clock source startup table
controlled by SUT0 and SUT1:




If you uncheck CKOPT then you will enable the capacitor
between XTAL1 and GND.

Examples on how to program Atmega8 clock sources
correctly

      8MHz Crystal with slowly rising power:




      2MHz ceramic resonator fast raising power:
      32768kHz resonator stable frequency at startup:




      External RC 4MHz oscillator with internal C
       enabled fast rising power:




      If you want to drive maximum from your Atmega:
       then select 16MHz fast rising power:




You may find all this information in datasheets. But like
always - people forget to read them.

								
To top