Programación de Microcontroladores AVR en Linux – Pt 2

Hola de nuevo, en esta entrada voy a mostrar un mini tutorial de como programar microcontroladores AVR en sistemas operativos Linux utilizando herramientas libres: un compilador de C/C++ para AVR, un editor de texto y la terminal de Linux.

Contenido

Introducción

Si eres de las personas a las que les gusta este mundo de los microcontroladores AVR, estás acostumbrado a programarlos en sistemas Windows con el IDE Atmel Studio y te gustaría empezar a programarlos en la distribución Linux de tu agrado, estás leyendo la información correcta ;).

Ya sea que tu sistema operativo de uso cotidiano sea Linux o que estés pensando en migrar a Linux y no sabes si existen herramientas para programar micros AVR o si se sencillo programarlos, te informo que existen todas las herramientas necesarias para desarrollar aplicación en este sistema operativo, y si no existen… pues hay que crearlas.

El problema

En mis comienzos como desarrollador de aplicaciones embebidas, dependía mucho de Windows, ya que la mayoría de herramientas de software sólo son compatibles con este sistema operativo, y las de hardware no se diga… imposible de usarlas en otros sistemas. Esto me causaba un poco de frustración, ya que soy un usuario de Linux y la mayor parte del tiempo trabajo con Linux, lo que me hacia tener que cambiar de sistema operativo constantemente dependiendo en qué quisiera trabajar.

Poco a poco fui aprendiendo a utilizar Linux como mi sistema preferido para desarrollo embebido, gracias al soporte que brinda la comunidad Open Source a las herramientas como compiladores y depuradores, que con el tiempo se han hecho más fuertes gracias a la mejora constante. Aunque para ser franco, no todo se puede realizar en Linux, y no es que la comunidad no de soporte a ciertas herramientas o a ciertas arquitecturas, si no que los fabricantes de microcontroladores y microprocesadores no cuentan con una versión libre para las herramientas de desarrollo necesarias para programar sus chips, pero mientras se pueda, el utilizar Linux para este tipo de aplicaciones seguirá siendo mi elección predilecta.

La solución

Para el caso de los microcontroladores AVR si existen herramientas “Libres” creadas por la propia empresa Atmel y mantenidas por la comunidad, y estas herramientas tiene versiones para Linux!

En esta entrada voy a mostrar como instalar y configurar las herramientas necesarias para desarrollar aplicaciones con microcontroladores AVR en lenguaje C/C++ con sistemas Linux. También haré un poco de promoción a una herramienta que eh creado para facilitar aún mas la escritura de código, la compilación y la carga de programas para los micros AVR.

Instalando las herramientas

Primero que nada empezaremos por la instalación de todo lo necesario, que en realidad no son demasiadas herramientas: un compilador, librerías, software programador y un editor de texto. Aquí abajo les dejo la lista de herramientas que usaremos para crear aplicaciones con AVRs:

  • Compilador: avr-gcc
  • Librerias para avr: avr-libc
  • Herramientas para binarios: avr-binutils
  • Editor de texto: Sublime Tex, Atom, Visual Studio Code, etc.
  • Creador de proyectos AVR: APOS, Crea plantillas de proyecto para AVR utilizando un Makefile.

Dependiendo el sistema Linux que se utilize, la forma para instalar las herramientas varía, utilizando el gestor de paquetes de cada sistema operativo. Para Debian, Ubuntu y derivados se utiliza apt, para Fedora RedHat yum y para Arch y derivados pacman o yaourt. Aquí les dejo los comandos para instalar las herramientas de compilación para AVR en cada versión de sistema operativo:

Debían, Ubuntu y derivados:

sudo apt-get install gcc-avr binutils-avr avr-libc avrdude

Fedora, RedHat y derivados

sudo yum install avr-gcc avr-binutils avr-libc avrdude

Arch Linux, Manjaro y derivados:

sudo pacman -S avr-gcc avr-binutils avr-libc avrdude

Para verificar que todas las herramientas se hayan instalado correctamente se puede probar con los comandos:

$ avr-gcc –version

o

$ gcc-avr –version

y

$ avrdude -v

La creación de proyectos se hace mediante una herramienta que eh desarrollado para facilitar el trabajo de compilación y carga. La herramienta se llama APOS (AVR Project Open Source), es un programa sencillo de terminal (CLI)  que permite crear un proyecto especificando el micro a usar, la frecuencia de trabajo, los fusibles, el programador, si se desea inicializar un repositorio GIT o un proyecto blink de ejemplo, generando una carpeta con la estructura de archivos de código fuente y el Makefile para la compilación.

