Resumen dispositivos microprogramables

DISPOSITIVOS LÓGICOS MICROPROGRAMABLES Resumen teórico 15.1

Índice / Introducción Bootloader Prácticas

Dispositivos lógicos microprogramables. Resumen



Índice de contenidos


Introducción

    Existen dispositivos digitales realizados mediante circuitos integrados de catálogo de función lógica fija como puertas lógicas, biestables, decodificadores, multiplexores, contadores. Estos dispositivos una vez implementados únicamente pueden realizar el propósito para el que fueron creados. Si se necesita realizar otra función es necesario rehacer el diseño e implementar un nuevo circuito para el dispositivo.

    Un fabricante que utilizase este tipo de circuitos digitales en sus productos tendría que realizar un circuito específico para cada producto y modelo. Sería mucho más conveniente utilizar un dispositivo que tenga un propósito general, que no sea necesario cambiar para uno u otro producto y modelo, sino que se pueda programar para indicarle lo que debe realizar. A este tipo de dispositivo se le denomina microprogramable.


Objetivos


Lógicas cableada y programada

    En electrónica digital se pueden diferenciar dos lógicas:

Lógica cableada: En este tipo de lógica, para cada aplicación ha de diseñarse un circuito específico, que luego es muy dificil (o imposible) de modificar.

Lógica programada: En este tipo de lógica un mismo dispositivo o conjunto de dispositivos pueden resolver infinidad de problemas gracias a que pueden configurarse de distintas maneras programando su funcionamiento. Un sistema microprogramable utiliza este tipo de lógica.


Definición de un sistema microprogramable

    En términos generales un sistema microprogramable es un dispositivo o conjunto de dispositivos de propósito general, que según sea necesario se programan para resolver distintos problemas.

    El ejemplo mas conocido de sistema microprogramable es un PC.


Aplicaciones de un sistema microprogramable

    Los sistemas microprogramables tienen una gran variedad de aplicaciones, ya que simplemente variando la programación, se les puede indicar que realicen una función u otra, siendo las mas importantes:

    Podemos considerar que los sistemas microprogrables son máquinas sin las cuales las comunicaciones, el transporte, la industría, la medicina, incluso nuestros hogares no serían tal y como ahora los conocemos.

    El derrallollo de los sistemas microprogramables los ha convertido en una herramienta muy poderosa y a su vez son un medio fundamental para continuar el progreso.


Hardware y software

    Un sistema microprogramable esta formado por los siguientes componentes:

  • Firmware: Es un "software" grabado en la estructura electrónica del sistema microprogramable y que el usuario en principio no puede alterar. En los ordenadores personales, la BIOS (Basic Input/Output System) utiliza firmware y contiene un grupo de programas que sirven de intermediario entre el software y hardware.

Clasificación de los sistemas microprogramables

    Podemos clasificar los sistemas microprogramables según el número de distintos circuitos integrados que lo forman, su capacidad de trabajo y el tratamiento de datos en:

Microprocesadores
Microcontroladores
Dispositivos PLDs

    Los dos primeros, microprocesadores y microcontroladores podemos considerarlos como sistemas microprogramables basados en CPU


Sistemas microprogramables

Microprocesadores y microcontroladores








Microprocesadores y microcontroladores

    Estos sistemas son capaces de leer, interpretar y luego ejecutar de forma secuencial las instrucciones contenidas en un programa.

    Todos los sistemas microprogramables sin que importe lo complejos que sean (salvo los PLDs) ya sean un PC, o un superordenador, o el microcontrolador de un lavavajillas poseen la estructura que se muestra en la siguiente figura.


Microprocesadores y microcontroladores

    En dicha estructura se distinguen los siguientes elementos:

  • Reloj

  • Unidad Central de
    Proceso (CPU)

  • Memoria Interna

  • Unidad de entradas y
    salidas

  • Exterior (Periféricos)

Microprocesadores y microcontroladores

Reloj

    El reloj: es un generador de ondas cuadradas periódicas, utilizado para que todo el sistema esté sincronizado.


Microprocesadores y microcontroladores

Unidad Central de Proceso o CPU I

Unidad Central de Proceso o CPU

    La Unidad Central de Proceso o CPU (Central Process Unit) es la parte mas importante del sistema microprogramable. Es donde se realiza la interpretación y ejecución de las instrucciones, se generan todas las órdenes de control para gobernar todo el sistema y se realizan las operaciones aritméticas y lógicas. Todo ello se realiza con los datos procedentes de la Memoria Interna o de registros internos. También, es la encargada de realizar todas las transferencias de datos hacia la memoria o desde esta.

    La CPU está formada por:

  • Unidad Aritmética-Lógica
  • Acumuladores y Registros
  • Unidad de Control

Microprocesadores y microcontroladores

Unidad Central de Proceso o CPU II

    Todas sus funciones se realizan en sincronía con la señal del reloj, por ello, la frecuencia del reloj define la velocidad del sistema. Su estructura interna es compleja y si se presenta todo integrado en un único circuito integrado se denominada microprocesador. El uso de dichos microprocesadores esta muy extendido y son ampliamente utilizados en sistemas tales como ordenadores personales (PCs), controles industriales, grandes ordenadores, etc.

Microprocesador para PC
Pentium 4

Microprocesadores y microcontroladores

Memoria Central o Interna

    En los dispositivos que forman la Memoria Central o Interna se encuentran los programas que debe utilizar el sistema microprogramable, los datos necesarios y los resultados que se generan. Existe otro tipo de memorias con las cuales no se deben confundir, denominadas memorias de masa, que forman parte de los periféricos y se encuentran fuera del sistema, como por ejemplo los discos duros.

Módulos de memoria
RAM de un PC

Microprocesadores y microcontroladores

Unidad de entrada/salida

    La Unidad de entrada/salida (interface) permite la comunicación del sistema microprogramable con el exterior. Su función fundamental es la de adaptar las diferentes velocidades y códigos utilizados por los elementos externos del sistema y el interior.


Microprocesadores y microcontroladores

Periféricos

    Estrictamente hablando podríamos decir que los periféricos no forman parte del sistema microprogramable. Es un conjunto de dispositivos que realizan un trabajo en el exterior del sistema. Estos periféricos pueden ser de entrada o de salida, aunque existen algunos que realizan ambas. Por ejemplo, en un PC los periféricos de entrada mas importantes son el teclado y el ratón y los de salida el monitor y la impresora.

    Un sistema microprogramable puede controlar multitud de dispositivos de manera que también pueden considerarse periféricos un motor eléctrico, una electroválvula, un sensor de movimiento, un brazo robot, etc.


