Mostrando entradas con la etiqueta AVR. Mostrar todas las entradas
Mostrando entradas con la etiqueta AVR. Mostrar todas las entradas

miércoles, 18 de septiembre de 2013

GBoard: Testando el módulo Sim900

En algunos casos, hay dudas a la hora de comprobar si el módulo Sim900 de nuestra GBoard funciona correctamente. A continuación, voy a relatar una serie de pasos a verificar para saber si nuestro módulo Sim900 funciona correctamente.


Conexión de la placa GBoard al Programador
  1. Verificar los parámetros fuente de alimentación. Este módulo ha sido intensivamente probado con un transformador de 12V y 1000mA. Si tienes uno disponible en este rango, es recomendable que sea ese el que emplees para probar la placa. Es común que los routers incluyan transformadores de  estas características. 
  2. Verificar las conexiones como se puede ver en la foto anterior. El pin RX del programador debe ser conectado al canal ST de la Gboard, cable amarillo, y el pinTX del programador se conecta al canal SR de la Gboard, cable naranja. Por último, verifica que el pin GND del programador esté conectado al pin GND de la GBoard, cable verde. Si tu programador permite seleccionar la tensión de trabajo, utiliza 3,3V.
  3. Verificar que el LED Status está encendido. Si el LED Status está encendido, esto indica que el Módulo Sim900 está encendido, en caso de que el LED Status se encuentre apagado,deberá pulsar el botón SIM900-PWRKEY, que es el botón central de los tres incluidos en la placa, durante unos segundos hasta que vea encenderse el LED Status.
Imágenes integradas 2
El LED Status encendido indica que el módulo Sim900 está encendido

Imágenes integradas 4
El boto Sim900-PWRKEY permite encender o apagar el Módulo Sim900

Para probar la placa GBoard puedes utilizar el terminal incluido en el IDE de Arduino como puede verse en la imagen siguiente. Selecciona el retorno de carro en el combo box inferior y una configuración de 19200 baudios. Por último escribe el coando +AT y pulsa enviar, si todo va bien el módulo debería contestar OK.

Imágenes integradas 1
Uso de la interfaz de Arduino para probar el funcionamiento del módulo Sim900
Estos pasos permiten verificar que el módulo de comunicaciones GPRS funciona correctamente, pero no garantizan el funcionamiento de ningún otro elemento. Las comprobaciones están realizadas con los parámetros de fabrica de la placa GBoard y el módulo Sim900, algunos de ellos podrían cambiar ligeramente para otros módulos u otros shields.

martes, 28 de mayo de 2013

Programando Baby Orangutan con AVR Studio 5.1

Al diseñar nuestro robot, normalmente necesitamos un driver para controlar al menos un par de motores y un microcontrolador para controlar la lógica que gobierna el robot. Si utilizamos un Arduino y un driver externo esto nos puede costar entre 35 y 80 euros según los elementos utilizados. La placa que os presento hoy es una placa compacta que integra un Atmega 328P, el mismo microcontrolador que utiliza Arduino UNO, y un driver de dos canales de 3A de pico por canal, con lo que podemos controlar un par de motores de una potencia relativamente alta.

Este controlador tiene múltiples ventajas, es barato, compacto, ligero, integra un microcontrolador AVR junto a un driver de 3A de pico por canal e incluye un potenciometro para poder realizar ajustes online en nuestro robot sin necesidad de añadir nada nuevo a la placa electrónica de nuestro robot. Sin embargo, a la hora de comprar este controlador hay que tener en cuenta una serie de detalles. En primer lugar esta placa no incorpora un bootloader preinstalado, el bootloader es un código residente en el micro que permite cargar un programa través del puerto serie como ocurre en el caso de Arduino. Al no tener este código residente, no es posible enviarle un programa a través del puerto serie y es necesario utilizar un programador externo como nuestro USBtinyISP para poder cargar los programas. Con un programador externo también es posible cargar el bootloader de Arduino y a partir de ese momento si es posible programar a través del puerto serie como con cualquier otro Arduino. Otra opción, es programar directamente a través del puerto de programación con el mismo IDE de Arduino, o con IDEs avanzados como el que vamos a utilizar hoy que es AVR Studio.

