Wiki ADA

Projetos em Engenharia de Computação

Ferramentas do usuário

Ferramentas do site


gravacao-atmega328

Diferenças

Aqui você vê as diferenças entre duas revisões dessa página.

Link para esta página de comparações

Ambos lados da revisão anterior Revisão anterior
Próxima revisão
Revisão anterior
gravacao-atmega328 [2019/01/21 13:19]
amador [Gravação Direta no Arduino]
gravacao-atmega328 [2019/01/31 14:38] (atual)
amador
Linha 1: Linha 1:
-=======Programação ​ATmega=======+=======Gravação ​ATmega=======
  
-Temos duas maneiras de programar ​um ATmega: gravar diretamente o ATmega que fica no Arduino ou usar um Arduino como ISP (In System Programming).+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  
 +[(avrgcc>>​ 
 +title     AVR GCC 
 +publisher : GCC Wiki 
 +url       : https://​gcc.gnu.org/​wiki/​avr-gcc 
 +)] 
 +e para gravação usamos o gravador AVRDUDE 
 +[(avrdude>>​ 
 +title     : AVRDUDE - AVR Downloader/​UploaDEr 
 +publisher : AVRDUDE 
 +url       : https://​www.nongnu.org/​avrdude/​ 
 +)] 
 + 
 + 
 +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:
 +<​code>​sudo apt-get install gcc-avr gdb-avr ​ binutils-avr avr-libc avrdude</​code>​
 +
 +Para distribuições de Linux baseadas em Arch, a instalação é feita a partir da linha de comando:
 +<​code>​sudo pacman -S avr-gcc avr-gdb ​ avr-binutils avr-libc avrdude</​code>​
 +
 +----
 +=====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:
 +<​code>​
 +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
 +</​code>​
 +
 +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.
 +[(optionsAvrgcc>>​
 +title     : A simple project - Compiling and Linking
 +publisher : AVR Libc Reference Manual
 +url       : https://​www.microchip.com/​webdoc/​AVRLibcReferenceManual/​group__demo__project_1demo_project_compile.html
 +)]
 +
 +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. [(optionsAvrgcc)]
 +
 +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.
 +[(optionsAvrobjcopy>>​
 +title     : avr-objcopy Manual
 +publisher : Free Software Foundation, Inc.
 +url       : http://​ccrma.stanford.edu/​planetccrma/​man/​man1/​avr-objcopy.1.html
 +)]
 +
 +----
 =====Gravação Direta no Arduino===== =====Gravação Direta no Arduino=====
  
-Por este método, nós gravamos diretamente o ATmega presente 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: 
 +{{:​mappingatmega.png|}}
  
-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+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:
 <​code>​avrdude -c arduino -p m328 -P /​dev/​ttyUSB0 -b 115200 -U flash:​w:​codigoCompilado.hex</​code>​ <​code>​avrdude -c arduino -p m328 -P /​dev/​ttyUSB0 -b 115200 -U flash:​w:​codigoCompilado.hex</​code>​
-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''​.+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''​. ​ 
 +[(optionsAVRDUDE>>​ 
 +title     : AVRDUDE Options Description 
 +publisher : AVRDUDE 
 +url       : https://​www.nongnu.org/​avrdude/​user-manual/​avrdude_4.html#​Option-Descriptions 
 +)] 
 +[(tutorialLadyada>>​ 
 +title     : AVR Tutorial 
 +publisher : Ladyada.net 
 +url       : http://​www.ladyada.net/​learn/​avr/​avrdude.html 
 +)]
 ---- ----
  
 =====Arduino como ISP===== =====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: ​
 +[(arduinoISPsite>>​
 +title     : Arduino as ISP and Arduino Bootloaders
 +publisher : Arduino
 +url       : https://​www.arduino.cc/​en/​Tutorial/​ArduinoISP
 +)]
 +
 +{{:​arduinoisp.png|}}
 +
 +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:
 +[(arduinoISPsite)]
 +{{:​arduinoispcodigo.png|}}
 +
 +
 +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: ​
 +<​code>​avrdude -c avrisp -p m328 -P /​dev/​ttyUSB0 -b 19200 -U flash:​w:​codigoCompilado.hex</​code>​
 +
 +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''​. ​
 +[(optionsAVRDUDE)]
 +[(tutorialLadyada)]
 +----
 +=====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.zip | 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
 +<​code>​make</​code>​ para compilar e o  comando <​code>​make upload</​code>​ para compilar e gravar.
 +
 +
 +=====Referências=====
 +~~REFNOTES~~
  
gravacao-atmega328.1548083988.txt.gz · Última modificação: 2019/01/21 13:19 por amador