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.
Top comments (0)