Hoy me voy a centrar en contaros como programar esta placa con AVR Studio. AVR Studio es un entorno de programación de Atmel basado en Visual Studio, por lo que aquellos que tengan experiencia con programación en .Net se sentirán muy cómodos utilizando este entorno. Una de las ventajas de programar con un entorno como este, es la posibilidad que ofrece el entorno de simular el micro y ejecutar el programa en modo el debug lo que permite realizar trazas de una forma muy cómoda  De esta manera es posible ver el valor que irían adquiriendo los registros en tiempo de ejecución, deteniendo el programa y pudiendo incluso ejecutarlo paso a paso, lo que nos permite depurar errores de una forma mucho mas eficiente.

El primer paso es instalar el entorno Atmel Studio o AVR Studio dependiendo de la versión que instalemos. Es importante instalar la versión 4.0, 5.1 o bien la 6.0 ya que son las versiones compatibles con el paquete de librerías de pololu, AVR development bundle, que incluye librerías varias para la programación de microcontroladores AVR.

A continuación hay que instalar el driver de tu programador para AVR, si utilizas Windows 8 tendrás que seguir los pasos descritos en esta entrada que explica como instalar los drivers de Arduino DUE en Windows 8 pero el mismo procedimiento puede utilizarse con muchos otros dispositivos como por ejemplo es este caso. 

Una vez instalados los drivers del programador tenemos que configurar nuestro USBtinyISP, para ello lo primero es instalar la herramienta WinAVR que incorpora diferentes herramientas para la programación de dipositivos ATmega, en concreto la que nos interesa a nosotros es AVRdude. Posteriormente hay que configurarlo en el entrono de AVR Studio, para ello os dejo un vídeo en el que explican como configurarlo ya que es complicado de explicar y viéndolo se hace mucho más sencillo.


Tras instalar WinAVR, se instalan en la carpeta C:\WinAVR-20100110 multitud de herramientas. En esta carpeta se encuentra la carpeta bin donde están todos los ejecutables y ahí podemos encontrar AVRdude que es el programa que tenemos que configurar en el entorno como programador. En el entorno de AVR Studio hay que utilzar la opción Tools --> External Tools que permite añadir un programador como herramienta externa. Al utilizar esta opción, aparecerá un formulario done hay que configurar en primer lugar el nombre de nuestra herramienta, por ejemplo USBTiny. El segundo argumento se refiere al ejecutable de nuestra herramienta que será avrdude, por lo que hay que poner la ruta hasta el ejecutable que por defecto será C:\WinAVR-20100110\bin\avrdude.exe. Los siguientes argumentos dependerán de la solución que hayamos creado. Cuando creamos un nuevo proyecto hay que elegir la librería de Pololu y dentro de la librería elegir BabyOrangutan 328P, lo que creará una solución para este dispositivo. Como se puede ver en el ejemplo, hay que seleccionar el nombre del proyecto, el nombre de la solución y el directorio donde estará la solución.


Una vez creada la solución, podemos consultar estos parámetros a la derecha en el explorador de soluciones como se ve en la imagen siguiente. Al generar el proyecto, según si hemos elegido Release o Debug, se generará una carpeta dentro del directorio de la solución con ese nombres y dentro de dicho directorio, estará el archivo nombreProyecto.hex que es el archivo binario generado que hay que cargar al controlador Baby Orangutan.


Al crear el proyecto por defecto, se creará con un archivo con el código del ejemplo blink que enciende y apaga un Led. A partir de aquí, hay que rellenar el resto de parámetros en la configuración de la herramienta externa de programación. Hemos añadido el nombre y el ejecutable que realizará las tareas de grabación en el Baby Orangutan, pero ahora debemos rellenar los argumentos donde según el vídeo hay que utilizar la linea -c usbtiny -p m328p -U flash:w:$(ItemFileName) pero lo que hay que hacer es ver el nombre con el que se generea el archivo con extensión .hex y utilizar este nombre. Para ello, hay que generar la solución con la opción Build->Build Solution y luego navegar hasta la carpeta de la solución. Si hemos compilado en Release habrá que mirar en la carpeta con este nombre y si hemos compilado en Debug habrá que mirar en la carpeta con este otro nombre. Allí encontraremos un archivo generado con la extensión .hex y ese es el que hay que utilizar en la linea de comando anterior. Por defecto este nombre será el mismo del del proyecto por lo que si nuestro proyecto se llama nombreProyecto se deberá usar la sentencia  -c usbtiny -p m328p -F -U flash:w:nombreProyecto.hex. Puede verse que en la linea anterior se ha añadido el parámetro -F que soluciona algunos problemas que pueden aparecer al intentar cargar código al microcontrolador utilizando avrdude.