Microprocesadores y microcontroladores

Microprocesadores

El sistema microprogramable esta dividido en diversos circuitos integrados, denominándose al más importante microprocesador. El microprocesador incluye únicamente en su interior la Unidad Central de Proceso, de ahí, que se le conozca también como CPU.

    Los microprocesadores se utilizan en aquellas aplicaciones en las que se requieren grandes cantidades de memoria, ejecutar una gran cantidad de programas o se prevea hacer futuras ampliaciones realizando las tareas a una elevada velocidad. Un ejemplo de aplicación son los ordenadores personales.


Microprocesadores y microcontroladores

Microcontroladores

Todo el sistema microprogramable está integrado en un único circuito integrado, de manera que un microcontrolador es un circuito integrado que integra en la misma pastilla la CPU, la Memoria Central, los puertos de E/S digitales y otros elementos. Como desventaja su capacidad de trabajo es menor que la de los microprocesadores.

    Se utiliza en aquellas aplicaciones en las que necesitamos el uso de un pequeño procesador. Se encuentra por todas partes, por ejemplo, los autómatas programables industriales poseen este tipo de circuitos integrados, al que se le han añadido sistemas de control de potencia tales como relés para poder controlar máquinaria industrial.


Sistemas microprogramables

Dispositivos PLDs



Dispositivos PLDs

    Aparte de los sitemas basados en CPU, existen distintas alternativas para implementar sistemas electrónicos digitales.

    Circuitos comerciales estándar: Son los circuitos integrados con función lógica fija, como el 74LS00, el 4043 o el 74HCT00.

    ASIC (Application Specific Integrated Circuit): Son c.i. específicos para una aplicación y se utilizan en realizaciones complejas que exigirían un número elevado de circuitos integrados de función fija. Están diseñados a medida y sólo sirven para una aplicación. Por regla general, los producen los fabricantes de c.i. con las especificaciones proporcionadas por el cliente.

    PLD (Programmable Logic Device): Este es un término muy amplio pero lo limitaremos para definir a los circuitos integrados cuya funcionalidad puede ser programada por el usuario pero que internamente no tienen la estructura de microprocesadores y microcontroladores pues no están basados en una CPU que lea un programa de una memoria.


Dispositivos PLDs

Ventajas de los PLDs

    Un sólo circuito integrado PLD puede sustituir desde unos pocos hasta unas decenas o cientos de c.i. de función fija, mientras que los grandes ASICs pueden sustituir a cientos e incluso miles de c.i.

    Los PLDs están situados en una zona intermedia entre los dispositivos a medida y la lógica de catálogo formada por los c.i. de función fija. Tienen casi todas las ventajas de los ASICs sin estar penalizados por un costo elevado para pequeñas series. Además el ciclo de diseño con PLDs es mucho más rápido que los ASIC. En ocasiones, los PLD se utilizan para realizar prototipos que posteriormente se llevarán a un ASIC más económico para grandes series.

    Se utilizan para resolver problemas combinacionales o secuenciales. A igualdad de costo son muy superiores a los sistemas basados en CPU en aplicaciones de procesamiento de señales a alta velocidad.

    El trabajo con PLDs proporciona: facilidad de diseño con una importante reducción en el tiempo de desarrollo, altas prestaciones, fiabilidad, economía y seguridad, con una reducción en el tamaño de los equipos que los incorporan con la consiguiente reducción de costos.


Dispositivos PLDs

Aplicaciones I

    Los PLDs hoy en día están presentes en la mayoría de los desarrollos debido a las ventajas que los mismos presentan frente a la lógica convencional, lo cual lleva a una gran variedad de aplicaciones.

    Uno de los campos de mayor aplicación son los sistemas de tratamiento de señal en tiempo real. Hay PLDs que pueden tratar señales de mas de 300 MHz o de 6 Gbps. Un sistema basado en CPU necesitaría ser muy potente para poder tratar señales a esas velocidades y muchisimo mas caro.

    En muchos casos se utilizan en sitemas junto a microcontroladores.

    Podemos encontrar PLDs en:


Dispositivos PLDs

Aplicaciones II


Dispositivos PLDs

Clasificación de PLDs

    Desde el punto de vista de su complejidad vamos a dividirlos en dos grupos:

    SPLD (Simple Programmable Logic Device): Son circuitos integrados que utilizan matrices de puertas programables.

    HCPLD (High Capacity Programable Logic Devices): Estos circuitos integrados están constituido por bloques internos programables, cada uno de una complejidad similar a un SPLD. Además de programar los bloques se programa como se interconectan internamente.


Dispositivos PLDs

Matrices Lógicas Programables I

    Son dispositivos no volátiles y genéricamente consisten en una matriz de puertas AND seguida de otra matriz de puertas OR interconectadas a través de conexiones programables.

    Aprovechando que cualquier función se puede escribir como suma de productos, eliminando las conexiones adecuadas, se puede programar un número limitado de mintérminos (minterms).


Dispositivos PLDs

Matrices Lógicas Programables II

    En este ejemplo podemos ver como se han eliminado todos las conexiones a excepción de las marcados con una "X", para conseguir dos funciones.

    Las PLDs que utilizan la estructura de matriz de puertas programable pueden tener fácilmente entre 100 y 2.000 puertas e incluso más. Además pueden incluir básculas y flip-flop lo que les permite resolver tanto problemas de lógica combinacional como secuencial.

    Esto significa que un sólo circuito integrado PLD podría sustituir en un montaje a cientos de integrados de función lógica fija.


Dispositivos PLDs

Matrices Lógicas Programables III

    Existen varias clases de PLDs que emplean esta estructura:

    PLA (Programmable Logic Array): Tecnología bipolar. Programable por fusible una única vez. Matrices AND y OR programables.

    PAL (Programmable Array Logic): Tecnología bipolar. Programable por fusible una única vez. Programable sólo matriz AND, matriz OR fija. Ejemplos: 16L8 y 16R8 (20 patillas).

    EPLD (Erasable PLD): Grabable eléctricamente. Borrado por ultravioleta. Un sólo EPLD sustituye de 20 a 25 de los anteriores.

    GAL (Generic Array Logic): Grabable y borrable eléctricamente. Pensadas para sustituir a la mayoría de las PALs manteniendo la compatibilidad terminal a terminal. Son las que se utilizan actualmente. Ejemplos: 16V8, 20V8 y 16Z8.


