Tutorial de como gravar códigos .c em Atmegas

Neste tutorial mostraremos como gravar códigos .c diretamente em Atmegas utilizando o avr-gcc e o avrdude.

Primeiramente, se estiver utilizando o Windows instale o WinAVR, ou se estiver utilizando Ubuntu, abra o terminal e digite: sudo apt-get install gcc-avr avr-libc. Para outras distribuições de Linux clique aqui para saber como instalar.

Agora, com uma placa Arduino e um AVR Programmer Shield(para maiores informações abra o link para a loja LdG) . Passe a programação ArduinoISP para o Arduino, conecte o shield na placa Arduino e, por fim, coloque o Atmega que deseja gravar no shield. Ou conecte o MISO da placa no MISO do atmega, MOSI da placa no MOSI do atmega, S-RESET da placa no SS do atmega, SCK da placa no SCK do atmega, o GND e o VCC.

Como exemplo, iremos pegar a programação do Blink modificado em linguagem C puro para do Arduino:

/*
Blink
Turns on an LED at pin PB5 on for one second, then off for one second, repeatedly.

by Fernando Gil
*/

#define F_CPU 8000000UL // Clock Speed
#include <avr/io.h>
#include <util/delay.h>
#define LED_PIN PB5

void delayms(uint16_t millis) {
while ( millis ) {
_delay_ms(1);
millis--;
}
}

int main(void)
{
DDRB |= 1LED_PIN; /* set LED_PIN to output */

while(1)
{
PORTB |= 1LED_PIN; /* 1 - LED ON */
delayms(1000);
PORTB &= ~(1LED_PIN); /* 0 - LED OFF */
delayms(1000);
}
return 0;
}

Copie e cole a programação em um editor de texto(Bloco de notas, gedit, etc) e salve o arquivo como "blink.c" em uma pasta desejada.

Agora, abra o prompt de comando(Windows) ou terminal(LINUX), vá para a pasta desejada e digite:

avr-g++ -g -Os -Wall -mcall-prologues -mmcu=atmega328p -fno-exceptions -o blink2.obj blink.c

onde:

          -mmcu=atmega328p é o microcontrolador que deseja gravar, neste caso é o atmega328p se for outro, troque o nome para o atmega desejado. Para saber qual nome do atmega deve utilizar clique aqui;

         blink.obj é o nome de saída que o avr-gcc criará;

         blink.c é o nome de entrada.

Agora é necessário transformar o arquivo blink.obj para blink.hex, para isto digite:

avr-objcopy -R .eeprom -O ihex blink2.obj blink3.hex

onde:

          blink2.obj é o arquivo de entrada;

          blink3.hex é o arquivo de saída em .hex.

Pronto, agora é só digitar:

avrdude -P com1 -b 19200 -c avrisp -p m328p -U flash:w:blink3.hex  para gravar no atmega.

onde:

          19200 é o baud rate do gravador

          avrisp é o modo de gravação

          m328p é o atmega que deseja gravar

          com1 é a porta onde está conectado o Arduino com AVR Programmer Shield

          para maiores informações, clique aqui

Pronto! Seu atmega está com o blink gravado! Boa diversão e boa sorte!

Referências:

http://labdegarag1.lojatemporaria.com/shields-e-afins/avr-programme...

http://arduino.cc/playground/Learning/Linux

http://www.ladyada.net/learn/avr/index.html

http://nongnu.org/avr-libc/user-manual/

http://www.nongnu.org/avrdude/user-manual/avrdude.html

http://www.portugal-a-programar.org/forum/index.php?topic=38072.0

Exibições: 4109

Tags: atmega, c, codigos, gravar, tutorial

Comentar

Você precisa ser um membro de Laboratorio de Garagem (arduino, eletrônica, robotica, hacking) para adicionar comentários!

Entrar em Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)

Comentário de Parah em 24 março 2013 às 23:48

Olá chará, sei que é um pouco tarde, talvez você até já saiba da resposta..rs

1ª dúvida:

Sim é possível, caso o microcontrolador que desejas usar seja o mesmo da  sua placa Arduino Mega. (Eu digo o mesmo porque toda a programação foi primeiramente desenvolvida para sua placa arduino mega, mas é possível usar outro microcontrolador se você fizer outra programação voltada para o novo.)

2ª dúvida:

Também é possível gravar várias outras vezes no mesmo atmega.

Eu sugiro você comprar um gravador, especificamente o usbasp, ele é barato (comprando no ebay eh mais barato ainda). Fica mais prático usar ele pra gravar os outros microcontroladores do que sua placa arduino, pq, "caso você faça um código primeiramente para o arduino mega" e depois queira passá-lo para o seu microcontrolador terá que reprogramar o microcontrolador da placa toda vez... fica meio cansativo assim...

Comentário de José Lucas Ferrarezi em 13 junho 2012 às 13:57

Bom dia Adeiton, primeiramente obrigado por ajudar.

Acho que eu me expressei mal, e pela falta de conhecimento acabei fazendo confusão. Agora que já dei uma pesquisada no assunto, surgiram outras duvidas, então vou reformular a pergunta. Quem puder ajudar eu agradeço.

 

Vou exemplificar pra ficar mais fácil. Tenho um Arduino MEGA e estou montando um projeto, ai faço toda a programação. Beleza, projeto finalizado. Mas agora eu quero montar uma placa de circuito somente para esse projeto, livrando o meu Arduino MEGA pra novos projetos.

Ai esta a duvida. É possível com apenas o Atmega (e os componentes nessesarios para a montagem do circuito) e através do meu Arduino MEGA gravar toda a programação nele? Assim eu ganho espaço físico e o custo sairia mais baixo.

Outra questão, se isso for possível, eu posso gravar e regravar códigos neste Atmega, assim como faço no Arduino?

 

Eu já vi alguma coisa sobre como fazer isso, mas pela falta de conhecimento no assunto não pude compreender corretamente. Alguém saberia de algum tutorial, vídeo, livro, etc. que explicasse isso para iniciante?

 

Quem puder responder nem que for uma das duvidas, já ajudaria bastante. Obrigado desde já.

Comentário de José Lucas Ferrarezi em 11 junho 2012 às 22:22

Alguem poderia responder a pergunta que eu fiz ? agradeceria bastante.. :)

Comentário de José Lucas Ferrarezi em 7 maio 2012 às 1:34

Boa Noite..

Estou iniciando agora no arduino e me desculpem se minha pergunta for totalmente fora desse assunto..

Um exemplo aplicaçao de um arduino mais Atmega seria... Eu faço uma programação para o Atmega e outra para o arduino, quando o arduino "envia um sinal" pro Atmega.. este realiza o que a programação pede.. e depois "envia um sinal" pro arduino... seria mais ou menos isso ???????

E isso me ajudaria em que ? nao sobrecarregar o arduino ? diminuir o "tamanho em bytes" da programação ? aumentar a quantidade de entradas e saidas ?

Obrigado desde ja..

Comentário de romualdo xavier de paula em 5 maio 2012 às 12:41

...sugerir um tutorial que contenha o pré requisito para acompanhar este! de preferencia bem mastigadinho!

Comentário de Marcelo Rodrigues em 30 abril 2012 às 12:19

Adeilton,

Tudo bem? Quanto tempo.

Taí uma coisa que estou muito a fim de começar a usar. Mas a última versão que vi do AVR Studio era só para Windows. Não?

Abraço!

Publicidade

Convide um amigo para o Lab!

 Loja Lab de Garagem

curso gratis de arduino

Teensy 2.0

Por: R$ 95,90

Ou em até 18x de R$ 6,39

Mini Relay Shield

Por: R$ 17,50

Ou em até 3x de R$ 6,07

Temp&Humi Sensor

Por: 25,00

Ou em até 05x de R$ 5,30

Estação de Solda
Temperatura Ajustável - 50W

Por: R$ 204,00

Ou em até 18x de R$ 13,60

© 2014   Criado por Marcelo Rodrigues.

Badges  |  Relatar um incidente  |  Termos de serviço