segunda-feira, 11 de junho de 2012

Fuse Bits do AVR

Neste artigo vou falar sobre o como funciona o Fusebits do microcontrolador AVR. Acredito que muitas pessoas se confunde com relação a programação do fuse bits do microcontrolador AVR. Os novatos fazem perguntas frequentes sobre como configurar o fuse bits e esta foi a principal motivação para escrever este artigo. É importante prestar atenção sobre uma convenção estabelecida por este artigo definida pela figura abaixo:

A primeira coisa a fazer antes de gravar o microcontrolador é fazer uma configuração dos bits. Isso pode ser feito por um software de programação, por exemplo, o ponyprog.


A primeira coisa que chama a atenção devem ser as fontes de clock. Há quatro bits para controlar as fontes de clock do Atmega8: CKSEL0, CKSEL1, CKSEL2 e CKSEL3.

Como você já deve saber, o Atmega8 tem quatro fontes de clock diferentes.
  • Cristal externo ou ressonador
  • Cristal de baixa frequência externo
  • Oscilador RC externo ou oscilador RC interno calibrado
  • Fonte de clock externa
Na tabela abaixo veja as configurações adequadas para CKSEL0..3
Como você deve ter notado, para a maioria dos items acima existem faixas de configuração. Por exemplo, note o External Cristal or Ressonator. Esta configuração tem definições que vão de 1010 até 1111. Estas faixas são deixadas para o usuário escolher o tempo de partida do microcontrolador enquanto o oscilador estabilize o funcionamento antes que haja o processamento da primeira instrução.

Abaixo veja a figura representando a conexão de um um oscilador a cristal externo ou ressonador em XTAL1 e XTAL2 do microcontrolador.

Em seguida há a configuração do fuse bit CKOPT. Este bit escolhe dois modos diferentes do amplificador de oscilador. Se o CKOPT está programado (Não Checado), então o oscilador oscila com sua amplitude maior amplitude. Isso é muito útil quando se trabalha em ambientes ruidosos ou o terminal XTAL2 é usado para alimentar outro microcontrolador. O lado ruim disso é que o microcontrolador consome mais energia. Se o CKOPT não está programado (checado), então a amplitude oscila em uma faixa menor e a potência consumida fica baixa. Tipicamente, se o oscilador está acima de 8MHz então deixe o CKOPT marcado e programado (Não Checado) abaixo de 8MHz.

Na tabela abaixo você pode ver as opções dos modos de osciladores à cristal:
Os bits CKSEL0, SUT0 e SUT1 são usados para a escolha do tempo de partida do microcontrolador, isto é, quantos ciclos de clock necessários antes de executar o primeiro comando. Estas configurações são necessárias para assegurar a estabilidade de osciladores à cristal ou ressonadores.
- Nota 1: "Estes tem um tempo de partida rápido". Não é adequado para cristais.
- Nota 2: Mais usado com ressonadores cerâmicos para assegurar a estabilidade. É bom para usar com cristais também, mas o dispositivo não opera na frequência máxima.

Portanto, se você quer um sistema com partida estável é melhor deixar o CKSEL0, SUT0 e SUT1 programados (Não checado) que significa ter um tempo de partida de 65ms.

Cristal de baixa frequência

Há somente um bit de configuração para CKSEL0, CKSEL1, CKSEL2, CKSEL3 - (1001) - (Não-Checado, Checado, Checado, Não-checado) para o oscilador de baixa frequência. Osciladores de baixa frequência são clocks à cristal típicos onde a frequência está em torno de 32768KHz. As principais opções para este modo são as configurações de tempo de partida com os fuse bit SUT0 e SUT1.
- Nota 1: Partida menos estável

Oscilador RC externo

