Buscar en Google

miércoles, 2 de marzo de 2011

Capitulo I. Introducción a los microcontroladores

CAPITULO I


Introducción a los microcontroladores


Y bueno aquí largamos.  Una persona que recién se inicia en la electrónica y tiene muchas ganas de conocer nuevas cosas, normalmente tiene preguntas como: ¿que es un micro controlador? ¿Como funciona? ¿Para que sirve un microcontrolador? ¿Cuando debería utilizar un micro controlador y cuando nó? ¿Porqué se han hecho tan “famosos” en los electrónicos los microcontroladores? ¿Que tiene de mejor un micro controlador que no pueda ser hecho con una computadora?

Seguramente, éstas preguntas son básicas  y conocen su respuesta los electrónicos con cierta experiencia, así que supongo ésta primera parte les podrá resultar un poco aburrida. Sin embargo, siempre es bueno volver a las bases, y por ahí encuentran algo que a lo mejor lo veían desde otro punto de vista y descubren algo nuevo. Para los principiantes, la respuesta a estas preguntas pueden orientarlo un poco hacia donde apuntan éstas lecciones.

Así que comencemos. La primera pregunta:

¿Qué es un micro controlador?


Visto en forma externa, un micro controlador es un circuito integrado, para los que conocen algo de electrónica, visto desde afuera, no van a encontrar nada diferente a un chip de lógica como puede ser el viejo CD4001 (chip de lógica), el cual posee 4 compuertas NOR.


El chip que se ve en la figura anterior, es uno de los circuitos integrados más sencillos que se conocen. En esta “arañita” se tienen 4 compuertas lógicas.

Si vemos fotos de micro controladores de la firma microchip, notaremos que el aspecto exterior es muy similar:


Se ven que son muy parecidos ¿no es así?

Sin embargo, internamente son muy diferentes. En el caso de la segunda foto, coloqué uno de los  microcontroladores más populares, el PIC16F84 de la firma Microchip.

Para lo más viejos, que nacieron en los principios de los ‘70  (como yo) Este micro controlador es igual o más poderoso que las primeras computadoras que llegué a tocar cuando tenía 10-12 años.

En ésa época, en mi país, estaban ingresando las primeras computadoras personales. Tuve la suerte de tener mi propia CZerweny CZ1000. Todo un lujo. Era una microcomputadora que poseía un microprocesador Z80 de 1Mhz, con ¡asombrosos 2K de memoria! Como mi curiosidad era más fuerte, por supuesto que la desarmé para “espiar” como era por dentro. Tenía cerca de 20 circuitos integrados, similares a los de la foto, incluso más grandes. Había un circuito integrado que era el procesador Z80. Otro integrado encargado de administrar los periféricos (teclado y pantalla), otro integrado era la memoria ROM donde estaba guardado el sistema de la computadora, y un montón de integrados adicionales que cumplían la función de ser la memoria RAM. Cuando quería cargar algún programa para usar, tenía que utilizar los viejos casetes que demoraban varios minutos en cargar.

Ese sólo integrado mostrado en la foto, el microchip PIC16F84, que es uno viejito pero popular ya posee 1K de memoria de programa, 68 bytes de memoria RAM, 64 bytes de memoria EEPROM (para escribir configuraciones) y una velocidad de procesamiento que puede llegar a los 20Mhz (ya vamos a ver más adelante que en realidad significan 5 millones de instrucciones por segundo). Sacando que posee menos memoria RAM, respecto a lo que era la CZ1000 de aquella época, se pueden hacer más cosas con este integradito sencillo que lo que se podía hacer con la CZ1000.

Dejando la nostalgia afuera. Diré que un micro controlador, es como una pequeña computadora toda completita metida dentro de un sólo integrado. Este increíble invento, puede hacer que en muy pequeño espacio solucionemos problemas electrónicos que para resolverlos sólo con circuitos ocuparían mucho lugar o muchos componentes. Con los microcontroladores, se pueden hacer que tus placas o productos tengan su propia “inteligencia”, y que respondan a programas o softwares de la misma manera que funcionan los mejores equipos, o sistemas de computación. Salvando las distancias en las capacidades que permiten una PC o un servidor, un micro controlador puede hacer muchísimas tareas y acciones. Incluso hay cosas que un micro controlador puede ejecutar sin ningún problema, mientras que querer hacer lo mismo con una PC puede ser una tarea muy complicada o incluso imposible.

A lo mejor lo más interesante de los microcontroladores, a diferencia de los microprocesadores es que en general, la mayoría (incluso en algunos modelos) todas sus patas o pines pueden ser utilizadas como señales. Esto es, el micro controlador actúa siempre como una “caja negra”, donde según que señales, y en que tiempos aparecen en alguna de sus patas, entonces pondrá otras señales en otras de sus patas. Las acciones y condiciones de que es lo que tiene que aplicar en los diferentes pines lo hace el programa que lleva internamente.

El micro controlador que les mostré en la foto anterior, correspondía al PIC16F84 que como les decía es uno de los más viejitos. Simplemente posee esas características que les mencionaba. Y los pines sólo pueden ser utilizados de la manera descripta, como entradas y/o salidas de señales  digitales. Esto es, sólo acepta en cada uno de sus pines una señal que puede ser considerada como un 1 o un 0 lógico. Entendiendo (para el caso de ese integrado), que un cero lógico es cuando en una de sus patas hay una tensión menor que 0,7V. Mientras que un uno lógico es cuando hay en la misma una señal mayor que 2V.


