Pré-Requisitos
Você vai precisar de:
- Um Arduino UNO. Outros modelos podem ser usados com pequenas adaptações.
- A IDE do Arduino instalada no micro. No caso usei o Arduino 022 rodando sob Windows XP. Outras versões e outros sistemas operacionais podem exigir pequenas adaptações.
- Comunicação entre o Arduino e o micro funcionando. Se você consegue carregar um sketch no Arduino, está tudo certo.
- Uma breadboard (também chamada de protoboard ou matriz de contatos) e alguns fios de interconexão. Você pode fazer a montagem de outras formas, mas esta é a mais simples.
- Um ATMega328. Com pequenas adaptações você pode usar um ATMega168 ou ATMega8.
- Um cristal de 16MHz e dois capacitores de 22pF. O cristal pode ser de qualquer frequência entre 4 e 20MHz, 16MHz é o valor usado no Arduino. Os capacitores podem ser entre 12 e 27pF. Você pode ainda substituir estes três componentes por um ressonador.
- Dois resistores de 1K 1/8 ou 1/4W.
- Um LED (qualquer cor).
- Um capacitor de 10uF, 16V ou mais.
- Saber qual a serial corresponde à conexão do Arduino. Com a IDE rodando e o Arduino conectado, você pode observar isto no menu Tools / Serial Port.
- Saber em qual diretório está instalado o software do Arduino. No meu caso, está em "C:\Program Files\arduino-0022", mas provavelmente está em algum outro diretório do seu micro.
Na IDE do Arduino, selecione File | Examples | ArduinoISP e faça o upload para o Arduino. Se tudo estiver certo, você verá a mensagem "Done uploading.".
Se isto não acontecer, você está com algum problema na conexão do Arduino ao IDE. Certifique-se que o modelo do Arduino e a porta serial estão selecionadas corretamente na IDE.
Passo 2: Teste Preliminar
Como primeiro teste, vamos colocar o LED de heartbeat. O LED tem um terminal positivo (normalmente mais comprido) e um negativo (normalmente indicado por uma parte reta no encapsulamento plástico). O terminal positivo será ligado ao pino Digital 9 do Arduino, através de um resistor de 1K. O terminal negativo será ligado ao terra (pino GND do Arduino):
O LED deverá piscar gradualmente, como se fosse um coração batendo:
Passo 3: Montagem
Desconecte o cabo USB e complete a montagem na protoboard, conforme a figura abaixo.
Atenção para a polaridade do eletrolítico, o terminal '-' deve estar ligado ao terra e o terminal '+' ao pino de Reset do Arduino.
Passo 4: Teste da Montagem
Abra uma janela de comando e vá para o subdiretório hardware\tools\avr\bin do diretório onde a IDE do Arduino está instalada. Digite o comando
avrdude -p atmega328P -c avrisp -P com4 -b 19200
substituindo COM4 pela porta que corresponde ao Arduino .
Você deve receber mensagens como as abaixo, indicando que o AVRDUDE conseguiu comunicar corretamente com o Arduino e reconheceu o ATmega328. Se o AVTDUDE der alguma mensagem de erro, verifique os passos anteriores.
Passo 5: Programação
Copie o arquivo optiboot_atmega328.hex do subdiretório hardware\arduino\bootloaders\optiboot para o subdiretório hardware\tools\avr\bin:
COPY ..\..\..\arduino\bootloaders\optiboot\optiboot_atmega328.hex
Para gravar o bootloader na Flash, usamos o comando
avrdude -p atmega328P -c avrisp -P com4 -b 19200 -U flash:w:optiboot_atmega328.hex
A gravação é bem rápida mas a verficação demora um pouco; ao final você deve ter algo como:
Agora falta somente acertar os flags:
avrdude -p atmega328P -c avrisp -P com4 -b 19200 -u -U efuse:w:0x05:m -U hfuse:w:0xDA:m -U lfuse:w:0xFF:m -U lock:w:0x0F:m
E pronto, você tem um ATmega328 pronto para ser colocado em um Arduino!
Um comentário sobre os valores dos fuses: na documentação da Atmel, os bits não usados dos fuses são indicados com o valor "1" porém o AVRDUDE usa o valor "0". Se você tentar programar o extended fuse com 0xFD, o AVRDUDE vai dizer que deu erro pois leu 0x05. Portanto é necessário colocar "0" nos bits não usados nos fuses.








4 comentário(s):
Realmente muito interessante essa tua postagem!Parabéns.
Uma pergunta. Você já tentou usar o Arduino como gravador para microcontroladores de outros fabricantes?
Não tentei usar como gravador para outros microcontroladores. Uma busca rápida mostrou alguns poucos projetos do tipo.
Olá Daniel,
Não sei se recebeste meu e-mail. No site do Arduino.cc diz que não é possivel fazer isso no Arduino UNO. Tentei de diversas formas e não consegui gravar. Alguma dica?
Um abraço e parabéns pelo Blog.
O problema com o UNO é o auto-reset, o capacitor no reset deveria resolver isto. Veja o meu post
http://dqsoft.blogspot.com/2011/09/o-auto-reset-do-arduino.html
Postar um comentário