13 janeiro 2014

Montando Arduino na protoboard

No último post (Gravando bootloader no ATMEGA328 usando Arduino) eu falei sobre como gravar o bootloader no ATMEGA328 utilizando a própria placa do Arduino como gravador, o que permite que você use o microcontrolador fora da placa Arduino. Lembre-se também que na FILIPEFLOP você tem a opção de comprar o chip já com o bootloader gravado e com todos os componentes utilizados neste artigo.

Ok, legal, mas como eu uso o microcontrolador fora da placa Arduino ?

Projetos definitivos utilizando Arduino não precisam, na maioria das vezes, de atualização constante do programa contido no microcontrolador. Depois que você testar o circuito na protoboard e estiver tudo ok, você pode transferí-lo para uma placa de circuito impresso e, com alguns componentes adicionais, fazer com que ele funcione "sozinho".

Assim você elimina, por exemplo, a necessidade do circuito regulador de tensão e também o chip de comunicação USB com o computador, composto pelo ATMEGA16U2.

Fique atento ao fato de que, utilizando o ATMEGA328 desta forma, a alimentação do CI deve ficar entre 1,8 e 5,5 volts, que são os valores limite fornecidos pelo fabricante e que constam no datasheet do microcontrolador.

Testar o ATMEGA328 fora da placa é bem simples e podemos usar praticamente o mesmo circuito que montamos para gravar o bootloader do post anterior, com o acréscimo de um push button para fazer a função de botão de reset, e 2 capacitores cerâmicos de 22 pF para ligação ao cristal.

Assumindo que temos um Arduino UNO, vamos colocar o microcontrolador no soquete e carregar o seguinte programa :

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
// Programa : Sequencial de leds - Teste ATMEGA328  
// Autor : Arduino e Cia  
   
int pino_verde = 4; //Pino ligado ao led verde  
int pino_verm = 5; //Pino ligado ao led vermelho  
int pino_amar = 6; //Pino ligado ao led amarelo  
int tempo = 1000;  //Controla o tempo de ativacao dos leds  
   
void setup()  
{  
  //Define os pinos dos leds como saida  
  pinMode(pino_verde, OUTPUT);  
  pinMode(pino_verm, OUTPUT);  
  pinMode(pino_amar, OUTPUT);  
}  
   
void loop()  
{  
  digitalWrite(pino_verde, HIGH);  
  digitalWrite(pino_verm, LOW);  
  digitalWrite(pino_amar, LOW);  
  delay(tempo);  
  digitalWrite(pino_verde, LOW);  
  digitalWrite(pino_verm, HIGH);  
  digitalWrite(pino_amar, LOW);  
  delay(tempo);  
  digitalWrite(pino_verde, LOW);  
  digitalWrite(pino_verm, LOW);  
  digitalWrite(pino_amar, HIGH);  
  delay(tempo);  
  tempo = tempo-50;  
  if (tempo < 100)  
  {  
    tempo = 1000;  
  }  
}  

Esse programa aciona os 3 leds do circuito abaixo em sequência, e a variável TEMPO define o tempo que o led ficará ligado/desligado. A cada sequência a variável tem o valor diminuído, o que faz com que os leds acendam cada vez mais rápido. Quando a variável TEMPO atinge um valor menor do que 100 milisegundos, o processo é reiniciado.

montando Arduino protoboard


Com o programa carregado e devidamente testado, vamos agora utilizar o ATMEGA fora do Arduino Uno. Retire o microcontrolador, coloque-o na protoboard e monte o circuito abaixo, observando as conexões do ATMEGA328, sendo que agora vamos ligar o led verde à porta D4 (Pino 6 do ATMEGA), o led vermelho à porta D5 (pino 11 do ATMEGA), e o  led amarelo ao D6 (pino 12 do ATMEGA). O resistor ligado ao pino 1 (Reset) tem o valor de 10K :

Pinagem ATMEGA328

Arduino na protoboard - Sequencial



Alimente o circuito com pilhas/baterias ou outra fonte que forneça até 5.5 volts, e veja o seu ATMEGA328 funcionar sem uma placa Arduino.

