quarta-feira, 14 de agosto de 2013

Circuitos Infravermelho

Nesta matéria você encontra circuitos para microcontroladores AVR muito úteis para trabalhar com dispositivos Infravermelho. Com as informações descritas abaixo você consegue construir circuitos baseados em microcontrolador AVR para transmitir e receber sinais em Infravermelho.

1 - Circuito sincronizador:
A figura acima ilustra o diagrama básico de um circuito mínimo para trabalhar com sinais infravermelho. Você pode notar que o detector de infravermelho é um componente comum e pode ser encontrado em qualquer aparelho em desuso ou comprado em alguma loja de eletrônicos. Procure pelos códigos TSOP17xx ou SFH506-xx que são mais frequentemente encontrados. 

A próxima listagem de programa deve ser gravada no circuito descrito acima. O programa é necessário para auxiliar a decodificar e sincronizar os sinais de, por exemplo, um controle remoto de TV comum. Os sinais de um controle remoto são entendidos como bit 1(Quando há emissão de luz) e bit 0(Quando não há emissão de luz). Portanto, se observa um sinal de onda quadrada na saída 3 do detector. A modulação deste sinal é bem parecida com a modulação serial. Inicialmente há uma preparação, uma transmissão inicial de sinais, antes da chegada de dados úteis. A preparação é sempre a mesma para o pressionamento de qualquer botão do controle. Além disso, isso pode variar de controle para controle e no caso, para este exemplo, utilizou-se um controle de TV Samsung.
 '--------------------------------------------------------------  
 ' file: IRSync.BAS  
 ' Descr.: Ajuda a sincronizar os sinais do controle remoto.  
 ' Autor.: Claudio F. Dias  
 ' Data.: 10/12/2010  
 '--------------------------------------------------------------  
 '  
 $regfile = "2313def.dat"  
 $crystal = 10000000  
 Config Int0 = Falling  
 Config Portb = Output  
 Config Portd = Input  
                 ' Abilita Interrupção  
 On Int0 Int0_int        ' Inicia o INT0  
 Dim Reg As Bit  
 Dim Irflag As Bit        ' Variável auxiliar de INT0  
 Dim I As Word  
 Dim Rc As Word         ' Variável de código  
 Enable Interrupts  
 Enable Int0  
 Do  
    Reg = 1  
    Portb = 255        ' Coloca toda porta B em 1   
    ' Wait for InfraRed signal  
    Irflag = 1  
    While Irflag = 1  
    Wend  
    Disable Int0  
    ' -> Tempo de preparação <-  
    Waitms 35                         
    Waitus 135                        
    ' Lê bit a bit (Rc é uma WORD de 16 bits)  
    For I = 1 To 16  
      If Pind.2 = 1 Then  
       Rc = Rc Or 1  
       Else  
       Rc = Rc And &HFFFE  
      End If  
      Shift Rc , Left , 1  
      ' Faz transição de porta a cada bit  
      Reg = Not Reg  
      If Reg = 1 Then  
       Portb = 255  
      Else  
       Portb = 0  
      End If  
      Waitus 1110     ' -> Intervalo entre bits <-  
    Next  
    Enable Int0  
    Waitms 15  
 Loop  
 End  
 Int0_int:  
   Irflag = 0 ' Interrupção  
 Return                           
Uma vez que você compilou o programa e gravou o binário no chip você já pode verificar os sinais de saída quando o controle remoto é acionado em direção ao sensor. Para isso ligue a ponteira do canal A do osciloscópio no sensor e a ponteira do canal B do osciloscópio em qualquer pino da porta B do microcontrolador AVR. Provavelmente você vai observar algo parecido com o que está nas figuras abaixo:

O sinal descrito em amarelo é o sinal do controle remoto e o sinal em verde é o da saída da porta B do microcontrolador AVR. Veja na primeira figura os sinais de preparação antes da chegada dos dados úteis. Na segunda figura veja que o sinal verde ocorre exatamente no meio da onda quadrada do sinal amarelo. Veja que são os exatos momentos em que verificamos se há um bit 1 ou 0 naquele instante. No seu caso o sinal verde deve aparecer totalmente fora do sinal amarelo. Você deve corrigir isso ajustando os tempos no programa onde aparece "-> Intervalo entre bits <-"  e também no "-> Tempo de preparação <- ".

Espero que você tenha entendido e gostado da matéria. Se precisar de ajuda não deixe de comentar.

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