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).