25 comentários:

  1. Eu gostaria de fazer alguns projetos no Arduino, porém quando estiver com o protótipo pronto gostaria de gravar o programa em um micro controlador ATMEGA, no entanto eu não possuo o Arduino UNO e sim o Arduino Mega. Alguém teria o circuito de como eu devo ligar o microcontrolador ao arduino para "subir" o programa ao ATMEGA virgem?

    ResponderExcluir
    Respostas
    1. Bom dia Vitor. Você quer utilizar esse mesmo procedimento do tutorial, mas ao invés de um Arduino Uno, você quer usar um Mega ? Abraço.

      Excluir
    2. Exatamente.
      Pois para gravar o ATMEGA foi necessário retirar o Chip do Arduíno UNO e colocar o "novo" microcontrolador. Procedimento que não dá para ser feito com o Arduíno Mega. Abraços.

      Excluir
    3. Estou com o mesmo problema. Então será preciso comprar um arduino UNO?

      Excluir
    4. Boa noite Joris,

      Não necessariamente. Você pode tentar adquirir um conversor USB/Serial. Eu tenho um e em breve vou montar um post mostrando a utilização dele para programar o Arduino na protoboard (se funcionar, é claro. rs).

      Abraço !

      Excluir
  2. Estou com planos de deixar minha aplicação sem a placa Arduino..
    Trata-se de acionamento de um rele para acender uma lampada a qual é feita através de um sensor infravermelho. A questão é: posso manter essa aplicação sem a placa Arduino e sem estar usando a alimentação USB?? Obrigado

    ResponderExcluir
    Respostas
    1. Boa noite,

      Pode sim, esse tipo de circuito é utilizado justamente nessas situações. Uma outra opção é você utilizar um Arduino Mini.

      Abraço.

      Excluir
  3. Fiz o mesmo passo do projeto acima e não funcionou fora só na placa do uno

    ResponderExcluir
    Respostas
    1. Bom dia Roberto,

      Por favor dê uma revisada nas suas ligaçôes. Se funciona na placa, deve funcionar fora dela. Tente sem os capacitores, por exemplo.

      Abraço !

      Excluir
  4. Impressão minha ou os fios dos LED´s vermelho e amarelo estão conectados aos pinos errados na imagem da protoboard?

    ResponderExcluir
    Respostas
    1. Boa noite Clóvis,

      Não estavam errados não... estavam MUITO errados !!! rsrs

      Nas duas imagens, inclusive. Desculpe a falha e muitissimo obrigado por avisar. Já fiz as alterações.

      Abraço !

      Excluir
  5. realizei a montagem do circuito mas o deley de 1000ms esta seno namendade de 10seg(10000ms). Oq pode esta errado?

    ResponderExcluir
    Respostas
    1. Oi Ailton,

      Que cristal vc está usando ?

      Abraço!

      Excluir
    2. usei um cristal de 16 Mhz... sera que nao precisaria do bootloader do Arduino uno, pois ja vi em alguns fóruns que esse atmega tem um oscilador interno, provavelmente quando seleciono o atmega328P ele ja carrega uma configuracao ou bootload que faz com que ele use o oscilado interno e nao o externo.

      Excluir
    3. Cara eu to usando um crital de 24 MHZ da muita diferença? pois fiz o mesmo programa porem liga todos led's ao mesmo tempo e desliga todos ao mesmo tempo e fica repitindo isso , e os leds ficam bem locos as vez energizo e apenas 2, ou 3 leds ligam as vezes apenas 1, e eles nao ficam piscando como deveriam, apenas ficam ligados.
      O que será que é? Fiz as ligações todas certas uso o cristal de 24MHZ sem os capacitores.

      Excluir
    4. Oi Leonardo,

      Utilize o cristal de 16 Mhz, se possível.

      Abraço!

      Excluir
    5. Leonardo, pelo que eu li do Atmega 328P-PU, o máximo que dá pra usar é um cristal de 20MHz.

      Excluir
  6. Como faço para carregar o programa no ATMEGA sem coloca-lo no soquete do arduino?Já fiz o bootloader no meu ATMEGA, porém nao queria tirar o ATMEGA original da minha placa pois nao quero danifica-lo.

    ResponderExcluir
    Respostas
    1. Boa tarde,

      Você pode usar um módulo FTDI nos pinos RX e TX.

      Abraço!

      Excluir
  7. Cara.. na boa
    Simplesmente não funciona aqui... fiz exatamente igual... já tentei varias vezes... com a propria alimentação da Placa arduino, com regulador LM7805, com banho de pipoca e reza brava... não rola... pior que estou com dois atmegas com bootloader e não funciona...Já tentei com ou sem capacitor, só alimentação... alguma dica??

    ResponderExcluir
    Respostas
    1. Boa noite,

      Acabei de refazer o circuito aqui e funcionou sem problemas.. Será que você não está esquecendo algum passo ?

      Aliás, qual erro está apresentando ?

      Abraço!

      Excluir
  8. Olá, estou projetando um circuito apara minha moto.. A função dele é impedir que a moto ligue, até que XX passos sejam feitos, por exemplo ligar e desligar o farol 2 vezes. Um regulador de tensão 12>>5 ligado no pós-chave alimenta o arduíno.
    Gostaria de saber se eu posso usar diretamente os 12V da bateria em umas da entradas do arduíno para medir HIGH ou LOW..
    Estou falando arduíno, mas na verdade vou usar o ATMega fora da placa, como mostrado aqui. Obrigado (Vou comprar tudo aqui no site :D).

    ResponderExcluir
  9. muito útil,para transferir projetos desenvolvidos.Poderia ensinar como formatar o microcontrolador?

    ResponderExcluir
    Respostas
    1. Oi Alvimar,

      Obrigado. O que você precisa fazer exatamente ?

      Abraço!

      Excluir