{"id":2072,"date":"2014-12-12T14:00:09","date_gmt":"2014-12-12T14:00:09","guid":{"rendered":"http:\/\/robots-argentina.com.ar\/didactica\/?p=2072"},"modified":"2021-12-20T14:05:49","modified_gmt":"2021-12-20T14:05:49","slug":"el-propeller-un-microcontrolador-nada-habitual","status":"publish","type":"post","link":"https:\/\/robots-argentina.com.ar\/didactica\/el-propeller-un-microcontrolador-nada-habitual\/","title":{"rendered":"El Propeller, un microcontrolador nada habitual"},"content":{"rendered":"

por <\/Eduardo J. Carletti<\/b><\/small><\/b><\/p>\n

¿Qué es el Propeller?<\/b><\/p>\n

El Propeller es un microcontrolador producido por Parallax Inc<\/a>. Como muchos chips de este tipo, posee una sección de proceso, generación de reloj, contador de sistema, puertos de entrada\/salida, memoria RAM y ROM… pero aquí termina toda similitud con los microcontroladores conocidos.<\/p>\n


\n
\n<\/center><\/p>\n

El Propeller posee una novísima arquitectura, que contiene ocho procesadores que trabajan cooperativamente y comparten los pines de salida y otros recursos.
\nCada uno de estos 8 procesadores —a los que Parallax ha bautizado \u00abcog\u00bb— es de 32 bits, con una velocidad de proceso de 20 MIPS (millones de instrucciones por segundo) usando un pulso de reloj de 80 MHz. Es decir, en un momento en que están trabajando todos los cogs, tenemos una capacidad de proceso de 160 MIPS.
\nCada procesador tiene su propia RAM local de 2 Kb (512 registros de 32 bits). También existe una memoria común, compartida, que se divide en dos secciones: una RAM de 32 Kb y una ROM de 32 Kb.
\nLa ROM contiene rutinas preprogramadas, como la de arranque o \u00abbootstrap\u00bb, un interpretador y recursos tales como generadores de caracteres, tablas matemáticas, etc.
\nPero no es regrabable y no está pensada para contener el programa de usuario.<\/p>\n

¿Entonces… cómo funciona esto?<\/b><\/p>\n

Uno se pregunta enseguida… ¿cómo se programa este chip? Sin memoria de programa reprogramable, como las flash que son habituales en los microcontroladores de hoy, ¿dónde se alojan las instrucciones del microcontrolador, es decir, lo que hemos programado?
\nVeamos el concepto de Parallax para la programación de este microcontrolador.<\/p>\n

Bootstrap o rutina de arranque<\/b><\/p>\n

Por cierto, no es una novedad para los diseñadores con microcontroladores: una pequeña rutina preprogramada se ocupa de cargar el programa principal en el chip.
\n¿Pero dónde se guarda este programa principal?
\nMuchos microcontroladores que conocemos cargan su programa en la memoria flash, pero en el Propeller, como en las computadoras convencionales del tipo de nuestra PC, el programa se instala en la RAM. El programa de arranque que reside en la ROM se comunica a través de una interfaz serie (puede ser una interfaz serie convencional o transformada a USB por un chip convertidor) y descarga el programa en la RAM.
\n\u00abAh, pero entonces este chip sólo funciona conectado a una computadora, para que ésta le envíe el programa…\u00bb
\nNo necesariamente: una vez probado y en funcionamiento, el programa se aloja en una memoria externa EEPROM de tipo serie desde donde el Propeller, en el arranque, copia el programa a la RAM. Por esta razón, casi siempre veremos asociado al Propeller con una memoria EEPROM serie de capacidad suficiente, como la
24LC256<\/a> (32K x 8).
\nInteresante.<\/p>\n

Secuencia de arranque<\/b><\/p>\n


\n
\nPlaca de prueba del Propeller<\/b><\/font>
\n<\/center><\/p>\n

Después del inicio (reset), el Propeller arranca funcionando con un reloj en modo lento (de unos 20 KHz), espera 50 milisegundos, pasa el reloj a modo rápido (de unos 12 MHz), y entonces comienza a ejecutar su rutina interna de arranque, o Boot Loader, en el procesador número 0 (cero).
\nA través de los pines P30 y P31, esta rutina observa si existe comunicación con un procesador principal o \u00abhost\u00bb, tal como una PC. Si esta comunicación se establece, se genera un intercambio con el programa en la PC, que resulta en la descarga de un programa hacia la RAM principal o, alternativamente, hacia la EEPROM externa auxiliar, de 32 Kb.
\nSi no se detecta la presencia de una computadora principal que aporte el programa, la rutina de arranque busca una EEPROM serie exterior en los pines P28 y P29. Si esta memoria existe, copia su contenido completo en la memoria RAM del Propeller.
\nSi no se pudo comunicar con una computadora principal, y tampoco detecta esta memoria EEPROM, el Propeller pasa a un modo de apagado con todos los pines definidos como entradas.
\nSi en cambio se logró descargar el programa a la RAM, ahora el procesador 0 (o cog 0) carga el interpretador y comienza a correr el código del usuario.<\/p>\n

¿Interpretador? Oh, oh…<\/b><\/p>\n

¿Cómo que corre un interpretador, se pregunta uno de inmediato? ¿No hay un código de programa en idioma binario? ¿Qué clase de microcontrolador es éste?
\nTranquilos. El programa se puede componer de instrucciones en Spin, que es un lenguaje de alto nivel específico del Propeller que corre por medio de un interpretador, y también de componentes de bajo nivel, escritos en el lenguaje ASM del Propeller.
\nTodo lo que está en lenguaje Spin es interpretado por un cog en el que corre el interpretador, mientras que lo que aparezca en idioma binario (compilado a partir del ASM de Propeller) se ejecuta en otro cog.
\n


\n