Es importante tener en cuenta que el Baby Orangutan utiliza los pines PB4 y PB5 para la programación por lo que si utilizamos estos pines en nuestros proyectos podemos encontrar problemas a la hora de programarlo. En concreto, no debería haber problema a no se que se conecte en dichos pines un condensador que impediría programar el microcontrolador sin quitarlo del zócalo. Otra cosa a tener en cuenta a la hora de programarlo es la posición del conector, en la placa del Baby Orangutan puede verse marcado con una flecha el pin 1 del conector ISP. El pin 2 es el que se encuentra encima de este y corresponde con VCC y por lo tanto el lado con una franja roja del conector del programador debe conectarse en ese lado.


Por último, en el cuarto parámetro hay que indicar el directorio donde se encuentra este archivo ejecutable, indicando la carpeta Release o Debug según corresponda. Con esto, aparecerá un nuevo ítem en el menú Tools con el nombre de nuestra herramienta. Si conectamos el programador USBTiny al PC y le conectamos nuestro Baby Orangutan, al pulsar el botón Tools -> USBTiny compilará el código de ejemplo y lo cargará en nuestro Baby Orangutan. Después de esto podremos ver como el led se enciende y se apaga intermitentemente, a partir de aquí ya podemos comenzar a crear nuestro propio código, basándonos en las librerías de pololu y con la ayuda de InteliSense que nos sugerirá código a medida que vamos programando.



Espero que os sea de ayuda, y si necesitáis aclarar alguna cosa no dudéis en poner un comentario e intentaremos ayudaros en todo lo posible.




jueves, 16 de mayo de 2013

¿Conoces GBoard?: GSM/GPRS + ARDUINO todo en uno


En muchas ocasiones tenemos en mente realizar un proyecto en el que queremos monitorizar
algunos sensores y enviar la información a través un módulo GSM/GPRS, bluetooth, XBEE o sencillamente almacenarla en una tarjeta SD a modo de datalogger. Si lo hacemos con Arduino
necesitaremos como mínimo una placa base Duemilanove/UNO/MEGA/Due más el shield de comunicaciones GSM/Bluetooth/XBEE, si además queremos conectar sensores necesitaremos añadir otro Shield más. Si además queremos almacenar la información capturada por estos sensores
en una tarjeta SD necesitaremos añadir un nuevo Shield adicional.

El resultado será una torre de shields que probablemente funcione, pero cuya estética y control se complicaría al tener que trabajar con las diferentes señales de control empleadas por cada una de estas placas. Además sería necesario realizar un estudio previo para comprobar la compatibilidad entre las diferentes placa, ya que si dos o mas de ellas utilizan el mismo pin no podríamos usarlas al mismo tiempo de forma correcta. 

Para estos casos tenemos una solución económica y sencilla de utilizar, se trata de la placa Gboard, un sistema que integra un ATMEGA328P con bootloader de Arduino, un módulo GSM/GPRS SIM900, zócalo para tarjeta MicroSD, XBEE/Bluetooth/nRF24L01 y pines de conexión para sensores o actuadores, y todo esto en una placa de tan solo 89 x 61mm. La programación del microcontrolador ser realiza a través de un convertidor USB/RS232 y se programa igual que se programa un Arduino. Está preparada para realizar la interacción con el módulo GSM/GPRS a través del puerto serie hardware o bien utilizando otros pines y la librería para Software serial pudiendo tener así disponible el puerto serie hardware para enviar datos de DEBUG a nuestro PC.

Es posible realizar la gestión del módulo SIM900 utilizando comandos AT, para conocer la lista de comandos AT disponibles hay que basarse en la lista detallada en la documentación del módulo SIM900. También puedes programarla directamente con la librerías para entorno Arduino, en este enlace puedes decargar la librería para GBoard adaptada por GoShield a las versiones del IDE 1.0 o superior de Arduino.

Si estas pensando realizar un proyecto que utilice GSM/GPRS la Gboard es una buena opción a tener en cuenta, pero si además tu proyecto ha de integrar los diferentes periféricos que hemos comentado, entonces es la opción idónea.

Con esta misma filosofía existen otras placas que integran un ATMEGA328P +  Dispositivo/Actuador/Módulo. Entre las más interesantes te presentamos las siguientes:


Puedes encontrar todos estos artículos y la información adicional están disponibles en nuestra tienda online.

lunes, 8 de abril de 2013

Estamos en Alcabot 2013

