A la hora de escoger un dispositivo para desarrollar una determinada aplicación se deben tener en cuenta diferentes aspectos que incluyen la revisión de requerimientos técnicos, presupuestos, etc. La idea es seleccionar un dispositivo que reúna todas las características que un diseño requiera sin necesidad de emplear dispositivos sobredimensionados para dicha aplicación. Para facilitar este hecho a continuación se presentan las características, ventajas y desventajas que representan los diferentes dispositivos.
1. Arreglos de Compuertas Programables.
Para definir este tipo de dispositivos se puede pensar en un hardware que es configurado para ser convertido en un sistema digital específico, describiendo su arquitectura mediante un lenguaje de programación de alto nivel.
Existe una amplia variedad de este tipo de dispositivos entre los que se encuentran: PLAs (Program Logic Arrays), PAL (Programmable Array Logic), GALs (Generic Logic Arrays), FPGA (Field Programmable Gate Arrays).
El hardware configurable puede consistir en arreglos múltiples de compuertas AND de entrada configuradas para alimentar arreglos múltiples de compuertas OR esto permite la implementación de complejos circuitos de lógica combinacional utilizando la representación estándar en productos de sumas. Muchos de estos dispositivos programables además están habilitados para la implementación de circuitos secuenciales puesto que contienen bloques con flip-flops. Para diseños
mucho más avanzados las PFGA pueden ser programadas con algoritmos extremadamente complejos en el desarrollo de aplicaciones específicas, normalmente estos sistemas digitales complejos son programados empleando VHDL (Verilog Hardware Descriptive Language), como su nombre lo dice se trata de un lenguaje de programación de alto nivel empleado para la descripción de este tipo de hardware.
Aunque son dispositivos que presentan grandes ventajas y funcionalidades, los sistemas de desarrollo son un poco costosos sumado al hecho de que sería sobredimensionado utilizar este tipo de dispositivos en aplicaciones pequeñas que no requieran una cantidad importante de procesamiento o que no requiera una cantidad muy grande de pines de entrada/salida.
2. Microprocesadores:
Los microprocesadores son conocidos por ser los principales circuitos integrados en el interior de los computadores personales, empleados normalmente para resolver una amplia cantidad de tareas. Los microprocesadores interpretan las diferentes instrucciones y procesa los datos contenidos en los programas de los computadores, además se encargan de coordinar las diferentes funciones internas de los PC, manejo de memoria, manejo de puertos y periféricos, de realizar los diferentes cómputos requeridos, etc. El microprocesador por si solo no maneja todo el funcionamiento de un PC, se requiere la existencia de una serie de integrados a los que entrega instrucciones para que estos se encarguen de ejecutar acciones dependiendo de su función en el sistema.
Desde la aparición de los microcontroladores se emplean en menor medida en sistemas embebidos teniendo en cuenta los costos puesto que se requerirían una serie extra de integrados por ejemplo memorias, conversores A/D, etc, para obtener la misma funcionalidad de los microcontroladores.
3. Procesadores digitales de Señal (DSPs):
Como su nombre lo indica, un DSP (Digital Signal Processor) es empleado cuando se requiere realizar complejos análisis de señales en volúmenes considerables y en tiempos reducidos, también manejan procesamiento de información en punto flotante de manera eficiente, un ejemplo de este tipo de aplicaciones es el procesamiento y acondicionamiento de señales de audio en telefonía celular. Para efectos del curso este tipo de dispositivos son demasiado sobredimensionados puesto que las aplicaciones que se realizarán a manera de prácticas y proyectos no requieren toda la velocidad ni el volumen de procesamiento que un dispositivo de estos puede brindar.
4. Microcontroladores:
Un microcontrolador (MCU) es un sistema con varios de los subsistemas que posee un computador, integrados en un solo chip, entre los que se encuentran puertos de entrada/salida, sistemas de temporización, memorias, una unidad aritmetico-lógica (ALU) que provee la capacidad de realizar operaciones aritméticas y lógicas así como la generación de señales de control. Normalmente, un microcontrolador se considera como un computador integrado en un solo chip pero con unas prestaciones bastante reducidas, siendo éste optimizado para aplicaciones específicas, son empleados cuando se requiere una moderada cantidad de inteligencia local para una determinada aplicación, aunque es posible realizar operaciones en punto flotante con un microcontrolador, está mejor calificado para trabajar con números enteros.
Dependiendo de la casa fabricante y de la familia a la que pertenecen los componentes de los microcontroladores pueden variar, donde por familia se entiende como grupos de MCUs que se especializan en aplicaciones de diferente complejidad, entre los elementos que contiene un MCU más comunes se tiene:
Unidad central de procesamiento o CPU. Normalmente con unas prestaciones muy reducidas a las de un procesador tradicional.
Memoria tanto de programa como de datos. La cantidad es muy reducida pero suficiente para manejar una aplicación específica. Se incluye memoria RAM, EPROM, EEPROM y/o FLASH.
Generador de reloj para el funcionamiento y sincronía de todo el MCU.
Periféricos de E/S tales como: o Puertos de Entrada/Salida. o Líneas de interrupción externa. o Conversores A/D y D/A.
o Generadores de base de tiempo.
o Comunicación serial mediante protocolos UART, SPI, I2C, USB, CAN, LIN, etc.
o Temporizadores de propósito específico, captura de eventos y generadores de señal PWM.
o Controladores de LCD gráficos y de caracteres.
Como se puede observar, los microcontroladores son los dispositivos mas completos y mejor dimensionados para el desarrollo de sistemas embebidos de propósitos específicos que no requieran mayor cantidad de procesamiento. Por lo tanto desempeñan un papel importante para el desarrollo del presente curso puesto que forman la base de partida para el entendimiento general de los diferentes dispositivos y sistemas digitales vistos hasta ahora.
5. Mezcla de procesamiento con microcontrolador y FPGA:
Debido a que es importante poner en una balanza la complejidad del diseño a implementar y el hecho de escoger la tecnología mas adecuada para una aplicación dada, no siempre escoger una sola tecnología es la mejor opción. Las tendencias actuales en diseños digitales es la de utilizar mezclas como en el caso de el acople de una FPGA con un microcontrolador.
Lección 14: Microcontroladores HC08
El 68HC08 también conocido como HC08 es una familia de microcontroladores de 8 bits de la casa fabricante Freescale (compañía creada a partir de la división de semiconductores de Motorola en 2004). Su arquitectura es Von Neumann, es decir con un solo bloque de memoria.
Los HC08 son microcontroladores de propósito general, cada miembro de esta familia cuenta con una CPU común que controla diferentes periféricos, facilitando con ello el diseño de aplicaciones. Entre los periféricos internos que cuentan estos microcontroladores están: conversores análogos-digitales, módulo de control de tiempos y sistemas de comunicación como SPI, I²C, USB o SCI o UART entre otros.
Freescale implementó mejoras a esta familia de microcontroladores resultando la familia HCS08 que ofrece mejoras en algunas de las instrucciones y agrega otras nuevas, además en esta mejora los programas que corren en los microcontroladores pueden ser corregidos empleando un puerto dedicado llamado BDM (Backgound Debug Module) , que mejora la versatilidad y amplia la gama de aplicaciones posibles. Existen infinidad de entornos de desarrollo tanto pagos como libres, para compilar programas realizados en assembler existe un compilador gratuito de la firma P&E Micro, para compilar en C los compiladores más utilizados son Freescale Codewarrior (licenciado) o SDCC, un proyecto muy interesante y funcional que permite compilar código escrito en C para múltiples plataformas de microcontroladores.
1. Arquitectura.
En la figura 22 se observa los dispositivos de la familia HC08 presentan muchos de los elementos ya vistos a lo largo de esta unidad otros serán explicados mas adelante; por el momento basados en la figura 22 solo serán enumeradas las características generales que presentan esta familia de dispositivos.
Control de estado del sitema: (SIM:System Integration Module). o Modos de bajo consumo (Wait, Stop ).
o LVI (Low Voltaje Inhibit), monitor de VDD Bajo.
o COP(Computer Operating Properly), perro guardian o Watch Dog. o Detección de Código de operación ilegal.
o Detección de direccionamiento no válido. o POR: Power On Reset.
o Control de reset interno o externo. o Retardo de encendido temporizado. o Control de interrupciones y prioridades.
Memoria:
o Mapeada en su totalidad en un único espacio.
o Indiferencia para guardar datos y programa en cualquier espacio. o Modo de bajo consumo para almacenamiento en RAM.
o Flash y EEPROM programables internamente. o 10.000 ciclos de escritura y borrado.
o 10 Años de retención de datos.
Temporización:
o Temporizadores (Timers) de 16 bits multicanal y multifunción. Entradas de captura.
Salidas por comparación. Salidas PWM.
o Generadores de base de tiempos para aplicaciones en tiempo real. o Módulo PLL para trabajar con cristales de baja frecuencia:
Reducción de EMI (Electro-Magnetic Interference). Control de consumo.
o Opcionalmente versiones con reloj interno (minimización de elementos de montaje).
Comunicaciones:
o Interfase serie sincrónica SPI hasta 4 MHz (Fbus/2). o USB a 1.5Mbps.
o Soporte de Bus CAN.
o Buffers de transmisión/recepción.
Entradas y Salidas:
o Conversores A/D de 8/10 bits de aproximaciones sucesivas. o Puertos de E/S Configurables.
o Pines independientes configurables.
Pull/ups internos activos/desactivos.
o Interfaz para teclado externo por interrupción, función Wake-up. A continuación se entra a analizar deferentes aspectos de la arquitectura de los microcontroladores de la familia HC08:
2. Temporización.
Una fuente de reloj de alta frecuencia (típicamente derivada de un cristal conectado al MCU) se usa para controlar las secuencias de instrucciones de la CPU. La mayoría de los HC08 incluyen un circuito PLL en su interior cuya función es generar frecuencias mas grandes a partir de la frecuencia del cristal, los MCUs típicos dividen la frecuencia base del cristal por dos o más para obtener un reloj de frecuencia de bus.
Cada lectura o escritura de memoria toma un período (ciclo) de la frecuencia de bus, por ejemplo, con un cristal de 4 MHz dividido por 2 obtiene la frecuencia interna de reloj del procesador de frecuencia de bus de 500 nS. La mayoría de las instrucciones toman de dos a cinco de estos periodos; como resultado , la CPU es capaz de ejecutar más de 500.000 instrucciones por segundo.
3. Funcionamiento interno de la CPU.
Todos los MCUs de la familia HC08 incluyen en su interior la CPU08 como unidad central de proceso, la diferencia entre los dispositivos de esta familia radica en la cantidad de memoria y los periféricos disponibles.
La CPU08 básicamente está dividida en dos bloques principales: Unidad de Control y Unidad de Ejecución. La primera contiene una máquina de estados finita con lógica de sincronización y control. Las salidas de ésta controlan la segunda unidad, la cual contiene una ALU, registros y una interfaz hacia el bus de datos y direcciones.
Internamente, la CPU utiliza cuatro fases de reloj para conformar lo que se denomina un ciclo de ejecución de la CPU o simplemente ciclo de bus, el cual tiene un periodo igual al periodo de la frecuencia del bus, siendo 4 veces el
periodo del cristal/oscilador externo. La frecuencia de bus es la frecuencia del cristal, oscilador externo o la salida del módulo PLL dividido por 4.
Donde CGMXCLK hace referencia a la frecuencia de entrada al módulo, la cual proviene directamente del oscilador/cristal externo. CGMVCLK es la frecuencia generada por el módulo PLL en los MCUs que disponen de él.
4. Consideraciones sobre la pila de la CPU08.
La pila del sistema es una zona de memoria RAM direccionada por el puntero de pila o SP, la cual sirve para almacenar información temporalmente. El SP siempre está apuntando a una dirección libre de la pila o stack.
La CPU utiliza la pila para:
Almacenar el contenido del PC cuando se hace un llamado a subrutina (BSR o JSR) con el fin de poder retornar cuando ella finalice, es decir, cuando se encuentre la instrucción RTS (Return of Subrutine).
Almacenar el contenido del PC y varios de los registros del modelo de programación cuando se produce una interrupción de manera que se pueda retomar la ejecución del programa en donde ésta se presentó. La finalización de una subrutina de atención a interrupción se da cuando se ejecuta la instrucción RTI (Return of Interrupt).
Adicionalmente, el programador puede utilizar la pila para:
Almacenar información temporal cuando está realizando operaciones aritméticas.
Enviar parámetros a las subrutinas.
Retornar parámetros desde una subrutina.
La CPU08 ofrece un conjunto de instrucciones que permiten manipular el puntero de pila SP con el fin de poder colocar/tomar datos en/desde la pila, incluso, el programador en cualquier momento podrá reubicar la posición del SP haciendo uso de la instrucción TXS (transferir H:X a SP). Por compatibilidad con la familia HC05 el puntero de pila arranca en la dirección de memoria $00FF.
La pila en la CPU08 trabaja como una memoria LIFO (Last Imput First Output) (último en entrar primero en salir) siendo necesario tener presente este concepto a todo momento.
5. Mapa de Memoria del 68HC08
Para la familia HC08 el mapa de memoria se puede apreciar en la figura 23, se puede apreciar que comienza con los registros de los periféricos (64 bytes), seguido del espacio para la RAM, después existe un espacio no utilizable por el usuario empleado para realizar verificaciones de direcciones ilegales, luego sigue el espacio para la memoria ROM o FLASH, finalmente siguen otros registros de propósitos específicos (ver figura 23).
Figura 23: Mapa de memoria para la familia 68HC08.
6. Juego de instrucciones.
La familia 68HC05 posee un juego de instrucciones de 85 elementos, sobre esta base trabaja también la familia 68HC08 pero añadiendo 28 instrucciones que complementan a las básicas para añadir mayor funcionalidad y eficiencia a estos dispositivos; por el momento se presentan las instrucciones en la Tabla 3 para que el estudiante se familiarice con los nombres y su funcionalidad general sin entrar a especificar su sintaxis y funcionalidad específica, se resaltan en rojo las instrucciones añadidas a la familia 68HC08.
Tabla 3: Juego de instrucciones de la familia 68HC08:
Transferencia de Datos LDA, LDX, STA, STX, TAX, TXA, LDHX, MOV,
Aritméticas ADD, ADC, SUB, SUBC, MUL, DAA, DIV
Manipulación de Datos INCA, INCX, INC, DECA, DECX, DEC, CLR, NEGA,
NEGX, NEG,AIS, AIX, CLRH
Rotación y Desplazamiento
ROLA, ROLX, ROL, RORA, RORX, ROR, LSLA, LSLX, LSL, LSRA, LSRX, LSR, ASRA, ASRX, ASR
Manipulación de bits BSET, BCLR
Lógicas AND, ORA, EOR, COMA, COMX, COM, NSA
Comparación CMP, CPX, BIT, TSTA,TSTX, TST, BRCLR, BRSET,
CPHX
Salto condicional BRA, BRN, BSR, BHI, BLO, BHS, BLS, BPL, BMI,
BEQ, BNE, BCC, BCS, BHC, BHCC, BHCS, BMC, BMS, BIL, BIH, BGE, BGT, BLE, BLT, CBEQ, CBEQA, CBEQX, DBNZ.
Salto incondicional JMP, JSR, RTS
De Control SEC, CLC, SEI, CLI, SWI, RTI, RSP, NOP, WAIT,