En el dibujo anterior, se muestra el diagrama en bloques de lo que hay internamente en el microcontrolador PIC16F84. Se puede observar que es toda una micro computadora, donde se posee la memoria de programa, una memoria de RAM (de registros), y se puede observar los pines de entradas y salidas RA3:RA0, RB7:RB1, RB0.

Ya con las tecnologías más modernas de microcontroladores, se tienen modelos que poseen más funciones. Mayor capacidad de memoria, mayores velocidades de procesamiento y algo muy interesante: más y nuevos periféricos.

En los modelos más nuevos de micro controladores, empiezan a aparecer periféricos tales como conversores ADC, generadores de PWM, circuitos de comunicación seriales UART, USB, comunicación Ethernet. Hay una línea de micro controladores que poseen un generador de señales de RF, haciendo que directamente transmitan por radio frecuencia señales sin el agregado de hardware demasiado complicado.

Estas últimas funciones hacen mucho más poderoso a un micro controlador, ya que muchas cosas son resueltas directamente por el mismo chip, sin necesidad que el programa que hayamos grabado dentro del chip tenga que estar ejecutando las acciones o pasos, y gastando recursos del mismo para poder dar servicio a dichas funciones.

Por ejemplo, un hermano mayor del PIC16F84 es el PIC16F627. El cual posee mas o menos la misma capacidad de memoria que el PIC16F84, pero trae incorporados un comparador para señales analógicas, la comunicación serial USART, y la posibilidad de generar señales PWM y/o capturar y medir tiempos en señales con un hardware dedicado a ello, todo ésto dentro del mismo chip:




En el caso de las tecnologías de micro controladores de Texas. Está la línea MSP430, de los cuales el más modesto de ellos, trae similar tamaño de memoria que el PIC16F627. Con casi los mismos periféricos, pero con algunas ventajas importantes: El procesamiento de los datos es en 16 bits mientras que en los PIC de  la línea 16 son en 8 bits. Y la velocidad de procesamiento, en los PIC16 la máxima velocidad es de 5 millones de instrucciones por segundo, en la línea más modesta de Texas son 8 millones de instrucciones por segundo.

Sin intención de crear una discusión, sobre que marca es mejor, si Microchip, Texas o cualquier otra.  A medida que avancemos vamos a ir viendo las ventajas y desventajas (que las hay) de usar una marca u otra. Según cual sea la aplicación será que hay que observar y elegir cual modelo y marca de micro controlador se  adapta a las necesidades. Si se va a consultar al fabricante, seguro que ellos tienen muchas mas razones para decir que ellos son los mejores. Hay que aprender a observar las características de uno u otro y luego decidir.

De las líneas más nuevas de micro controladores de Microchip, hay algunos que traen mucha mayor cantidad de memoria, con capacidades mayores que 128K de EEPROM y mayores que 32K de RAM, con velocidades de procesamiento que llegan a los 40 millones de instrucciones por segundo. 

En el caso de Texas, tienen micro controladores aún más grandes, en el orden de los 512K de memoria EEPROM y más de 64K de RAM. Y velocidades de procesamiento en el orden de los 150 millones de instrucciones por segundo, estoy hablando de la línea TMS320F28xx con palabras de 32 bits. Unas verdaderas bestias peludas para resolver muchísimas aplicaciones de equipos embebidos.

Otras tecnologías, son los microcontroladores ARM que hay de muchísimos fabricantes. Estos arrancan en los 50 millones de instrucciones por segundo para arriba. Trabajan en 16 y 32 bits, y las capacidades de memoria (dentro del mismo chip) son aún mayores.

Lo que cambia, y que es un problema para muchos hobbistas y principiantes. Es que a medida que aumenta la tecnología, aumenta la cantidad de periféricos, tareas y señales simultáneas que puede manejar el nuevo micro controlador. Esto trae inmediatamente asociado, mayor cantidad de pines o patas. Entonces, cambian los tipos de encapsulados, y para muchos se le complica o se le hace imposible soldarlos.


Y ni que hablar de un micro controlador con encapsulado BGA o similares.

A no asustarse, todavía hay muchas opciones válidas para los principiantes y hobbistas con micro controladores respetables con encapsulados “soldables” fácil a mano como son los DIPs. Incluso, si tienen que usar un encapsulado del tipo TQFP o BGA existen empresas que se dedican a soldarlos. Por lo tanto, si cuando tienen que elegir un micro controlador se topan con el karma del encapsulado, que eso no sea un impedimento. Hay opciones y formas de hacerlo.

Bueno, hasta ahora les he contado un poco de historia y dado algunos pantallazos sobre el aspecto externo de los microcontroladores. También les mostré un poco que es lo que hay dentro de algunos modelos.  Viene a consecuencia de ésto la otra pregunta:

¿Cómo funciona un micro controlador?



Como les conté anteriormente, un micro controlador es como una pequeña computadora metida toda dentro de un sólo circuito integrado o micro chip. Esta pequeña computadora está diseñada para poder dar solución a pequeños equipos que requieren algo más que un hardware sencillo para funcionar o dar solución al objetivo para el que fue diseñado.

