SISTEMAS EMBEBIDOS BASADOS EN MICROCONTROLADORES 1.1 Introducción Un sistema embebido es un sistema con microcontrolador microcontrol ador diseñado diseñado para realizar una o algunas pocas funciones dedicadas, frecuentemente en tiempo real. Los sistemas embebidos se utilizan para usos muy diferentes a los usos generales a los que se suelen someter a las computadoras personales. En un sistema embebido la mayoría de los componentes se encuentran incluidos en la placa base. Por lo general los sistemas embebidos se pueden programar directamente en el lenguaje ensamblador del microcontrolador incorporado en el mismo o bien, utilizando algún compilador compilador específico, como C o C++. Las principales características de un sistema embebido son las siguientes: •
•
Emplean una combinación de recursos de hardware y software para realizar una función especifica. o un conjunto muy limitado de funciones (no suelen ser de propósito general). Interaccionan con el entorno a través de dispositivos de E/S no usuales, por lo que suele ser necesario un acondicionamiento de las diferentes señales.
En general, un sistema embebido consiste en un sistema con microprocesador o microcontrolador cuyo hardware y software están específicamente diseñados y optimizados para resolver un problema concreto eficientemente. Normalmente un sistema embebido interactúa continuamente con el entorno para vigilar o controlar algún proceso mediante una serie de sensores. Su hardware se diseña normalmente a nivel de chips, o de interconexión de PCB, buscando la mínima circuitería y el menor tamaño para una aplicación particular. Otra alternativa consiste en el diseño a nivel de PCB consistente en el ensamblado de placas, cada una de ellas con una funcionalidad específica dentro del objetivo global que tenga el sistema embebido. Esta última solución acelera el tiempo de diseño pero no optimiza ni el tamaño del sistema ni el número de componentes utilizados. En general, un sistema embebido simple contará con un microcontrolador, unos pocos periféricos de E/S y un programa dedicado a una aplicación concreta almacenado permanentemente en la memoria. El término embebido o empotrado hace referencia al hecho de que el microcontrolador está encerrado o instalado dentro de un sistema mayor . Los microcontroladores en estos sistemas controlan electrodomésticos tales como: televisores, videos, lavadoras, alarmas, teléfonos inalámbricos, etc. Incluso una PC tiene sistemas embebidos en el monitor, impresora, y periféricos en general, adicionales a la CPU de la propia PC. Un automóvil puede llegar a tener un gran número de microprocesadores y microcontroladores microcontrol adores que controlan operaciones 1
como la ignición, transmisión, dirección asistida, frenos antibloqueo (ABS), control de la tracción, etc. Los sistemas embebidos se caracterizan normalmente por la necesidad de dispositivos de E/S especiales. Cuando se opta por diseñar el sistema embebido partiendo de una placa con microcontrolador también es necesario adquirir o diseñar placas de E/S adicionales para cumplir con los requisitos de la aplicación concreta. Muchos sistemas embebidos son sistemas de tiempo real. Un sistema de tiempo real debe responder, dentro de un intervalo restringido de tiempo, a eventos externos mediante la ejecución de la tarea asociada con cada evento. Puesto que los sistemas embebidos se suelen fabricar por decenas de miles o por millones de unidades, uno de los objetivos principales es reducir los costos. Es por ello que los sistemas embebidos suelen usar un procesador relativamente pequeño y una memoria también pequeña. En la figura se presenta la arquitectura típica de un sistema embebido
2
1.1.1 Diferencia entre microcontrolador y microprocesador Un microprocesador solamente consiste en la unidad central de procesos o CPU. La memoria, los puertos y todos los demás periféricos son exteriores. La programación de un microprocesador es, por lo tanto, una tarea compleja porque deben controlarse todos estos dispositivos externos. Un microcontrolador integra la CPU y todos los periféricos en un mismo chip. El programador se desentiende de una gran cantidad de dispositivos y se concentra en el programa de trabajo.
1.1.2 Arquitecturas La arquitectura de sistema es el diseño conceptual y la estructura operacional fundamental de un sistema con microcontrolador. Es decir, es un modelo y una descripción funcional de los requerimientos y las implementaciones de diseño con especial interés en la forma en que la unidad central de proceso trabaja internamente y accede a las direcciones de memoria. Actualmente existen dos tipos de arquitecturas que son las más utilizadas: La arquitectura Von Neumann es una familia de arquitecturas de computadoras que utilizan el mismo dispositivo de almacenamiento tanto para las instrucciones como para los datos . Es decir, que se dispone de una sola memoria principal donde se almacenan datos e instrucciones de forma indistinta accediendo a ella a través de un sistema de buses único (direcciones, datos y control).
El término Arquitectura Harvard originalmente se refería a las arquitecturas de computadoras que utilizaban dispositivos de almacenamiento físicamente separados para las instrucciones y para los datos. El término proviene de la computadora Harvard Mark I, que almacenaba las instrucciones en cintas
3
perforadas y los datos en interruptores. Las características de esta arquitectura se detallan a continuación: •
•
•
La memoria de programa y la memoria de datos constituyen dos espacios de almacenamiento separados. El acceso a cada espacio de memoria es a través de dos buses de direcciones distintos: uno que accede a los datos y otro a las instrucciones. Es la arquitectura propia de un buen número de microcontroladores (por ejemplo, AVR).
1.1.3Conjunto de instrucciones del CPU El CPU es el elemento más importante del microcontrolador y determina sus principales características, tanto a nivel hardware como software. Se encarga de direccionar la memoria de instrucciones, recibir el código de operación de la instrucción en curso, su decodificación y la ejecución de la operación que implica la instrucción, así como la búsqueda de los operandos y el almacenamiento del resultado. Existen dos principales orientaciones en cuanto a la arquitectura y funcionalidad de los procesadores actuales. ): Un gran número de procesadores CISC (Complex Instruction Set Computer ): usados en los microcontroladores están basados en la filosofía CISC. Los procesadores CISC tienen un conjunto de instrucciones que se caracteriza caracteri za por ser muy amplio y permitir operaciones complejas entre operandos situados en la memoria o en los registros internos. Este tipo de arquitectura dificulta el paralelismo entre instrucciones, por lo que, en la actualidad, la mayoría de los sistemas CISC de alto rendimiento implementan un sistema que convierte dichas instrucciones complejas en varias instrucciones simples del tipo RISC, llamadas generalmente microinstrucciones. 4
RISC (Reduced Instruction Set Computer ): ): Tanto la industria de los computadores comerciales como la de los microcontroladores han decantado hacia la filosofía RISC. En estos procesadores el repertorio de instrucciones de máquina es muy reducido y las instrucciones son simples y generalmente, se ejecutan en un ciclo de instrucción. Las características fundamentales se muestran a continuación: •
•
Las instrucciones son de tamaños fijos y son presentadas en un reducido número de formatos. Sólo las instrucciones de carga y almacenamiento acceden a la memoria de datos.
1.2Microcontroladores Atmel AVR Los microcontroladores AVR son de tipo RISC. A fin de maximizar el desempeño y el paralelismo, el AVR usa una arquitectura Harvard, con memorias y buses separados para el programa y los datos. Las instrucciones que están en la memoria de Programa se ejecutan con un solo nivel de transmisión por pipelining. Mientras que se ejecuta una instrucción, se extrae la siguiente instrucción de la memoria de Programa. Este concepto permite que las instrucciones se ejecuten en cada ciclo de reloj. La memoria de programa es la memoria flash reprogramable en el Sistema. El núcleo del AVR combina un amplio conjunto de instrucciones con 32 registros de trabajo de propósito general. Los 32 registros están directamente conectados a la Unidad Aritmético-Lógica (ALU), permitiendo que 2 registros independientes se accedan en una sola instrucción ejecutada en un ciclo de reloj. La arquitectura resultante es más eficiente en lo que respecta a código, en tanto que logra un rendimiento hasta 10 veces superior que los microcontroladores convencionales CISC. En una típica operación de la ALU, se toman 2 operandos del Archivo de Registros, se ejecuta la operación, y el resultado se almacena nuevamente en el Archivo de Registros en un ciclo de reloj. La ALU soporta operaciones aritméticas y lógicas entre registros o entre una constante y un registro. Las operaciones de un solo registro también se pueden ejecutar en la ALU. En el AVR se utiliza AVR-GCC, una versión específica de GCC ( GNU C Compiler ) para el microcontrolador AVR que posee importantes facilidades, en primer lugar es completamente gratuito y funciona para Mac, Linux y Windows. En segundo lugar es "real" C, aconsejable cuando se requiere trabajar con librerías estándar, 5
estructuras y punteros. También significa que el código es compatible con cualquier microcontrolador que utilice ANSI C.
1.2.1Microcontrolador ATMEL ATMega 168 El ATMega168 es un microcontrolador de baja potencia CMOS de 8 bits basado en el núcleo AVR. Mediante la ejecución de instrucciones de gran alcance en un solo ciclo de reloj, el ATmega 168 logra tasas de transferencia se acerca un MIPS por MHz que permite al diseñador del sistema optimizar el consumo de energía en comparación con la velocidad de procesamiento.
6
A continuación se mencionan las principales características del ATMega168: - 16K bytes de memoria tipo flash programable en-Sistema donde reside el programa de usuario. - 1K bytes de memoria SRAM de lectura y escritura. - 512 bytes de memoria EEPROM. - 32 registros de trabajo de propósitos generales (acumuladores). - 23 líneas de E/S de propósito general. - 3 TIMERS (temporizadores / contadores) con funciones de captura de flancos (especialmente útiles para leer frecuencia o período) y salidas de tipo PWM para utilizar en tareas de control. - interrupciones externas. - 1 sistema de comunicación serie asincrónica USART programable, para interfasear con dispositivos via RS-232 o RS-485. - 1 sistema comunicación serie sincrónica SPI, para interfasear con chips externos que amplíen las posibilidades del sistema embebido. - 6 canales ADC de 10 bits. - 1 comparador analógico. - 1 watchdog programable con oscilador interno - 5 modos de ahorro de energía, seleccionables por software.
7
1.2.2Esquema de la arquitectura interna del ATMega168.
8
1.2.3Esquema interno de la CPU del ATMega 168
9