A frequência para este modo é calculada pela fórmula f=1/(3RC) e o valor de C deve ser de pelo menos 22pF. Se CKOPT é programado (Não-checado), então o capacitor de 36pF entre o XTAL 1 e o GND é habilitado. Assim, é necessária somente a conexão de um resistor. Veja a figura abaixo para entender melhor:
E novamente, os modos de operação:
E também os tempo de partida:
- Nota 1: Não use esta configuração se estiver muito perto da frequência máxima.

Oscilador RC interno calibrado

O oscilador RC interno calibrado é muito utilizado porque não há necessidade de se usar componentes externos. Este provê clocks fixos em 1MHz, 2MHz, 4MHz e 8MHz. Este modo é escolhido pela programação do fuse bits na faixa de 0001 até 0100. Deixe o bit CKOPT desprogramado (checado) para este modo.

Modos de operação:
- Nota 1: Por padrão esta é a frequência configurada para todos os microcontroladores atmega8.

A tabela de tempos de partida:

Clock Externo

O Clock Externo é a maior fonte de equivocos cometidos por iniciantes quando estão começando seus projetos. Para habilitar a fonte de clock externa você tem que deixar os bits CKSEL0, CKSEL1, CKSEL2 e CKSEL3 não programados, isto significa checados.

Exemplos de como programar as fontes de clock do microcontrolador Atmega8 corretamente.





  • Cristal de 8MHz com carga lenta:





  • Ressonador cerâmico de 2MHz com carga rápida:







  • Ressonador de 32768kHz de frequência estável na partida:





  • Oscilador externo RC de 4MHz com capacitor interno habilitado e carga rápida:




  • Se você quer tirar o máximdo de seu atmega8 então escolha 16MHz com carga rápida:



  • Espero que tenha contribuído para resolver as suas dúvidas. Muito obrigado pela sua visita. Não deixe de comentar caso você tenha alguma dúvida.

    9 comentários:

    1. Otimo post, apesar de que ainda confundi um pouco pq uso o AVRStudio e os nomes dos fuses aparecem ligeiramente diferentes.
      Valeu!

      ResponderExcluir
      Respostas
      1. Que bom que gostou da matéria. Se tiver com dúvidas em mais alguma coisa não deixe de comentar!

        Obrigado!

        Excluir
    2. òtimo post. Cheguei aqui porque estou procurando um jeito de adaptar um circuito que originalmente usa resonador de 8Mhz mas só estou achando cristal para comprar. Nao é uma aplicacao critica. No lugar do resonador, coloco o cristal (cada um dos terminais do cristal será ligado a um capacitor de uns 22 pF com o outro terminal do capacitor aterrado). E mexo nos fusebits para aumentar os tempos de startup time e reset. Esqueci alguma coisa?

      ResponderExcluir
      Respostas
      1. Olá amigo. Parece estar tudo certo sim! O CI ATMega8L tem uma grade máxima de 8MHz. Já o ATMega8 tem grade máxima de 16MHz. Seria ótimo se vc puder testar e me dizer se funcionou.

        Obrigado!

        Excluir
    3. Olá Claudio.
      Boa tarde.

      Estava Procurando Informações Sobre Programação AVR.
      E encontrei seus artigos neste blog.
      Gostaria de conversar com você sobre um projeto que tenho para comandar 8 reles através do AVR AT90S2313.
      Preciso do Programa Para Ligar e desligar cada relé através do PC.
      Tenho a placa do circuito impresso pronta para ser produzida.
      Obrigado e aguardo.
      Mitsuo Nakamura

      ResponderExcluir
      Respostas
      1. Ok. Fazer projetos com microcontroladores AVR é ótimo. Estes microcontroladores AVR são muito versáteis e você pode utilizá-los em uma infinidade de aplicações.

        Pode contar comigo sempre que precisar.


        Excluir
    4. Otimo artigo !! ja estou ha muito tempo tentado encontra uma forma de adicionar o arquivo .elf ao arquivo main.c

      ResponderExcluir

    Por favor, faça seu comentário aqui!