Dispositivos PLDs

Clasificación de los HCPLD

    Los HCPLD se dividen básicamente en CPLD (Complex Programable Logic Devices) y FPGA (Field Programable Gate Array). Su diferencia básica reside en como se implementan los bloques lógicos y como se interconectan.

    CPLD (Complex PLD): Alberga en su interior grupos de SPLDs y añade otra serie de elementos que permite la interconexión en su interior de estos grupos.

    FPGA (Field Programable Gate Array): Los bloques de lógica se realizan bien mediante memoria RAM estática (Look-Up Table o LUT), o mediante multiplexores. La interconexión entre bloques se realiza mediante celdas de RAM estática y transistores o multiplexores, o bien mediante "antifusibles". Son los PLDs mas avanzados. Pueden tener el equivalente a mas de 20.000 puertas y un elevado número de registros, con integrados que pueden llegar a tener mas de 200 patillas. Pueden tratar señales de mas de 300 MHz o 6 Gbps por un bajo costo (ejemplos tratamiento de señales audio/vídeo y redes).


Dispositivos PLDs

Programar PLDs

    Para programar PLDs existen programas como PALASM, ABEL u OrCAD/PLD en los que se expresa la lógica de los circuitos de diversas formas: ecuaciones como suma de productos, tablas de verdad, esquemas, etc.

    Algunos son capaces de simplificar la lógica y de ser independientes de los dispositivos utilizando HDLs (Hardware Description Languages), como Verilog que tiene una sintaxis similar al C y VHDL (Very high speed integrated circuit HDL).

    A la derecha se muestra el contenido de un archivo escrito en ABEL de un diseño de lógica secuencial. Con él se implementa en la PAL 16R4 un simple contador binario de 4 bits. Este lenguaje utiliza ecuaciones booleanas que representan la lógica del contador.


Dispositivos PLDs

Fabricantes

    Son varios los fabricantes de dispositivos PLD. Aquí sólo ofrecemos una muestra de los mas especializados. Especial atención merece Altera, pues es líder del sector en algunos tipos de PLDs, como los CPLD.

http://www.altera.com
http://www.latticesemi.com/
http://www.xilinx.com/
http://www.cypress.com

Microcontroladores







El microcontrolador I

    Un microcontrolador es un sistema microprogramable que se presenta en un circuito integrado de alta escala de integración, es decir, se trata de un ordenador completo en un solo circuito integrado.

En su interior se encuentra una CPU, Unidad E/S y memoria interna, normalmente memoria RAM (volatil) para guardar datos y memoria de programa no volatil (EPROM, EEPROM o Flash) donde reside el programa a ejecutar.

La señal de reloj puede generarse internamente o bien mediante elementos externos, una red RC, un cristal de cuarzo o un resonador.

Incluye otros elementos que difieren del modelo de microcontrolador, como por ejemplo contadores, temporizadores, conversores AD, puertos de comunicaciones, etc.


El microcontrolador II

    Aunque las prestaciones de un microcontrolador son limitadas, además de la alta integración, una de sus características principales es su alto nivel de especialización.

    Aunque los hay del tamaño de un sello de correos, lo normal es que sean incluso más pequeños, ya que, lógicamente, forman parte del dispositivo que controlan.

    El microcontrolador es uno de los mayores avances de la microelectrónica e incorpora la mayor parte de los elementos que configuran un controlador (dispositivo que se emplea para el gobierno de uno o varios procesos). Podemos decir que contiene todos los componentes fundamentales de un ordenador, aunque con los recursos limitados, como poca memoria o una CPU sencilla. Se suele destinar a gobernar una sola tarea.

    Fotografía de un microcontrolador sobre un dedo, el PIC12C509, un sistema microprogramable completo con 8 patillas en una cápsula de 12x6mm, que pesa unos 3 gramos y que cuesta menos de 1 euro (en grandes cantidades).

  

El microcontrolador III

    Dado el pequeño tamaño de los microcontroladores suelen estar situados en la misma aplicación a la que gobiernan. Un buen ejemplo son el teclado y el ratón de un PC. El microcontrolador en el teclado se encarga de detectar la tecla pulsada, generar el código que la identifica y enviarlo al PC. En el ratón, el microcontrolador cuenta, registra y transmite al PC los impulsos en el eje X y en el eje Y que se producen al mover el ratón. También detecta, codifica y transmite la pulsación de los botones.

  

    Un microcontrolador incrustado en el producto que controla sólo está dedicado a esa tarea, por eso ejecuta siempre el mismo programa, maneja datos parecidos y controla los mismos periféricos. Un PC es un sistema programable de propósito general, pues puede destinarse desde a realizar un texto a componer música o controlar un proceso industrial.

    Un microcontrolador permite que un "pequeño ordenador" pueda controlar cualquier cosa, por pequeña o barata que sea.


Aplicaciones de los microcontroladores

    Las posibilidades de utilización de los microcontroladores no tienen limite. Por ejemplo pueden utilizarse en un receptor de radio, que en principio no necesita de ningún sistema microprogramable para realizar su función, pero su inclusión permite elevar las prestaciones de la radio, en cuanto a sintonización, memorización de emisoras, busquedas automáticas, presentación en display de mensajes (como la emisora sintonizada), etc.

    Los microcontroladores se encuentran por todas partes:


Aplicaciones de los microcontroladores

Automoción I

Microcontroladores en un automóvil:

  • control del motor
  • consumo, gases, etc
  • climatización
  • seguridad (Airbag)
  • control de frenado (ABS)
  • instrumentación
  • control de velocidad
  • sistemas de seguridad
  • antirrobo
  • mantenimiento
  • sistema de navegación
  • control luces
  • ordenador de viaje, etc.

Aplicaciones de los microcontroladores

Automoción II


Aplicaciones de los microcontroladores

