Dentro dos exemplos do Arduino temos o ArduinoISP, que implementa um subconjunto dos comandos do programador STK-500. O primeiro passo para usar o Arduino como programador AVR é carregar este sketch no Arduino.
Em seguida é preciso fazer as ligações entre o Arduino e o microcontrolador a gravar. O site do Arduino tem até umas belas figuras de como fazer estas conexões. Não se esqueça de desligar o Arduino antes de fazer as conexões!
Além das conexões indicadas no tutorial, você pode ligar três LEDs para indicar o funcionamento, conforme descrito no Arduino playground (e no fonte do software). O terminal positivo destes LEDs devem ser ligados a determinados pinos do Arduino e o negativo ao terra, através de um resistor (1K parece ser um bom valor). Os pinos a conectar e as funções correspondentes são:
- Digital 9: o LED fica acendendo e apagando de forma gradual (através de PWM) para indicar que o software do programador está executando (heartbeat).
- Digital 8: o LED é aceso quando ocorre um erro.
- Digital 7: o LED é aceso quando o programador está conversando com o microcontrolador sendo programado.
![]() |
| O programador pronto para programar um ATmega328 |
Nos testes eu usei o AVRDUDE 5.4 (que veio com a IDE Arduino 022) e o AVRDUDE 5.10 (que veio com o WinAvr), com um Arduino UNO e um Arduino Duemilanove.
O funcionamento foi perfeito selecionando o programador avrisp com velocidade de 19200 e desativando o auto-reset (através de um resistor de 120 ohms entre o reset e +5V no Duemilanove ou através de um capacitor de 10UF entre o reset e o terra no UNO).
Entretanto, observei alguns detalhes curiosos:
- Para usar a porta COM20 na versão 5.4 do AVRDUDE foi necessário usar \\.\COM20. A versão 5.10 aceitou COM20 sem problemas.
- Estranhamente, com o AVRDUDE 5.10 o auto-reset não é acionado quando é selecionado o programador "avrisp". Selecionando o programador "arduino" (que não existe na versão 5.4) o autoreset acontece normalmente.
- O AVRDUDE conseguiu falar com o UNO mesmo com o auto-reset ativo. Talvez isto se deva ao fato do UNO estar concluindo o reset em um tempo menor que o Duemilanove (1 segundo contra 1,5 segundo). Considerando que o próprio site oficial do Arduino fala que o UNO não funciona com o ArduinoISP, é provavelmente uma esquisitice do meu UNO em particular.


8 comentário(s):
Oi Daniel,
Não sei se ficou sabendo, mas recentemente perdemos o pai da linguagem C e Unix, Dennis Richie.
O link para a notícia está aqui.
Como seria estes procedimento se fosse realizando em sistema linux? grato!
O procedimento é praticamente idêntico, já que tanto a IDE do Arduino como o Avrdude estão disponíveis para o Linux. A principal diferença é a nomenclatura das portas seriais.
E possível passa o esquema de conexão do arduino uno com o breadboard com atmega328P ??
Cada tutorial mostra de uma forma...
alguns mostram com cristal.. outros com capacitor , outros sem..
Bom eu tenho tudo em mãos:
Arduino Uno;
atmega328P
Cristal 16MHz
capacitor 22pF
capacitor 10uF
etc...
e não consigo de forma alguma, gravar o bootloader e muitos menos passar qualquer código para o novo atmega328....
Eu queria e substituir o que comprei pelo que o arduino esta usando, mais primeiro tenho que gravar esse bootloader...
estou com muitas dificuldades porém não escanço enquanto não conseguir
Se puder de alguma forma me ajudar ficarei muito grato!!!
Abração !!
Thiede,
Depois faço um post mais detalhado, mas o que eu usei é basicamente a figura que fica no final à direita na página http://arduino.cc/en/Tutorial/ArduinoISP, acrescido do capacitor de 10 uF entre o Reset e o terra do UNO. As pinagens do 168 e 328 são iguais.
Se o ATmega estiver como sai da fábrica, você precisa usar o cristal com os dois capacitores (ou um ressonador sem os capacitores).
Eventualmente (mas isto é muito improvável) pode ser que o ATmega esteja com a configuração "zoada" o que pode complicar (ou até impedir) a programação. Se possível, tente com um outro ATmega (zerado ou extraído de um outro Arduino).
Olá, primeiramente quero te parabenizar pelo post e te fazer uma pergunta. Possuo o Arduino Mega 2560 e queria saber se é possível utilizar ele também como gravador AVR. Até mais!
Deve funcionar também com o Arduino Mega, não sei bem como fica o auto-reset nele.
Obrigado Daniel, vou dar uma pesquisada melhor e qualquer coisa retorno com os resultados.
Postar um comentário