Trabalhando com AVR via makefile em Linux

A pouco tempo estou começando a aprender a programar microcontroladores ATMEGA em AVR. Apesar de poder usar a IDE Arduino na opção "Upload Using Programmer", aprendi também a compilar (com avr-gcc), gerar o HEX (com avr-objcopy) e gravar no microcontrolador (com avrdude). Tudo "na mão", via linha de comando e em Linux.

Os comandos são bem simples, no caso por exemplo, tenho o código no arquivo main.c, então rodo:

Para compilar:

avr-gcc -mmcu=atmega328p main.c -o main.cpp

Para gerar o HEX:

avr-objcopy -O ihex main.cpp main.hex

Para gravar o HEX no microcontrolador:

avrdude -c usbasp -b 19200 -p m328p -P /dev/ttyACM0 -U flash:w:main.hex:i

No caso, tudo para um microcontrolador ATmega328.

Porém sabia que tinha uma forma mais rápida e fácil, que é gerando um makefile. O makefile é um script que facilita todo o processo. Então achei este arquivo pronto, onde alterando poucos parâmetros o makefile fica sempre disponível para rodar qualquer arquivo.

Primeiro tenha certeza que os pacotes abaixo estão instalados:

sudo apt-get install gcc build-essential
sudo apt-get install gcc-avr gdb-avr binutils-avr avr-libc avrdude

Crie uma pasta qualquer, copie o arquivo Makefile.tpl e renomeie ele para makefile, tudo minúsculo e sem extensão. Abra este arquivo com um editor de texto qualquer.

Nas linhas abaixo, altere as opções de acordo com seu microcontrolador:

MCU=atmega328p

PROGRAMMER_MCU=m328p

Nesta opção, deixe apenas o nome do arquivo, ou arquivos do seu projeto. No exemplo é apenas um arquivo como main.c:

PRJSRC=main.c

Nas opções abaixo, deve ser inserido o modelo da interface ISP e a porta:

AVRDUDE_PROGRAMMERID=usbasp

AVRDUDE_PORT=/dev/ttyACM0

Eu precisei também adicionar a velocidade conforme abaixo. Retirei a opção -e necessária para alguns microcontroladores, ela apaga tudo antes de instalar o novo código, no 328 não é necessario:

-p $(PROGRAMMER_MCU) -P $(AVRDUDE_PORT) -b 19200 \

Agora basta rodar os comandos:

make //para compilar

make hex //para gerar o HEX

make install //para gravar no microcontrolador

*Para as ligações fisicas, pode ser usado os mesmos procedimentos descritos AQUI.

 

 

Comentários