Microcontroladores en el hogar

    • Cocina:       • General:  
        • Lavadora......................... 1         • Calefacción..................... 1
        • Horno.............................. 1         • Alarma robo/incendio/gas.. 3
        • Frigorífico........................ 1         • Aire acondicionado............ 1
        • Lavavajillas...................... 1         • Videoportero................... 2
    • Salón:       • Automóvil: 
        • TV................................. 2         • Frenos ABS..................... 1
        • Video............................. 1         • Climatización................... 1
        • DVD............................... 2         • Alarma antirrobo.............. 1
        • Receptor TDT.................. 2         • Airbag............................ 1
        • Teléfono fijo.................... 1         • Equipo música................. 1
        • Teléfono móvil................. 1         • Ordenador de viaje........... 1
    • Garage:           • Control motor.................. 1
        • Puerta automática............ 1         • Sistema seguridad............ 1
    • Ascensor............................ 2     • PC y periféricos................... 6
        • TOTAL: 38

Aplicaciones de los microcontroladores

Microrrobotica I

Prototipo PALMA de apoyo a niños con parálisis cerebral. Instituto de Automática Industrial (CSIC) Estructura de un microrrobot

Aplicaciones de los microcontroladores

Microrrobotica II

Microrrobot HUSQVARNA que recorta continuamente el césped de un jardín, y que se alimenta con energía solar.

Aplicaciones de los microcontroladores

Microrrobotica III


Aplicaciones de los microcontroladores

Microrrobotica VI


Aplicaciones de los microcontroladores

Servidor WEB embebido

    Hay un consenso general según el cual en los próximos años cada vez habrá más dispositivos con capacidad de comunicación por Internet pero que no serán ordenadores. Se preveé que por el 2010, el 95% de los dispositivos conectados a Internet serán de este tipo, los "Embedded Internet devices" algo asi como "dispositivos miniaturizados para acceso a Internet".

    Suelen presentarse como servidores web que utilizan TCP/IP y Ethernet. Hay versiones para cable con RJ45 o WiFi y también se les conoce como "Embedded Ethernet Server" o "Servidores Embebidos Ethernet". En la siguiente imagen se muestra gráficamente el potencial de conectividad remoto o local mediante control web de un proceso térmico. Mediante un navegador web puede visualizarse el sitio que sirve el servidor embebido. En el ejemplo se muestra una página que refleja la temperatura del proceso térmico y que muestra información y que permite también gobernar el sistema remoto:


Conectividad de un Servidor WEB embebido


Web de control mediante servidor web embebido


Servidor Web Ethernet Siteplayer

    NetMedia SitePlayer SP1 (www.picsiteplayer.com) es un módulo electrónico insertable (plug-in module) de reducidas dimensiones que actúa como un servidor web Ethernet. Ha sido diseñado para proporcionar de forma fácil y económica la conexión de un dispositivo basado en CPU a Internet. Esto significa que puede conectarse un microcontrolador a Internet con solo utilizar este circuito para controlar dispositivos.


    SitePlayer tiene un tamaño de 23 x 33 mm, y es uno de los servidores web Ethernet más pequeños del mundo que permite conectar cualquier dispositivo a Internet. SitePlayer es un "módulo microcontrolador servidor web ethernet integrado conectable" que incluye un Microcontrolador de 8 bit CMOS avanzado basado en 80C51 (P89C51RD2HBBD de Philips), un controlador Ethernet 10baseT (el Realtek RTL8019AS), 48 Kbytes de memoria flash para albergar las paginas web, 8 puertos de entrada/salida y un puerto serie para comunicarse con un dispositivo.

    Los puertos de E/S además de un control todo/nada, pueden utilizarse como PWMs o DACs de 8 bits, generadores de frecuencia, o contadores de evento. Estas funciones también están disponibles para el dispositivo basado en microprocesador al que se conecte. Con todo esto, el SitePlayer puede utilizarse de forma independiente y directa mediante los 8 puertos E/S que incluye, o bien conectarse a cualquier microcontrolador o microprocesador mediante el puerto serie.

    Comparando al Siteplayer con un PC podríamos decir:


    Posibles aplicaciones de Siteplayer:

    Para funcionar sólo necesita una alimentación de +5V DC y un conector Ethernet específico.


    Aplicación prototipo SitePlayer:


Clasificación de microcontroladores I

    Un microcontrolador es un sistema microproglamable en un circuito integrado pero de recursos y capacidades limitados. Se emplea para controlar una aplicación concreta y suele ir dentro del mismo producto que controla. Dependiendo de la aplicación a la que se destine, las carácterísticas que debe reunir deben ser diferentes:

    Debido a la gran diversidad de requerimientos que pueden existir en las aplicaciones, los fabricantes ofrecen una gran variedad de microcontroladores, desde los mas sencillos hasta los mas complejos.


Clasificación de microcontroladores II

    Para clasificar a los microcontroladores podemos atender al tamaño del bus de datos, el conjunto de líneas por las cuales se transfiere información en el interior del microcontrolador. Hay cuatro tipos:


Mercado y fabricantes

Distribución de las ventas mundiales según su aplicación:

    Aunque en el mercado de la microinformática la mayor atención la acaparan los desarrollos de los microprocesadores, lo cierto es que se venden cientos de microcontroladores por cada uno de aquéllos. Los grandes fabricantes sacan al mercado millones de microcontroladores cada semana.


    Producción mundial de microcontroladores por año:


Fabricantes I

    La mayoría de los fabricantes de circuitos integrados fabrican también microcontroladores, debido al gran negocio que representan.

    INTEL fue pionero en la fabricación de microcontroladores, con el modelo 8048 en la década de los 70, poco después de comerzializar en 1971 el primer microprocesador del mundo, el 4004. Posteriormente cosechó un notable éxito con la generación de microcontroladores de 8 bits de la familia 8051, a la que siguió la 80C196 de 16 bits. En la década de los 90 ha sido MOTOROLA la que ha ocupado el primer puesto como fabricante de microcontroladores, sobre todo gracias al modelo de 8 bits, 68HC11. En estos comienzas del siglo XXI es sin embargo la empresa americana MICROCHIP quien domina el mercado, gracias a las excelentes características de sus microcontroladores.


Fabricantes II

    Ranking de producción de microcontroladores


