Arduino: Gravando AVR com Eclipse IDE

Arduino: Gravando AVR com Eclipse IDE

TLDR; Este tutorial mostra como gravar um microcontrolador AVR ATmega328P com a IDE Eclipse utilizando o Avrdude.

Já vimos como compilar um programa para microcontroladores AVR no post AVR Cross-Compile com Eclipse IDE, mas compilar é meio inútil sem poder gravar o programa no microcontrolador, não é?

Pois então é pra já que vamos resolver isso!

O Avrdude é uma ferramenta para programação de microcontroladores AVR. Ele funciona com uma variedade enorme de gravadores, sendo utilizado pela Arduino IDE para a gravação dos programas criados.

Neste post veremos como configurar uma ferramenta externa no Eclipse que realiza a gravação

Requisitos

Este tutorial foi desenvolvido em ambiente Windows. É necessário ter instalado Eclipse CDT e WinAVR (o programa Avrdude vem junto com o WinAVR). Também é necessária uma placa com o microcontrolador ATmega328P, como Arduino Uno ou Nano.

Apesar de ter foco no ambiente Windows, os passos para outras plataformas são equivalentes, mudando apenas a localização dos executáveis.

Configurando Ferramentas Externas

1. Run > External Tools > External Tools Configurations…

Por padrão há um botão de atalho para as ferramentas externas na barra superior do Eclipse.

2. Para criar uma nova ferramenta externa clique com o botão contrário em Program e clique em New.

3. Em Name dê um nome à ferramenta externa como “Arduino Nano”. Use um nome bem descritivo, pois você pode configurar diversas ferramentas, por exemplo, uma para cada placa que estiver utilizando.

3. Na aba Main em Location clique em Browse File System… para procurar o executável do Avrdude. No meu caso ele está em C:\WinAVR-20100110\bin\avrdude.exe.

4. Working Directory é a pasta de onde o comando será executado. Coloque ${workspace_loc}/${project_path}/Debug, que resolverá para a pasta de compilação do modo Debug.

5. Em Arguments colocamos os argumentos com que o Avrdude será chamado.

Mas se agora você clicar em Apply e então em Run, por não ter argumentos, o Avrdude não saberá o que fazer e vai imprimir a lista de argumentos que ele suporta.

No nosso caso temos interesse nestes:
-c arduino (tipo do programador)
-P COM3 (porta de comunicação)
-b 57600 (taxa de transmissão)
-p atmega328p (microcontrolador sendo gravado)
-U “flash:w:${project_name}.hex:i” (tipo da operação)

No meu caso o Arduino Nano está na porta COM3, que pode ser diferente no seu computador. A operação sendo executada é gravação (w) do arquivo ${project_name}.hex (a variável será convertida pelo Eclipse) do tipo Intel HEX (i) na memória de programa (flash).

Abaixo estão os argumentos, que podem ser colocados um por linha:

-c arduino
-P COM3
-b 57600
-p atmega328p
-U "flash:w:${project_name}.hex:i"
Ferramenta externa para Arduino Nano.
Ferramenta externa para Arduino Nano.

Executando a ferramenta externa agora veremos que o Avrdude se comunica com o bootloader do Arduino, porém ele reclama que não encontrou o arquivo HEX que passamos para ele. A seguir vemos como criar este arquivo.

O Eclipse pode reclamar que não encontrou alguma variável que utilizamos na ferramenta externa. Isso acontece quando ele não sabe sobre qual projeto a ferramenta externa será executada. Para resolver isso basta selecionar o projeto ou algum de seus arquivos no Project Explorer.

Criando o arquivo HEX

Como o Avrdude não é capaz de interpretar o arquivo ELF que é gerado pelo compilador por padrão, é necessário processá-lo e exportar o binário para um formado que ele compreenda. Um dos formatos que o Avrdude compreende é o formato Intel HEX.

Para gerar o código HEX basta utilizar este comando

avr-objcopy -R .eeprom -R .fuse -R .lock -R .signature -O ihex INELF OUT.hex

A ferramenta avr-objcopy tem a finalidade de realizar conversão de código objeto. A opção -R é utilizada para remover as seções não desejadas, a opção -O define o tipo do arquivo de saída, INELF é o nome do arquivo de entrada e OUT.hex é o nome do arquivo de saída.

Mas executar esse comando toda vez que queremos realizar um programar o microcontrolador não é muito conveniente. Então precisamos automatizar a criação do arquivo HEX.

Automatizando

Para automatizar a criação do arquivo HEX podemos colocar o comando de conversão nos comandos pós-compilação. Estes comandos são executados após uma compilação com sucesso.

Para gerar o arquivo HEX automaticamente após a compilação abra o projeto (por exemplo xcompile-avr) e siga os passos a seguir

1. Project > Properties > C/C++Build > Settings > Build Steps > Post-build steps

2. Em Command coloque o comando abaixo e em Description coloque um comentário como “Gerando HEX”.

avr-objcopy -R .eeprom -R .fuse -R .lock -R .signature -O ihex "${BuildArtifactFileBaseName}"  "${BuildArtifactFileBaseName}.hex"

O comando acima utiliza a variável BuildArtifactFileBaseName, que é definida pelo Eclipse como sendo o nome do arquivo gerado pelo compilador. A utilização desta variável permite que o comando funcione corretamente em qualquer projeto.

Gerando HEX automaticamente após compilação.
Gerando HEX automaticamente após compilação.

Concluindo

Além de compilar nossos códigos para AVR no Eclipse, agora também conseguimos convertê-lo automaticamente e fazer o upload do programa através da própria IDE.

Curta e compartilhe se gostou do tutorial.

Dúvidas ou sugestões? Deixe um comentário abaixo!

 

Djones

Deixe uma resposta