Un microcontrolador es como un empleado en una cocina dedicado y minucioso que cumple a raja tabla las recetas de cocina que le pasan para que les prepare a sus jefes. Cuando le solicitan que cocine algún plato en particular, éste tiene una receta escrita de ése plato y respeta al pie de la letra las órdenes que les dan. A un microcontrolador se le pasan las recetas y éste las cumple al pie de la letra. A diferencia de un ser humano (que puede ser el cocinero), el microcontrolador hará exactamente lo que tiene escrito que debe realizar. Si le falta algún dato en la receta, o si el microcontrolador debe elegir entre una opción u otra, éste no posee la capacidad de resolver ningún problema, excepto lo que le dice exactamente la receta. Esa receta, es el programa. Entonces, un microcontrolador es un equipo o hardware que sabe leer el programa (la receta) y cumple paso a paso lo que tiene escrito.

Como seres humanos que somos, si por ejemplo nuestra madre nos ordena limpiar el cuarto, seguramente, si es un día que está de buen humor, nos diría: Por favor, necesito que vayas a limpiar el cuarto. O también: ¡Ve inmediatamente al limpiar el cuarto! O puede haber otra forma de indicar la orden. Pero, finalmente sabríamos que hacer para limpiarlo.

En cambio, si nosotros fuésemos microcontroladores, lo primero que sucedería es que sólo reconoceríamos una forma de decir la orden. Podría ser por ejemplo Ve a limpiar el cuarto. Sin embargo, si ésa fuera la orden, no entenderíamos si nos pidieran la tarea como “Ve inmediatamente a limpiar el cuarto”. Si suponemos que somos sólo un microcontrolador, esa orden escrita ligeramente diferente no la entenderíamos. Esto que parece trivial, es algo que en los microcontroladores y en la programación se llama sintaxis. Hay una forma exacta de escribir las órdenes.

Por otro lado, deberíamos tener por escrito, exactamente cuales son los pasos que debemos dar para poder realizar la tarea de limpiar el cuarto. Dichas órdenes podrían ser:

1 - Ir al armario donde se guardan los elementos de limpieza
2 - Abrir el armario
3 - Tomar la escoba
4 - Cerrar el armario
5 - Ir al cuarto
6 - Barrer
7 - Buscar la pala para recoger la basura
8 - Recoger la basura
9 - Guardar la escoba
10 - Guardar la pala
11 - Llevar la basura al basurero


Como se ve, un microcontrolador parece que necesita órdenes “tontas” que para un ser humano son obvias (obviamente hay que abrir el armario para sacar la escoba). Sin embargo, el microcontrolador va a llegar al armario y si no le decimos que abra la puerta va a querer tomar la escoba con el armario cerrado.

Así, si se ponen a analizar más detenidamente, hay que explicar en detalle como hacer cada paso. Por ejemplo como hacer para ir hasta el armario, que camino hay que seguir. Luego, como hacer para abrirlo. Por ejemplo: Tomar el picaporte, girarlo lentamente unos 45° en sentido antihorario, tirar hacia atrás la puerta unos centímetros... Etcétera. Y lo mismo para todo el resto de las órdenes.

Si bien, a lo mejor me estoy adelantando un poco ya en la parte de programación, podemos observar que una tarea que para un ser humano es trivial y sencilla. Querer decirle todo eso a un microcontrolador como se ve, puede ser un programa de miles o millones de órdenes consecutivas. Imagínense todas las otras tareas como caminar (mover las piernas, esquivar obstáculos, etcétera), y barrer (mover las manos).

Volviendo al mundo de los microcontroladores, la receta o listado de pasos es lo que está almacenado o escrito en la memoria ROM. Para el caso de la mayoría de los microcontroladores, dicha memoria está fabricada y se muestra como memoria EEPROM o memoria Flash.

ROM significa Read Only Memory, o memoria de sólo escritura. Hay microcontroladores en los cuales se les graba o escribe por única vez el listado de tareas o programa. Entonces, el microcontrolador posee esa única tarea y durante toda su vida útil será lo único que hará: lo que está escrito en la memoria ROM.

EEPROM y Flash son también memorias de sólo lectura. EEPROM significa Electrical Erasable Programmable Read Only Memory, o memoria de sólo lectura borrable para programación en forma eléctrica. Flash es una memoria similar a la EEPROM. En ésta memoria se escribe el programa que tiene que ejecutar el microcontrolador. La ventaja de los microcontroladores con éste tipo de memoria, es que puede borrarse y volverse a escribir nuevamente (dentro de ciertos límites) con otro programa. Esto es muy útil ya que nos permite cambiar la receta de ser necesario. La diferencia entre flash y EEPROM es de tecnología. Lo que cambia es la forma de grabarlos, cambian los niveles eléctricos de tensión, y la cantidad de veces que se pueden reescribir. En las hojas de datos de cada microcontrolador, indica hasta cuantas veces se puede borrar y grabar un nuevo programa en ellos. Las cantidades normales van desde los 10000 hasta 1 millón de veces según cual sea la tecnología de memoria utilizada.

El microcontrolador entonces, cuando se lo enciende comienza a leer el contenido del programa que está escrito en la memoria flash o EEPROM, que a partir de ahora la llamaré memoria de programa.

Tal cual la receta que vimos para limpiar el cuarto, en la memoria de programa los pasos están numerados. Por lo general, se comienza con el paso número cero y se va avanzando de un paso por vez. Es como leer un libro de “elige tu propia aventura”, uno comienza leyendo por la primera página y va  avanzando, por ahí, en el libro se nos indica que si elegimos un camino u otro cambiar a una pagina u otra. En el programa también hay saltos y cambios de números de página.

En la memoria de programa, lo que era el número de paso es la dirección de memoria. Según el tamaño de la memoria que posea el microcontrolador y el largo de palabra será la cantidad máxima de instrucciones que podemos colocar dentro de ésta.

