Programar el Arduino en C.docx

Programar el Arduino en C++ jueves, 10 de octubre de 2013, 23:48 - Desarrollo Arduino Programar el microcontrolador AVR

Views 107 Downloads 0 File size 382KB

Report DMCA / Copyright

DOWNLOAD FILE

Recommend stories

Citation preview

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 rápida de desarrollar aplicaciones sencillas. Sin embargo cualquiera que quiera hacer algo medianamente estructurado o complejo echará rápidamente 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 versión OOP del famoso parpadeo (blink.cc): #include #include 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 cañonazos 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 opción -mmcu=atmega32u4 porque en mi caso concreto estoy utilizando un Arduino Leonardo, que posee un procesador ATmega32u4. Ahora sólo 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 envía algún fichero hex para instalar y ejecutar. En caso de que no se le envíe nada en este modo, el procesador del Arduino pasa a ejecutar el código que contenga ahora mismo la flash interna. Si estando en modo "boot" le llega algún nuevo programa, lo escribe en la flash interna y a continuación lo ejecuta. Para poder cargar un fichero hex en el Arduino bastará con lanzar el siguiente comando inmediatamente después 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 parámetros que le paso al avrdude son específicos para Arduino Leonardo, en caso de usar otro modelo de Arduino hay que mirar qué parámetros son los adecuados. Nótese 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 instalación 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 ningún byte) para que el Arduino pase a modo "boot", como si lo hubiésemos reiniciado (gracias a Nicholas Kell por esta info). He aquí un programa de ejemplo, compilable en cualquier *nix, que realiza este "reseteo soft": #include #include #include #include #include





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 genérica, el script upload.sh podríamos 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

Invocándolo de la siguiente manera: ./upload.sh blink.hex /dev/ttyUSBXXX

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

Cómo escribir un Software Arduino en C Creado por Maluniu La plataforma de procesador de hardware Arduino se ha vuelto ubicua dentro de la comunidad tecnológica. Este tutorial te mostrará cómo tomar control de Arduino mostrándote cómo tomar el código 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 más 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

o

o

AVR-GCC, el cual es el compilador para la serie de los microcontroladores AVR (el corazón de Arduino) Para los usuarios de Windows, WinAVR es el mejor [2] El Eclipse C++ Language IDE [3], donde vas a estar haciendo todos los códigos y subiendo los códigos a Arduino. Eclipse requiere que tengas Java Runtime Environment [4] instalado. 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 configuración: o o o

Haz que el tipo de proyecto sea un "AVR Cross Target Application" Asegúrate de que “Debug” no esté seleccionado en las configuraciones de construcción (y asegúrate de que “Release” esté seleccionado). Cuando te pregunte los detalles del hardware, asegúrate 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 versión 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 código Arduino. 6. 6 Arregla cualquier error del compilador en el software Arduino. En Arduino v0018, esto incluye los siguientes cambios; o o o

main.cpp; borra "#include " en la parte superior, y en su lugar pon "main.h". Tone.cpp; cambia los últimos dos, & , a que tengan comillas ("wiring.h" & "pins_arduino.h") Print.h; la función de declaración "void function(int inputs) = 0;" debe cambiarse a "void function(int inputs);", o en otras palabras borra el "= 0" para que no sea un función 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 configuración de Arduino. Asegúrate de no construir bajo la configuración de “Debug”. Puede causar muchos errores. Familiarizarte con el código toma tiempo; existen unos errores que se toma tiempo en detectar.

Anuncio http://sourceforge.net/projects/avr-eclipse/files/