Introducción al Microcontrolador Multinúcleo "Propeller"
El microcontrolador "Propeller" de la compañía "Parallax" es un microcontrolador de 32 bits con ocho núcleos o procesadores (si, ocho!) que posibilitan una verdadera aplicación multitarea. La diferencia con microcontroladores de un solo núcleo es que éstos últimos necesitan hacer uso de código altamente optimizado y técnicas avanzadas de programación (mediante el uso de interrupciones, planificadores de tareas o sistemas operativos de tiempo real), a fin de copar con los requerimiento de los llamados sistemas de tiempo real o sistemas activados por eventos, los cuales básicamente requieren una respuesta inmediata a los eventos externos. Con un microcontrolador multinúcleo como el Propeller, básicamente se puede lograr el mismo resultado sin recurrir a las técnicas mencionadas, gracias sus ocho núcleos que tienen la capacidad de correr de manera simultánea y compartir información entre ellos.
Con cada uno de sus núcleos corriendo a una velocidad de hasta 80 MHz y una velocidad de procesamiento de 20 millones de instrucciones por segundo (MIPS) , el Propeller provee en total una velocidad de procesamiento de hasta 160 MIPS con sus ocho núcleos.
En este artículo le damos un primer vistazo a la arquitectura interna de este microcontrolador, sus características principales, su programación y las herramientas disponibles para trabajar con el mismo.
Múltiples Núcleos
Ahora que se han tornado muy comunes las computadoras de escritorio con microprocesadores de múltiple núcleo, quizas no suene a gran cosa, pero un microcontrolador multinúcleo sí es algo muy raro en el ámbito de los sistemas embebidos. El microcontrolador Propeller cuenta con ocho núcleos de 32 bits llamados "Cogs" y cada Cog posee las siguientes características:
- Un área de memoria RAM para programa y datos de 2KB (para cada Cog)
- Dos contadores avanzados con PLLs.
- Hardware para generación de video.
- Acceso simultáneo al puerto de entrada/salida générico de 32 bits en pines individuales, con su registro de E/S y registro de dirección de E/S.
- Registros de propósito especial.
- Acceso a la memoria principal de 64 KB en el microcontrolador.
(Haz click aquí para ampliar el gráfico)
El Propeller no cuenta con interrupciones. Si recordamos un poco, el propósito de las interrupciones en otros microcontroladores de un sólo núcleo es brindar al sistema la posibilidad de reaccionar a eventos asíncronos (es decir, eventos que no se sabe con certeza cuando pueden presentarse) "en tiempo real"; por ejemplo, en el caso de que el microcontrolador esté realizando una serie de cálculos y de pronto, empiecen a llagar datos seriales por su puerto UART. En este caso, el microcontrolador debe cambiar rápidamente la ejecución del programa principal y atender rápidamente la rutina de interrupción a fin de no perder los datos seriales que arriban. Posteriormente el microcontrolador retorna rápidamente al programa principal para continuar con los cálculos que estuviera realizando en este ejemplo hipotético.
El Propeller no necesita interrupciones porque la idea es que con sus ocho procesadores capaces de correr de manera paralela e independiente, uno de los procesadores se destina netamente al monitoreo y manejo de la comunicación serial (UART) mientras que otro procesador o Cog se encarga de realizar los cálculos; quedando todavía seis procesadores más para otras tareas independientes o relacionadas. Cada Cog puede ser inciado o detenido independientemente en cualquier momento de la ejecución del programa con instrucciones específicas para este proposito.
Otra característica interesante del Propeller es que cuenta con un bloque de memoria principal RAM de 32KB que puede ser usada para compartir información entre los Cogs y un bloque de 32KB de memoria ROM la cual almacena tablas de datos muy útiles:
- Un set de caracteres para generación de video
- Tabla de logaritmos
- Tabla de antilogaritmos
- Tabla de funciones trigonométricas.
El set de caracteres para generación de video permite generar texto con gran facilidad en un monitor de video y las tablas de logaritmos, antilogaritmos y funciones trigonométricas facilitan enormemente cálculos que de otro modo son complicados y consumen mucho tiempo de procesamiento en otros microcontroladores sin estas facilidades.
El Hub
El Hub es el elemento que coordina el acceso de los ocho Cogs a los recursos compartidos, especialmente la memoria RAM principal; para ello el Hub brinda acceso secuencial a cada Cog, localizando una franja de tiempo para cada uno, a fin de que estos puedan acceder a los recursos compartidos de manera exclusiva, preservando de esta manera la integridad de los datos del sistema. Esto evita que, por ejemplo, mientras un Cog va modificando una porción de la memoria RAM con información actualizada, otro Cog no empice a leer la misma porción de memoria hasta que el primero haya terminado de actualizarla, evitando de esta manera que el segundo Cog lea información en parte antígua y en parte actualizada.
¿Por Qué el Nombre "Propeller"?
Aparentemente debido a que el Hub asemeja un motor con hélices que gira conectándose secuencialmente con cada Cog, al procesador se le ha puesto el nombre de "Propeller", que en español se traduce como propulsor o hélices.
Velocidad de Reloj
El Propeller puede correr con su propio reloj RC interno si no se necesita mucha velocidad y precisión de tiempo (~12 MHz o ~20 kHz). Alternativamente soporta un cristal externo entre 4Mhz - 8 Mhz o una señal de reloj de alimentación externa, que un conjunción con su PLL interno puede llegar a multiplicarse hasta 80Mhz, posibilitando que cada Cog pueda ejecutar hasta 20 MIPS, haciendo un total de 160 MIPS con los ocho Cogs! Comparemos esto por ejemplo con la última linea de procesadores Microchip PIC32 que proveen una velocidad de procesameinto de hasta 80 MIPS, no deja de ser impresionante.
Hardware Mínimo Para el Propeller
El circuito más simple para el Propeller básicamente consta del Propeller, una fuente de alimentación de 2.7V a 3.3V y una conexión serial a la PC. La conexión serial a la PC es requerida para la carga del programa al microcontrolador y puede ser realizada de dos maneras:
- Mediante un circuito de interfaz al puerto serial RS-232 de la PC
- Mediante un chip convertidor UART a USB (típicamente el FT232) a uno de los puertos USB de la PC (puerto serial virtual).
Para que el circuito funcione de manera independiente debe incluirse una memoria EEPROM externa como la 24LC256 para el almacenamiento de programa, esto debido a que el Propeller no cuenta con memoria interna de programa flash u otra similar que sea no volátil. Si no se añade la EEPROM externa, se debe cargar el programa directamente de la PC a la RAM interna del microcontrolador cada vez que el sistema se desenergiza y se energiza nuevamente.
Circuito Básico Para el Propeller
En el circuito básico, el Propeller Clip o Plug es una interfaz USB a UART basado en el chip FT232 que permite la conexión serial del Propeller al puerto USB de la PC. Alternativamente se lo puede conectar directamente al puerto RS-232 de la PC mediante el siguiente circuito:
Circuito de Conexión Serial RS-232 a la PC
Lenguaje Propio de Programación: Spin
El Propeller cuenta con su propio lenguaje de programación llamado Spin. Al ser Spin un lenguaje interpretado, es interesante notar que el chip posee su propio intérprete grabado en una sección de su memoria ROM interna. También puede programarse el Propeller en su propio lenguaje assembler, sin embargo al ser Spin un lenguaje muy eficiente, no es necesario el uso del assembler excepto en ciertos casos específicos.
El fabricante Parallax provee tambien gratuitamente un Entorno de Desarrollo Integrado (EDI), el cual permite escribir los programas, compilarlos y grabarlos a la memoria EEPROM externa del Propeller. La siguiente fotografía muestra el ejemplo de un programa en lenguaje Spin, el cual simplemente prende y apaga alternadamente un LED conectado al pin 16 del Propeller:
No se necesita un programador especial para el Propeller, ya que éste utiliza una conexión serial mediante el puerto RS-232 o el puerto USB (puerto serial virtual) para comunicarse con la PC y la carga del código de programa se realiza mediante su propio Bootloader (Cargador de Arranque) grabado también en la memoria ROM interna. Cuando el chip es energizado, el Bootloader busca comunicarse con la PC serialmente, a fin de bajar el programa desde la PC a su memoria RAM; de otro modo, busca comunciarse con la memoria EEPROM externa a fin de ver si puede bajar una imagen de programa de la misma. Toda esta funcionalidad está programada en el Bootloader y funciona de manera transparente, sin la necesidad de preocuparse por los pormenores de su funcionamiento.
Soporte de Video
Uno de los aspectos más atractivos del Propeller es su capacidad para generar señales de video color SVGA. Con cada uno de los ocho Cogs contando con el hardware necesario para la generación de video, al Propeller le sobra potencia adicional de cálculo para realizar cómputos complejos y encargarse al mismo tiempo de la generación de múltiples señales de video para digamos, varios monitores si fuera necesario. La siguiente fotografía muestra la generación de video con la placa de experimentación "Hydra" basada en el Propeller para desarrollo de videojuegos:
Documentación
En el sitio web del fabricante "Parallax" se puede encontrar la hoja de datos, el manual del usuario conteniendo todos los diagramas de circuito y el manual del lenguaje Spin y el lenguaje assembler, junto a una gran cantidad de ejemplos. También se encuentra en el sitio una gran cantidad de "objetos" (programas modulares) listos para ser usados tal cual o incluirlos en aplicaciones propias, a modo de librerías y en una amplia gama de aplicaciones.
Toda la información pertinente al Propeller se la puede encontrar navegando los enlaces del menú enl el sitio del fabricante: www.parallax.com
En nuestra Tienda Virtual encuentras también el microcontrolador Propeller a la venta junto con sus accesorios básicos.
Conclusión
No cabe duda que el Propeller ha sido diseñado con una filosofía propia, haciendo especial énfasis en que su uso sea sencillo para los aficionados, pero a la vez se han incluido características muy particulares que cualquier diseñador profesional estaría feliz de usar en una aplicación dada.
Con un costo en origen de $us.8.- y un precio final en latinoamérica de alrededor de $us16.-, no es el microcontrolador más económico en relación de precios junto a otros de uso más popular en estas latitudes, sin embargo tampoco es demasido caro o inaccesible tomando en cuenta todas las facilidades que ofrece y que no están disponibles en otros microcontroladores. No es un precio difícil de pagar para quienes desean experimentar con sus particularidades tan únicas, como sus ocho procesadores con generador de video incluido, su alta velocidad de proceso y sus tablas matemáticas incluidas en su memoria ROM interna.
Raúl Alvarez Torrico
www.TecBolivia.com
Deseo recibir noticias de nuevos proyectos, artículos, materiales y promociones especiales.
Productos Relacionados en Nuestra Tienda Virtual
{product_snapshot:id=118|119|120|136|77}