Por ejemplo, si se tiene una memoria de programa de 1Kbyte y el microcontrolador utilizado es de 8 bits por instrucción, entonces la cantidad de pasos en el programa o instrucciones puede llegar a 1K o 1024 instrucciones máximas (1Kbyte es igual a 1024 bytes). Si nuestro microcontrolador utiliza instrucciones de 16 bits (como es el caso de los Texas MSP430xxx) y la memoria de programa es de 1Kbyte entonces la cantidad máxima de instrucciones posibles en nuestro microcontrolador será de 512 instrucciones ya que cada instrucción ocupará 2 bytes.

Un breve repaso antes de seguir:

Bits, Nibbles, Bytes, Words, Kbytes, Mbytes, GBytes


            Bit es la unidad mínima o más chica que entiende un microcontrolador. Es la base de funcionamiento de todos los circuitos lógicos. Un bit es un valor que puede ser un 1 o un 0. Donde un 1 para los microcontroladores que trabajan en 5V significa que hay un cablecito que en un momento está teniendo 5V en éste. Para los microcontroladores de 3,3v ése cablecito tendrá 3,3v. El 0 de la misma manera, es que en ése cablecito hay 0v.

            Ahora ¿que sucede si queremos sumar dos bits? Por ejemplo, si se quiere hacer 1 + 1 = 2 ¿cómo se hace si sólo tenemos 0 y 1?  Aquí es donde aparece el sistema de numeración binario. Para ello es que se agregan más cablecitos, en el caso particular de 1 + 1 = 2, representado en sistema binario la respuesta es 1 + 1 = 10 y se ocupan 2 bits.

            Por las cosas del destino, las personas que diseñaron las primeras computadoras eligieron agrupar los bits en grupos de 8. En realidad ésto tiene una explicación cuando les cuente más adelante sobre los sistemas binarios, decimal y hexadecimal. Pero por ahora, digamos que si tenemos 8 bits todos éstos forman el byte.

            Byte: Son 8 bits agrupados, cada bit puede tener su valor 0 o 1. Sin embargo, en sistema binario, agrupar 8 bits nos da la posibilidad de tener 256 combinaciones de 1s y 0s. Entonces, podemos tener 256 datos diferentes en un byte. Que ocupan sólo 8 bits. Además, si adoptamos que la mitad de los valores sean positivos y la otra mitad negativos, podemos tomar que un byte puede valer desde -127 hasta +128. Esto ya lo vamos a ver más adelante en el significado de un byte con o sin signo. Por ahora entendamos que un byte en un grupo de 8 bits que puede tomar un valor entre 0 y 255 o -127 hasta 128. Entendamos también que pueden significar 256 diferentes tipos de órdenes. Entonces, en la memoria EEPROM podemos escribir 256 diferentes órdenes que tienen 256 diferentes significados.

            Nibble: Es la mitad de un byte. Lo pongo en segundo orden después del byte porque en realidad el byte es el significado más usado, pero cuando avancemos en la programación en  C vamos a ver que los nibbles van a cobrar un poco más de importancia. Por ahora digamos que en un byte entran 2 nibbles. Un nibble es la agrupación de 4 bits, y pueden tomar valores que van desde 0 hasta 15. Esto es en cada nibble hay 16 combinaciones de valores posibles. Ya les puedo ir adelantando lo siguiente: Si juntamos 2 nibbles entonces se formará un byte 4 bits + 4 bits = 8 bits. Que por otro lado: 16 combinaciones (nibble) x 16 combinaciones (nibble) = 256 combinaciones (byte)

Word:  Word en inglés significa “palabra”. En programación llamamos palabra a la agrupación de 16 bits. Un word o palabra tiene la posibilidad de generar 65536 combinaciones. O sea, si unimos 2 bytes para formar un word:  8 bits + 8 bits  = 16 bits, que es lo mismo 256 combinaciones (byte) x 256 combinaciones (byte) = 65536 combinaciones (word). Además, también podemos adoptar que la mitad de la palabra signifique valores positivos y la otra mitad valores negativos. Así, en un word podemos almacenar desde -32768 valores hasta +32767. Ya estamos viendo algunas de las ventajas entre utilizar un microcontrolador de 16 bits contra otro de 8 bits. Lo que aparece inmediatamente es que si tenemos un micro de sólo 8 bits podemos tener 256 diferentes tipos de órdenes, mientras en uno de 16 bits nos permite con sólo la lectura de un word muchísimas mayor cantidad de combinaciones.

Kilobyte, o Kbyte: Es la agrupación de 1024 bytes. ¿Por qué el numero caprichoso 1024 y no 1000?  Bueno, esto viene por la historia de los microcontroladores y microprocesadores. Resulta que al ser circuitos electrónicos que viven en un mundo binario, 1024 es potencia de 2, o sea es un 2 elevado a la 10. La representación en base binaria de 1024 es: 100000000. Para alguien que piensa en binario 1024 es un número redondo. En cambio si fuera sólo 1000 el valor en binario se representa como 1111101000 ¿mucho más difícil visto así, o no? Recordemos entonces 1 Kilobyte son 1024 bytes.

MegaByte: Un megabyte es la agrupación de 1024 kilobytes. Esto es 1MegaByte = 1024 x 1024 bytes o sea, un megabyte son 1048576 bytes.

Gigabyte: Es la agrupación de 1024 Megabytes. Esto es 1 GByte = 1024 x 1048576 bytes = 1073741824

