Manual

do

Maker

.

com

Upload do arquivo hex com avrdude

Upload do arquivo hex com avrdude

Essa dica é bem simples, mas em dado momento será necessário fazê-lo, e provavelmente em um artigo que estou escrevendo aqui. Mas vamos aos conceitos primeiro.

Em um fórum que participo ví uma pessoa com dúvidas quanto ao comportamento do Arduino. Toda a dúvida é válida e não existe pergunta ruim, exceto a que não foi feita. E sua dúvida era se "era necessário manter a IDE do Arduino aberta para que seu programa funcione" e, "se ao reiniciar o Arduino, o programa se perde". Essas dúvidas surgem por falta de conceitos, mas não é culpa do usuário, pois ninguém se incomoda em passar esse tipo de informação, que é um estágio bem inicial.

Da interface à execução

A IDE do Arduino não é nada além de uma GUI (Graphical User Interface) para que o programa seja desenvolvido para posteriormente ser compilado e então gravado no Arduino. Você pode usar outras IDEs muito melhores que a do Arduino, como a PlatformIO, que dá muito mais flexibilidade ao desenvolvimento.

Quando seu programa está concluido, o primeiro passo é gerar o arquivo binário, que é o programa que será executado no Arduino. Esse programa é chamado de "firmware". Existem diversos tipos de firmware para diversas plataformas (você pode ver um pouco sobre manipulação de firmwares com sistemas embarcados aqui), mas tudo se resume a um programa binário a ser gravado no alvo.

A última fase do processo de programação é a gravação do firmware no alvo. No caso de hoje, o Arduino. Como exemplo, estou pegando o Arduino UNO, que estou utilizando em um artigo (que pretendo concluir logo, se Deus permitir, porque fácil não está).

Resumindo, o processo para programação de um Arduino se divide nessas fases:

  • Codificação
  • Compilação
  • Gravação

Para compilação, utilizamos o avr-gcc, que gera o binário no formato compreendido pela microcontroladora. Para cada plataforma, arquitetura e sistema, um tipo binário diferente é implementado. Abordei esse assunto de diversas maneiras em outros artigos como esse, ou esse, ou esse também. Não quero discorrer muito a esse respeito para não lhe causar confusão, mantenhamos o foco nessa ideia; para Arduino, utilizamos o avr-gcc para gerar binários compatíveis.

Para a gravação, vamos usar outro programa, que tem a capacidade de se comunicar com a microcontroladora e enviar o código para ela. Mais uma vez, cada plataforma tem um processo diferente, mas não importa se você está fazendo esses processos no Linux, Mac ou Windows, porque tudo que está relacionado ao Arduino nesse processo de compilação é chamado "cross-compiling", que é quando você gera arquivos binário em uma plataforma (por exemplo, Linux em X86) para outra plataforma (no caso do Arduino, AVR). Utilizaremos então o avrdude para subir o programa para o Arduino.

avrdude

Temos duas opções; baixar apenas o avrdude ou então utilizá-lo a partir do diretório contendo a IDE do Arduino. Se quiser experimentar, o avrdude fica dentro de ~/<diretorio_do_arduino>/hardware/tools/avr/bin/avrdude.

Primeiro passo: testar a comunicação

Nesse teste, você deve estar hábil a se comunicar com a microcontroladora e receber a assinatura 0x1E950F. Para fazer o teste no Arduino UNO, utilizei:

avrdude -c arduino -p atmega328p -P /dev/ttyACM0

Onde utilizei o parâmetro '-a' para selecionar o gravador e '-p' para especificar a plataforma. Claro, é necessário dizer a porta em que o Arduino se encontra. No meu caso, /dev/ttyACM0. No Windows, COMx. O resultado deve ser algo como:

Se quiser ver os outros gravadores ou plataformas, basta sufixar o parâmetro com '?'.

upload do arquivo hex com avrdude

Estando isso funcionando, você já pode pegar o firmware para gravar. Eu peguei uma versão da grbl (para CNC) que não encontrei para clonar via git. Então baixei o firmware e execute o comando:

avrdude -c arduino -p atmega328p -P /dev/ttyACM0 -U flash:w:grbl_v0_8c_atmega328p_16mhz_9600.hex

Só entrou o novo parâmetro '-U', seguido de 'flash' e 'w', então o firmware. O primeiro parâmetro informa que será feita a manipulação de memória do dispositivo. 'flash' com 'w' indica que o avrdude deve escrever no dispositivo e por fim, o nome do firmware que será escrito.

Pronto, seu Arduino já foi programado a partir do firmware. Isso pode ser útil também quando você tem um programa que não deseja compartilhar o código mas disponibiliza o programa pronto para uso. Por fim, é mais um recurso.

Inscreva-se no nosso canal Manual do Maker no YouTube.

Também estamos no Instagram.

Nome do Autor

Djames Suhanko

Autor do blog "Do bit Ao Byte / Manual do Maker".

Viciado em embarcados desde 2006.
LinuxUser 158.760, desde 1997.