Como gravar 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. Neste post, vamos mostrar como gravar (ou regravar) o bootloader no ATmega328, deixando o chip como novo.
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 nesse anúncio aqui. Confira também o 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.
O que vamos utilizar e o que faremos
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 a 3: Consistem na preparação do Arduino Uno como gravador ISP
Passos 4 a 9: Ligação do Arduino Uno ao ATMEGA328P-PU e gravação do bootloade
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:
Passo 2 – Será aberta uma nova janela, com o sketch do ArduinoISP, o programa responsável pela gravação:
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:
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 microcontrolador:
Circuito para gravar o bootloader no ATmega328
Passo 4 – Monte o circuito 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
Seu circuito deve ficar mais ou menos assim:
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:
Passo 6 – No menu Ferramentas, escolha a opção GRAVADOR e selecione Arduino as ISP:
Passo 7 – Para iniciar a gravação, vá em Ferramentas e selecione 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:
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:
Isso encerra o tutorial de como gravar bootloader do ATmega328 com Arduino. 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.
Gostou? Confira outros posts usando Arduino aqui mesmo no Arduino e Cia!
muito bom
Valeu ! Abraço.
Muinto Bom mesmo.
parabéns pela iniciativa, me ajudou muito seu tutorial, em pesquisei vários sites mas só esse deu certo
Bom dia ! Muito bom poder ajudar. Abraço e obrigado !
Para que eu possa gravar um programa em um chip já com bootloader eu posso usar o mesmo procedimento e commando upload?
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 !
Olá, queria saber se é possível eu gravar um programa(sketch) em um Atmega sem um arduino, você saberia me responder? Obrigado
Bom dia,
Você pode montar um circuito para comunicação serial separadamente e ligar direto ao ATmega.
Abraço !
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
Oi Renata!
Você vai precisar de um conversor serial/TTL… pode ser um cabo conversor… ou um FTDI.. você tem algum desses ?
Abraço!
Olá amigo parabéns pelo seu tutorial muito bom.
gostaria de saber se este procedimento também serve para gravar o ATMEGA 8?
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 !
Obrigado pela atenção amigo. vou fazer o experimento e lhe avisarei ok amigo!
Valeu Valmir ! Abraço.
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 ??
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 !
Excelente seu tutorial. Simples, prático e objetivo. Parabéns
Muito obrigado ! Abraços e volte sempre. 😉
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) ?
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 !
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 !
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 !
Muito bom seu tutorial, Parabéns.
Valeu Renato !
Abraço.
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.
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 !
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
Boa tarde Jorge,
Pela sua descrição, parece que o processo não foi completado. Pode me passar a mensagem de erro ?
Abraço !
boa tarde notei que no circuito não tem os capacitores de 22pf, isso faz diferença? tem algum problema de colocar os capacitores?
Boa tarde,
Não tem problema algum, e eu até recomendo. Nos meus testes, funcionou sem os capacitores.
Abraço !
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
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 !
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!
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!
da pra gravar o bootloader com um gravador para avr?
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!
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/
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!
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.
Boa tarde Jc!
Cara, muito obrigado. Já corrigi. 🙂
Abraço!
É possível fazer este procedimento sem o cristal?
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!
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
Boa tarde Jeremias,
Não testei com o Duemilanove, mas a princípio o procedimento que você citou está correto.
Abraço!
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.
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!
Olá belo tutorial esse procedimento é o mesmo para quem quer fazer um arcade stick ?
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!
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!
Ou consigo só gravar o bootloader ???
ola arduino e cia tem whap ou outro meio de comunicacao que possa fala com vc ….
Oi Felipe,
Entre em contato utilizando o formulário de contato no lado direito da página, por favor.
Abraço!
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!!!
Nós que agradecemos, Rodolpho!
Abraço e volte sempre! 🙂
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?
Muito bom!
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?
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!
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.
Eu tenho um cabo conversor que usava no notbok para equipamento com RS232 ,como fa;o para usar ele no meu Atmega 328P-PU na placa Protboad como poderia fazer esta comunica;ao para gravar direto no Atmega via este cabo?
J.Carlos
Funcionou perfeitamente! Ainda usei um arduino duemilanove como gravador ISP!
Oi Felipe!
Muito legal! Essa informação será útil para outras pessoas, com certeza. 🙂
Abraço e obrigado!
Olá Arduíno & Cia. Depois de 1 ano tentando gravar esse bendito bootloader em 5 atmega328p_pu sem sucesso, ontem finalmente consegui. Segui os passos das ligações e usei o sketch atmega bootloader programmer de Nick Gamom e pra minha surpresa eis que funcionou quando mudei o baudrate paraa 115200 no monitor serial. Talvez seja esse o problema da maioria das pessoas que relatam erro.
Interessante ,mas tudo leva a crer que seja isto mesmo a velociade é impotante neste projeto
olá, é possivel gravar o bootloader no atmega 328P, usando o arduino mega para fazer a transferencia do arquivo ?
Oi Tiago,
É possível sim, eu não tenho nenhum post sobre isso ainda, mas acho que esse link tem o que você precisa: http://www.instructables.com/id/Bootloading-ATmega328-with-Arduino-Mega2560/
Abraço!
Adilson
Muitos programas e muitos comentários mas nenhum interessantes como: Montar um relogio que mostre datas Calendario,Temperatura ,Agenda ou um circuito para ventilação que liga com X Graus determinado pelo usuario,um temporizador que liga algo por alguns segundos ajustaveis e desliga para um intevalo por exemplo de 24horas. Na verdades são sempre estes comentários simples sem muita relevancia. Desculpem o desabafo,
QSL do Brasil
http://qsldobrasil.blogspot.com
Bom dia,
Obrigado pelos comentários e pelas sugestões. Tenho alguns projetos aqui no blog relacionados com o que você falou:
Relógio com Display LCD 128×64:
http://www.arduinoecia.com.br/2015/12/relogio-arduino-display-128×64-rtc-ds3231.html
Controle de relé por temperatura:
http://www.arduinoecia.com.br/2016/06/arduino-dht11-controle-de-rele-temperatura.html
Abraço!
Adilson
Boa tarde,
O que é bootloader?,
vê se eu entendi direito o bootloader serve para preparar o atmega328 para carregar o código realizando esse procedimento do post, depois disso posso retirar o microcontrolador do Arduino UNO e colocar esse microcontrolador para carregar o código retirar novamente usar o microcontrolador na protoboard?.
E Parabéns um ótimo Blog.
Eu consigo fazer isso usando o arduino smd??
Bom dia,
Ainda não tentei, mas pelo que eu pesquisei não há problemas.
Abraço!
Adilson
Muito bom amigo, obrigado desde ja
Eu que agradeço a visita. Volte sempre. 🙂
Abraço!
Adilson
muito bom gravei sem problema valeu obrigado
Oi José!
Valeu. Abraço!
Adilson
boa tarde, tenho uma dúvida. Muda muta coisa se ao invés de eu usar uma placa do arduino UNO for usada uma placa do arduino MEGA para gravar o bootloader no ATMEGA328 ?
[…] Gostou? Veja também o post Como gravar o bootloader do ATMega328 usando Arduino Uno. […]
Olá, amigo….Eu mantenho o arduino UNO com chip nele… ou tenho que retirar o chip do arduino para usar colocar o chip a ser gravado na protoboard.
Bom dia!
Pode manter o chip no UNO.
Abraço!
Adilson