segunda-feira, 11 de junho de 2012

Gravador Serial AVR


Este gravador AVR simples permite que você consiga transferir seus programas em formato .HEX para um microcontrolador AVR sem sacrificar a sua carteira e seu tempo. Este é o mais confiável e simples gravador para microcontroladores AVR disponível e que pode ser construído em um tempo muito pequeno.




O gravador AVR consiste em um esquema de gravação serial in-circuit e uma pequena placa com um socket DIP ao qual se encaixa o microcontrolador e programá-lo de maneira bem prática. Este programador pode ser usado como uma estação de gravação in-circuit, isto é, vc pode conectar o gravador na placa final e programar o microcontrolador sem ter que remover o chip da placa.
Todo o programador foi construído usando componentes comuns e que cabem dentro do conector serial. A placa com o socket DIP foi criada para comportar um microcontrolador de 28 pinos AVR ATmega8, mas você poderá construir placas para qualquer outra série de diferentes formatos de circuito integrado. Este programador é compatível com o popular software de programação PonyProg que mostra uma barra de progresso a medida em que o código binário é transferido para o chip.

AVR In-Circuit Serial Programmer






Placa do Socket AVR
A placa com o socket tem um número mínimo de componentes e é usado para a programação de seu microcontrolador de preferência fora da placa destinada.






A placa com o socket, do tipo DIP para 28 pinos, tem um ressonador de 4MHz, ou um cristal com dois capacitores de desacoplamento e mais dois conectores. O conector com dois pinos é uma entrada para o suprimento de uma tensão de +5V para o microcontrolador AVR e o conector com 6 pinos é o ICSP (In-Circuit Serial Programmer).
Ao suprir o microcontrolador com uma tensão externa de +5V como oposta àquela a partir do conector da porta serial do computador assegura que o chip receberá exatamente +5V e isso provê uma confiabilidade maior contra os erros de programação por instabilidade na tensão.

PonyProg
Para que seja possível enviar arquivos .hex a partir do computador para o microcontrolador AVR é necessário baixar e instalar o PonyProg2000. Depois da instalação, a primeira coisa que você precisará fazer é configurar o PonyProg para funcionar com o nosso programador AVR. Para fazer isso vá ao menu "Setup" e selecione "Interface Setup". A seguinte tela irá ser mostrada e as áreas em destaque mostram exatamente quais opções devem ser modificadas ou selecionadas.




No próximo passo selecione "AVR micro" e o tipo do seu microcontrolador que irá ser programado (ex. ATmega8)




Até este ponto a configuração do PonyProg está completa e nos poderemos abrir o programa em .hex com o qual o microcontrolador vai ser gravado. Vá até o menu "File" , selecione "Open Program (FLASH File...", e clique no arquivo .Hex para que seja aberto. Após isso, você verá números em hexa na tela inferior. Se você ainda não conectou o seu programador na porta serial do computador este já é o momento para isso. Tenha certeza de que o programador AVR esteja fisicamente conectado ao seu microcontrolador AVR através do socket da placa ou através do conector de 6 pinos ICSP. Finalmente click sobre o ícone em destaque "Write Program Memory (FLASH), ou vá em "Command" e selecione "Write Program (FLASH)".



Clique em sim para confirmar a programação



Agora tenha paciência até que o processo termine. Haverá dois passos: Primeiro o "Writing..." e depois o "Verifing".



Após a gravação completa uma janela será exibida "Write Successful" permitindo que você saiba que o microcontrolado AVR foi gravado e que agora está pronto para ser utilizado.