Si seguís nuestro blog, os habréis dado cuenta de que hace unos días que no publicamos. Si pensáis que ha sido porque estábamos de vacaciones, estabais equivocados. Mañana Lunes 8 de Agosto y pasado Martes 9 de Agosto de 2013, se celebran las competiciones de robótica de la semana de la robótica en La Universidad Alcalá de Henares. Durante las últimas semanas hemos estado preparando un equipo de robots para dicha competición. Hemos desarrollado cuatro robots en tan sólo unos días por lo que no esperamos conseguir grandes cosas, pero la idea es participar, aprender, disfrutar de la experiencia y tener un punto de partida para ir mejorando de cara al año que viene.

Si queréis seguir las pruebas mañana y pasado aquí os dejo un enlace a los horarios de las pruebas y aquí os dejo otro enlace a la publicación en streaming de las mismas.

A continuación os presento el equipo de robots que hemos preparado. En la izquierda del todo, tenemos el robot javotron desarrollado por Jaiver Perez que realizará la prueba de rastreadores el Lunes. El siguiente robot, un poco más atrás, es el robot FatBot-mini, este robot se presentará a la prueba de mini sumo que se celebrará el Martes. Y a Continuación podemos ver los robots G1-v1 y G1-v2, que se presentarán a la prueba de velocistas del Martes.


La prueba de rastreadores básicamente consiste en resolver un laberinto formado por lineas negras en el suelo. Antes de las intersecciones se encontrarán lineas a un lado o a otro, que indica que camino debe tomarse en la próxima intersección. Si por ejemplo la marca se encuentra al lado izquierdo de la linea central, entonces en la próxima intersección se deberá tomar el camino izquierdo, mientras que si se encuentra al derecho habrá de tomarse el camino derecho. En algunas competiciones incluso, se tiene en cuenta la posibilidad de encontrar dos marcas, en cuyo caso habría que elegir el camino central, en una intersección con tres caminos posibles. Podéis ver la normativa para la prueba de rastreadores aquí.

Para esta prueba se utilizará el robot Javotron, que utiliza el siguiente hardware:



La reglas de la prueba de mini sumo, es bastante sencilla. Consiste en sacar de la pista al rival, antes de que sea el quien eche a tu robot. Para esta prueba hemos basado nuestro robot en un kit de mini sumo, el cual hay que decir que ha dado unos resultados excelentes, incluso utilizando baterías AA convencionales, sin necesidad de utilizar baterías Lipo.

A continuación podéis verlo en pleno funcionamiento:




Por último, una de las pruebas de mayor dificultad es la prueba de velocistas. Esta es la prueba en la que los diferentes equipos demuestran su capacidad técnica al máximo nivel. En esta prueba, existen dos calles marcadas con una linea de color negro. Un robot se pone en una de las lineas y el otro robot se pone en otra, pero con una distancia entre ellos de aproximadamente la mitad del circuido. De este modo cada robot comienza el circuito desde un punto y han de conseguir pillar uno al otro. El primero robot que consiga alcanzar al contrincante gana la carrera. Podéis ver aquí las reglas de la prueba de velocistas.

Nuestra intención es competir en esta prueba con la plataforma G1. Esta plataforma es el nuevo desarrollo que tenemos en marcha, se encuentra en fase beta y queremos medirlo para evaluar su rendimiento y posibles mejoras de cara a realizar la versión final. Esta plataforma, es un robot especialmente pensado para competir en pruebas de velocistas o rasteradores, está pensado para ser utilizado con placas de desarrollo Arduino. Para ello tiene un zócalo donde podemos insertar una placa Arduino y programarlo como si se tratase de un Shield. En nuestro caso estamos trabajando con un Arduino DUE y el resultado esta siendo muy satisfactorio.


El hardware empleado en este robot es:

Aquí podéis verlo en funcionamiento:




Este Robot es otra versión del G1, con la que pretendíamos competir con motores diferentes y diferentes algoritmos para poder evaluar una frente a otra, pero finalmente no es seguro que termine compitiendo en esta ocasión. Esta opción tiene una velocidad punta mayor, y encoders en las ruedas. Esto permite con tiempo realizar un algoritmo mucho mejor que el desarrollado en el caso anterior, pudiendo controlar la velocidad real de las ruedas mientras que en el caso anterior la velocidad de las ruedas se presupone a partir de la frecuencia de la señal PWM generada.


Por último os dejo otra foto de la escudería al completo, esperemos que haya suerte y os mantendremos informados.




sábado, 2 de marzo de 2013

Como instalar en Windows 8 los drivers para Arduino UNO, Arduino Mega 2560 y Arduino DUE

