Hola Mundo en un AVR
APOS es un programa para crear plantillas de proyectos para microcontroladores AVR. Su uso es muy sencillo y cuenta con varias opciones para configurar el proyecto de acuero al hardware que se utilizará.
APOS es un software CLI (Command Line Interface), no tiene interfaz gráfica por lo que es necesario utilizar la terminal de Linux.
Para ver la ayuda del programa se debe ejecutar el comando
$ apos ?
Para crear un proyecto vacío hay que ejecutar el comando apos seguido del nombre del proyecto.
$ apos NOMBRE_PROYECTO
Se creará una carpeta con el nombre NOMBRE_PROYECTO que incluye las carpetas include, src, el archivo Makefile, el archivo main.c y un archivo README.md
Por default el programa crea un proyecto para el micro atmega328p a una frecuencia de 16 MHz configurado para utilizar el programador usbtiny
-m: Define el micro AVR a utilizar.
-f: Define la frecuencia de operación.
-p: Define el programador a utilizar.
$ apos -m atemga32 -f 16000000 -p dragon_isp NOMBRE_PROYECTO
APOS permite otras opciones avanzadas, como la creación de un proyecto con el codigo de un programa blink, la inicialización de un repositorio GIT y la definición de los fusibles del microcontrolador.
-b: Crea el proyecto con un programa blink de ejemplo.
-g: Inicializa el proyecto con repositorio GIT.
-lf: Define el valor del fusible bajo.
-hf: Define el valor del fusible alto.
-ef: Define el valor del fusible extendido.
Crear un proyecto "blink" con el micro atmega32 a una frecuencia de 16Mhz con el comando:
$ apos -m atemga32 -f 16000000 hola_mundo
apos: Project "hola_mundo" created!
Project Information:
Project Name: "hola_mundo"
Git Repository: False
Blink Template: False
Microcontroller: atmega328p
CPU Frequency: 16000000
Low Fuse: DE
High Fuse: D9
Extended Fuse: FF
Programmer: usbtiny
Para compilar el programa se abre la carpeta del proyecto con el editor Visual Studio Code desde la terminal:
$ code hola_mundo
Abrir la terminal integrada de Visual Studio Code en el menú Ver→Terminal integrado
Escribir el comando make en la terminal integrada para compilar:
$ make
AVR Memory Usage
----------------
Device: atmega32
Program: 158 bytes (0.5% Full)
(.text + .data + .bootloader)
Data: 0 bytes (0.0% Full)
(.data + .bss + .noinit)
void AVRInit() {
DDBR = 0xFF // Puerto B como salida
}
int main() {
AVRInit();
while(1) // Ciclo Infinito
{
PORTB = 0xFF; // Enciende los leds
_delay_ms(1000) // Retardo de 1s
PORTB = 0; // Apaga los leds
_delay_ms(1000) // Retardo de 1s
}
return 0;
}
PROJECT_NAME = hola_mundo
DEVICE = atmega32
CLOCK = 16000000
PROGRAMMER = -c usbasp -P usb
FUSES = -U hfuse:w:0xD9:m -U lfuse:w:0xDE:m #-U efuse:w:0xFF:m
AVRDUDE = avrdude $(PROGRAMMER) -p $(DEVICE)
OBJECT_FILES = main.o
#OBJECT_FILES += ./src/mySource.o
INCLUDEPATHS = -I ./include
#INCLUDEPATHS += -I ./include/myFolder