Microcontroladores PIC

    Los PIC son una familia de microcontroladores programables basados en una arquitectura tipo Harvard y que utilizan un repertorio de instrucciones máquina muy reducido (RISC). Son fabricados por Microchip Technology Inc. una empresa lider en microcontroladores junto a Motorola o Intel que se ha abierto un hueco bastante importante en el mercado de los microcontroladores por su reducido coste, su amplia gama y la gran cantidad de información disponible.

    El nombre PIC son las iniciales de Peripheral Interface Controller (Controlador de Interfaz Periférico). Derivan del PIC1650, originalmente desarrollado por la división de microelectrónica de General Instruments.

    RISC: Tanto la industria de los ordenadores como la de los microcontroladores están decantándose hacia la filosofía RISC (Conjunto de Juego de Instrucciones Reducido). En estos procesadores el repertorio de instrucciones máquina es muy reducido y las instrucciones son simples y, generalmente, se ejecutan en un ciclo. La sencillez y rapidez de las instrucciones permiten optimizar el hardware y el software del procesador.

    Utilizaremos el PIC16F84A para trabajar con microcontroladores y por extensión con sistemas microprogramables basados en CPU.


Arquitectura de un microcontrolador

  • Procesador o CPU (Unidad Central de Proceso).
  • Memoria Central:
    • Memoria de programa de tipo ROM/EPROM/EEPROM/Flash .
    • Memoria de datos de tipo RAM.
  • Buses de control, datos y direcciones.
  • Líneas de E/S para comunicarse con el exterior.
  • Recursos auxiliares (temporizadores, Puertas Serie y Paralelo, Conversores Analógico/Digital, Conversores Digital/Analógico, etc.).
  • Generador de impulsos de reloj (sincroniza el funcionamiento de todo el sistema).

Arquitectura Von Neumann y arquitectura Harvard

    El modelo de bloques que hemos visto anteriormente es válido para prácticamente todos los microcontroladores del mercado.

    No obstante, si profundizamos mas en la arquitectura, nos encontramos que para cualquier sistema microprogramable basado en CPU, sea un ordenador con un microprocesador o un microcontrolador hay dos arquitecturas distintas relacionadas con el uso y distribución de la memoria, la arquitectura Von Neumann y la arquitectura Harvard.

    Los microcontroladores PIC utilizan una arquitectura Harvard.


Arquitectura Von Neumann I

    Tradicionalmente los sistemas con microprocesadores se basan en esta arquitectura, en la cual la unidad central de proceso (CPU), está conectada a una memoria principal única (casi siempre sólo RAM) donde se guardan las instrucciones del programa y los datos. A dicha memoria se accede a través de un sistema de buses único (control, direcciones y datos):


Arquitectura Von Neumann II

    En un sistema con arquitectura Von Neumann el tamaño de la unidad de datos o instrucciones está fijado por el ancho del bus que comunica la memoria con la CPU. Así un microprocesador de 8 bits con un bus de 8 bits, tendrá que manejar datos e instrucciones de una o más unidades de 8 bits (bytes) de longitud. Si tiene que acceder a una instrucción o dato de más de un byte de longitud, tendrá que realizar más de un acceso a la memoria.

    El tener un único bus hace que el microprocesador sea más lento en su respuesta, ya que no puede buscar en memoria una nueva instrucción mientras no finalicen las transferencias de datos de la instrucción anterior.


Arquitectura Von Neumann III

    Las principales limitaciones que nos encontramos con la arquitectura Von Neumann son:


Arquitectura Harvard

    Este modelo, que utilizan los microcontroladores PIC, tiene la unidad central de proceso (CPU) conectada a dos memorias (una con las instrucciones y otra con los datos) por medio de dos buses diferentes.

     Una de las memorias contiene solamente las instrucciones del programa (Memoria de Programa), y la otra sólo almacena datos (Memoria de Datos).

    Ambos buses son totalmente independientes lo que permite que la CPU pueda acceder de forma independiente y simultánea a la memoria de datos y a la de instrucciones. Como los buses son independientes éstos pueden tener distintos contenidos en la misma dirección y también distinta longitud. También la longitud de los datos y las instrucciones puede ser distinta, lo que optimiza el uso de la memoria en general.


Arquitectura de un microcontrolador PIC

    A continuación veremos algunos aspectos de la arquitectura de los microcontroladores PIC, y por extensión de muchos otros microcontroladores.

    Se recuerda cuales son los elementos de un microcontrolador:

    Para no repetir lo que es común a otros sistemas microprogramables basados en CPU a continuación nos centraremos en los siguientes elementos de un microcontrolador PIC:


Memoria de programa

    Contiene las instrucciones del programa que gobierna la aplicación a la que se destina el microcontrolador. Como siempre se realiza la misma tarea y no debe perderse la información grabada cuando se desconecta la alimentación debe utilizarse una memoria no volatil:


Memoria de datos

    Almacena los datos variables y los resultados temporales. Debe permitir lectura y escritura. En un microcontrolador se suele encontrar:


Recursos de los microcontroladores

    Cada fabricante oferta numerosas versiones de una arquitectura básica de microcontrolador. En algunas amplía las capacidades de las memorias, en otras incorpora nuevos recursos, en otras reduce las prestaciones al mínimo para aplicaciones muy simples, etc. La labor del diseñador es encontrar el modelo mínimo que satisfaga todos los requerimientos de su aplicación. De esta forma, minimizará el coste, el hardware y el software.

    Los principales recursos que incorporan los microcontroladores son:

  • Puertas de entrada/salida.
  • Temporizadores o "Timers".
  • Perro guardián o "Watchdog".
  • Protección ante fallo de alimentación o "Brownout".
  • Estado de reposo o de bajo consumo.
  • Conversor A/D.
  • Conversor D/A.
  • Comparador analógico.
  • Modulador de anchura de impulsos o PWM.
  • Puertos de comunicación.

Perro guardián o "Watchdog Timer"

    Cuando un ordenador personal se bloquea por un fallo del software u otra causa, se pulsa el botón del reset y se reinicializa el sistema.

    En la mayoría de los casos y a diferencia de un ordenador personal, un microcontrolador funciona sin el control de un supervisor y de forma continuada las 24 horas del día y 365 días al año. El perro guardián es en un contador que se decrementa automáticamente (temporizador) que, cuando se desborda y pasa por 0, provoca un reset automático en el sistema.

    Se debe diseñar el programa de trabajo que controla la tarea de forma que refresque o inicialice el contador del perro guardián antes de que provoque el reset. Si falla el programa o se bloquea, el programa no lo reiniciará, llegando a 0 y provocando el reset del sistema.


