segunda-feira, junho 18, 2007

Controlando um LED com um PIC - Parte I

Este é mais um post sugerido pelas buscas que trouxeram alguem a este blog. Nesta série vamos ver como controlar um LED usando um microcontrolador PIC.

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

Para este projeto selecionei um modelo de PIC bastante simples, o 12F675. O modelo 12F629 pode ser usado sem nenhuma alteração e é simples alterar tanto o hardware como o software para outros modelos.

O PIC 12F675 tem as seguintes vantagens para este projeto:
  • pode operar com alimentação de 2 a 5.5V, o que simplifica a operação com baterias e pilhas
  • disponível em encapsulamento DIP de 8 pinos, o que simplifica a montagem
  • possui um oscilador interno de 4MHz, dispensando a conexão de um cristal ou ressonador
  • memória Flash para o programa, o que simplifica a gravação e regravação
O primeiro passo para o projeto de hardware é examinar o datasheet do microcontrolador, que pode ser baixado do site da Microchip.

No datasheet verificamos que podemos operar de 4 a 10 MHz com uma alimentação de 3 a 5.5 V (a operação com tensões entre 2 e 3 Volts requer clock inferior a 4MHz). Minha opção foi operar com o oscilador interno de 4MHz usando uma bateria de 3V (Duracell DL2032 ou equivalente). O positivo da bateria deve ser conectado ao pino 1 (VDD) do PIC e o negativo ao pino 8 (VSS).

O LED e o botão são conectados a pinos de entrada/saída de uso geral, que no 12F675 são qualquer um dos outros 6 pinos (para ser mais preciso, o botão não pode ser ligado ao pino 4 pois vou usar o pull-up interno que não está disponível no GP3). Escolhi o pino 7 para o LED e o pino 2 para o botão.

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 PIC, verificamos que um pino de entrada/saída é capaz de gerar ou absorver uma corrente de até 125mA e tem uma tensão de 0,6V (nível zero) ou VDD-0.7V (nível um). A capacidade de corrente do PIC permite ligar um LED diretamente das duas maneiras abaixo:


Na primeira maneira, com o LED ligado entre o pino do PIC e VSS, o valor do resistor em série (conforme a lei de Ohm) deve ser

(VDD - 0.7 - 2,0)/0,01 = 30 ohms

Analogamente, com o LED ligando entre o pino do PIC e VDD, o valor do resistor deve ser

(VDD - 0.6 - 2,0)/0,01 = 40 ohms

No primeiro caso, o LED acende quando o pino do PIS está no nível um, no segundo quando está no nível zero. No meu circuito adotei a primeira maneira com um resistor de 33 ohms.

Para a ligação do botão poderia ser usado uma forma semelhante às vistas para o LED. Olhando mais uma vez o datasheet, o PIC considera nível zero um valor abaixo de 0.15*VDD (0.45V) e nível um um valor acima de 0.25*VDD+0,8 (1,55V). Poderíamos calcular a partir destes dados valores apropriados para o resistor em série com o botão que garantam os níveis apropriados com um valor reduzido de corrente.

Entretanto, a Microchip já fez estes cálculos e disponibiliza internamente ao PIC um resistor de weak pull-up, que faz com que um pino aberto seja lido como em nível um. Desta forma, o botão pode ser ligado diretamente ao VSS e erá lido como nível zero quando fechado e como nível um quando aberto.

A lista de componentes para o circuito fica sendo:
  • 1 PIC 12F675 (ou 12F629)
  • 1 LED
  • 1 Botão de contato momentâneo
  • 1 Resistor de 33 Ohms 1/8 W
  • 1 Bateria de 3V
  • 1 Suporte para a bateria
O circuito completo fica:



No próximo post da série vamos ver o software.

11 comentários:

Anônimo disse...

Interessante o artigo Controlando um LED com um PIC, mas quando se tenta baixar o fonte para testes na indicação: "O fonte completo está aqui" a página não abre. Qual a solução

Daniel Quadros disse...

Para mim funcionou direito... Experimente clicar com o botão direito e selecionar "Salvar Destino Como...".

Anônimo disse...

Baixei o fonte por outro micro, gravei o PIC e deu tudo certo conforme o descritivo do artigo. Posteriormente consegui baixar pelo meu micro também, após ter reintalado o Internet Explorer que estava com problemas para abrir algumas páginas. Pergunto: seria inconveninte pedir uma alteração do programa?

Anônimo disse...

Olá Daniel,,,

gostei muito deste artigo, simples mas útil para quem está iniciando neste ramo de microcontroladores PIC...
Porem NÃO estou conseguindo abrir ou salvar o arquivo que tem o código fonte completo,,,
Tu terias como me enviar por e-mail este código, ou então me indicar um link que contenha este arquivo???
Desde já agardeço sua atenção,,
Carlos.

David disse...

Olá, Daniel!
Tenho pouca experiência com internet, porquanto não sei onde está o fonte, pode me ajudar, por favor?

Daniel Quadros disse...

David,

O link para o fonte está na segunda parte do artigo:

http://dqsoft.blogspot.com/2007/06/controlando-um-led-com-um-pic-parte-ii.html

No final do texto, clique na palavra "aqui", vai aparecer uma página do Google Groups com um novo link, basta clicá-lo para pegar o fonte. Se preferir, ao invés de clicar com o botão esquerdo clique com o botão direito e selecione Salvar Como.

Marcelo disse...

Olá! estou tentando usar esse tutorial com um 12f629, tive dificuldades para gravar o codigo no pic, pois na parte de cima do codigo tava escrito 12f675, mas foi so mudar isso para 12f629 que "parece" que o meu pic foi gravado corretamente, ou seja a verificacao pelo icprog deu ok. Aí eu montei o circuito mas fiquei com medo de queimar o pic,pois eu nao tenho muito experiencia e usei 2 baterias em seria total= 3 volts, cada bateria tinha 2100 miliamperes por isso fiquei com medo de queimar o pic e usei um resistor de 330k, O circuito nao funcionou, sera que é por causa do resistor?

Daniel Quadros disse...

Marcelo,

Não cheguei a fazer um teste, mas no código deve bastar alterar a linha que você mudou. Recomendo também tirar a linha "CLRF ANSEL", mas acho que isto não é crítico.

Com um total de 3V é quase impossível queimar o PIC, a corrente das baterias não fará diferença. Você pode seguir o meu circuito. O resistor de 330K vai causar uma queda de tensão muito grande e deve ser o motivo de não ter funcionado.

Anônimo disse...

uau. resposta RÁPIDA!

marcelo disse...

postei sobre a minha "caminhada" tentando fazer esse tuto em um forum:
http://www.asm51.eng.br/phpbb/viewtopic.php?t=10602

caso queira da uma olhada valeu.
tem respostas como:
"Se nao me engano, no asm original para 12F675 tem uma linha com MOVWF ANSEL. Nao existe esse registrador no 12F629 e nao sei o efeito disso, por via das duvidas retire esse comando do ASM."

marcelo disse...

beleza! funcionou direitinho.
O interessante é que eu gravei em um 12f629, mas não mudei nada do codigo, nem as linhas iniciais onde informava que o microcontrolador era o 12f675, acho até que na hora de gravar o pic eu selecionei o 12f675 (sendo que o pic que ia ser gravado era o 12f629) É interessante isso porque o codigo incluia instrucoes como MOVWF ANSEL e funcionou legal.Valeu muito o seu tutorial! funcionou até no que nao era pra funcionar hehe.