Wiki ADA

Projetos em Engenharia de Computação

Ferramentas do usuário

Ferramentas do site


gravacao-atmega328

Gravação ATmega

Para gravar um código no ATmega, é preciso compilar ele, gerando assim o arquivo HEX, e depois gravar o arquivo HEX gerado. Para compilação, usamos o compilador avr-gcc 1) e para gravação usamos o gravador AVRDUDE 2)

Para fazer a gravação de um ATmega, podemos gravar diretamente o ATmega que fica no Arduino ou usar um Arduino como ISP (In System Programming).

Informações sobre a programação pode ser encontrada em Programação ATmega328.


Instalação do Compilador e Gravador

Para distribuições de Linux baseadas em Debian (como o Ubuntu), a instalação é feita através da linha de comando:

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

Para distribuições de Linux baseadas em Arch, a instalação é feita a partir da linha de comando:

sudo pacman -S avr-gcc avr-gdb  avr-binutils avr-libc avrdude

Compilação ATmega

Tem o objetivo de transformar o código fonte em um arquivo HEX que será posteriormente gravado no ATmega. Tendo o arquivo fonte em C, compilamos ele usando 3 linhas de comando no formato:

avr-gcc -Os -DF_CPU=16000000 -mmcu=atmega328p -c -o codigoExemplo.o codigoExemplo.c
avr-gcc -mmcu=atmega328p codigoExemplo.o -o codigoExemplo
avr-objcopy -O ihex -R .eeprom codigoExemplo codigoExemplo.hex

No primeiro comando, -Os diz para o compilador otimizar o uso de espaço, -DF_CPU=16000000 define a frequência de clock do microcontrolador (16 MHz no caso de um ATmega em um Arduino), -mmcu=atmega328p define o microcontrolador usado, -c diz que o compilador deve compilar e parar, ou seja, não deve conectar diferentes módulos do código depois de compilar, e -o codigoExemplo.o codigoExemplo.c define que o arquivo fonte codigoExemplo.c deve gerar o código objeto codigoExemplo.o. 3)

No segundo comando, os códigos objeto gerados no primeiro comando são conectados e usados para gerar o arquivo binário codigoExemplo. A decisão de a compilação e junção estarem separadas é indicada pois projetos mais complexos podem conter um grande número de módulos, então não será necessário compilar todos os módulos novamente antes de juntá-los em um arquivo binário. 4)

No terceiro comando, o arquivo binário codigoExemplo é usado para gerar o arquivo codigoExemplo.hex, no formato Intel HEX, comum para gravação de microcontroladores. -O ihex define que a saída será no formato Intel HEX e -R .eeprom retira a seção de eeprom do arquivo HEX. 5)


Gravação Direta no Arduino

Por este método, nós gravamos diretamente o ATmega presente no Arduino. Para saber quais entradas e saídas do Arduino estamos usando com nosso código, usamos o mapeamento de pinos de ATmega para Arduino:

Para utilizá-lo, é preciso ter o arquivo .hex gerado pela compilação e conectar o Arduino ao computador. Então é usada a linha de comando no formato:

avrdude -c arduino -p m328 -P /dev/ttyUSB0 -b 115200 -U flash:w:codigoCompilado.hex

Nesta linha de comando, -c arduino especifica que o arduino é o programador utilizado, -p m328 especifica que o microcontrolador sendo gravado é um ATmega328, -P /dev/ttyUSB0 especifica que o dispositivo está no port /dev/ttyUSB0, -b 115200 determina o baudrate usado na gravação (115200 é o usado para gravação em Arduino) e -U flash:w:codigoCompilado.hex determina que a gravação ocorrerá na memória flash do microcontrolador, que será uma operação de escrita (determinada pela letra w) e que o arquivo a ser gravado é o códigoCompilado.hex. 6) 7)


Arduino como ISP

Por este método, nós usamos um Arduino como ISP (In System Programming) para programar um ATmega avulso. Para isso, montamos o Arduino e o chip avulso da seguinte forma: 8)

E gravamos no Arduino o código que o faz agir como uma ISP. Esse código pode ser encontrado na própria IDE do Arduino, conforme mostra a figura: 9)

Então, depois de ter o arquivo .hex gerado pela compilação e conectar o Arduino ao computador, usamos a linha de comando no formato:

avrdude -c avrisp -p m328 -P /dev/ttyUSB0 -b 19200 -U flash:w:codigoCompilado.hex

Nesta linha de comando, -c avrisp especifica que o programador utilizado é uma AVRISP (dispositivo que é simulado pelo Arduino), -p m328 especifica que o microcontrolador sendo gravado é um ATmega328, -P /dev/ttyUSB0 especifica que o dispositivo está no port /dev/ttyUSB0, -b 19200 determina o baudrate usado na gravação (19200 é o usado para gravação usando um Arduino como ISP) e -U flash:w:codigoCompilado.hex determina que a gravação ocorrerá na memória flash do microcontrolador, que será uma operação de escrita (determinada pela letra w) e que o arquivo a ser gravado é o códigoCompilado.hex. 10) 11)


Makefiles

Para facilitar a compilação e gravação de ATmegas, utilizamos Makefiles. Os Makefiles para gravações simples (apenas um arquivo de código fonte) para os dois métodos de gravação apresentados estão em Makefiles ATmega.

Para utilizá-los, é preciso deixar o nome do arquivo escolhido apenas como Makefile e então ajustar os parâmetros NAME (nome do arquivo fonte), MICRO (qual microcontrolador é usado) e OBJ (nome do arquivo fonte mais o .o). Umas vez ajeitado, pelo terminal usa-se o comando

make

para compilar e o comando

make upload

para compilar e gravar.

Referências

gravacao-atmega328.txt · Última modificação: 2019/01/31 14:38 por amador