Next: Ejemplos de Microcontroladores Up: Elements and Introduction to Physical Interaction: Previous: Electrónica Necesaria


Microcontroladores, Sistemas Ensamblados

La siguiente información sobre un microcontroladores es tomada del datasheet de los Atmel AVR y resumida por Wendy Ju y Michael Gurevich.

  1. Definición:

    En esencia un micro-controlador no es mas sino una computadora en un chip de circuito integrado. Como cualquier computador , consiste de una memoria y puede ser programado para lograr operaciones de cálculo, para entrar datos, procesarlos y generar algún tipo de información. A diferencia de computador personal (PC), los micro-controladores incorporan su propia memoria, unidad de procesamiento central (CPU), periféricos e interfaces dentro de un solo circuito integrado. Hoy en día micro-controladores hacen parte de muchos dispositivos electrónicos, son ubicuos y están presentes desde cafeteras, hasta Ipods y celulares.

    En esta descripción se tomará como ejemplo de micro-controladora la serie AVR de Atmel por su flexibilidad, por la posibilidad de programarse con lenguajes de alto nivel (C y C++) y por ser parte de varios sistemas ensamblados como AVRMini, Wiring y Arduino.

  2. Componentes del micro-controlador

    1. Temporizador (reloj):

      Microcontroladores como los AVR, utilizan un reloj con pulsos a intervalos constantes y con un paso regular. Una variedad de diferentes tipos de relojes y temporizadores, además de velocidades, están disponibles para cada micro-controlador. Para aplicaciones en tiempo-real, velocidades entre 14.746CPS (ciclos por segundo o Hertz), y 16MHz., son suficientes para generar operaciones y procesar instrucciones. Los AVRtambién incluyen un circuito o aditamentos para conectar un cristal oscilador que regula la velocidad del procesador. En el caso de los AVRMini, Wiring y Arduino, se utilizan cristales externos al micro-controlador. Nótese que la velocidad es mucho menor a la de un computador personal, por lo que es importante tener en cuanta al momento de programar el `micro'. Cada micro-controladorse diferencian en el numero de pulsos de reloj o en otros términos, en la cantidad de pulsos (ticks), que toma para ejecutar una instrucción. Por esto en los AVR se utiliza el término de 'MIPS' o numero de millones de instrucciones por segundo. Una de las cualidades de los AVR,es que cada instrucción toma un ciclo de reloj y por lo tanto corre alrededor de (1.0 MIPS/MHz.). Otros micro-controladores corren a (16MHz.), y por ende a menos MIPS.

    2. Arquitecturas:

      La arquitectura en computadores es un gran tópico. Amplio en varias instancias, pero tiene que hay que condensar para el propósito del micro-controlador. El cuadro general en el caso de los AVR,, se puede describir en el contexto de la arquitectura Harvard. Esto significa que el programa y los datos se almacenan en espacios diferentes pero que se pueden acceder simultanea-mente. Así púes, mientras una instrucción se ejecuta, la siguiente puede estar siendo extraída al mismo tiempo de la memoria de datos. En parte esta es la forma como se logra el procesos de ejecución por ciclo. Con otras arquitecturas de micro-controlador, solo hay una forma de acceder la memoria y consecuentemente la ejecución y el procesos de acceso a la tienen que realizarse en dos pasos diferentes.

    3. Memoria para Programas:

      Cada programa que se desarrolla para los AVR, se almacena en una región de la memoria no volátil (es decir, permanece al pagar el dispositivo), además es programable con el procedimiento de carga (flash). La primera sección de esta región es la sección de carga (flash) de la aplicación y es donde se almacena el programa que se escribe para el AVR. La segunda sección se llama: 'Boot Flash Section', o sección de carga del inicio y se puede configurar para que funcione una vez que el dispositivo (sistema ensamblado), se prende o se enciende.

      La sección de carga del inicio, es muy útil si se programa con una aplicación que toma datos del seria y los pasa a la región de memoria de aplicación. Esta aplicación se denomina 'bootloader' y permite que el micro-controladorpueda ser programado desde un puerto serial común-y-corriente, en lugar de utilizar circuitos de programación costosos y complejos. Para dispositivos comerciales, esto permite que la actualización de 'firmware' (i.e. software de fabrica), sea menos complicada y manejable. En el caso de los AVRMini, Wiring y Arduino, el 'bootloader', ya está cargado en el micro-controlador. Por ésto en éstos sistemas al encender el dispositivo, se espera unos milisegundos para probar si hay instrucciones de programación en el puerto serial. si no hay ninguna, se pasa a la región de memoria de aplicación y en donde se encuentra almacenado el programa residente y se comienza la ejecución del mismo normalmente.

       

      Secciones de memoria en los AVR
      Figura No. 37: Esquema con las regiones de cargado de aplicaciones y programas (flash program memory), además de la sección de cargado de programas en el inicio (boot flash memory) parte del diseño de memoria en los AVR.
    4. Código hexadecimal:

      Todo el código de programación que se desarrolla y se escribe, se liga, se ensambla y compila a código hexadecimal(también conocido como 'byte code'). Este código es una serie de números hexadecimales, que son interpretados como instrucciones por el micro-controlador. La ventaja de trabajar con lo AVR, es que se pueden programar utilizando el lenguaje de programación 'C', en el caso de los AVRMiniy en una derivación destilada entre Java y 'C', en el caso de Arduino y Wiring. De tal forma el usuario no tiene que distraerse con los detalles del código de 'Assembler', hexadecimalo con la arquitectura del micro-controlador.

    5. Memoria para datos y almacenamiento de información:

      Parte de la memoria de los AVR es volatil, del tipo RAM y está organizada en registros de 8-bits.

      1. Registros:

        Toda la información en el micro-controlador, desde la memoria de programas, la información del temporizador, hasta el estado de los pines en los puertos de entrada y salida, se almacena en registros de memoria. Los registros son como cajones en un gabinete. En un procesador de 8-bits como el 'ATMega644', utilizado en los AVRMini, se usan cajones que pueden guardar por ejemplo ocho (8) tarjetas y en donde cada tarjeta almacena un número binario de un bit (i.e. un cero (0) o un uno (1)). Cada cajón posee una dirección asignada para poder ser encontrado por el micro-controlador.

        Algunos registros, como por ejemplo los de RAM, se utilizan para almacenar datos en general. Otros tienen funciones específicas para controlar los convertidores análogo-digital, contabilizar duraciones en tiempo o para asignar o conseguir valores de los pines de entrada. los registros en RAM pueden ser leídos o escritos. Otros registros pueden ser para acceder o leer únicamente.

         

        Registros de memoria en los AVR
        Figura No. 38: Esquema con la configuración de registros de memoria RAM en los AVR. Los registros de datos en los AVR, como el programa de cargado (Flash program memory), están organizados como un conjunto seguido con direcciones de los registros aunque con hayan secciones diferentes y especializadas. El conjunto mas amplio de registro son los registros de memoria RAM. Este es un tipo de memoria volátil para almacenar datos tales como variables o caracteres que luego aparecen en las salidas del micro-controlador.
      2. Bits y bytes:

        Un byte, se compone de 8-bits con 256 valores solamente. Toda la información en el micro-controladores almacenada en pedazos de tamaño de un byte. Para facilitar la comprensión y operación con números binarios en el formato de unos y ceros, cada byte de información se representa con un número hexadecimal de dos dígitos. Por ejemplo el numero (1111 0011) en binario, equivale a (243) en decimales y a ( F3 ) en hexadecimal. Es costumbre adicionar el prefijo '0x' para indicar que el número está en base 16 (hexadecimal), es decir (0xF3). Las direcciones de lugares en la memoria normalmente se dan en hexadecimalpero con el prefijo '$' para indicar que son el número de una dirección en lugar de un valor (e.g. $03DF).

    6. Registros de Entrada y Salida:

      Para recibir o mandar (leer o escribir) a los pines de entrada y salida del micro-controlador, se necesita conocer un poco mas sobre la arquitectura y diseño en este tipo de dispositivos. La razón por la que 32 pines de entrada y salida en un ATMega644, están divididos en cuatro (4) puertos cada uno de ocho (8) pines, es porque ésta configuración permite que el estado de los pines pueda estar representado por cuatro (4) bytes, llamados PORTA, PORTB, PORTC, y PORTD respectivamente. Cada pin físico corresponde a un bit lógico en el puerto. Por ejemplo el valor del PIN-3, reside en el lugar 3 del PORTD.

      1. Asignando y Variando Entradas y Salidas:

        El termino para asignar el valor de ``vivo'', (i.e. ``high''), es el (1). Esto equivale a encendido o activo. A veces también se denomina como ``High Byte''. El término para desactivar, borrar o apagar (i.e. ``low''), tiene un valor de (0). También se denomina como ``Low Byte''. Se pueden asignar valores a los registros solo un byte a la vez. Por ejemplo al asignar el valor total 0xBB al puerto PORTB o en forma individual al asignar un bit a la vez, como por ejemplo, borrando PB2, (PORTB bit 2) y PB6 para activar el resto.

      2. Registros DDR:

        No todos los registros de entrada y salida en los AVR son pines físicos. Ya que los pines pueden estar configurados o para entrada y salida, el micro-controlador, necesita un lugar para almacenar el direccionamiento de cada bit. Para esto se utilizan los registros DDR (data direction registers). Como en los otros registros del micro-controlador, los DDR se configuran con ceros (000) y unos (111), pero en este caso el (0), indica una entrada y el (1), una salida. Este tipo de registros funcionan como un vigilante para controlar cuales son los permisos que tiene cada proceso para transformar datos en los cajones de la memoria bit-por-bit. Por ejemplo si al asignar un valor de (0xF0) (aka. 1111 0000) al registro DDRA, esto indicaría que los bits 7-4 en el puerto PORTA, son de salida y los bits 3-0 serían configurados como entradas en el mismo puerto.

      3. Características del Puerto:

        Los pines en cada uno de los diferentes puertos también poseen características propias, al igual que cada uno de los super-amigos tiene su propio poder. Por ejemplo el puerto PORTA, podría configurarse como bi-direccional, pero también como entrada análoga. De hecho éste tipo de funcionalidad puerto ser muy útil para obtener datos con sensores. Para permitir asignación entre entradas análogas y digitales, se utiliza un registro especial denominado ADCSR, (analog to digital control & status register). Cada uno de los bits en ADCSR,configura un aspecto en las operaciones análogo-digital.

    7. Ejecución de Programas:

      Código hexadecimal (Hex Code), es lo que se almacena en la región de programas (flash program memory) del micro-controlador. Al correr el programa con el código hexadecimal, las instrucciones son leídas por un contador. Este procedimiento a la vez carga la siguiente instrucción a un registro especial de instrucciones. Los operandos de cada instrucción son subsecuente-mente transferidos a la unidad de lógica aritmética (ALU), mientras que la instrucción está siendo decodificada y posteriormente ejecutada por la unidad ALU. (ver figura 37 [*]).

  3. Mas información, descripciones y diagramas pueden obtenerse en los ATMega summaries. En el caso del ATMega644, ver el ATMega644 summary en (ATMEL.) En el caso del ATMega128 (Wiring) ver el ATMega128 summary.


next up previous
Next: Ejemplos de Microcontroladores Up: Elements and Introduction to Physical Interaction: Previous: Electrónica Necesaria

© Copyright 2001-2008 CCRMA, Stanford University. All rights reserved.
Created and Mantained by Juan Reyes