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
Postar um comentário