El proyecto y el código fuente está alojado en GitHub y puede ser descargado y modificado por cualquier persona que desee usarlo o cooperar al proyecto ;).

La instalación es relativamente sencilla, sólo hay que tener instalado el compilador GCC (sí, el programa está escrito en C) descargar el repositorio y compilar. Para instalarlo ejecutamos lo siguientes comandos desde una terminal:

$ git clone http://github.com/alfreedom/APOS
$ cd apos
$ make
$ sudo make install

Con esto el programa quedará instalado en el sistema, para comprobarlo ejecutamos en una terminal:

$ apos -v

El editor de texto que recomiendo para este tipo de aplicaciones es Visual Studio Code, y no por que sea mi editor de texto favorito ni el mejor, si no por que trae incorporada una terminal de comandos que resulta muy practica a la hora de compilar proyectos con make, ya que nos evita estar cambiando de ventanas entre la edición del código, la compilación y la carga del programa. Pero el gusto se rompe en géneros y la edición del código queda a cargo de ustedes, utilizando el editor de texto con el que se sientan más cómodos.

Creación y compilación de un proyecto

Vamos a crear un proyecto nuevo utilizando APOS, para ello abrimos una terminal, nos dirigimos a la carpeta en donde deseamos que se guarde el proyecto y ejecutamos el siguiente comando:

apos  “Hola Mundo”

Este comando mostrará como salida:

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

Este comando nos creara una carpeta con el nombre Hola_Mundo, el nombre del proyecto puede ir sin las comillas si se utiliza un nombre sin espacios. Por default el programa reemplaza todos los espacios por guiones bajos (_) para evitar problemas de rutas en la compilación y carga del programa.

Dentro de la carpeta del proyecto se crean las carpeta lib, que es donde se deben guardar los archivos fuente y cabeceras respectivamente, además del archivo main.c y el archivo Makefile.

Ahora es necesario abrir el proyecto en el editor de texto y editar el código fuente del archivo main.c, para ello entramos a la carpeta del proyecto desde la terminal y abrimos la carpeta con el editor de texto:

cd Hola_Mundo
code .

Una vez escrito el programa se debe compilar, para ello se ejecuta el comando make desde la terminal, ubicándonos dentro de la carpeta de proyecto. Si todo sale bien, se mostrará un mensaje similar al siguiente:

AVR Memory Usage
—————-
Device: atmega328p

Program: 158 bytes (0.5% Full)
(.text + .data + .bootloader)

Data: 0 bytes (0.0% Full)
(.data + .bss + .noinit)

APOS crea por default un programa para el ATmega328p a una frecuencia de 16Mhz utilizando el programador usbtiny, esta configuración puede cambiarse utilizando la opción -m para el modelo del AVR y -f para la frecuencia de trabajo. Por ejemplo, vamos a crear un proyecto para un micro ATmega32 que funciona a 8Mhz, para esto ejecutamos el comando:

apos -m atmega32 -f 8000000 “Hola Mundo”

Para grabar nuestro archivo .hex generado se ejecuta el comando make flash, esto grabará únicamente el archivo ejecutable generado. Si se desean grabar tanto el programa como los fusibles se utiliza el comando make install. Deben tener cuidado al grabar los fusibles del microcontrolador, ya que una configuración erronea o no deseada puede dejar inservible el micro para programarlo mediante ISP. Les recomiendo leer la entrada para orientarse mas en este tema.

APOS cuenta con otras opciones, como inicializar la carpeta del projecto con un repositorio GIT, crear el programa main.c con código de ejemplo para hacer un “blink”, definir los fusibles, etc.  Para conocer más acerca del programa vean la ayuda con la opción o leyendo la documentación en el repositorio de GitHub.

Conclusiones

Como ven, esta es una alternativa mas para programar y desarrollar aplicaciones con microcontroladores AVR utilizando Linux como sistema operativo, sin utilizar herramientas pesadas como el IDE de eclipse o algún otro, aunque esta opción es para usuarios un poco más avanzados, puede ser una opción para quienes deseen utilizar plataformas Linux como ambiente de desarrollo.

Espero les sea útil esta información y que les agrade esta alternativa al desarrollo de sus proyectos con AVR. Abajo les dejo un enlace de unos slides en donde se explica de manera resumida cómo programar micros AVR en Linux.

Repositorio de APOS en GitHub: APOS

Slides sobre programación de micros AVR en Linux: Programación AVR en Linux

4 comentarios sobre “Programación de Microcontroladores AVR en Linux – Pt 2

Add yours

Dejar un comentario

Crea una web o blog en WordPress.com

Subir ↑