Características del PIC16F84A

    El PIC16F84A pertenece a la gama media, es decir no tiene todos los recursos internos que poseen otros modelos más avanzados, pero por otro lado su tamaño, precio, difusión y facilidad de uso, lo hacen idóneo para introducirse en los microcontroladores.

    Algunas características relevantes del PIC16F84A:

  • Opera a una frecuencia máxima de 4 MHz o 20 MHz.
  • 1Kbyte de memoria de programa Flash.
  • 68 bytes de memoria RAM para datos.
  • 64 bytes de memoria no volatil EEPROM para datos.
  • Sólo 35 instrucciones.
  • 13 patillas de entrada/salida (un puerto de 8 bits + otro de 5 bits).
  • Timer/contador de 8 bits.

    Para mas información ver El PIC16F84A y Características especiales del PIC16F84A


Descripción de patillas del PIC16F84A

RA0, RA1, RA2, RA3 y RA4: son los pines del puerto A.

RB0, RB1, RB2, RB3, RB4, RB5, RB6 y RB7: son los pines del puerto B.

MCLR: Pin de reseteo del pic, cuando se pone a "0" el pic se resetea.

Vdd y Vss: pines de alimentación (Vdd 5V y Vss a masa)

OSC1/CLKIN y OSC2/CLKOUT: son para el oscilador. Los tipos de osciladores mas usados son el XT (cristal de cuarzo) y el RC (resistencia y condensador).


Modo de conexionado del oscilador

Modo de conexionado del oscilador:
Oscilador XT
C1=C2=22pF ó 33pF
Cristal = 4MHz (PIC16F84A-04)
Oscilador RC
C1 de 20pF como mínimo
5KΩ > R1 > 100KΩ

Arquitectura interna de un PIC16F84A


Organización y gestión de la memoria


La memoria de programa

El espacio marcado como "Espacio de Memoria de Usuario" es donde irá el programa, desde la dirección 0000h hasta la 3FFh (3FFh en decimal es 1023, que mas la dirección 0000h hace 1024 direcciones, es decir, 1Kbyte).
"Reset Vector" es la primera dirección (0000h) a la que se dirige el PIC al encenderlo o al resetearlo y donde debe estar siempre la primera instrucción.
"Vector de Interrupción" es la dirección (0004h) a la que se dirige el PIC cuando se produce una interrupción, esto es, un evento que permite sacar al PIC de la ejecución normal del programa para ejecutar una subrutina de atención a la interrupción.
"PC" (Contador de Programa) es un registro de 13 bits que apunta a la dirección de la memoria de programa que contiene la instrucción a ejecutar.
"Niveles de la pila de 1 a 8" son los niveles de la pila, que se utiliza cuando se ejecutan subrutinas.

La memoria de datos RAM

    La memoria RAM no sólo se usa para almacenar las variables que puedan utilizarse en el programa, también se utilizan una serie de registros para configurar y controlar el PIC.
    La memoria esta dividida en dos bancos, el banco 0 y el banco 1, para seleccionar un banco u otro se utiliza un bit (RP0) del registro de estado (STATUS). Generalmente se trabaja con el banco 0.
    Cada banco se divide a su vez en dos áreas:
    * RFS (Registros de Funciones Especiales)
    * RGP (Registros de Propósito General)
    El área RFS (Registros de Funciones Especiales) controla el funcionamiento del dispositivo. Estos registros se emplean para el control del funcionamiento de la CPU y de los periféricos (direcciones desde la 00h hasta la 0Bh y desde la 80h hasta la 8Bh).
    El área RGP (Registros de Propósito General) comprende los registros que podemos utilizar como variables de trabajo a partir de la dirección 0Ch hasta la 4Fh (68 bytes de SRAM). Puede accederse directamente o bien indirectamente haciendo uso del registro FSR.
    El área RGP así como algunos registros especiales son los mismos en los dos bancos del mapa de memoria del PIC.

La pila

    En los PIC la pila es una memoria interna dedicada, de tamaño limitado, separada de las memorias de datos y de programa, inaccesible al programador, que es utilizada solamente, y en forma automática, para guardar las direcciones de retorno de subrutinas e interrupciones. Cada nivel de la pila permite guardar una copia completa del PC (Contador de Programa). El tamaño de la pila en el PIC16F84A es de 8 niveles y 13 bits.


El Contador de programa PC

    Este registro, normalmente denominado PC (Program Counter), es equivalente al de todos los microprocesadores y contiene la dirección de la próxima instrucción a ejecutar. Se incrementa automáticamente al ejecutar cada instrucción, de manera que la secuencia natural de ejecución del programa es lineal, una instrucción después de la otra. Algunas instrucciones (que llamaremos de control) cambian el contenido del PC alterando la secuencia lineal de ejecución. Dentro de estas instrucciones se encuentran GOTO y CALL que permiten cargar en forma directa un valor constante en el PC haciendo que el programa salte a cualquier posición de la memoria. Otras instrucciones de control son los saltos condicionales, que producen un incremento adicional del PC si se cumple una condición específica, haciendo que el programa salte, sin ejecutar, la instrucción siguiente.

    El PC del PIC16F84A es un registro de 13 bits, lo que permite direccionar 8.192 posiciones de memoria de programa, pero que internamente solamente podrá direccionar las 1.024 posiciones de memoria de programa del PIC16F84A. Esto significa que solo hace realmente falta tener en cuenta 10 bits del PC (210=1.024). El PC está implementado por dos registros, PCLATH (5 bits) y PCL (8 bits)


La ALU

    El PIC16F84A posee una ALU (Unidad Aritmético Lógica) de 8 bits capaz de realizar operaciones de desplazamientos, lógicas, sumas y restas. Su salida va al registro de trabajo W y también a la memoria de datos, por lo tanto el resultado puede guardarse en cualquiera de los dos destinos. Dependiendo de la instrucción ejecutada, la ALU puede afectar a los bits de Acarreo , Acarreo Digital (DC) y Cero (Z) del Registro de Estado (STATUS).


Registro de trabajo

    El acumulador o registro de trabajo (W) es el registro mas utilizado de todos. No se trata de un registro de la RAM ya que no tiene dirección pero se usa constantemente para mover datos y dar valores a las variables (registros). Por ejemplo, si queremos copiar la información del registro 0Ch en el registro 0Dh no podremos hacerlo directamente, deberemos usar una instrucción para cargar el valor del registro 0Ch en el acumulador y después otra instrucción para cargar el valor del acumulador en el registro 0Bh.


