Tutorial Microcontroladores
Microcontroladores
OTP (One Time Programming)
Cuando un microcontrolador con EPROM es encapsulado en una cápsula plástica opaca, se lo denomina microcontrolador programable una única vez u OTP. Ya que la luz ultravioleta no puede pasar a través de la cápsula, la memoria no puede ser borrada. El circuito integrado dentro del chip de un MCU OTP es idéntico al que viene encapsulado con una ventana de cuarzo. El encapsulado de plástico es mucho más barato que el cerámico con ventana de cuarzo. Los MCUs OPT son ideales para prototipos, primeras producciones y aplicaciones de pequeño volumen. En la actualidad este tipo de memoria es una de las más usadas tanto por el hobbista como por el profesional de la industria.
EEPROM (Electrical Ereasable PROM)
La EEPROM puede borrarse eléctricamente por comandos en un microcontrolador. A fin de grabar un nuevo valor en una posición de memoria, debemos primero borrar dicha posición y luego realizar una serie de pasos de programación. Esto es algo más complicado que alterar una posición de RAM que simplemente puede ser escrita con el nuevo valor por la CPU. La ventaja de la EEPROM radica en el hecho de ser una memoria no-volátil. Una EEPROM no pierde su contenido al apagar su fuente de alimentación. A diferencia de la RAM, el número de veces que una posición de memoria EEPROM puede ser borrada y reprogramada es limitado (típicamente 10000 ciclos), mientras que el número de lecturas es ilimitado. Esta facilidad de la no- volatilidad de los datos almacenados en EEPROM, constituyen una ventaja muy interesante a la hora de almacenar “tablas temporales” cuyos datos Irán variando según una “personalización” para cada usuario en su aplicación.
En Freescale, la línea HC05 dispone de algunos dispositivos con memoria EEPROM, tal como el MC68HC805K3.
Memoria tipo “FLASH”.
La memoria de tecnología “FLASH”, es una memoria del tipo “no-volátil”, similar en algunos aspectos a las de tecnología EEPROM, pero con muchas ventajas a estas últimas, que la han hecho en la práctica una memoria muy utilizada en los modernos microcontroladores de las grandes marcas. La tecnología FLASH, es del tipo borrable y programable eléctricamente al igual que una EEPROM, pero a diferencia de esta se han reducido a la mínima expresión los circuitos auxiliares de acceso orientados al “byte”, esto significa que mientras en una memoria EEPROM es posible borrar un solo Byte en una posición determinada a lo largo de toda la memoria (acceso orientado al byte), en una memoria con tecnología FLASH no es posible acceder al borrado de un solo byte en forma arbitraria, ya que no se cuenta con los mecanismos de acceso (circuitos de direccionamiento) que permitan el borrado de un byte independientemente del resto.
En la práctica, este inconveniente en el borrado, se compensa con mayor esfuerzo en “software” por parte del MCU (por lo general, muchos MCUs ya tienen incorporadas rutinas internas que facilitan los procedimientos de borrado y programación de este tipo de memorias), y una mayor velocidad en la programación de la misma. El ahorro que se produce por no utilizar la circuitería adicional de acceso, se ve reflejado en un menor costo de implementación final de este tipo de memorias en un MCU, además de una mayor densidad de circuitos de memoria versus superficie ocupada por los mismos.
Tal es así, que mientras los MCUs con memoria del tipo EEPROM eran considerados una “rara avis” en la mayoría de las aplicaciones masivas de consumo, por su elevado costo (2 ó 3 veces más caros que las versiones similares en OTP), en los MCUs FLASH, van creciendo día a día las aplicaciones para ellos, ya que su costo no es significativamente mayor a los difundidos OTP (entre un 20 a 30 % superior a estos).
Entre otras de las muchas ventajas que presentan los MCUs FLASH, es la de posibilitar la programabilidad “En – Circuito”, esto significa que no es necesaria la remoción del microcontrolador FLASH del circuito en donde esté formando parte, ya que estos modernos MCUs poseen pines especiales para “comunicarlos” con el mundo exterior (vía una PC) y permitir programarlos, borrarlos y actualizarlos de forma sencilla y segura. Además, muchos de ellos poseen circuitería interna que elimina el uso de tensiones elevadas especiales, como las utilizadas en las memorias del tipo EPROM, EEPROM.
La durabilidad (número ciclos de borrado - programación) en las tecnologías FLASH de muchos fabricantes es similar a la de las EEPROM. Por ejemplo, la familia HC908 FLASH de Freescale permite unos 10.000 ciclos de Borrado - Programación a una temperatura de funcionamiento de - 40 ° C o 125 ° C (la peor condición) y de más de 100.000 ciclos a temperaturas de entre 20 ° C y 30 ° C.
En capítulos posteriores, veremos en detalle las ventajas de esta nueva tecnología de memoria.
Dispositivos de I/O como un tipo de memoria.
La información del estado y control de I/O (Input / Output o Entrada / Salida) es un tipo de posición memoria que permite al sistema de computadora intercambiar información desde o hacia su mundo exterior. Este tipo de memoria es poco usual, ya que la información puede ser "monitoreada" y / o alterada por algún otro además de la CPU.
Los tipos más simples de posiciones de memoria de I/O son un simple "port" (puerto) de entrada y un simple port de salida. En un MCU de 8 bits, un simple port de entrada (input) contiene 8 pines (por lo general un port típico tiene 8 pines, pero como veremos más adelante, en algunos MCUs la cantidad puede ser inferior a 8 en algún port en particular) que pueden ser monitoreados (leídos) por la CPU. Un simple port de salida (output) contiene 8 pines (por lo general un port típico tiene 8 pines, pero como veremos más adelante, en algunos MCUs la cantidad puede ser inferior a 8 en algún port en particular) que pueden ser controlados (escritos) por la CPU.
En la práctica, la implementación de un port de salida es un óctuple "data latch" y las realimentaciones que permitan a la CPU leerlo. La figura 3-1 muestra el circuito equivalente para un bit de una RAM, un bit de un port de entrada y un bit de un típico port de salida que puede ser leído.
En un MCU real, estos circuitos deberán repetirse ocho veces para armar una simple posición de memoria RAM de 8 bits, port de entrada o port de salida (o menos según la cantidad de pines del port). En la figura 3-1 los half flip - flops (HFF) son simples flip - flops transparentes. Cuando la señal de reloj (C) está en alto, los datos pasan libremente de la entrada "D" a las salidas Q y Q (Negado). Cuando la entrada de reloj es baja, el dato es sostenido en las salidas Q y Q (Negado).
Fig. 3-1 – Circuitos de Memoria e I/O.
Cuando la CPU almacena un valor en la dirección que corresponde al bit de RAM de la figura 3-1 (a), se activa la señal WRITE para almacenar el dato proveniente de las líneas del bus de datos en el flip-flop (1). Este almacenamiento es estático y retendrá el valor escrito hasta que un nuevo valor sea escrito en esta posición (o se apague la fuente de alimentación). Cuando la CPU lee en la dirección de este bit de RAM, se activa la señal READ, que habilita al multiplexor (2). El multiplexor acopla el dato de la salida del flip-flop con la línea del bus de datos. En una MCU real, los bits de RAM son mucho más sencillos que los mostrados, pero su funcionamiento es equivalente al del circuito visto.
Cuando la CPU lee un valor en la dirección que corresponde al bit del port de entrada de la figura 3-1 (b), se activa la señal READ que habilita al multiplexor (3). El multiplexor acopla el dato del buffer con la línea del bus de datos. Una escritura en esta dirección no tiene efecto alguno.
Cuando la CPU almacena un valor en la dirección que corresponde al bit del port de salida de la figura 3-1 (c), se activa la señal WRITE para almacenar el dato proveniente de las líneas del bus de datos en el flip-flop (4). La salida del latch, llega a través de un buffer (5) al pin de salida como una señal READ, que habilita al multiplexor (6). El multiplexor acopla al dato desde la salida del flip-flop con la línea del bus de datos.
Registros Internos de Estado y de Control
Los registros internos de estado y de control son una versión especial de posiciones de memoria de I/O. Con el objeto de monitorear y controlar pines externos, los registros de estado y de control monitorean y controlan los niveles lógicos de las señales internas.
Mire en la figura 3-1 y compare un bit de RAM con uno de port de salida. La única diferencia es que el port de salida posee un buffer que conecta al estado del flip-flop con el pin exterior. En el caso de un bit interno de control el buffer de salida está conectado a alguna línea de control al igual que el pin exterior.
Los microcontroladores M68HC05 incluyen pines de I/O de ports paralelos de propósito general. El sentido de cada pin se puede programar por un bit de control accesible por programa. La figura 3-2 presenta la lógica para un pin de I/O bidireccional incluyendo un latch port de salida y un bit de control de dirección de dato (DDR bit).
Un pin de port se configura como salida si en su correspondiente DDR bit es escrito un uno lógico. Un pin de port se configura como entrada si en su correspondiente DDR bit es resetearse, todos los DDR bits son borrados, lo que configura a todos los pines como entrada. Los DDRs pueden ser tanto escritos como leídos por el procesador.
Fig. 3-2 – Puerto de I/O con Data Direction Control.
Mapas de Memoria
A veces hay miles de posiciones de memoria o más en un sistema de MCU, es importante entonces contar con un medio conveniente para no perder de vista su contenido. Un mapa de memoria es una representación gráfica de la totalidad de la memoria del MCU. La figura 3-4 es un típico mapa de memoria que nos presenta los recursos de memoria del MC68HC705J1A.
Los valores hexadecimales de cuatro dígitos del lateral izquierdo de la figura 3-4 son direcciones que van comenzando desde $0000 arriba y en forma creciente hasta $07FF abajo. $0000 corresponde a la primera posición de memoria (seleccionada cuando la CPU pone cero lógico en todas las líneas de dirección del bus de direcciones). $07FF corresponde a la última posición de memoria (seleccionada cuando la CPU pone uno lógico en todas las líneas de dirección del bus interno de direcciones). Los textos dentro del rectángulo vertical identifican el tipo de memoria (RAM, EPROM, registros de I/O, etc.), residentes en un área de memoria en particular. Es necesario ver con mayor detalle a algunas áreas, tales como la de registros de I/O, ya que es importante conocer el nombre de cada posición individual. El rectángulo vertical completo puede interpretarse como una fila de 2048 (ó 2 a la 11) casillas de palomas (posiciones de memoria). Cada una de éstas 2048 (ó 2 a la 11) posiciones de memoria contiene 8 bits de datos como se muestra en la figura 3-3.
Fig. 3-3 – Detalle expandido de una locación de memoria.
Las primeras 256 posiciones de memoria ($0000-$00FF) pueden ser accedidas por la computadora en un modo de direccionamiento directo. Discutiremos los modos de direccionamientos más detalladamente en el capítulo 5. En direccionamiento directo, la CPU asume que los dos dígitos hexadecimales de mayor peso de una dirección son siempre cero; así, sólo son necesarios los dos dígitos de menor peso de la dirección para explicitarla dentro de una instrucción. Los registros de I/O del chip y 64 bytes de RAM se ubican en el área de memoria $0000-$00FF. En el mapa de memoria (figura 3-4) la expansión del área de I/O identifica la posición de cada registro con los dos dígitos de menor peso de su dirección en lugar de usar los cuatro dígitos completos. Por ejemplo, el valor hexadecimal de dos dígitos $00 aparece a la derecha del registro de datos del port A, que realmente está en la posición la dirección $0000 del mapa de memoria.
Fig. 3-4 – Mapa de Memoria Típico.