Arduino con Makefile
12 de febrero de 2009 por manuPara todos los que no estén familiarizados con lo que es Arduino, intentaré resumirlo: Arduino es un proyecto de hardware y software libre, parecido a Pinguino, pero con un microcontrolador Atmega168. El proyecto ha sido un éxito y está bastante avanzado, con multitud de documentación y ejemplos, especialmente útiles para principiantes y enfocados a la enseñanza. De hecho, las librerías de C que utilizan facilitan mucho el uso, ocultando los aspectos más oscuros de programar un Atmega a pelo. Hay varios modelos, un Arduino Diecimila, anda por los 24 €, ya montado.
Para programar Arduino existe un IDE gratuito para Windows, Linux y Mac, pero yo soy fan de los Makefiles en linux, y de usar mi editor, manías... Además, con algo de entrenamiento, entiendes mejor lo que estás haciendo y la localización de los errores si los hubiera. Arduino tiene un Makefile incorporado en arduino_home/hardware/cores/arduino.
El Makefile incluye en los comentarios unas instrucciones maravillosas que lo dejan listo para usarse. Al principio hay que cambiar algunos parámetros para nuestro programa en particular:
TARGET = $(notdir $(CURDIR))
INSTALL_DIR = /opt/arduino
PORT = /dev/ttyUSB0
UPLOAD_RATE = 19200
AVRDUDE_PROGRAMMER = stk500v1
MCU = atmega168
F_CPU = 16000000
Básicamente, aquí el target sería el nombre del directorio (así funciona el IDE, qué casualidad, mismo nombre en directorio y .hex, pero puedes llamarlo como quieras, programa, por ejemplo), dónde hemos instalado arduino, el puerto que usaremos para subir el programa, baud rate y características de la placa: procesador atmega168 (arduinos viejos atmega8), 16MHz.
Si se quiere añadir una librería, habrá que meter su código fuente en SRC (si es .c) o en SRCXX (si es .cpp) y de la misma forma poner los directorios en que se encuentran las cabeceras (.h) en CINCS o CXXINCS. Para mi gusto, el otro día me dí cuenta de que falta una importantísima: hay que añadir Print.cpp a SRCXX para que funcione el puerto serie, dado que la clase de manejo del puerto de serie, HardwareSerial, hereda directamente de la clase Print.
Y se escribe en un terminal:
make para obtener el programa.hex
make upload para subir programa.hex al arduino.
Por cierto que echando un vistazo a arduino_home/hardware/cores/arduino se puede entender bastante sobre como funcionan algunas cosas, crearte tus propias librerías o sencillamente ir avanzando en el uso de Arduino.



junio 25th, 2009 at 7:00 am
[...] Arduino con Makefile [...]
diciembre 21st, 2009 at 10:31 pm
Hola manu, suena muy interesante eso del makefile, no seria mucha molestia un pequeño tutorial paso a paso? estuve intentando como migrar código de arduino a el compilador WinAVR del AVRstudio, pero tengo algunos problemas con los comandos como digitalWrite() y PinMode(), tal vez algunas librería que me falte? aun que si no se pudiera dar el caso de migrar el código, la única solución que le vería seria usar los .hex directamente,algun tutorial que recomiendes?
diciembre 22nd, 2009 at 7:58 am
Siento no poder ayudarte sp-peter. No he utilizado WinAVR ni AVRstudio, únicamente he utilizado el entorno de Arduino un par de veces y cuando he manejado algún otro AVR lo he hecho mediante un Makefile en linux, y tampoco soy un experto :-(
En cuanto a digitalWrite() y PinMode() lo único que te puedo decir es que están implementadas en hardware/cores/arduino/wiring_digital.c. Asegúrate que todos los archivos .c .cpp y .h que están en hardware/cores/arduino están añadidos en tus directorios de proyecto.