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.

Heroku

Simplify your DevOps and maximize your time.

Since 2007, Heroku has been the go-to platform for developers as it monitors uptime, performance, and infrastructure concerns, allowing you to focus on writing code.

Learn More

Top comments (0)

Image of Docusign

🛠️ Bring your solution into Docusign. Reach over 1.6M customers.

Docusign is now extensible. Overcome challenges with disconnected products and inaccessible data by bringing your solutions into Docusign and publishing to 1.6M customers in the App Center.

Learn more