Estas son las definiciones de Kilobyte, Megabyte y Gigabyte aceptadas. Aunque hay algunos programas que ya toman a 1 Megabyte como 1000 kbytes y 1 Gbyte como 1000 Megabytes. Pero, en el mundo de los microcontroladores, les recomiendo tomarlos como potencias de 2, esto es 1024 y 1024 respectivamente. Más adelante, cuando le tomen la mano a la programación y a los sistemas binarios y hexadecimales van a verlo con mucho más cariño al número 1024 y todas las potencias de 2, ya que van a ver que es mucho más sencillo de pensarlo de ésa manera a la hora de la programación.


Volviendo al funcionamiento de los microcontroladores. Habíamos dicho que el microcontrolador era algo que leía las instrucciones guardadas en la memoria de programa. A esas instrucciones, el microcontrolador las respeta exactamente como están guardadas en el programa. Ahora bien, ¿de que sirve tener sólo una receta para hacer algún plato o comida si no se tienen utensillos, las ollas, la cocina y los ingredientes? Se necesita entonces de otras cosas adicionales. En el microcontrolador existe otra memoria, es la memoria RAM.

RAM significa: Random Access Memoria, que traducida significa memoria de acceso aleatorio. No dice mucho. Pero, significa que es una memoria a la cual se puede leer y escribir cuantas veces uno quiera. La diferencia más importante es que esta memoria puede ser escrita y leída infinitas veces. No tiene un límite de escrituras y no necesita un proceso de grabación especial como sí lo poseen las memorias EEPROM y flash. Esta memoria es la que utilizan los microcontroladores para almacenar o memorizar valores que se van produciendo durante la ejecución del programa. La memoria RAM es como un cuaderno borrador en el cual podemos ir escribiendo anotaciones a medida que vamos realizando la receta. Volviendo al ejemplo de limpiar el cuarto, el microcontrolador sería como alguien que posee nula memoria temporal. Esto es, cuando hace algo, no recuerda lo que pasó en el momento exactamente anterior. La memoria RAM viene a auxiliar éste problema ya que por ejemplo podría ser cuando tomamos la escoba, anotamos en el cuaderno: “tomé la escoba”, y además, muy importante: “acabo de hacer el paso nro 3”. Entonces, un segundo más tarde el microcontrolador se pregunta: ¿que acabo de hacer? Lee entonces el cuaderno y le dice: “ya tomaste la escoba e hiciste el paso 3”. Entonces, sabe que tiene que hacer el paso 4 y así sucesivamente. Otro de los usos de ése cuaderno (la memoria RAM) es por ejemplo para resolver problemas. Supongamos que una de las órdenes es calcular el resultado de una suma, por ejemplo 2 + 3. El microcontrolador hace el cálculo en su “cerebro” o CPU y coloca el escribe en la memoria RAM. ¿Y si después tiene que hacer algo más con el resultado de esa suma? Por ejemplo, podría decírsele al microcontrolador que al resultado de la suma le haga otro cálculo, o que lo incremente. Entonces, el microcontrolador, necesita de algún lugar donde poder leer y escribir valores que se van produciendo mientras va haciendo o ejecutando los pasos descriptos en su programa. Esta memoria es la memoria RAM o memoria de lectura y escritura.

En base a lo que se mencionó antes, se puede observar que hay algunas cosas que son necesarias para poder realizar las órdenes que están escritas en la memoria del programa. Una de las cosas que se necesitan, es por ejemplo saber cual es el número de paso que se tiene que ejecutar. Esto en la mayoría de los microcontroladores es lo que se llama Program Counter. El program counter o contador del programa, en un valor que se guarda en la memoria RAM, en un casillero o dirección específico y dedicado para ello. El microcontrolador sabe que el paso que tiene que ejecutar cada vez, es el que está indicado por éste valor de memoria. Cuando ejecuta una orden o instrucción, inmediatamente suma uno a éste valor. Así, cuando se enciende el microcontrolador el program counter se coloca con el valor 0. Entonces, el microcontrolador leerá de la memoria de programa la instrucción que está almacenada en la posición de memoria cero, la ejecuta y si la instrucción guardada en ésa dirección de memoria no dice otra cosa, inmediatamente después, el microcontrolador hará que el valor almacenado en la memoria RAM como program counter valga 1. Después ejecuta la instrucción en la posición 1 y lo vuelve a incrementar a la siguiente, y así sucesivamente con el resto de las instrucciones.

Otra de las cosas que se observó en los ejemplos simples que les conté anteriormente, es que es necesario disponer de algo en el microcontrolador que pueda realizar operaciones matemáticas como sumar, restar, y otras. Esto es lo que se conoce como ALU, en inglés Arithmetic Logical Unit, o unidad lógica aritmética. Es la encargada de ejecutar cuando llega una orden como por ejemplo sumar dos valores, de encontrar el resultado.

A su vez, al resultado de una operación matemática, hay que almacenarlo en alguna otra posición o lugar en la memoria RAM. Esta posición en los microcontroladores tiene también un nombre especial: El registro acumulador. No es más que una posición dentro de la memoria RAM donde se almacena el resultado de otras operaciones, como puede ser el resultado de una suma. En general en el acumulador se almacenan los resultados de la mayoría de las operaciones.

Existen otros módulos dentro del microcontrolador que son necesarios para su funcionamiento. Uno de ellos es lo que se llama el registro de Stack, o Stack pointer, o puntero de la pila en español. Es otra dirección dentro de la memoria RAM donde se guardan valores en forma temporal, esos valores temporales que una vez que cumplieron su función pueden ser descartados. La pila o stack, es como una pila de papeles donde vamos tirando cosas, una encima de otra. Esos papeles son direcciones de memoria RAM, luego vamos descargando dicha pila, sacando los papeles que están más arriba, vemos que había escrito, tomamos esa información los hacemos un bollito y los tiramos a la basura, o sea los descartamos. En la pila o stack, se puede guardar información importante, por ejemplo, antes de ir a hacer alguna tarea anotamos en un papel cosas que no queremos olvidarnos cuando regresemos de hacer dicha tarea. Por ejemplo, estamos limpiando el cuarto y de repente llega un amigo y nos invita a jugar a la pelota. Como somos un microcontrolador dedicado y ordenado. Anotamos en un papel que se va a guardar en el stack, en que número de paso estábamos antes de salir a jugar, también anotamos por ejemplo hasta donde habíamos llegado barriendo el cuarto, para que cuando volvamos retomemos exactamente en el mismo lugar. Colocamos entonces ese papel en la pila, y salimos a jugar. Un par de horas mas tarde, ya no nos acordamos nada de que era lo que estábamos haciendo antes de salir. Pero, por suerte está la pila con el papel que nos recuerda el punto y podemos retomarlo. Esto en programación, salir a jugar a la pelota, se interpreta como un llamado a una rutina de interrupción (algo nos interrumpió en la tarea principal). Entonces, necesitamos poder almacenar en algún lugar todo lo necesario para que cuando volvamos de la interrupción al punto donde habíamos quedado. El Stack tiene otros usos en programación, y de hecho es fundamental cuando se hacen programas en C. Ya vamos a ver que hay una diferencia importante entre los microcontroladores PIC y los Texas que hacen que uno respecto al otro sean más eficientes.

¿Alcanzan a entender mejor ahora el diagrama de bloques del PIC16F84?  Se pueden observar los bloques que les estuve mencionando:



Hasta ahora les mencioné los componentes del microcontrolador: Program Counter, ALU, Stack. Faltan algunos componentes más. Para el caso del PIC16F84 está indicado como “Instruction Decode & control”. Es lo que se llama intérprete de comandos, es el corazón del microcontrolador. Es como el traductor que lee lo que está escrito en la memoria de programa y ejecuta los pasos de la receta. Este bloque es el encargado de entender que significa cada instrucción escrita en el programa que le hayamos grabado en la memoria de programa.

¿De que sirve que tengamos buenas ideas, conozcamos que debemos hacer, si no tenemos forma de expresarnos? Todos nosotros reaccionamos a lo que nos pasa en el exterior, por ejemplo, si alguien nos pide algo, tiene que hablarnos. Son nuestros oídos los que escuchan e interpretan lo que nos dicen, para luego nuestro cerebro pensar y en base a ello responder o ejecutar alguna orden o movernos, o lo que sea. Con nuestro oído escuchamos algo y reaccionamos según lo que nos dicte nuestro cerebro, o lo que tengamos internamente como “programa”. Lo mismo pasa con los otros sentidos, vista, tacto, gusto y olfato. Cuando vemos a una persona en coma o en estado vegetativo, no tenemos forma de saber que es lo que esta pasando por su mente, ya que ésta no tiene forma de comunicarnos nada. Por eso es que tenemos la voz, y podemos movernos, para poder hacer lo que nos diga nuestro programa interno que está almacenado en nuestro cerebro.

Los microcontroladores también necesitan “sentidos” o elementos por donde ingresen estímulos o señales que le indiquen que hacer. A su vez, los microcontroladores, nos “hablan” a través también de otras señales que son visibles en su exterior. El bloque que hace que los microcontroladores puedan recibir señales desde el exterior y sacar sus resultados son los Puertos y periféricos. Los puertos son circuitos electrónicos, que leen las señales que hayan en sus entradas. Por ejemplo, un puerto toma la señal que hay en un pin o pata del microcontrolador. Si la señal mide entre 0 y 0,7 el puerto entiende que ahí hay un cero lógico. En cambio, si la señal es mayor que 2 voltios, el microcontrolador entiende que en ése puerto se tiene un uno lógico. Entonces, dentro del programa sabe que hacer con ese valor que está en ése puerto en un momento determinado. Entonces, ahora es necesario que de alguna manera el microcontrolador comunique al exterior que procesó dicha señal. Por ello, es que puede sacar por otro pin, usando otro puerto una señal resultado. El resultado será entonces una señal que puede ser un uno lógico o un cero lógico, según lo que se le haya dicho en el programa. Entonces, los puertos son dispositivos que pueden ser de entrada de señales digitales y también salidas digitales.

Los periféricos, son a su vez dispositivos electrónicos que se utilizan en los microcontroladores, pero que tienen funciones más complejas que una simple entrada o salida. Pero sirven para recibir y sacar información desde y hacia el exterior del microcontrolador. Por ejemplo, existen diferentes tipos de periféricos, que se utilizan en los microcontroladores. Algunos de los más comunes son:

