Sei sulla pagina 1di 7

Programar el Arduino en C++

jueves, 10 de octubre de 2013, 23:48 - Desarrollo Arduino


Programar el microcontrolador AVR el Arduino con el lenguaje Processing est muy
bien y es una forma muy rpida de desarrollar aplicaciones sencillas. Sin embargo
cualquiera que quiera hacer algo medianamente estructurado o complejo echar
rpidamente de menos el C o el C++.

Lo cierto es que el toolkit que se instala con Arduino viene ya con una completa
toolchain GNU de C y C++: El propio lenguaje Processing es una especie de
"subconjunto" de C y lo que hace el IDE del Arduino no es otra cosa que traducir a C
los sketchs que hacemos en lenguaje Processing.

Para hacer nuestro primer programita en C++ para el Arduino vamos a probar hacer una
versin OOP del famoso parpadeo (blink.cc):
#include <avr/io.h>
#include <util/delay.h>

using namespace std;

class Led {
public:
Led();
void on();
void off();
};

Led::Led() {
// bit 7 el puerto C en modo salida
DDRC |= 0x80;
}

void Led::on() {
// bit 7 del puerto C a 1
PORTC |= 0x80;
}

void Led::off() {
// bit 7 del puerto C a 0
PORTC &= 0x7F;
}

int main() {
Led led;
while (1) {
led.on();
_delay_ms(250);
led.off();
_delay_ms(250);
}
}

Hacer parpadear un led en C++ con OOP no deja de ser como matar moscas a
caonazos pero bueno, se trata de una prueba de concepto :-)

Para compilar el programita utilizamos la toolchain de GNU que ya viene con el
software del Arduino:
PREFIJO_RUTA_BIN/avr-g++ -DF_CPU=16000000UL -mmcu=atmega32u4 -Os -c -o
blink.o blink.cc
PREFIJO_RUTA_BIN/avr-g++ -DF_CPU=16000000UL -mmcu=atmega32u4 -Os -o
blink.elf blink.o
PREFIJO_RUTA_BIN/avr-objcopy -O ihex blink.elf blink.hex

Utilizo la opcin -mmcu=atmega32u4 porque en mi caso concreto estoy utilizando un
Arduino Leonardo, que posee un procesador ATmega32u4.

Ahora slo falta subir el fichero hex al Arduino mediante la utilidad avrdude incluida
en la toolchain de GNU. El Arduino cuando arranca permanece unos pocos segundos en
modo "boot" a la espera de ver si desde un ordenador conectado por USB se le enva
algn fichero hex para instalar y ejecutar. En caso de que no se le enve nada en este
modo, el procesador del Arduino pasa a ejecutar el cdigo que contenga ahora mismo la
flash interna. Si estando en modo "boot" le llega algn nuevo programa, lo escribe en la
flash interna y a continuacin lo ejecuta.

Para poder cargar un fichero hex en el Arduino bastar con lanzar el siguiente comando
inmediatamente despus de hacer un reset:
PREFIJO_RUTA_BIN/avrdude -patmega32u4 -cavr109 -P/dev/ttyUSBXXX -
b57600 -D -Uflash:w:blink.hex:i -C PREFIJO_RUTA_ETC/avrdude.conf

Algunos de los parmetros que le paso al avrdude son especficos para Arduino
Leonardo, en caso de usar otro modelo de Arduino hay que mirar qu parmetros son
los adecuados. Ntese que el ejecutable avrdude no se encuentra en la misma carpeta
que el fichero avrdude.conf. Hay que asegurarse de que se usan las rutas correctas y
acordes a las carpetas de instalacin del software del Arduino.

Si en el Arduino se encuentra previamente cargado un sketch realizado con lenguaje
Processing es posible cargar un nuevo fichero hex sin necesidad de reiniciar el Arduino:
Basta con abrir el puerto serie USB y configurarlo a 1200 bps (sin necesidad de enviar
ni recibir ningn byte) para que el Arduino pase a modo "boot", como si lo hubisemos
reiniciado (gracias a Nicholas Kell por esta info).

He aqu un programa de ejemplo, compilable en cualquier *nix, que realiza este "reseteo
soft":
#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#include <termios.h>
#include <string.h>

