terça-feira, maio 29, 2012

Controlando um LED com um AVR - Parte I

A exemplo do que fiz com os microcontroladores PIC e MSP430, nesta série vamos ver como controlar um LED desta vez usando um microcontrolador AVR da Atmel.



O Objetivo

O objetivo desta série é mostrar o projeto do hardware e software de um pequeno dispositivo que ilustra como controlar um LED usando um AVR. O dispositivo possui um LED e um botão que será usado para controlar o estado do LED (apagado, piscando ou aceso).

O Projeto de hardware

Neste projeto vou usar o ATtiny2313; é simples alterar tanto o hardware como o software para outros modelos, como o ATmega328 usado no Arduino.

O ATtiny2313 tem as seguintes vantagens para este projeto:
  • pode operar com alimentação de 2.7 a 5.5V, o que simplifica a operação com baterias e pilhas
  • disponível em encapsulamento DIP de 20 pinos, o que simplifica a montagem
  • possui osciladores internos, de 128KHz, 4MHz e 8MHz, com a possibilidade de divisão por potências de dois de 1 a 256 vezes, dispensando a conexão de um cristal ou ressonador
  • usa memória Flash para o programa, o que simplifica a gravação e regravação
  • é fácil construir um gravador
  • pode ser programado em assembler e em C através do toolchain avr-gcc.
O primeiro passo para o projeto de hardware é examinar o datasheet do microcontrolador, que pode ser baixado do site da Atmel.

No datasheet verificamos que o clock máximo varia de 10 a 20MHz dependendo da alimentação. Minha opção foi operar no modo padrão da fábrica, com o oscilador interno a 8MHz dividido por 8 (resultando em um clock de 1MHz), usando uma bateria de 3V (CR2032 ou CR2016). O positivo da bateria deve ser conectado ao pino 20 (VCC) do MSP430 e o negativo ao pino 10 (GND).

O pino 1 (RST) deve ser ligado a VCC através de um resistor de 10K. Este pino é responsável pelo reset do microcontrolador e será usado também na programação da Flash.

O LED e o botão são conectados a pinos de entrada/saída de uso geral, que no ATtiny2313 são qualquer um dos pinos de 2 a 9 ou um dos pinos de 11 e 19. Escolhi o pino 12 (PB0) para o LED e o pino 6 (PD2) para o botão, para facilitar a minha montagem.

O LED, como diz a sigla, é um diodo emissor de luz. Quando submetido a uma tensão direta acima de sua tensão de queda ele emite uma luz com intensidade proporcional à corrente. Existem vários modelos de LEDs, que emitem as mais diversas cores. A tensão de queda é tipicamente de 2V e uma intensidade boa para um LED montado em painel pode ser obtida com uma corrente de 10 mA.

Voltando ao datasheet do ATtiny2313, verificamos que um pino de entrada/saída é capaz de gerar ou absorver uma corrente de até 40mA e tem uma tensão de 0,5V (nível zero) ou 2.5V (nível um), quando alimentado com 3V. A capacidade de corrente do ATtiny2313 permite ligar um LED diretamente das duas maneiras abaixo:
Na primeira maneira, com o LED ligado entre o pino do ATtiny2313 e GND, o valor do resistor em série (conforme a lei de Ohm) deve ser

(2,5 - 2,0)/0,01 = 50 ohms

Analogamente, com o LED ligando entre o pino do ATtiny2313 e VCC, o valor do resistor deve ser

(3,0 - 0.5 - 2,0)/0,01 = 50 ohms

No primeiro caso, o LED acende quando o pino do ATtiny está no nível um, no segundo quando está no nível zero. No meu circuito adotei a primeira maneira com um resistor de 39 ohms (o que gera uma corrente de ligeiramente acima de 10mA).

Para a ligação do botão vamos usar o resistor de pullup interno do ATtiny. Desta forma, o botão pode ser ligado diretamente ao GND e será lido como nível zero quando fechado e como nível um quando aberto.

Para facilitar a gravação, vamos colocar um conector de programação no circuito.Como já vimos, o conector tem seis sinais. Para permitir a montagem em protoboard vou usar uma barra de pinos simples ao invés da barra dupla usada nos conectores padrão. Supondo que o ATTiny esteja com a programação de fábrica dos fuses, não é necessário conectar nenhuma fonte externa de clock.

A lista de componentes para o circuito fica sendo:
  • 1 ATtiny2313 (encapsulamento PDIP)
  • 1 LED
  • 1 Botão de contato momentâneo
  • 1 Resistor de 39 Ohms 1/8 W
  • 1 Resistor de 10 KOhms 1/8 W
  • 1 Bateria de 3V
  • 1 Suporte para a bateria
O circuito completo fica (clique para ampliar):
No próximo post da série vamos ver o software.

Nenhum comentário: