Criando um hello world para micro controladores Atmel usando o avr-gcc
Priscila Gutierres
Posted on August 13, 2023
Afinal, o que é um Arduino?
De forma simpllificada, o arduino é um jeito muito simples de se usar microcontroladores da família Atmel.
Nesse texto, eu proponho a criação de um hello world (blink) utilizando apenas o avr-gcc e a libc de microcontroladores RISC no lugar de utilizar a Arduino-IDE e suas bibliotecas.
#ifndef F_CPU
#define F_CPU 4000000L
#endif
#include <avr/io.h>
#include <util/delay.h>
int main(void)
{
PORTB = 0b00000001;
DDRB = 0b00000000;
while(1)
{
! PORTB;
_delay_ms(125);
}
return 0;
}
Nesse código simples, modificamos o registrador de dados da porta B (PORTB, definindo o estado da porta com o pullup ativo.
DDRB se refere ao registrador da direção dos bits da porta B, de forma que essa porta fica configurada como entrada.
while(1)
{
! PORTB;
_delay_ms(125);
}
Esse trecho de código alterna o estado da porta, de forma que o led embutido do arduino fique piscando após o delay.
Agora temos que usar o avr-gcc para o nosso microcontrolador presente no arduino:
avr-gcc -Os \
-DF=4000000 \
-mmcu = attiny2313a \
-c blink.c
avr-gcc -DF=4000000 \
-mmcu=attiny2313a \
-o blink blink.o
Os parâmetros DF e mmcu dependem do microcontrolador e mais informações podem ser encontradas respectivamente nos links AVR-Options e Arduino Memory Guide
Agora, o avr-objecopy cria o arquivo hexadecimal a partir do arquivo binário. Note que você poderia criar o arquivo executável diretamente caso exista somente um objeto a ser adicionado a esse executável:
avr-objcopy \
-j .text .data \
-O ihex blink.hex
Por fim, podemos usar o avrdude para fazer o flash no dispositivo destino:
avrdude -c arduino \
-p attiny2313a \
-P /dev/ttyACM0 \
-U flash:w:blink.hex
Eu criei um Makefile para simplificar todas essas etapas de forma mais limpa e didática.
O projeto inteiro está disponibilizado no meu Github.
Eu sugiro esse excelente livro ARDUINO - Guia Avançado para Projetos para quem quiser se aprofundar mais.
Posted on August 13, 2023
Join Our Newsletter. No Spam, Only the good stuff.
Sign up to receive the latest update from our blog.