DEV Community

Priscila Gutierres
Priscila Gutierres

Posted on

Criando um hello world para micro controladores Atmel usando o avr-gcc

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;
}
Enter fullscreen mode Exit fullscreen mode

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);
    }
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode
avr-gcc -DF=4000000 \
-mmcu=attiny2313a \
-o blink blink.o
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

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.

Top comments (0)