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.
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
No próximo post da série vamos ver o software.
Nenhum comentário:
Postar um comentário