Mucha gente me ha comentado que tiene problemas al instalar los drivers de Arduino en Windows 8. Estos sobre todo puede ocurrir con las nuevas versiones de arduino como UNO, Mega 2560 o DUE ya que las versiones anteriores utilizaban el conocido chip FTDI ó FT232RL para la conversión de los niveles lógicos del USB a los niveles TTL de la UART de comunicaciones serie del microcontrolador de nuestra placa Arduino. Las nuevas placas de Arduino utilizan el chip Atmega16U2 como programador, tal y como se puede ver en los esquemas de Arduino UNO, Arduino Mega y Arduino DUE.



En estos esquemas se puede ver dicho integrado como en la imagen que se muestra a continuación:


Si comparamos con el esquema original de Arduino Duemilianove, podemos ver que abajo a la izquierda  se encuentra el chip FT232RL. Este es el integrado con el que se enviaban los programas al puerto de la UART, RX y TX del microcontrolador Atmega. Por tanto, comprobando el esquema ya podéis saber si estáis en el primer, en el que necesitaréis seguir los pasos descritos a continuación para instalar el driver, o en el segundo en el que no tendréis problema.


Para poder instalar los drivers de Atmel en Windows 8 tenéis que seguir los siguientes pasos. Antes de continuar, tened en cuenta que el segundo paso reiniciará el ordenador, por lo que antes de continuar debéis guardar toda el trabajo que hayáis realizado.

  1. Presionar la tecla Windows y 'R' de forma simultanea.
  2. Copiar en en el cuadro de texto de la ventana de ejecutar el comando entre comillas "shutdown.exe /r /o /f /t 00" y a continuación pulsa"Aceptar".
  3. Selecciona la opción "Solucionar Problemas"
  4. Selecciona "Opciones Avanzadas"
  5. Selecciona "Configuración de Inicio" y pulsa "Reiniciar".
  6. Una vez reinicie el sistema aparecerá un menú donde se pueden elegir diferentes opciones como:  Habilitar Depuración, Habilitar el registro de arranque, Habilitar modo seguro, etc. Hay que elegir la opción 4 "Deshabilitar el uso obligatorio de controladores firmados".
  7. Cuando reinicie el sistema ya podremos instalar normalmente los drivers necesarios para programar nuestros nuevos arduinos.
Gracias a Javier Perez por reportar el link al post original con la solución.

domingo, 13 de enero de 2013

Arduino Shield List: Lista de placas para Arduino

Arduino se ha convertido en una de las plataformas más populares para el desarrollo de electrónica en el hogar a nivel aficionado. Muchas universidades han incluido esta placa de hardware y software libre en sus clases prácticas, por la facilidad de programación que ofrece su entorno, donde es posible programar directamente en C ó C++ y cargar los programas a través del USB.

Pero esto no es todo, hay infinidad de posibilidades para la creación de nuevas ideas a partir de una placa Arduino. Una de las formas más fáciles de añadir nuevas funcionalidades a la placa Arduino es a través de las Shields de Arduino. Pero, ¿que es un shield?. Pues un shield no es más que una placa electrónica que puede ser conectada en la parte superior de Arduino y que normalmente permite a su vez conectar más placas encima de ella y que incorpora una determinada funcionalidad.

Jonathan Oxer ha creado y mantiene desde hace tiempo Arduino Shield List una interesante página sobre este tema. Su cometido, creo entender, que consiste en recopilar toda la información de utilización de los pines originales de Arduino de cada placa, a modo de poder determinar fácilmente que shields son compatibles con que otros.

Diferentes Arduino Shields Apiladas