int main(int argc, char *argv[]) {
struct termios tio;
int fd;
if (argc < 2)
return 1;
fd = open(argv[1], O_RDONLY | O_NONBLOCK);
tcgetattr(fd, &tio);
tio.c_cflag = CS8;
cfsetspeed(&tio, B1200);
tcsetattr(fd, TCSANOW, &tio);
close(fd);
return 0;
}

De esta manera y, de forma genrica, el script upload.sh podramos dejarlo como sigue:
#!/bin/sh
./reset $2
sleep 2
PREFIJO_RUTA_BIN/avrdude -patmega32u4 -cavr109 -P$2 -b57600 -D -
Uflash:w:$1:i -C PREFIJO_RUTA_ETC/avrdude.conf

Invocndolo de la siguiente manera:
./upload.sh blink.hex /dev/ttyUSBXXX

Y voil, ya tenemos nuestro primer led parpadeante hecho en C++ :-)















Cmo escribir un Software Arduino en C
Creado por Maluniu
La plataforma de procesador de hardware Arduino se ha vuelto ubicua dentro de la
comunidad tecnolgica. Este tutorial te mostrar cmo tomar control de Arduino
mostrndote cmo tomar el cdigo C++ que provee Arduino, y usarlo (o modificarlo)
para crear programas C++ para plataformas Arduino, usando Eclipse C++ IDE, el
compilador AVR-GCC y AVRdude.
Anuncio
Pasos
1. 1
Descarga el software y archivos necesarios. Estos incluyen:
o El software ms reciente de Arduino [1], el cual incluye unos archivos
C++ que hacen que funcione Arduino, as como un simple Java GUI
enfocado a los que no son programadores.

o AVR-GCC, el cual es el compilador para la serie de los
microcontroladores AVR (el corazn de Arduino) Para los usuarios de
Windows, WinAVR es el mejor [2]
o El Eclipse C++ Language IDE [3], donde vas a estar haciendo todos los
cdigos y subiendo los cdigos a Arduino. Eclipse requiere que tengas
Java Runtime Environment [4] instalado.
o El plugin AVR-Eclipse [5], el cual provee la funcionalidad que necesita
Eclipse IDE para hablar con Arduino.
Anuncio
2. 2
Extrae los archivos para tu Eclipse IDE en su carpeta. Luego, extrae los
archivos para el plugin AVR-Eclipse en la misma carpeta.
3. 3
Crea un proyecto C++ en Eclipse, y usa la siguiente configuracin:
o Haz que el tipo de proyecto sea un "AVR Cross Target Application"
o Asegrate de que Debug no est seleccionado en las configuraciones
de construccin (y asegrate de que Release est seleccionado).
o Cuando te pregunte los detalles del hardware, asegrate de seleccionar la
frecuencia correcta (usualmente 16000000 Hz) y el microcontrolador
correcto, de acuerdo a tu tipo de Arduino [6]

4.
4
Extrae la ltima versin del software Arduino de su sitio web. Copia la
carpeta entera de 'hardwarearduinocoresarduino' en la carpeta del proyecto.
Ahora que ya tienes instalado Eclipse, solo necesitas hacer un proyecto de
Arduino desde cero.
5. 5
Crea el archivo main.h que declare void setup(), int main() y void loop().
Incluye "WProgram.h" (con comillas) en la cabecera; esto es para vincularlo a
un cdigo Arduino.
6. 6
Arregla cualquier error del compilador en el software Arduino. En Arduino
v0018, esto incluye los siguientes cambios;
o main.cpp; borra "#include <WProgram.h>" en la parte superior, y en su
lugar pon "main.h".
o Tone.cpp; cambia los ltimos dos, <wiring.h> & <pins_arduino.h>, a
que tengan comillas ("wiring.h" & "pins_arduino.h")
o Print.h; la funcin de declaracin "void function(int inputs) = 0;" debe
cambiarse a "void function(int inputs);", o en otras palabras borra el "=
0" para que no sea un funcin puramente virtual.
Anuncio
Consejos
Para descargar los programas al hardware, debes configurar AVRdude en tus
ajustes de proyecto y usar un puerto serial apropiado, 57600baud, y los ajustes
de configuracin de Arduino.
Asegrate de no construir bajo la configuracin de Debug. Puede causar
muchos errores.
Familiarizarte con el cdigo toma tiempo; existen unos errores que se toma
tiempo en detectar.
Anuncio
http://sourceforge.net/projects/avr-eclipse/files/

Potrebbero piacerti anche