09 janeiro 2014

Gravando bootloader no ATMEGA328 usando Arduino

Ter um microcontrolador de reserva é recomendável quando o seu Arduino começa a se comportar de forma estranha e você quer se certificar que o problema está (ou não) no microcontrolador. Uma simples troca de chip pode poupar muitas horas de tentativa e erro para achar um problema no seu circuito.

Você também pode precisar de um ATMEGA para montar o seu circuito definitivo, depois de ter feito todos os testes e ajustes no circuito montado na protoboard e estar satisfeito com o resultado.

Uma opção é você comprar o chip ATMEGA já com o bootloader, como esse Mini Kit Arduino ATmega328 da FILIPEFLOP. Esse kit também acompanha todos os componentes necessários para montar um Arduino na Protoboard, como mostrado no post Montando Arduino na protoboard.

Outra opção, até como aprendizado, é utilizar o tutorial que vou apresentar e que utiliza o próprio Arduino e um ATMEGA328P-PU "vazio", no qual vamos gravar o bootloader do Arduino Uno.

Vamos utilizar o seguinte material :

  • Arduino Uno
  • Chip ATMEGA328P-PU
  • Resistor de 10 K ohms
  • Cristal de 16 Mhz
  • 1 led
  • 1 resistor limitador de corrente para o led. No meu circuito, utilizei um de 330 ohms

O tutorial tem várias etapas, que vou detalhar, mas os passos principais podem ser divididos desta maneira :

Passos 1 à 3 : Consistem na preparação do Arduino Uno como gravador ISP
Passos 4 à 9 : Ligação do Arduino Uno ao ATMEGA328P-PU e gravação do bootloader

Não pule etapas ou inverta os passos. Os passos 1 à 3, que são a preparação do Arduino Uno, devem ser completamente finalizados antes de prosseguir com a gravação.

Preparação do Arduino Uno

Passo 1 - Carregue a IDE do Arduino. No menu Arquivo => Exemplos, escolha a opção ArduinoISP :

Seleção Sketch ArduinoISP

Passo 2 - Será aberta uma nova janela, com o sketch do ArduinoISP, o programa responsável pela gravação :

Sketch ArduinoISP

Passo 3 - Com a nova janela selecionada, pressione o botão CARREGAR, conforme destacado, e transfira o programa para o Arduino Uno, como normalmente você faz com outros programas :

Carregando sketch ArduinoISP no Arduino Uno

Essas 3 etapas encerram o processo de preparação do Arduino Uno. Vamos agora montar o circuito para gravação do ATMEGA, antes observando a pinagem do CI :

Pinagem ATMEGA328

Circuito e gravação do bootloader

Passo 4 - Monte o circuito conforme a figura abaixo, seguindo o seguinte esquema :

  • Ligue o pino 1 (RST) do ATMEGA ao pino 10 do Arduino
  • Ligue o pino 17 (MOSI) do ATMEGA ao pino 11 do Arduino
  • Ligue o pino 18 (MISO) do ATMEGA ao pino 12 do Arduino
  • Ligue o pino 19 (SCK) do ATMEGA ao pino 13 do Arduino 
  • Ligue o led ao pino 7 do Arduino, juntamente com o resistor de 330 ohms
  • Ligue um resistor de 10 K ao pino 1 (RST) do ATMEGA, e a outra extremidade do resistor ligue no Vcc 5V do Arduino
  • Ligue o pino 20 do ATMEGA ao Vcc 5v
  • Ligue o pino 22 do ATMEGA ao GND
  • Ligue o pino 7 do ATMEGA ao Vcc 5v
  • Ligue o pino 8 do ATMEGA ao GND
  • Nos pinos 9 e 10 (Clock) do ATMEGA, conecte o cristal de 16 Mhz

gravar bootloader atmega328 arduino Uno R3


Passo 5 - Conecte o Arduino UNO ao computador. Na janela da IDE do ArduinoISP, vá em Ferramentas => Placa e escolha a opção Arduino UNO, que é o bootloader que desejamos gravar no ATMEGA :