Entre otras muchas cosas, muestro a continuación algunas de las funcionalidades más populares de los Shields de Arduino que pueden encontrarse por ahí:


  • Módulo de Relés: Un relé permite controlar con una salida de Arduino, la activación de dispositivos que tengan altos consumos de corriente. Cada salida de Arduino no puede emitir más de 20mA por lo que ciertos elementos como por ejemplo motores u otros elementos actuados con bobinas, no pueden ser activados directamente desde una salda de Arduino. En estos casos es util utilizar un modulo de Relés para poder activar dichos elementos. A continuación podéis ver un vídeo donde se utiliza un Módulo de relés para encender una bombilla, aquí tened cuidado ya que hay relés de características diferentes, por lo que esto no se debe hacer con cualquier tipo de relé, comprobad antes que el relé es capaz de conducir la intensidad correspondiente.

  • Módulo Ethernet: Con estos módulos es posible conectar Arduino a nuestra red local de cada. De manera que podemos hacer que acceda a cualquier información o bien que actúe como un pequeño servidor Web o de directorios, aunque su uso más útil es poder conectar a Arduino un dispositivo actuador o sensor, y acceder a su control o monitorización a través de la red local de casa. En este otro vídeo se muestra como controlar un módulo de relés a través de un PC utilizando para ello un módulo Ethernet para publicar el servicio.

  • Expansores de I/O: En muchas ocasiones, nos encontramos con determinados tipos de aplicación, donde podemos encontrar que Arduino no tiene suficientes entradas o salidas para controlar todos los elementos necesarios. En estos casos, se puede recurrir a Shields específicos para aumentar la cantidad de entradas salidas de nuestro Arduino. Generalmente estos Shields utilizan un bus de comunicaciones I2C o SPI para controlar desde el Arduino las nuevas I/O por lo que hay que fijarse en que bus utiliza el shield en concreto ya que según cual sea dejará sin poder utilizar unas determinadas entradas de Arduino. En el vídeo incluido a continuación, se muestra como con uno de estos expansores de entradas, es posible utilizar hasta 8 entradas como entradas de interrupción. Esto se consigue ya que cada puerto del expansor (8 entradas/salidas) tiene asociada una patilla de generación de interrupción (de manera que si hay un cambio en cualquier entrada del puerto se genera una señal de interrupción). Por lo tanto, es tan sencillo, como conectar esta salida de interrupción a una entrada de interrupción de Arduino y cuando se produzca una señal leer el puerto completo para detectar cual ha sido la que cambió. Trabajar de esta forma, con interrupciones  evita tener que chequear el puerto en cada ciclo de programa.


jueves, 2 de agosto de 2012

IOExpander un nuevo Shield de Arduino que permite manejar 32 I/O mediante I2C

El nuevo Shield IOExpander permite manejar 32 pines de I/O configurables a través I2C. Esta placa se basa en el en el chip de Microchip MCP23017. Este chip incorpora 2 puertos, un puerto A y un puerto B, cada uno de ellos de 8 I/O configurables, cada pin de estos puertos se puede configurar como entrada o como salida. Además este chip incorpora la funcionalidad para generar una señal de interrupción en un pin INTA/INTB adicional, uno por cada puerto, de forma que si se produce un cambio en una entrada del puerto A, se genera una señal de interrupción en el pin INTA y de igual forma ocurre con el puerto B.


Siguiendo esta funcionalidad, las 32 I/O que incorpora este Shield, están organizadas en 4 puertos ya que incorpora 2 chips. Es decir, un chip A incorpora un puerto A y un puerto B de 8 I/O y a su vez el chip B incorpora otro puerto A y otro puerto B. Para el control de este Shield se ha desarrollado una librería compatible con el IDE de desarrollo de Arduino 1.0.1. Esta librería incorpora funciones para realizar las funciones principales de forma sencilla, entre ellas se encuentran configurar el modo de los pines, escribir en un puerto o pin determinado, leer de un puerto o pin determinado, habilitar la interrupción desde un determinado pin de un puerto dado.


El Shield, está preparado para poder ser apilado, de forma que se pueden emplear varios de estos al mismo tiempo, gracias a un dipswitch incluido que permite configurar la dirección I2C de cada chip. Posteriormente, a través de el método begin de la librería es posible configurar la dirección de cada uno de los chips en el software.


jueves, 5 de abril de 2012

Blue Tooth con Arduino

Alberto Bordonado, ha realizado un estupendo trabajo en el que ha desarrollado un sistema donde se realiza la comunicación bidireccional de una placa Arduino con un PC a través de un interfaz BlueTooth. La imaginación me llena la cabeza de ideas... un dataloger inalámbrico, control de dispositivos remotos en casa a través de tu PC o móvil... en fín son miles las cosas que me vienen a la mente, es cuestión de dejarse llevar un poco, cosa que se me da muy bien, jejeje.

Aquí os dejo la referencia al foro donde se ha desarrollado el proyecto, por cortesía de Alberto Bordonado.

lunes, 2 de enero de 2012

Comenzando por lo Básico (2): "Diseños basados en microcontrolador"

En la última entrada se introdujeron los conceptos que se emplearán en el blog para referir a diferentes tipos de equipo que comúnmente se pueden encontrar en la industria. Como se comentó, desde el punto de vista del control podemos encontrar, partiendo desde lo más sencillo a lo más complejo:

  • Electrónica pura
  • Diseños basados en microcontrolador
  • Electrónica Reconfigurable
  • PLCs
  • PCs industriales

