Programando o Bootloader do Arduino no ATMega8

Recentemente, comecei a aprender a mexer com o Arduino, uma plataforma de hardware aberto, muito fácil de programar e implementar montagens de circuitos eletrônicos.

As ideias para construir uma série de pequenos circuitos que pudessem facilitar a minha vida e economizar energia em casa começaram a pipocar, mas uma coisa que me incomodava era que o Arduino, aqui no Brasil, ainda é muito caro.

Procurei em sites chineses de varejo, como o Deal Extreme e o Mini in the Box e encontrei preços bem menores, mas ainda me incomodavam duas coisas: depender da placa do Arduino, que me limita a mecânica das montagens, e esperar até 60 dias para uma encomenda vindo da China chegar.

Procurei, então, saber o preço do microcontrolador ATMega328 no varejo. Quase tive um infarto: O preço dele era maior do que um Arduino inteiro vindo da China.

Mais um pouco de pesquisa e encontrei o ATMega8 por cerca de R$13,00, um pacote com 3. Ou seja, com metade do preço de um Arduino chinês, eu conseguiria comprar três microcontroladores. Encomendei dois pacote (6 peças).

Um tempo interminável depois, chegaram as peças e me deparei com duas questões básicas:

  1. O ATMega8, embora tenha a mesma pinagem do ATMega328, possui uma memória para programas 4 vezes menor. Isso vai limitar o tamanho dos programas, mas não chega a ser um impecílio
  2. Os ATMega8 vieram como de fábrica, ou seja, não possuíam o software básico do Arduino que permite carregar programas nele. Esse software é chamado de bootloader.

Mais alguma pesquisa na Internet e descobri que era possível gravar o bootloader do Arduino nos ATMega8. O problema é que tem um monte de tutoriais sobre isso Internet afora e cada um fala pra fazer de uma forma. Li vários, tentei seguir uns dois ou três, mas nenhum deu certo de primeira.

Foi então que decidi fazer da minha maneira e, depois de algumas tentativas fracassadas, consegui encontrar uma forma fácil de gravar o bootloader Arduino nos ATMega8.

Dessa minha experiência saiu o tutorial abaixo

Gravando o BootLoader do Arduino no ATMega8

Este tutorial é feito para funcionar com o Arduino Duemilanove ou Uno. Não testei em outros modelos.

  • Passo 1 – Baixe a versão mais recente do Arduino Development Environment na página de download.
  • Passo 2 – Conecte seu Arduino à porta USB do computador e faça as seguintes configurações:
    • No menu Ferramentas > Placa, escolha o modelo de placa que você está usando;
    • No menu Ferramentas > Porta serial, escolha a porta onde o Arduino está conectado;
    • No menu Arquivo > Exemplos > 01.Basics, escolha o exemplo “Blink“. Uma nova janela do programa com o código do Blink deve aparecer na tela;
    • Na janela onde está o código do Blink, clique no botão em forma de uma seta para a direita . Se tudo estiver certo e funcionando, o led vermelho na placa do Arduino deverá começar a piscar a cada 1 segundo;
    • Esses passos acima são só para garantir que as conexões entre o Arduino e o computador estão corretas e funcionando.
    • No menu Arquivo > Exemplos, carregue o exemplo ArduinoISP;
    • Uma nova janela com o código do exemplo será aberta. Clique no botão  para carregá-lo na placa do Arduino. O Led que estava piscando deverá apagar.
    • Desligue o cabo USB do computador.
  • Passo 3 – De posse de um proto-o-board, faça a montagem do desenho abaixo:

Bootloader_ATMega8_bb

    • Nessa montagem temos os seguintes componentes:
      • 1 resistor de 100 Ω entre o pino 1 do ATMega8 e o Vcc (+5 V);
      • 1 capacitor de 2,2 μF x 25 V entre o pino 1 do ATMega8 e o GND;
      • 1 cristal oscilador de 8 MHz, com seus terminais ligados aos pinos 9 e 10 do ATMega8;
      • 2 capacitores cerâmicos de 22 pF ligados entre cada terminal do cristal e o GND;
      • 1 resistor de 1 kΩ ligado em série com um led ao GND. Esse led servirá para monitorar o funcionamento do circuito, conforme descrito mais abaixo;
      • 1 microcontrolador ATMega8;
      • Demais terminais ligados conforme o desenho.
  • Passo 4 – Confira as ligações e ligue o Arduino à porta USB do computador novamente.
  • Passo 5 – No menu Ferramentas > Placa, selecione a opção Arduino NG or older w/ ATMega8;
  • Passo 6 – No menu Ferramentas > Gravador, selecione a opção Arduino as ISP;
  • Passo 7 – No menu Ferramentas, clique em Gravar Bootloader.