Registros de Funciones Especiales (RFS)

    Los registros que se encuantran en la memoria RAM sirven para la configuración y el control del PIC. Estos registros se usan para controlar los pines del pic, consultar los resultados de las operaciones de la ALU (unidad aritmética lógica) y cambiar de banco de memoria, entre otras cosas. Mas información en Registros del PIC16F84A.

    A continuación se indican algunos registros importantes:


STATUS

    El registro de Estado (STATUS) contiene varios bits que indican el estado de la CPU y otros elementos. Está formado por 8 bits y ocupa la posición 03h del banco 0 y la 83h del banco 1.

    Algunos de estos bits los podemos cambiar manualmente a través del programa pero otros se activan cuando se dan ciertos procesos. Estos bits se llaman flags (banderas).

R/W-0 R/W-0 R/W-0 R-1 R-1 R/W-x R/W-x R/W-x
IRP RP1 RP0 /TO /PD Z DC C
bit 7 bit 6 bit 5 bit 4 bit 3 bit 2 bit 1 bit 0

    R/W significa que el bit correspondiente se puede leer y escribir, mientras que R significa que solamente puede ser leído. También se indica el estado que se establece tras un reset.


PCL (Parte baja del contador de programa)

    Dirección 02h, Modificando este registro se modifica el contador de programa, este contador de programa es el que señala al pic en que dirección de la memoria de programa tiene que leer la siguiente instrucción. Esto se utiliza mucho para consultar tablas.


PORTA (Puerto A) y PORTB (Puerto B)

    Puerto A. Dirección 05h.

    Puerto B. Dirección 06h.

    Con estos registros se puede ver o modificar el estado de las patillas de los puertos A y B. Si un bit de este registro está a "1" también lo estará la patilla correspondiente a ese bit. El que un patilla esté a "1" quiere decir que su tensión es de 5V, si está a "0" su tensión es 0V.

    Cada patilla como salida puede trabajar con corrientes de 10 a 20 mA.


TRISA

    Dirección 05h, Configura el puerto A como entrada o salida. Si un bit de este registro se pone a "0" el pin correspondiente en el puerto A será una salida, por el contrario, si se pone a "1" el pin correspondiente en el puerto A será una entrada.

TRISB

    Dirección 06h, Igual que el anterior pero con el puerto B


TMR0 (Timer/contador)

    Dirección 01h, Aquí se puede ver el valor en tiempo real del Timer/contador. También se puede introducir un valor y alterar así el conteo. Este conteo puede ser interno (cuenta ciclos de reloj) o externo (cuenta inpulsos introducidos por RA4).


Software de un sistema basado en CPU

    El software que se escribe y que posteriormente el sistema microprogramable ejecuta esta formado por una serie de instrucciones que indican al sistema lo que debe realizar en cada momento.

    Hasta ahora hemos hablado de que la CPU recoge las instrucciones de la memoria. ¿Pero como están compuestas estas instrucciones? Las instrucciones, como su propio nombre indica, van a decir que se debe hacer con los datos, o con que datos se debe realizar cierta operación.


Formato de una instrucción

    Las instrucciones están formadas por dos partes, tal y como muestra a continuación

INSTRUCCIÓN
CÓDIGO OPERACIÓN OPERANDO

    El código de operación, está siempre presente en cualquier tipo de instrucción. Por el contrario, el operando puede o no estarlo. Por ejemplo, para que la CPU detenga la ejecución de un programa, es suficiente con el código de operación. Sin embargo, para realizar una suma, a parte del código de operación habrá que indicar con que dato se debe sumar, ya sea explícitamente después del código de operación o indicando en su lugar la posición de memoria donde se encuentra dicho dato.


    Las instrucciones se pueden clasificar según el tipo de operación que realicen en:


Lenguajes de programación para sistemas basados en CPU

    Para introducir los programas y datos en un sistema microprogramable, necesitamos de un método que sea comprensible tanto para el usuario como para el sistema. Sin embargo, no existe un lenguaje que sea igualmente comprensible para el usuario como para el sistema. Mientras que el primero utiliza un lenguaje complejo, el sistema únicamente opera en lenguaje binario.

    Este lenguaje binario que utiliza la máquina es muy complejo de entender y, por tanto, de programar. Por esta razón se clasifican los lenguajes en niveles según estén mas o menos cercanos al lenguaje de la máquina en:


Lenguaje de bajo nivel o código máquina

    Es difícilmente entendible para el usuario, porque es el que ejecuta directamente la CPU. Este lenguaje esta formado por palabras binarias, cuya longitud depende del sistema empleado.

    Por ejemplo, una CPU de 8 bits utilizara palabras formadas por 8 bits.

    El problema de este lenguaje es que cada CPU utiliza sus propios códigos máquina, por lo que los programas no son intercambiables entre los sistemas microprogramables. Aunque la máquina solo entiende códigos binarios (ceros y unos), este tipo de lenguaje se puede programar en hexadecimal, que es mas manejable y su conversión al formato binario es directa.


    En la tabla siguiente se da un ejemplo de código de operación de instrucciones para un microcontrolador de la Familia PIC16X84, que utiliza una arquitectura Harvard y donde la memoria de programa tiene una longitud de 14 bits y la de datos de 8 bits.

Estas instrucciones suman dos valores (7+8) y el resultado lo depositan en la dirección de memoria de datos 10 h.

Binario Hexa Código Operando Instrucción
11000000000111 3007 1100xx 0000 0111 Carga en el acumulador el dato indicado en el operando
11111000001000 3E08 11111x 0000 1000 Suma el acumulador y el dato indicado en el operando y guarda el resultado en el acumulador
00000010010000 0090 0000001 0010000 Almacena el resultado contenido en el acumulador en la dirección indicada

    Nota: x representa un valor indiferente, pero se ha tomado en binario como en hexadecimal como 0, tal y como lo hace el ensamblador MPLAB de microchip.


    Este formato binario, denominado lenguaje ó código máquina, puesto que es el que realmente entiende el sistema, es el que debe estar en la memoria de programa para que pueda funcionar. Se comprende, no obstante, que escribir un programa, que puede constar de cientos, miles o millones de instrucciones, a este nivel, seria extraordinariamente penoso, sujeto a errores y muy difícil de interpretar por una persona, una vez escrito. Sin embargo, la velocidad con que se ejecuta es muy elevada, ya que las instrucciones son ejecutadas directamente por la máquina. Otra ventaja de este tipo de lenguaje reside en que nos podemos meter en lo mas profundo de la máquina.