Bootloader Arduino
Passo 6 - No menu Ferramentas, escolha a opção GRAVADOR e selecione Arduino as ISP :

Selecionando gravador
Passo 7 - Para iniciar a gravação, vá em Ferramentas e selecione Gravar Bootloader :

Seleção gravar bootloader
Passo 8 - O processo de gravação será iniciado, e você pode acompanhar o andamento na parte inferior da IDE, e também pela sinalização do LED ligado à porta 7, que ficará aceso durante o processo de gravação:

Processo de gravação do bootloader em andamento
Passo 9 - Finalizado o processo, que geralmente é rápido (no meu equipamento demorou menos de 1 min), é apresentada a mensagem mostrando que a gravação foi bem sucedida :

Processo de gravação do bootloader finalizado
Isso encerra o tutorial. O ATMEGA está agora gravado com o bootloader para Arduino Uno, e pode ser testado na própria placa ou utilizado para montar um circuito definitivo. Para ver um exemplo de utilização, veja o artigo Montando Arduino na protoboard.


59 comentários:

  1. parabéns pela iniciativa, me ajudou muito seu tutorial, em pesquisei vários sites mas só esse deu certo

    ResponderExcluir
    Respostas
    1. Bom dia ! Muito bom poder ajudar. Abraço e obrigado !

      Excluir
  2. Para que eu possa gravar um programa em um chip já com bootloader eu posso usar o mesmo procedimento e commando upload?

    ResponderExcluir
    Respostas
    1. Oi Elias,

      Eu não tentei esse procedimento, mas penso que não vá funcionar. O ideal seria gravar o bootloader e depois passar o programa normalmente.

      Abraço !

      Excluir
  3. Olá, queria saber se é possível eu gravar um programa(sketch) em um Atmega sem um arduino, você saberia me responder? Obrigado

    ResponderExcluir
    Respostas
    1. Bom dia,

      Você pode montar um circuito para comunicação serial separadamente e ligar direto ao ATmega.

      Abraço !

      Excluir
    2. Boa noite, sou um tanto quanto nova nesse negócio de configuração e pogramação, não tenho o arduíno pronto e preciso do atmega328 configurado pro fim do mês, poderia me explicar como montar um circuito para comunicação serial separadamente e como ligá-lo ao atmega depois? Abraços

      Excluir
    3. Oi Renata!

      Você vai precisar de um conversor serial/TTL... pode ser um cabo conversor... ou um FTDI.. você tem algum desses ?

      Abraço!

      Excluir
  4. Olá amigo parabéns pelo seu tutorial muito bom.

    gostaria de saber se este procedimento também serve para gravar o ATMEGA 8?

    ResponderExcluir
    Respostas
    1. Boa noite Valmir,

      Muito obrigado. Eu não cheguei a testar eses procedimento com o Atmega 8, mas veja que no passo 5 você pode selecionar , por exemplo, o "Arduino NG or older w/ ATMEGA8".

      Abraço !

      Excluir
  5. Obrigado pela atenção amigo. vou fazer o experimento e lhe avisarei ok amigo!

    ResponderExcluir
  6. Bom dia..estou desenvolvendo um projeto onde utilizo o MEGA..preciso saber os pinos de ligação para gravação do bootloader.. e além disso depois de gravado o boot se eu coloca-lo num protoboard e liga-lo em paralelo ao arduino (+ - tx rx) será q consigo transferir um arquivo aos dois chips ??

    ResponderExcluir
    Respostas
    1. Boa noite Geovanni,

      Você tem um Arduino Mega e vai gravar o bootloader no ATMEGA328, como nesse post ? Se for isso, os pinos do Arduino Mega são diferentes.

      No Uno os pinos são o 10 (SS), 11 (MOSI), 12 (MISO) e 13 (SCK). No Arduino Mega, os pinos correspondentes são o 53 (SS), 51 (MOSI), 50 (MISO) e 52 (SCK).

      Quanto à comunicação, eu nunca tentei isso, mas pelo que eu pesquisei você vai precisar de um circuito auxiliar para comunicação serial.

      Abraço !

      Excluir
  7. Excelente seu tutorial. Simples, prático e objetivo. Parabéns

    ResponderExcluir
    Respostas
    1. Muito obrigado ! Abraços e volte sempre. ;-)

      Excluir
  8. Amigo, uma dúvida, talvez besta, que ficou: em que momento eu retiro o ATMega da placa Arduino? Eu faço a gravação do bootloader com o Arduino vazio (sem o ATMega na placa) ?

    ResponderExcluir
    Respostas
    1. Boa tarde, nesse tutorial aqui você não precisa retirar o ATMega da placa, o procedimento é feito com o Arduino completo.

      Esse tutorial geralmente é usado quando você tem o Arduino completo + um chip ATmega separado.

      Espero que tenha esclarecido a sua dúvida. Qualquer coisa, volte aí.

      Abraço !

      Excluir
    2. Amigo, por favor, achei a pergunta do colega muito pertinente. Minha dúvida é: seria possível fazer a gravação do bootloader colocando o "DIP Virgem", direto na placa do Arduino ? tipo, tiro o velho ATMega que está no soquete, coloco o novo (o "Virgem") e gravar direto na plaquinha do Arduino, sem eu ter que passar pra protoboard e tudo mais ? desculpa se a pergunta parecer idiota, mas sou iniciante nesta área e ingresso agora no próximo semestre em Engenharia Eletrônica. E mais, amigo, se possível. Dá para gravar programas de maneira fixa em um ATMega, no programa de sketchs do Arduino , usar a placa de arduino como um "AVR programmer", é possível ? e de preferência. claro, sem ter que precisar do ATMega do Arduino, ou seja, extraindo este e colocando um "virgem". Isso é possível ?! muito obrigado pela atenção e um grande abraço !

      Excluir
    3. Boa noite,

      Eu ainda não testei isso, mas parece que é possível sim, dê uma olhada neste artigo:

      http://electronics.stackexchange.com/questions/10587/how-to-burn-atmega328-chip-via-arduino-uno-as-isp

      Abraço !

      Excluir
  9. Amigo, após eu gravar o atmega328 com o mesmo codigo que uso no meu arduino, eu posso coloca-la num circuito impresso e deixar de lado meu arduino? Digo isso pq eu tenho algumas tarefas que são executadas hoje em meu arduino que, por conta do tamanho e de algumas portas, deixa de ser vantajoso eu usa-lo mais ainda.

    ResponderExcluir
    Respostas
    1. Bom dia Brenno,

      Pode sim. A ideia é essa mesmo. Quando você testar o circuito na protoboard e estiver tudo ok, pode passar definitivamente para uma placa de circuito impresso, retirando componentes que talvez você não precise ou queira alterar, como a conexão USB por exemplo.

      Abraço !

      Excluir
  10. bom dia,eu fiz todo o procedimento mas,na hora de gravar a luz do led acendeu e aparece uma message de erro.mas o led vermelho continua ligado,eu queria saber se mesmo assim o bootloader foi gravado

    ResponderExcluir
    Respostas
    1. Boa tarde Jorge,

      Pela sua descrição, parece que o processo não foi completado. Pode me passar a mensagem de erro ?

      Abraço !

      Excluir
  11. boa tarde notei que no circuito não tem os capacitores de 22pf, isso faz diferença? tem algum problema de colocar os capacitores?

    ResponderExcluir
    Respostas
    1. Boa tarde,

      Não tem problema algum, e eu até recomendo. Nos meus testes, funcionou sem os capacitores.

      Abraço !

      Excluir
  12. Olá,
    Eu possuo uma placa do Arduino Mega, e quero programar um atmega328 sem precisar comprar uma placa UNO.
    Esse tutorial funciona com a minha placa? Há como passar o meu programa para o microcontrolador através do Arduino Mega?
    Grato,
    Pereira, Matheus

    ResponderExcluir
    Respostas
    1. Boa noite Matheus,

      Eu ainda não testei isso ainda, mas dê uma olhada nesse artigo, creio que tenha o que você precisa :

      http://www.instructables.com/id/How-to-use-Arduino-Mega-2560-as-Arduino-isp/?lang=pt&ALLSTEPS

      Abraço !

      Excluir
  13. Fiz e refiz as ligações e os procedimentos, mas deu o seguinte erro:
    Error while burning bootloader.
    avrdude: Yikes! Invalid device signature.
    Double check connections and try again, or use -F to override
    this check.

    Alguma ideia do que possa ser?

    Parabens pelo tutorial! muito simples e prático!

    ResponderExcluir
    Respostas
    1. Oi Fernando,

      Olha, eu já vi isso acontecer, mas foi quando eu tentei gravar um cara que era o ATMega328, mas não o P-PU que eu usei no post... Sinceramente nem lembro se consegui resolver, já faz um bom tempo.

      Você já tentou com outra versão de IDE?

      Abraço!

      Excluir
  14. da pra gravar o bootloader com um gravador para avr?

    ResponderExcluir
    Respostas
    1. Boa tarde Tiago,

      Eu não testei, mas segundo esse link aqui, funciona:

      http://forum.arduino.cc/index.php?topic=28641.0

      Se quiser tentar e depois falar se deu certo, agradeço. :)

      Abraço!

      Excluir
  15. Boa tarde! Vcs teriam alguma dica sobre "SANGUINO"? usando Atmega 644p; onde comprar?
    Já rodei vários sites de venda ( aliexpress.com; ebay.com) e outros e nada....um pouco que li, me parece ser muito bom , principalmente para finalizar projetos que precisam de mais pinos.
    http://sanguino.wikidot.com/1-0kitassembly
    http://www.blogdoje.com.br/2008/08/28/sanguino-o-super-clone-do-arduino/

    ResponderExcluir
    Respostas
    1. Boa noite Roberto,

      Vou ficar te devendo essa. A única coisa que eu achei estranho é que a página que deveria ser "oficial" tem uma matéria sobre binóculos...

      http://sanguino.cc/

      Abraço!

      Excluir
  16. Olá.
    Só para dizer que montei o circuito na minha protoboard, e funcionou perfeitamente para os 10 ATMEGA que comprei do aliexpress. Pretendo com isso fazer uma PCB definitiva para gravar meus chips.
    Outra coisa, o link no final do artigo, sobre Montando Arduino na protoboard. não tem a referencia. Pode dar uma corrigida ?

    abraço.

    ResponderExcluir
    Respostas
    1. Boa tarde Jc!

      Cara, muito obrigado. Já corrigi. :)

      Abraço!

      Excluir
  17. É possível fazer este procedimento sem o cristal?

    ResponderExcluir
    Respostas
    1. Boa tarde,

      Não testei. Creio que vc até consiga fazer o upload do programa, mas não consiga executar, já que ele depende do cristal.

      Abraço!

      Excluir
  18. Olá.....Apenas uma duvida: Caso eu queira gravar o bootloader do Duemilanove, basta apenas eu selecionar a placa "Arduino Duemilanove" na lista de placas?
    Obrigado

    ResponderExcluir
    Respostas
    1. Boa tarde Jeremias,

      Não testei com o Duemilanove, mas a princípio o procedimento que você citou está correto.

      Abraço!

      Excluir
  19. Buenas

    Possuo um cabo RS232 USB, que utilizo para kits da Microchip. Tentei efetuar este mesmo procedimento para o ATMEGA 328P (comecei a utilizar estes microcontroladores recentemente) e não tenho obtido sucesso.

    Ao concluir o envio do software, ele apresenta o seguinte erro:
    avrdude: stk500_getsync(): not in sync: resp=0x00

    E não funciona. Pelo menos é o que parece, pois nada do que mando para o ATMEGA funciona.

    Não acredito ser problema no Microcontrolador, pois consigo regravar o bootloader dele quando colocado como escravo de um Arduino Mega (as ISP).

    Alguma dica para testar a viabilidade deste conversor USB que possuo? Trata-se de um Prolific 3203.

    ResponderExcluir
    Respostas
    1. Boa noite Josias,

      Desculpe se não vou saber falar tecnicamente o que acontece, mas esse cabo parece que não tem o sinal de "reset" para concluir a gravação, então vc precisa fazer isso manualmente, logo apos fazer o upload do programa, vc aciona o reset do ATMega e ele grava normalmente.

      Eu tenho um cabo desses, só falta tempo para montar um post e testar direitinho como funciona, mas o caminho é mais ou menos esse.

      Espero ter ajudado em algo. :)

      Abraço!

      Excluir
  20. Olá belo tutorial esse procedimento é o mesmo para quem quer fazer um arcade stick ?

    ResponderExcluir
    Respostas
    1. Oi Deco,

      Obrigado. Nunca montei um desses, mas acho que esse tutorial pode te ajudar:

      http://www.instructables.com/id/Arduino-FightStick/?ALLSTEPS

      Abraço!

      Excluir
  21. Boa tarde amigo, primeiramente parabéns pelo tutorial.
    Gostaria de saber se é possível gravar o um programa no micro controlador a partir desta montagem ?
    obrigado!

    ResponderExcluir
  22. ola arduino e cia tem whap ou outro meio de comunicacao que possa fala com vc ....

    ResponderExcluir
    Respostas
    1. Oi Felipe,

      Entre em contato utilizando o formulário de contato no lado direito da página, por favor.

      Abraço!

      Excluir
  23. Realmente perfeito. Finalmente após inúmeras tentativas e erros, seguindo rigorosamente os 9 passos aqui apresentados, consegui gravar o bootloader no Atmega 328 P-PU.

    Muito Obrigado Arduino e Cia!!!

    ResponderExcluir
    Respostas
    1. Nós que agradecemos, Rodolpho!

      Abraço e volte sempre! :)

      Excluir
  24. Boa noite, tenho 2 placas arduino uno. uma funciona perfeitamente e outra não é reconhecida de maneira alguma pelos pcs. Dai tento regravar o boot , mas da o seguinte erro: ***failed;
    avrdude: WARNING: invalid value for unused bits in fuse "efuse", should be set to 1 according to datasheet
    This behaviour is deprecated and will result in an error in future version
    You probably want to use 0xfd instead of 0x05 (double check with your datasheet first). o que pode ser?

    ResponderExcluir
  25. Olá! Obrigado por esse tutorial.
    Fiz minhas ligações seguindo seu esquema. Obtive sucesso na janela do ArduinoISP mas não notei o led do pino 7 aceso durante o processo de upload, porém piscou uma vez quando liguei o esquema no arduino. Estou usando o UNO original. Algo deu errado?

    ResponderExcluir
    Respostas
    1. Oi Rômolo,

      O processo de gravação, aparentemente, foi otimizado (não tenho certeza), pq o led pisca rapidamente e a gravação já é concluída. Atualmente o processo dura menos de 10 segundos.

      Abraço e obrigado!

      Excluir
    2. Só mais um questão, fiquei meio confuso com esse esquema: Eu usei o meu arduíno UNO, aquele com o microcontrolado pequeno e soldado na placa, para poder gravar o bootloader em um chip 328PU em uma protoboard e pelo visto está OK! Agora se eu quiser carregar uma programação nesse mesmo chip328 já com bootloader eu continuo usando esse esquema com o UNO ou vou precisar de um gravador? Visto que meu arduíno não dá para retirar o chip da placa e aplicar em um projeto definitivo.

      Excluir