Se tudo estiver OK, O ATMega8 terá o bootloader gravado e você verá uma mensagem de finalização da gravação acima da janela negra, na parte de baixo da janela do programa.

Analisando o código do exemplo ArduinoISP, observa-se que podemos ligar leds nas portas digitais 7, 8 e 9 do Arduino. A porta 7 exibe a atividade de programação, ou seja, a transmissão dos dados do Arduino para o ATMega8. A porta 8 indica alguma situação de erro. Caso houver um erro no processo, o led acenderá e deverá aparecer alguma mensagem de erro na janela do Ambiente de Desenvolvimento do Arduino. A porta 9 é a pulsação. Serve para indicar que o programa ArduinoISP está rodando e o sistema não está travado, ou com erro. Pode-se conectar o led a uma das três portas, ou um led em cada uma. Eu optei por colocar apenas um led na porta 7, já que qualquer erro seria indicado na tela do computador.

Para testar se o microprocessador está funcionando direito, desligue seu Arduino do computador, substitua o ATMega328 dele pelo ATMega8 que você acaba de gravar. Ligue novamente o Arduino no PC e siga a sequência do passo 2 para carregar o exemplo Blink. O Bootloader no ATMega8 tem um atraso de inicialização, portanto, após carregar o Blink, ele demora uns 10 segundos para começar a piscar. Se após isso ele piscar, então tudo funcionou perfeitamente.

Problemas e soluções

  1. avrdude: stk500_getsync(): not in sync: resp=0x15 – Essa mensagem é causada por falta de sincronismo de reset entre o Arduino e o ATMega8. Isso deve ser sanado com a ligação do resistor e do capacitor  no pino 1 do ATMega8. Se aparecer, verifique se os componentes estão ligados e se o valor do resistor é de 100 Ω, mesmo. Valores maiores dão problema.
  2. avrdude:device signature = ox000000 avrdude: yikes! invalid device signature. – Essa mensagem indica que o ATMega8 está desligado ou danificado. Verifique as conexões e o microcontrolador.
  3. avrdude: Expected signature for ATMEGA8 is 1E 93 07 – Essa mensagem indica que o microcontrolador que você está tentando gravar não é o ATMega8. Verifique o microcontrolador.
  4. avrdude: Expected signature for ATMEGA328P is 1E 95 14 – Essa mensagem aparece porque você provavelmente escolheu um modelo de placa que utiliza o ATMega328, e não o ATMega8. Verifique as configurações.

Refiz a montagem em uma Prototype shield (foto abaixo) e consegui um circuito menor com uma confiabilidade melhor. Também testei com um cristal de 4 MHz ao invés de 8 MHz, e funcionou perfeitamente.

Bootloader ASP

Um leitor questionou sobre onde encontrar e como incluir um modelo de placa à lista de placas do Ambiente de Desenvolvimento do Arduino.

Esta pesquisa no Google trás bastante informação sobre isso, inclusive um novo bootloader para o ATMega8 que resolve o problema do atraso de 10 segundos para o microcontrolador começar a rodar o sketch.

About these ads