Lenguaje ensamblador

    El lenguaje máquina no es muy manejable por su elevada complejidad, por lo que, para facilitar la confección de programas se utiliza otro tipo de lenguaje denominado lenguaje ensamblador o simbólico.

    En el lenguaje ensamblador, las instrucciones se representan por nemónicos o combinaciones de letras que recuerdan el significado de la instrucción en inglés. Así, por ejemplo, en la siguiente tabla se representan los nemónicos utilizados para las instrucciones anteriores.

Mnemónico Hexa Código Operando Instrucción
movlw 0x07 3007 1100xx 0000 0111 Carga en el acumulador el dato indicado en el operando
addlw 0x08 3E08 11111x 0000 1000 Suma el acumulador y el dato indicado en el operando y guarda el resultado en el acumulador
movwf 0x10 0090 0000001 001 0000 Almacena el resultado contenido en el acumulador en la dirección indicada

    Ademas, las direcciones en vez de figurar con su valor binario real, figuran bajo nombres simbólicos (etiquetas) que se pueden asignar de modo que recuerden su significado o la dirección de las instrucciones.

    La estructura de una instrucción escrita en lenguaje ensamblador constaría en general de tres campos:


    Como ejemplo, a continuación se representa una porción de programa redactado para el microcontrolador PIC16X84 y su equivalencia en lenguaje máquina.

Ensamblador Lenguaje máquina
Etiqueta Mnemónico Operando PC Código+Operando
INICIO movlw 0x07 000000 3007 h
  addlw 0x08 000001 3E08 h
  movwf RESULTADO 000002 0090 h

Notas:
PC: Dirección de la memoria de programa.
RESULTADO: El ensamblador permite sustituir valores numéricos por etiquetas así RESULTADO será igual a 10 h.

    Se comprende que, con un poco de practica, el programa en ensamblador es mucho mas fácil de escribir y leer que el lenguaje máquina.

    Dependiendo del tipo de CPU las direcciones se especifican de diversas maneras (absoluta, directa, segmentada, como primer operando el byte bajo y como segundo el byte alto, etc).


Programa ensamblador

    Una vez escrito el programa en lenguaje ensamblador, su conversión a lenguaje máquina puede hacerse automáticamente en un ordenador mediante un programa, al cual habrá que indicarle, entre otras cosas, la equivalencia numérica de los símbolos o etiquetas utilizados para representar valores numéricos como operandos (en el ejemplo anterior, RESULTADO), mientras que las equivalencias numéricas de las etiquetas con la posición de cada instrucción en el programa ensamblador se generarán automáticamente (en el ejemplo anterior, INICIO).

    Este proceso de traducción a lenguaje máquina se conoce como "ensamblado" y el programa de ordenador que lo realiza, ensamblador.


Lenguajes de alto nivel

    Es el lenguaje mas cercano al usuario y, por tanto, el mas evolucionado, ya que no se basa en la arquitectura de la máquina.

    El nombre de las instrucciones y sentencias se corresponde con el nombre en ingles de la tarea que realizan, dependiendo ahora el repertorio de instrucciones no de la CPU, sino del paquete software con el que trabaja o del sistema operativo.

    Algunos ejemplos de lenguajes de alto nivel son; BASIC, C y JAVA

    Los lenguajes de alto nivel son muy parecidos al lenguaje del usuario pero muy distinto del que comprende la máquina. Por tanto, para ejecutarse debe ser convertido y la conversión suele introducir bastante más código que si el programa se escribiese directamente en ensambladorpor por lo su ejecución es mas lenta. Ademas el programa se hace mas largo.

    El inconveniente de este tipo de lenguaje es que no podemos meternos en lo mas profundo de la máquina. Sin embargo se puede escribir la mayor parte de un programa en un lenguaje de alto nivel, y luego añadir subrutinas realizadas en lenguaje máquina.


Proceso de programación

    Una vez escrito el programa (programa fuente) en uno de los anteriores lenguajes, este debe "transformarse" en código máquina que es lo único que entiende el sistema microprogramable.

    Para ello, disponemos de las siguientes herramientas:

    La diferencia entre ensambladores y compiladores con respecto a los interpretes radica en que, el compilador y ensamblador generan el código máquina de todo el programa y lo ejecutan, así que la ejecución es mas rápida. El interprete en cambio lee una línea, la convierte a código máquina y, luego, la ejecuta, lee otra línea... y así todo el programa, por ello la ejecución es mas lenta.


Programación de PIC

El lenguaje ensamblador del PIC16F84A

    Podríamos decir que el lenguaje ensamblado "es complejo por su sencillez". Esto quiere decir que, a diferencia de los lenguajes de alto nivel, aquí no hay funciones que solucionen y simplifiquen algoritmos, si no que hay que implementar hasta los pasos más elementales.

    Para los PIC se han creado unas instrucciones y una estructura de programa que lo hacen sencillo y atractivo. Más información en El lenguaje ensamblador del PIC16F84A


Instrucciones del PIC

    El PIC16F84A pertenece a la gama media y es de tipo RISC; esto quiere decir que tiene un juego de instrucciones reducido, en concreto de 35 instrucciones o nemónicos que son la base de funcionamiento del PIC. Al igual que los bits de los registros, sería complicado memorizarlas todas, así que podemos utilizar esta documentación como guía de consulta. Ver Instrucciones del PIC16F84A

    Las instrucciones se pueden dividir en tres tipos. Esta división viene dada por el tipo de datos con los que trabajan:


Entorno de desarrollo

    La empresa Microchip además de fabricar y distribuir los microcontroladores PIC ofrece un entorno de desarrollo para ellos, se trata del MPLAB-IDE. Con esta plataforma podemos programar, compilar, simular y con una serie de herramientas extras incluso grabar los PIC.

    Para un entorno de desarrollo bajo Windows disponemos de las siguientes herramientas:

    Todas ellas son gratuitas y están disponibles en internet:



Índice / Introducción Bootloader Prácticas