Continuando con la descripción de estos equipos, hoy voy a describir los diseños basados en microcontrolador.

Diseños basados en microcontrolador: Cuando se habla de diseños basados en microcontrolador, normalmente nos referimos a placas electrónicas que incorporan para su funcionamiento un microcontrolador, de cualquier tipo o marca. La ventaja de este tipo de diseño, es su versatilidad, ya que un microcontrolador no es más que un minicomputador que integra la RAM, ROM, Memoria de programa y datos (flash), CPU, entradas/salidas digitales y analógicas y un conjunto de periféricos que podemos emplear en los programas, como son: Convertidores Analógico Digital, Temporizadores, Contadores, Dispositivos de interrupción externos, unidades de comunicación serie universales USART, unidades de comunicación UART de sistemas específicos como I2C, SPI, CAN, Ethernet,etc.

El uso más común de estos microncotroladores es centralizar el control del sistema recibiendo señales a través de las entradas digitales o analógicas, y empleando las salidas digitales y analógicas para mandar señales al resto del circuito de forma que estas decisiones se toman en función de la lógica programada en el microcontrolador. Por lo general, en las entradas del microncontrolador se conectan sensores que permiten obtener información acerca del entorno, o botones que permiten a un operador mandar señales de usuario al sistema, y las salidas se emplean para realizar una acción sobre sistemas de actuación como diodos leds, motores, displays, etc.

Estos microcontorladores pueden ser de tipos muy sencillos, básicos y baratos como los archiconocidos 16F84 ó su hermando mayor el 16F876A ambos de microchip. Se trata de microcontroladores de 8 btis, sencillos y fáciles de programar dada su arquitectura RISC cuyo repertorio de instrucciones (ensamblador) es muy reducido y por tanto fácil de manejar. Son válidos para la mayoría de los proyectos que se puedan plantear, por poner dos ejemplos de uso, las viejas tarjetas programables empleadas para piratear los dispositivos de Canal+ empleaban el microcontrolador 16F84 y muchos otros proyectos de electrónica sencilla como el robot para principiantes Skybot emplea el microcontrolador 16F876A. Microchip es una de las marcas lideres en el campo de los microcontroladores ya que tienen una amplia gama, cuyas especificaciones permiten encontrar uno que cubra los requisitos de una determinada aplicación, por un precio muy ajustado. Dada la enorme popularidad de estos microcontroladores y su bajo coste existe multitud de proyectos, esquemas y páginas dedicadas a este tema en la Web, aquí os dejo una página con recursos sobre microchip.

Otros de los microcontroladores de 8 bits más famosos del momento, son los pertenecientes a la familia AVR de ATEML. El uso de los microcontroladores ATMEGA 128/328/1280/2560 en las placas de prototipo ARDUINO han dado a conocer sus altas prestaciones y han popularizado el uso de los bootloaders. Las arquitecturas AVR como estas, están especialmente diseñada para ejecución eficiente de código C. Esto supone una gran ventaja sobre los PIC en diseños con un alto requerimiento de complejidad en el control, aunque los microcontroladores PIC pueden ser programados en C hay que tener cuidad con ciertos detalles. Entre otras cosas, hay que tener especial cuidad con la pila del microcontrolador, cuando se llama a una función o se está evaluando una sentencia if, se van apilando resultados intermedios, parámetros y direcciones de retorno en la pila. La pila de los microcontroladores PIC es de 8 niveles, por lo que el uso indiscriminado de estos mecanismos, puede dar lugar a que la pila se llene no pudiendo almacenar más valores y en consecuencia obtener comportamientos aparentemente ilógicos. Esto no ocurre con los microcontroladores ATMEGA de la familia AVR cuya arquitectura Hardvard les proporciona una memoria de datos y una memoria de programa independientes, de esta manera son capaces de utilizar una pila dinámica en la memoria de datos SRAM (RAM estática)