23 Respostas para “Programando o Bootloader do Arduino no ATMega8

  1. Pingback: Reduzindo o custo do termostato da geladeira | Economizando Energia

    • Boa tarde, Guilherme. Como disse no artigo, eu só testei com o Duemilanove e com o Uno. Mas, considerando que o Nano usa o mesmo controlador e tem as mesmas saídas (o que não é o caso do Mega), deve funcionar sem problemas.

      Abraço.

      • in atmel website it say that it max. operating frequency is 16Mhz,
        few hours ago I try to burn the arduino bootloader into the atmega8 using arduinoISP, but I get an error “yikes invalid device signature…. ”

        and I have no Idea what’s going on, i’ve googled it but still I can’t find the solution, any idea about whats going on??

      • That means the bootloader you are trying to burn in the AtMega has a different signature from the microcontroller. You must use the right bootloader for each microcontroller. In my article I gave the link to the bootloaders I used that worked.

        Also, the message comes with a hexadecimal code. If the code is

        avrdude: Device signature = 0xffffff

        That means the avr is not communicating with tour microcontroller. I explain why that happens in my article as well.

      • I’ve succeed uploading bootloader, later I’ve found that the the ceramic wasnot properly attached to the breadboard. But the new problem occurs, I cant uploading a sketch into it, maybe you’re right that I’ve a different bootloader signature, mine was atmega8a-pu. I’ve looking for the bootloader, but still null

      • The setup to upload sketches to it is different from that to burn the bootloader. You can refer to this page to see how to do it: http://arduino.cc/en/Tutorial/ArduinoToBreadboard

        Also I’ve been succeeded to upload sketches only replacing ATMega328 by the ATMega8 on an Arduino One or Duemilanove and configuring the Arduino environment to run as it was an Arduino NG with ATMega8. ATMega8 takes some 10s to run the sketch after it is powered on. So you have to have a little patience ;-)

        One last thing: the “PU” in the end of “AtMega8-PU” only means that you are using a DIP package. This is explained in the AtMega8 Datasheet.

        Hugs.

      • I see, so thats why!
        I’ve tried to upload again using the instruction from the website and it works, i’m still using 16Mhz crystal and it’s works as well :D

        thank you so much for the guidance cause i’m just a totally beginner after all :)

        and i think I’m planning to make the simple DIY arduino board after i know how to work with a new atmega using my arduino

  2. Muito legal seu tutorial, testei com um cristal de 8MHz e funcionou, mas tenho uma observação, depois de tudo ligado e no momento de selecionar a placa a ser gravada, ao invés de usar o Arduino NG or older w/ ATMega8, eu usei o Arduino Duamilanove /w 328, que era o meu caso, só ai funcionou.
    Fiz vários testes usando outros tutoriais e até mesmo o do proprio site do arduino mas nao funcionou. Parabéns!

  3. Olá, parabéns pelo tutorial.
    Estou com o seguinte erro quando tento gravar no Atmega8L:
    avrdude: Yikes! Invalid device signature.
    Double check connections and try again, or use -F to override
    this check.
    Pesquisei e alguns lugares descreveu que estava usando a board errada, tentei todas e sempre o mesmo erro rs.
    Tb tentei usar um resistor de 180ohms entre o reset e +.
    Poderia me dar um Help ?
    Att
    Alexandre

    • O Arduino é basicamente o mesmo internamente, independente da versão. Eu sugiro começar com os básicos Duemilanove ou Uno e depois decidir se quer miniaturalizar ou ter mais “poder” :-)

      Abraço

  4. Me ajudou muito este tutorial, você é o cara Paulo, parabéns!!

    Detalhe, seguindo a ligação da imagem não funciona, está errada, tem de pegar os fios verdes ali do Uno e ligar nos pinos 10,11,12 e 13 (só pegar os 4 fios verdes ai ligados e passar 2 pinos pro lado direito), ligar nos pinos 12,13,GND e AREF como está na imagem dá o aviso:

    “Yikes! Invalid device signature.
    Double check connections and try again, or use -F to override
    this check.”

    Fazendo esta mudança o aviso irá sumir e funcionar perfeitamente o processo. =)

    • Oi, David.
      Obrigado pelas palavras de incentivo.
      Sobre a montagem, se você observar na foto, os fios verde, branco e amarelo estão fazendo o papel dos fios verdes do desenho. Eu usei a montagem do jeito que está e funcionou. Na verdade, está montada até hoje e já gravei bootloaders em vários chips ATMega8 e ATMega328, sem nenhum problema.
      A mensagem de erro costumava aparecer quando não se coloca o circuito de reset no pino 1. De qualquer forma, vou testar a montagem conforme você sugeriu e ver o que acontece.

      Abraço.

  5. Ola! tenho um moving “oby 250″ ele usa atmega 8 para alguns movimentos e luzes, queimou. tenho outro em perfeito funcionamento. gostaria de saber se da pra copiar o programa do que esta bom e passar para um novo. desde já agredeço!

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s