Fonte: http://electronics-diy.com/avr_programmer.php

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.

    terça-feira, 8 de maio de 2012

    Circuito PWM para LED

    Nesta matéria apresento um circuito para fazer o controle do brilho de um LED por PWM utilizando um microcontrolador. A figura abaixo ilustra o circuito que deve ser montado:
    Para você conseguir construir este projeto você já deve ter construído o seu próprio Gravador AVR. Se você ainda não tem um gravador de chip sugiro que consulte o artigo Gravador AVR para USB. Este projeto irá utilizar um modulador PWM (Pulse Width Modulator) para conseguir uma intensidade de brilho gradual em um LED. Será utilizado um microcontrolador AT90s2313 para fazer o controle de luminosidade.  Além disso, você poderá desenvolver este mesmo projeto se você já tiver um KIT recomendado pelo artigo  Gravador AVR para USB. Uma vez que o AT90s2313 é obsoleto, e provavelmente difícil de ser encontrado, você pode troca-lo pelo sucessor ATtiny2313 com algumas pequenas modificações na posição dos pinos. Isso pode ser feito consultando o datasheet do Attiny2313. Uma grande vantagem no uso deste microcontrolador mais moderno é que não é preciso utilizar um cristal ou qualquer outro oscilador externo. Este microcontrolador vem com um oscilador interno de 1MHz. Assim, você pode suprimir os componentes C1, C2 e Q1 do diagrama esquemático mostrado pela figura acima. Além disso, os componentes R1 e C3 associados com o circuito de RESET também podem ser omitidos (no caso do attiny2313) restando somente o capacitor de bypass C4, o resistor R2 e o LED.

    Compile o seguinte programa e grave no microcontrolador utilizando o gravador AVR para USB.

     /*  
      * ----------------------------------------------------------------------------  
      *  
      * Demonstração de um programa AVR simples em C  
      * O brilho do LED é controlado por PWD. Depois de cada  
      * periodo do PWM , o valor do PWM eh incrementado ou  
      * decrementado.  
      *  
      */  
     #include <inttypes.h>  
     #include <avr/io.h>  
     #include <avr/interrupt.h>  
     #include <avr/sleep.h>  
     #include "iocompat.h"   
     enum { UP, DOWN };  
     ISR (TIMER1_OVF_vect)  
     {  
       static uint16_t pwm;    
       static uint8_t direction;  
       switch (direction)    
       {  
         case UP:  
           if (++pwm == TIMER1_TOP)  
             direction = DOWN;  
           break;  
         case DOWN:  
           if (--pwm == 0)  
             direction = UP;  
           break;  
       }  
       OCR = pwm;          
     }  
     void  
     ioinit (void)          
     {  
       /* Timer 1 is 10-bit PWM (8-bit PWM on some ATtinys). */  
       TCCR1A = TIMER1_PWM_INIT;  
       /*  
        * Start timer 1.  
        *  
        * NB: TCCR1A and TCCR1B could actually be the same register, so  
        * take care to not clobber it.  
        */  
       TCCR1B |= TIMER1_CLOCKSOURCE;  
       /*  
        * Run any device-dependent timer 1 setup hook if present.  
        */  
     #if defined(TIMER1_SETUP_HOOK)  
       TIMER1_SETUP_HOOK();  
     #endif  
       /* Set PWM value to 0. */  
       OCR = 0;  
       /* Enable OC1 as output. */  
       DDROC = _BV (OC1);  
       /* Enable timer 1 overflow interrupt. */  
       TIMSK = _BV (TOIE1);  
       sei ();  
     }  
     int  
     main (void)  
     {  
       ioinit ();  
       /* loop forever, the interrupts are doing the rest */  
       for (;;)          /* Note [7] */  
         sleep_mode();  
       return (0);  
     }  
    

    Gravador AVR USB : Usando pela primeira vez

    Neste artigo falo sobre como utilizar o circuito Gravador AVR USB pela primeira vez. A figura abaixo mostra o Gravador AVR USB após a montagem dos componentes em uma placa matriz de pontos padrão. Este gravador é baseado no driver USBasp que devem ser instalados no computador conforme explicado em breve.
    Antes de ligar o gravador AVR você deve conferir o circuito pelo menos mais umas 50 vezes. Isso servirá para ter certeza de que não há conexões erradas que pode comprometer o funcionamento do dispositivo, ou até mesmo da porta USB (Principalmente se houver um curto circuito entre o VCC e o GND). Por isso, tome bastante cuidado. Após ter tomado todos os cuidados você pode conectar a placa. No instante em que é conectada o windows acusa a detecção de um novo dispositivo:


    Em seguida surgirá o assistente de hardware. Indique o diretório os quais estão os drivers necessários para que o USBasp funcione corretamente. Você pode fazer o Download dos drivers USBASP! Descompacte em um diretório e indique sua localização pelo assistente de hardware. Siga as instruções mostradas pelas figuras abaixo:




    Se ao final da instalação você vai notar que em seu gerenciador de dispositivos o driver USBasp aparece instalado como indicado na figura seguinte. Logo, está tudo funcionando corretamente.


    Se caso tiver dúvidas não exite em postar um comentário.

    Veja também: Monte um Gravador AVR USB

    Gravador AVR USB

    Neste artigo mostro como montar um gravador AVR USB para gravar microcontroladores da família AVR. Um gravador AVR é muito simples de ser construído quando se tem uma porta serial disponível no computador. Mas, e quando esta porta não existe? Bom, vou falar sobre esta solução neste artigo.

    Por ser mais conveniente, hoje tenho um notebook que possui apenas portas USB. Assim, para gravar microcontroladores AVR é necessário um gravador USB. Felizmente encontrei na internet o USBasp - USB programmer for Atmel AVR controllers. Este é bem fácil de montar e não há muitos componentes. Os drivers deste gravador são baseados no USBASP. Veja o diagrama esquemático na próxima figura:


    Observe no diagrama há outro microcontrolador AVR para fazer o interfaceamento entre o dispositivo a ser gravado e a porta USB. Assim, você precisa de uma máquina com uma porta serial ou paralela e usar um gravador simples para gravar o firmware que controla o programador.


    Firmware e circuito:
    Você pode baixar o arquivo com firmware e circuito aqui.


    Software de gravação compatíveis:


    AVRDUDE suporta USBasp desde a versão 5.2.
    BASCOM-AVR suporta USBasp desde a versão 1.11.9.6.
    Khazama AVR Programmer é um aplicativo para Windows XP/Vista para USBasp e avrdude.
    eXtreme Burner - AVR é outro aplicativo para Windows para USBasp baseado em programadores AVR.


    De todos os programas gravadores listados acima eu prefiro o AVRDUDE que é simples, rápido e pode ser utilizado na linha de comando. Já o BASCOM vem em segundo lugar por facilitar ao extremo o processo de gravação com somente alguns clicks de configuração.


    Hardware:
    Não há um único layout da placa deste gravador USB. Você mesmo pode usar ao máximo a sua criatividade para criação. No meu caso construí o hardware utilizando placas padrão com furos independentes. Veja as fotos abaixo:

    Aproveitando o ritmo também construí um hardware para testes. É uma placa baseada no AT90S2313 com alguns leds, botões e uma saída para produzir sinais analógicos com 4 bits(Conector RCA).