Conversor ADC: Analog To Digital converter. Es un dispositivo que permite leer en un pin del microcontrolador una señal, pero que no necesariamente es una señal digital con un valor 0 o 1. Sino, que mide el valor de tensión, como si fuera un tester y entonces, comunica al microcontrolador el valor de tensión medido pero para que el programa del microcontrolador tome una decisión. Por ejemplo, si un microcontrolador tiene un conversor ADC de 8 bits, y mide en su entrada tensiones entre 0 y 5 voltios, eso quiere decir que si en su entrada hay una tensión de 0 voltios el conversor ADC dará al microcontrolador la información 0 que significa 0 voltios a su entrada. En cambio, si en su entrada hay 2,5 voltios, el conversor ADC indicará 128, y para 5 voltios indicará 255.

USART: Universal Serial Asincronous Receiver Transmiter. Es un dispositivo que permite realizar la comunicación de datos por canales seriales. Con éste dispositivo es muy fácil realizar comunicaciones entre microcontroladores.

USB: Algunos microcontroladores poseen un periférico que nos permiten conectarnos por el puerto USB con otros equipos, como puede ser una PC y otros dispositivos.

Por supuesto, hay muchas más opciones. Sólo es cuestión de buscar en las hojas de datos de cada modelo.

Volviendo de nuevo a la pregunta de éste apartado: ¿como funciona un microcontrolador?, es que armé este diagrama en bloques:



En el diagrama anterior se resume básicamente como es internamente un microcontrolador. El diagrama es muy parecido para las diferentes marcas disponibles en el mercado. Resumiendo, en todo microcontrolador hay una memoria de programa que puede ser de diferentes tecnologías, pero es el lugar físico donde está almacenado la codificación que le dice al cerebro o CPU que pasos seguir. Incluso, hay microcontroladores donde ésta memoria de programa no está dentro del chip, sino que se coloca en forma externa. Tal es el caso de los microcontroladores 8031 que no poseían esa memoria de programa en forma interna. La memoria RAM está obligatoriamente en todo microcontrolador, y es el lugar donde se almacenan todas las variables temporales para el funcionamiento. En algunos modelos de microcontroladores esta memoria RAM es mínima y sólo contiene espacio para las funciones vitales, estas variables o espacios en memoria RAM son los llamados registros del microcontrolador. Ya mencioné algunos, el Program Counter, Stack Pointer y el Acumulador que son los más básicos, pero hay más. Y finalmente se tienen los periféricos, que son los bloques de comunicación entre la CPU del microcontrolador y el mundo exterior.

El clock


En todos los microcontroladores, en realidad en todos los procesadores debe necesariamente existir un motor que vaya empujando a la CPU para que avance en la ejecución de las instrucciones que tiene que cumplir. Volviendo al ejemplo de que nos digan que limpiemos el cuarto. Si somos un ejecutante “bobo” que realiza cada acción que se le indica, pero una vez que la ha finalizado, nos quedamos quieto. Necesitamos que alguien nos diga: Avanza a la orden siguiente. Algo parecido sucede con los microcontroladores, éstos van ejecutando las órdenes o instrucciones escritas en la memoria de programa, pero para avanzar a la orden siguiente, necesitan una señal que los empuje. Esta es la función básica de lo que se llama el reloj o clock en inglés.  El microcontrolador avanza a la siguiente instrucción, sólo cuando el reloj le da un impulso. Es por ello que aparecen las famosas velocidades en las computadoras: 2,4 Ghz, 3 Ghz, etc. En los microcontroladores se tiene un circuito electrónico, al cual se le conecta un cristal y eso es lo que hace que el microcontrolador funcione. Con cada pulsación del cristal el micro avanza a la próxima instrucción. Así, es que tenemos que los microcontroladores de microchip más básicos, los PIC16 aceptan cristales de hasta 20Mhz, en los de la serie MSP430 de texas hay de hasta 8 Mhz, 16 Mhz y 25 Mhz. En algunos modelos de 8051 soporta hasta 30 Mhz. Pero cuidado, a no confundirse, según la tecnología, es la verdadera velocidad del microcontrolador.

Por ejemplo, los modelos de PIC16xxx ejecutan una instrucción cada 4 pulsos del reloj. Esto es, si tenemos un microcontrolador PIC con un cristal de 20Mhz, la velocidad máxima a la que funcionará el dispositivo será de 5 MIPS. MIPS significa Millones de instrucciones por segundo, que no es lo mismo que 20 Mhz.

Los modelos MSP430xxx ejecutan una instrucción por pulso de clock, entonces si el dispositivo está conectado con un cristal de 8 Mhz, funcionará a 8 MIPS. Entonces, lo que parece en un principio más lento que los PIC, puesto que los PICs publicitan que sus chips funcionan a 20 Mhz, en realidad son 5 MIPS que es menor que los 8 MIPs de los micros Texas.

Los microcontroladores de la línea 8051 aún son más lentos, ya que ejecutan una instrucción cada 12 pulsos del reloj. Esto es, si se tiene un microcontrolador con un cristal de 30Mhz, la velocidad de procesamiento será de 2,5 MIPS.

Volvamos a las preguntas originales

¿Para que sirve un microcontrolador?


Un microcontrolador es un dispositivo que nos permite resolver muchos problemas electrónicos en un reducido espacio. Cuando necesitamos armar un equipo electrónico donde se necesita cierta “inteligencia” en la forma de responder. O cuando resolver el problema electrónico que trae aparejado mediante sólo hardware es muy complicado. Si las velocidades de las señales en las entradas, y las velocidades en las señales de salidas están en el orden de los Khz, o en el orden desde 1 hasta 25000 cambios por segundo en las señales que ingresan en sus pines, probablemente con un microcontrolador podamos resolver el problema. Hoy en día hay microcontroladores en lugares insospechados: Alarmas de todo tipo, Sensores de todo tipo, televisores, celulares, tarjetas inteligentes, robots, sistemas de domótica, automóviles, puntos de venta electrónicos, y muchísimos más que nombrarlos podría llevar cientos o miles de páginas.

 ¿Cuando debería utilizar un micro controlador y cuando nó?