Además de las dos comentadas, existen muchas otras marcas que se dedican a fabricar microcontroladores como ST, Freescale antes perteneciente a Motorola, Intel, National Semiconductors, entre otros. También existen arquitecturas de microcontroladores de 16 bits y 32 bits que permiten realizar sistemas más complejos con mayor necesidad de cálculo, mayores requerimientos de velocidad o necesidad de periféricos avanzados como UART extra, CAN ó Ethernet. Estas arquitecturas son conocidas como ARM, en esta familia se incluyen microcontroladores como los Cortex-M3 ampliamente utilizados por su buen equilibrio entre simplicidad, coste y potencia, como ejemplos de uso podemos encontrar el robot uXbot y un proyecto imitador de ARDUINO llamado MAPLE y que ofrece una buena alternativa cuando ARDUINO no dá la talla. Las arquitecturas ARM de ATMEL ofrecen un excelente abanico de funcionalidades, por ejemplo el microcontrolador SAM7X512 empleado en el proyecto NetDuino, otro imitador de ARDUINO, en este caso incorpora un RunTime del Micro Framwork 4.1 de .NET lo que nos permite programarlo en C# a través del IDE de Microsoft Visual Studio Express.

Otro problema clásico en la programación de microcontroladores es la necesidad de una placa entrenadora. Estas llamadas placas entrenadoras son las tradicionalmente utilizadas para grabar los programas en las las memorias EPROM o EEPROM de los microcontroladores, además estas placas suelen ser caras y es complejo programar el microcontrolador ya que para ello hay que extraerlo de la placa de aplicación e introducirlo en la entrenadora cada vez. No obstante, para solucionar este problema se suelen emplear los conocidos bootloader, que no son más que unos programas que preparan lo básico en el microcontrolador para que esté listo para funcionar. Estos bootloader son grabados en los microcontroladores inicialmente y a partir de ese momento permiten grabar nuevos programas en el chip a través del puesto serie. Esta funcionalidad se debe a que en cada reinicio, el bootloader encuesta el puerto serie del microcontrolador, en caso de haber alguien a la escucha (software de programación), recoge los datos enviados por el software y los mete en una dirección de memoria del microcontrolador que usa como memoria de inicio de programa, en caso de que no haya datos disponibles en el serie o de que ya se haya terminado de grabar el programa salta a esa dirección de inicio y ejecuta el código que haya a partir de ella. De esta manera es posible programar a posteriori el microcontrolador a través del puerto serie de una forma muy simple y cómoda. En este principio es en el que se basan los diseños comentados anteriormente como ARDUINO, NetDuino, uXbot, MAPLE, etc. Para ello, proporcionan un IDE de desarrollo que permite escribir el código en lenguajes de alto nivel y permiten grabar los programas generados en chips que tenga cargado el correspondiente bootloader. De esta manera el problema se reduce a grabar un único programa mediante la tarjeta entrenadora, el bootloader, y el resto ya serán grabados empleando un protocolo serie a través de la USART.

A pesar de estas pequeñas cuestiones, los diseños basados en microcontrolador siguen siendo una alternativa segura y muy flexible con respecto a los diseños basados únicamente en componentes electrónicos no programables. Siguen ofreciendo una alta estabilidad, siempre que se haya verificado la parte electrónica y que se haya comprobado adecuadamente que no existen posibilidades de que la pila del microcontrolador se llene, lo que provocaría comportamientos anómalos. Aún así, la verificación de estos sistemas es compleja, dado que se habrá de tener en cuenta toda posible sucesión de eventos, incluyendo aquellos que pueden producirse de forma imprevista o asíncrona, como una interrupción interna provocada por un timer, o bien una interrupción externa provocada por las comunicaciones o por una entrada de interrupción. Una solución, para que no se apilen interrupciones solapadas puede ser inhibir las inrerrupciones cuando se está atendiendo una de ellos. Para supervisar que el comportamiento sea adecuado, los microcontroladores incorporan los Watchdog Timer que permiten reiniciar el sistema en caso de que quede en un estado anómalo.

En resumen, la electrónica basada en microcontrolador permite una corrección de errores mas flexible ya que en muchos casos se puede realizar a través de una actualización del software, y permite realizar operaciones mucho más complejas de una forma más sencilla. Como desventaja, requieren de una mayor formación ya que es necesario tener buenos conocimientos de electrónica, al igual que en el caso de los sistemas basados en electrónica pura, y además requiere conocimientos de programación y nociones de arquitectura de Computadores para poder sacar el máximo partido al microcontrolador. Sin ninguna duda, esta es la opción por la que se está decantando el mercado actualmente, por tratarse de una opción intermedia entre los PLC y la electrónica pura, son flexibles por ser programables como un PLC y económicos como los circuitos basados en electrónica pura.

Más adelante veremos en detalle algunas de las múltiples cuestiones que han aparecido hoy como las comunicaciones, los bootloader, el acople de sensores y actuadores o el uso de los periféricos de los microcontroladores.