Un poco ya lo mencioné en el párrafo anterior. Cuando hay que resolver donde hay señales, principalmente digitales, esto es niveles lógicos 0s y 1s. Y las velocidades máximas que éstos conmutan hasta unos Khz, un microcontrolador puede funcionar.

No es conveniente utilizarlos cuando las señales pueden ser de velocidades bastante mayores, como tampoco cuando resolver en forma directa con hardware es más sencillo. Al momento de diseñar la solución, es conveniente hacer números y evaluar el costo de utilizar un microcontrolador, versus el costo de lo mismo resuelto sólo con hardware. Si el costo de resolverlo con hardware es similar al costo de utilizar el micro, hay que evaluar si se va a querer en forma posterior modificar el funcionamiento. Si el funcionamiento que se pretende obtener, va a ser fijo, y nunca más se va a querer modificar, resolver con hardware directo va a ser más conveniente. En cambio, si se pretende que en el futuro el mismo equipo cumpla otras funciones el micro es más conveniente ya que sólo cambiando el programa se accede a la nueva función.

La flexibilidad de tener un dispositivo que permite modificar el programa para que funcione en forma diferente, es algo extraordinario. Pero se debe evaluar muy bien la posibilidad de errores en la programación. Muchas veces, es preferible resolver un problema por hardware puro y no con un microcontrolador, son los casos donde el resultado es el inverso, el programa se vuelve muy complejo y  existen altas probabilidades de que aparezcan “bugs” o errores en el software.

Cuando hay que manejar señales de velocidades mayores a lo mejor conviene saltar a otro tipo de tecnologías, como son los DSP, CPLD y FPGA. Diré que para manejar señales analógicas en órdenes de hasta algunos megahertz los DSP son mucho más adecuados. En cambio para manejar señales puramente digitales. Por ejemplo, movimiento de datos a altas velocidades ya hay que pensar en CPLDs y FPGAs. Los CPLD y FPGA son circuitos programables, es como armar un circuito electrónico dentro de un mismo chip. Siendo los FPGA los hermanos mayores, éstos últimos nos permiten meter dentro del chip hasta un DSP y un Microcontrolador. De hecho, muchos diseños de microcontroladores, se hacen primero en un FPGA y cuando están depurados se pasan a fabricar.

 ¿Por qué se han hecho tan “famosos” en los electrónicos los microcontroladores?


Esa flexibilidad que permite la reprogramación, imagínense el potencial. Para los que no saben nada de electrónica, cualquier solución que requiera hardware implica: Diseñar el hardware, probarlo, armar un prototipo, diseñar la placa o PCB, mandar a fabricar la placa y finalmente se tiene el hardware listo. Esta tarea puede requerir varios días, incluso meses.

En cambio, si en la misma placa hay un microcontrolador, la primera vez que se diseñe la placa, porque también requiere de una placa o PCB se va a tomar el tiempo. Pero, después, el cambio en el software o programa es rápido. Lleva minutos o segundos el cambio. Sólo hay que perder tiempo en la nueva programación.

Finalmente, me animo a decir que en el 90% de los equipos electrónicos, las señales que hay que manejar son digitales, y esas señales siempre tienen tiempos que son de unos pocos kilohertz. Esto es, muy raras veces es necesario resolver problemas con señales que cambien más de 25000 veces por segundo. Y llegado el caso, los periféricos que traen los microcontroladores, ya resuelven muchos de esos problemas cuando hay señales de esas velocidades.

¿Qué tiene de mejor un micro controlador que no pueda ser hecho con una computadora?


Hay muchas razones, voy a nombrar algunas:

-       Tamaño. Un microcontrolador, con toda la placa asociada puede ser implementada en un lugar de 5x5cm. Cuando la solución requiere resolver dentro de un cierto espacio, los microcontroladores son la solución.
-       Independencia de un sistema operativo. Las computadoras personales, utilizan sistemas operativos (Linux, Windows, MAC). Los microcontroladores llevan sólo el programa que fue cargado, arranca ejecutando dicho programa. Si bien los microcontroladores más grandes permiten sistemas operativos, apunto con este párrafo a las soluciones donde un pequeño microcontrolador resuelve el problema.
-       Tiempos. Cuando la aplicación requiere que se tomen muestras de algo, separadas en tiempos lo más preciso posibles, el uso de microcontroladores, es mucho más conveniente que montar esa toma de muestras en una computadora personal. El microcontrolador está dedicado exclusivamente a tomar esas muestras, mientras que una computadora personal tiene además que atender todas las otras tareas que trae la propia computadora. Esto último hace que puedan haber tomas de muestras en tiempos no precisos, dicho problema es muy fácil de resolver con un microcontrolador y extremadamente difícil en una computadora personal.
-       Costos. Una computadora personal tiene un costo en el orden de los U$D 100 o más. Mientras que hay microcontroladores que no llegan a U$D 0,5. Si el producto que se desea realizar, será para consumo masivo, la diferencia será muy importante y crucial.

1 comentario:

  1. Muy buena la información. Me aclaró algunas dudas que tenia. Espero las proximas partes

    ResponderEliminar