UNIVERSIDAD CATÓLICA DE
CUENCA
UNIDAD ACADÉMICA DE INGENIERÍA DE
SISTEMAS, ELÉCTRICA Y ELECTRÓNICA
ESTUDIO DE LOS MICROCONTROLADORES
PICS y DSPICS
MONOGRAFÍA PREVIO A LA
OBTENCIÓN DEL TITULO DE
INGENIERO EN SISTEMAS
Investigador
:
Tcnlgo. Diego Jimbo Pinos
Director
:
Ing. Michael Cabrera Mejía
Cuenca – Ecuador
Dedicatoria
“A Dios por darme la vida, sabiduría y fuerza para estudiar”.
“A mis Padres por todo el esfuerzo realizado, en todos estos años para poder coronar
mi carrera”
Agradecimiento
El presente trabajo de grado es fruto de todas las enseñanzas impartidas por
mis profesores a lo largo de la carrera y de manera especial agradezco los grandes
aportes del Ing. Michael Cabrera Mejía, que sin su colaboración hubiese sido posible
llevar a feliz término esta monografía.
Gracias a mis padres por todo el apoyo recibido. Sus esfuerzos, paciencia,
dedicación y sacrificio hicieron de este sueño, un logro alcanzado. A mis hermanos
por su apoyo incondicional. A mis compañeros, aquellos que me acompañaron en
momentos buenos y malos, las historias vividas que tendré siempre presentes.
INDICE
CAPITULO I
INTRODUCCIÓN AL MICROCONTROLADOR ... 7
1.1 Que es un Microcontrolador? ... 7
1.2 Diferencia entre un Microcontrolador y un Microprocesador ... 9
1.3 Arquitectura de los Microcontroladores ... 11
1.3.1 Arquitectura Von Neumann... 11
1.3.2. Arquitectura Harvard ... 12
1.4 Elementos de los Microcontroladores... 13
1.4.1 El procesador o CPU... 13
1.4.1.1 CISC... 13
1.4.1.2 RISC... 14
1.4.1.3 SISC ... 14
1.4.2. Memoria... 14
1.4.2.1 ROM con máscara ... 15
1.4.2.2 OTP... 15
1.4.2.3 EPROM... 15
1.4.2.4 EEPROM, E2PROM o E
2PROM ... 16
1.4.2.5 FLASH... 16
1.4.3 Líneas de E/S ... 17
1.4.4 Reloj Principal ... 17
1.5 Recursos Auxiliares ... 17
1.5.1 Temporizadores o Timers ... 18
1.5.2 Perro guardián oWatchdog ... 18
1.5.3
Protección ante fallo de alimentación o Brownout ... 18
1.5.4 Estado de reposo ó de bajo consumo ... 19
1.5.5 Conversor A/D (DAC)... 19
1.5.6 Conversor D/A (ADC)... 19
1.5.7 Comparador analógico ... 19
1.5.8 Modulador de ancho del pulso PWM ... 19
1.5.9 Puertos de Entrada y Salida ... 20
1.5.10 Puertas de comunicación ... 20
LA FAMILIA DE LOS PICS ... 21
2.1 Introducción ... 21
2.2 La Familia de los Pics ... 21
2.2.1 ¿Porque los Pics? ... 21
2.3 Historia... 21
2.4 La Gama de los Pics... 22
2.4.1 Gama Baja... 24
2.4.2 Gama Media... 25
2.4.3 Gama Alta ... 26
2.5 Microcontrolador. PIC 16X84. ... 26
2.5.1 Descripción general. ... 26
2.5.2 Aspecto externo. ... 27
2.5.4 Reinicialización o RESET. ... 29
2.6 Arquitectura de los microcontroladores PIC16X84... 30
2.6.1 Organización de la memoria ... 31
2.6.1.1 Memoria de Programa. ... 32
2.6.1.2 Memoria de Datos RAM... 33
2.6.1.3 Direccionamiento de la memoria de datos... 34
2.6.2 El Registro de Estado... 35
2.6.3 Temporizador/Contador TMR0. ... 36
2.6.4 El registro OPTION. ... 39
2.6.5 El Perro Guardián (WDT)... 40
2.6.6 Las Puertas de E/S. ... 40
2.6.6.1 La Puerta A. ... 41
2.6.6.2 La Puerta B. ... 42
2.6.7 La Palabra de CONFIGURACION. ... 43
2.6.8 La memoria EEPROM de Datos... 44
2.7 Interrupciones. ... 45
2.7.1 Causas de Interrupción... 46
2.7.2 El Registro de Control de Interrupciones INTCON. ... 47
2.7.3 Interrupción Externa INT... 48
2.7.4 Interrupción por desbordamiento del TMR0. ... 48
PROCESDOR DE SEÑALES DIGITALES ... 49
3.1 Introducción ... 49
3.2 ¿Qué es Procesamiento Digital de Señales? ... 50
3.3 Historia de Los Procesadores Digitales de Señales: ... 52
3.4 Procesador de señales digitales... 52
3.5 Características básicas de un DSP ... 53
3.6 Diferencias entre Microcontroladores y DSP's:... 54
3.7 Ventajas y Desventajas de los DSP’s: ... 55
3. 8 Microcontroladores de señal dsPIC ... 56
3.8.1 Características de los DsPics ... 56
3.8.2 Rango de funcionamiento ... 57
3.8.3 Arquitectura dsPIC de Microchip ... 57
PROGRAMACION DE LOS MICROCONTROLADORES ... 60
4.1 MicroCode Studio... 60
4.1.1 Configuración ... 60
4.1.2 Manejo del Programa... 63
4.1.3 Identificación de errores ... 65
4.2 Pic Basic Pro ... 67
4.2.1 Variables ... 68
4.2.2 Alias ... 69
4.2.3 Arreglos ... 69
4.2.4 Constantes... 70
4.2.5 Símbolos ... 70
4.2.6 Constantes Numéricas... 70
4.2.7 Operadores Matemáticos ... 71
4.2.7.1 Multiplicación ... 72
4.2.7.2 División... 72
4.2.7.3 Desplazamiento... 72
4.2.7.4 ABS... 72
4.2.7.5 COS... 72
4.2.7.6 DCD I... 73
4.2.7.7 DIG ... 73
4.2.7.8 DIV32 ... 73
4.2.7.9 MAX y MIN ... 74
4.2.7.10 NCD ... 74
4.2.7.11 REV ... 75
4.2.7.12 SIN ... 75
4.2.7.13 SQR... 75
4.2.8 Operadores de comparación... 75
4.2.9 Operadores Lógicos ... 76
4.2.10 Referencia de declaraciones PBP ... 76
Conclusiones ... 79
Recomendaciones ... 80
Bibliografía ... 82
Glosario... 83
CAPITULO I
INTRODUCCIÓN AL MICROCONTROLADOR
Inicialmente cuando no se inventaban los microcontroladores las personas se ingeniaban en diseñar sus circuitos electrónicos y para ello implicaban muchos componentes electrónicos y cálculos matemáticos. Un circuito lógico básico requería de muchos elementos como transistores, resistencias. Además se creía que el manejo de un microcontrolador era para aquellas personas con un coeficiente intelectual muy alto, por lo contrario con la aparición de este circuito integrado todo seria mucho más fácil de entender y los diseños electrónicos serian mucho más pequeños y simplificados. Gracias a la llegada de los microcontroladores, tarjetas que contenían varias decenas de circuitos lógicos como se dijo anteriormente se han visto reducidas a dos o tres microcontroladores.
El Microcontrolador nace cuando las técnicas de integración han progresado lo bastante para permitir su fabricación y comercialización, pero principalmente nace porque se requiere la necesidad de utilizar sistemas inteligentes y programables para que realicen una determinada aplicación. Un ejemplo podría ser el control de una lavadora de ropa la cual debe controlar los ciclos de lavado, las cuales van a ser controladas por un software previamente seleccionado. Además estos pequeños componentes están distribuidos entre los electrodomésticos de nuestro hogar. Pueden encontrarse en casi cualquier dispositivo eléctrico como hornos microondas, teléfonos, celulares, televisores, juguetes, en el mouse y teclado del computador, en fin, están conquistando el mundo, pero la invasión acaba de comenzar y el siglo XXI será testigo de la conquista masiva de estos diminutos computadores, que gobernarán la mayor parte de los aparatos que se fabrican hoy en día.
El funcionamiento y aplicaciones de los microcontroladores y los microprocesadores permiten profundizar en los aspectos tecnológicos de las arquitecturas de las nuevas computadoras, convirtiéndose de esta forma en una herramienta útil para el desarrollo de variadas aplicaciones que contribuyen al avance tecnológico y desarrollo integral de la sociedad.
Estas aplicaciones que han surgido con propósitos, para solucionar las diversas necesidades existentes, que frustraban la realización de actividades ejecutadas por personas en los diferente escenarios industriales, empresariales entre otros.
1.1 Que es un Microcontrolador?
El microcontrolador es un circuito integrado o chip que incorporan en su interior las tres unidades funcionales de un ordenador: CPU, Memoria y Unidades de E/S, es decir, se trata de un computador completo en un solo circuito integrado. Su característica principal 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. Es un dispositivo integrado digital capaz de interpretar y ejecutar un conjunto secuencial de instrucciones (software). Básicamente contiene circuitos electrónicos que realizan operaciones aritméticas, lógicas y de control. Se trata de un sistema muy complejo, por eso debe ir integrado en chips.
Un microcontrolador es un microprocesador optimizado para ser utilizado para controlar equipos electrónicos. Los microcontroladores representan la inmensa mayoría de los chips de ordenadores vendidos, sobre un 50% son controladores "simples" y el restante corresponde a DSPs 1 los cuales son microcontroladores más especializados.
Al estar todos los microcontroladores integrados en un chip, su estructura fundamental y sus características básicas son muy parecidas. Todos deben disponer de los bloques esenciales: Procesador, memoria de datos y de instrucciones, líneas de E/S, oscilador de reloj y módulos controladores de periféricos (Figura 1.1).
En definitiva un microcontrolador; es un circuito integrado programable, capaz de ejecutar las órdenes grabadas en su memoria. Está compuesto de varios bloques funcionales, los cuales cumplen una tarea específica En fin estas son básicamente algunas de sus partes:
¾ Memoria ROM (Memoria de sólo lectura) ¾ Memoria RAM (Memoria de acceso aleatorio)
¾ Líneas de entrada/salida (I/O) También llamados puertos
¾ Lógica de control Coordina la interacción entre los demás bloques
1.2 Diferencia entre un Microcontrolador y un Microprocesador
El microprocesador es un circuito integrado que contiene la Unidad Central de Proceso (CPU), también llamada procesador, de un computador. La CPU está formada por la Unidad de Control, que interpreta las instrucciones, y el Camino de Datos, que las ejecuta.
Los pines de un microprocesador envían al exterior las líneas de sus buses de direcciones, datos y control, para permitir conectarse con la Memoria y los Módulos de E/S y configurar un computador implementado por varios circuitos integrados. Se dice que un microprocesador es un sistema abierto porque su configuración es variable de acuerdo con la aplicación a la que se destine. (Figura 1.2)
El microcontrolador es en definitiva un circuito integrado que incluye todos los componentes de un computador.
Debido a su reducido tamaño es posible montar el controlador en el propio dispositivo al que gobierna. En este caso el controlador recibe el nombre de controlador empotrado o embebido (embedded controller). Figura 1.3.
DIFERENCIAS:
¾ La configuración mínima básica de un Microprocesador esta constituida por un Micro de 40 Pines, Una memoria RAM de 28 Pines, una memoria ROM de 28 Pines y un decodificador de direcciones de 18 Pines.
¾ El Microcontrolador incluye todo estos elementos del Microprocesador en un solo Circuito Integrado por lo que implica una gran ventaja en varios factores: En el circuito impreso por su amplia simplificación de circuitería.
¾ El costo para un sistema basado en Microcontrolador es mucho menor, mientras que para del Microprocesador, es relativamente alto.
¾ Los Microprocesadores tradicionales se basan en la arquitectura de Von Newmann, mientras que los microcontroladores trabajan con arquitectura de Harvard.
¾ El tiempo de desarrollo de un proyecto electrónico es menor para los Microcontroladores.
¾ En la Figura 1.4 y Figura 1.5 se puede observar que la principal diferencia entre ambos radica en la ubicación del registro de trabajo, que para los PIC’s (microcontrolador) se denomina W (Working Register), y para los microprocesadores tradicionales es el Acumulador (A).
¾ En los microcontroladores tradicionales todas las operaciones se realizan sobre el acumulador. La salida del acumulador esta conectada a una de las entradas de la Unidad Aritmética y Lógica (ALU), y por lo tanto este es siempre uno de los dos operandos de cualquier instrucción, las instrucciones de simple operando (borrar, incrementar, decrementar, complementar), actúan sobre el acumulador.
¾ En los microcontroladores PIC, la salida de la ALU va al registro W y también a la memoria de datos, por lo tanto el resultado puede guardarse en cualquiera de los dos destinos.
¾ L a g r a n v e n t a j a
de esta arquitectura(Microcontroladores ) es que permite un gran ahorro de instrucciones ya que el resultado de cualquier instrucción que opere con la memoria, ya sea de simple o doble operando, puede dejarse en la misma posición de memoria o en el registro W, según se seleccione con un bit de la misma instrucción . Las operaciones con constantes provenientes de la memoria de programa (literales) se realizan solo sobre el registro W.
1.3 Arquitectura de los Microcontroladores 1.3.1 Arquitectura Von Neumann
La arquitectura tradicional de computadoras y microprocesadores está basada en la arquitectura Von Neumann, en la cual la unidad central de proceso (CPU), está conectada a una memoria única donde se guardan las instrucciones del programa y los datos (Figura 1.6). 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. Y 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. Resumiendo todo lo anterior, las principales limitaciones que nos encontramos con la arquitectura Von Neumann son:
1. La limitación de la longitud de las instrucciones por el bus de datos, que hace que el microprocesador tenga que realizar varios accesos a memoria para buscar instrucciones complejas.
2. La limitación de la velocidad de operación a causa del bus único para datos e instrucciones que no deja acceder simultáneamente a unos y otras, lo cual impide superponer ambos tiempos de acceso.
1.3.2. Arquitectura Harvard
La arquitectura Harvard 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 (figura 1.7). 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 y pueden ser de distintos anchos. Para un procesador de Set de Instrucciones Reducido, o RISC (Reduced Instrucción Set Computer), el set de instrucciones y el bus de memoria de programa pueden diseñarse de tal manera que todas las instrucciones tengan una sola posición de memoria de programa de longitud. Además, al ser los buses independientes, la CPU puede acceder a los datos para completar la ejecución de una instrucción, y al mismo tiempo leer la siguiente instrucción a ejecutar. Ventajas de esta arquitectura:
1. El tamaño de las instrucciones no esta relacionado con el de los datos, y por lo tanto puede ser optimizado para que cualquier instrucción ocupe una sola posición de memoria de programa, logrando así mayor velocidad y menor longitud de programa. 2. El tiempo de acceso a las instrucciones puede superponerse con el de los datos,
logrando una mayor velocidad en cada operación.
Una pequeña desventaja de los procesadores con arquitectura Harvard, es que deben poseer instrucciones especiales para acceder a tablas de valores constantes que pueda ser necesario incluir en los programas, ya que estas tablas se encontraran físicamente en la memoria de programa (por ejemplo en la EPROM de un microprocesador).
1.4 Elementos de los Microcontroladores 1.4.1 El procesador o CPU
EL CPU es la unidad que controla el funcionamiento de la unidad. Contiene la lógica que procesa las instrucciones, maneja la entrada y salida de la memoria y los periféricos. 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 OP 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 tres orientaciones en cuanto a la arquitectura y funcionalidad de los procesadores actuales:
1.4.1.1 CISC
Un gran número de procesadores usados en los microcontroladores están basados en la filosofía CISC (Computadores de Juego de Instrucciones Complejo). Disponen de más de 80 instrucciones máquina en su repertorio, algunas de las cuales son muy sofisticadas y potentes, requiriendo muchos ciclos para su ejecución. Una ventaja de los procesadores CISC es que ofrecen al programador instrucciones complejas que actúan como macros, es
decir, que si las tuviésemos que implementar con instrucciones básicas, acabaríamos con dolor de cabeza.
1.4.1.2 RISC
Tanto la industria de los computadores comerciales como la de los microcontroladores están creciendo hacia la filosofía RISC (Computadores 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.
1.4.1.3 SISC
En los microcontroladores destinados a aplicaciones muy concretas, el juego de instrucciones, además de ser reducido, es específico, o sea, las instrucciones se adaptan a las necesidades de la aplicación prevista. Esta filosofía se ha bautizado con el nombre de SISC (Computadores de Juego de Instrucciones Específico).
1.4.2. Memoria
En los microcontroladores la memoria de instrucciones y datos está integrada en el propio chip. Una parte debe ser no volátil, tipo ROM, y se destina a contener el programa de instrucciones que gobierna la aplicación. Otra parte de memoria será tipo RAM, volátil, y se destina a guardar las variables y los datos.
No existen sistemas de almacenamiento masivo como disco duro o disquetes. Como el microcontrolador sólo se destina a una tarea en la memoria ROM, sólo hay que almacenar un único programa de trabajo.
La RAM en estos dispositivos es de poca capacidad pues sólo debe contener las variables y los cambios de información que se produzcan en el transcurso del programa. Por otra parte, como sólo existe un programa activo, no se requiere guardar una copia del mismo en la RAM pues se ejecuta directamente desde la ROM.
Los usuarios de computadores personales están habituados a manejar Megabytes de memoria, pero, los diseñadores con microcontroladores trabajan con capacidades de ROM comprendidas entre 512 bytes y 8 k bytes y de RAM comprendidas entre 20 y 512 bytes.
Según el tipo de memoria ROM que dispongan los microcontroladores, la aplicación y utilización de los mismos es diferente. Se describen las cinco versiones de memoria no volátil que se pueden encontrar en los microcontroladores del mercado.
1.4.2.1 ROM con máscara
Es una memoria no volátil de sólo lectura cuyo contenido se graba durante la fabricación del chip. Si tenemos idea de cómo se fabrican los circuitos integrados, sabremos de donde viene el nombre. Estos se fabrican en obleas que contienen varias decenas de chips. Estas obleas se fabrican a partir de procesos fotoquímicos, donde Se impregnan capas de silicio y oxido de silicio, y según convenga, se erosionan al exponerlos a la luz. Como no todos los puntos han de ser erosionados, se sitúa entre la luz y la oblea una mascara con agujeros, de manera que donde deba incidir la luz, esta pasará. Con varios procesos similares pero más complicados se consigue fabricar los transistores y diodos micrométricos que componen un chip. El elevado costo del diseño de la máscara sólo hace aconsejable el empleo de los microcontroladores con este tipo de memoria cuando se precisan cantidades superiores a varios miles de unidades.
1.4.2.2 OTP
El microcontrolador contiene una memoria no volátil de sólo lectura programable una sola vez por el usuario. OTP (One Time Programmable). Es el usuario quien puede escribir el programa en el chip mediante un sencillo grabador controlado por un software desde una computadora. La versión OTP es recomendable cuando es muy corto el ciclo de diseño del producto, o bien, en la construcción de prototipos y series muy pequeñas. Tanto en este tipo de memoria como en la EPROM, se suele usar la encriptación mediante fusibles para proteger el código contenido. Figura 1.8
1.4.2.3 EPROM
Los microcontroladores que disponen de memoria EPROM (Erasable Programmable Read OnIy Memory) pueden borrarse y grabarse muchas veces. La grabación se realiza, como en el caso de los OTP, con un grabador gobernado desde una computadora. Si, posteriormente, se desea borrar el contenido, disponen de una ventana de cristal en su superficie por la que se somete a la EPROM a rayos ultravioleta durante varios minutos. Las cápsulas son de material cerámico y son más costosos que algunos microcontroladores con memoria OTP que están hechos con material plástico. Figura 1.9
1.4.2.4 EEPROM, E2PROM o E2PROM
Se trata de memorias de sólo lectura, programables y borrables eléctricamente EEPROM (Electrical Erasable Programmable Read OnIy Memory). Tanto la programación como el borrado, se realizan eléctricamente desde el propio grabador y bajo el control programado de una computadora. Es muy cómoda y rápida la operación de grabado y la de borrado. No disponen de ventana de cristal en la superficie. Los microcontroladores dotados de memoria EEPROM una vez instalados en el circuito, pueden grabarse y borrarse cuantas veces se quiera sin ser retirados de dicho circuito. Para ello se usan grabadores en circuito que confieren una gran flexibilidad y rapidez a la hora de realizar modificaciones en el programa de trabajo. El número de veces que puede grabarse y borrarse una memoria EEPROM es finito, por lo que no es recomendable una reprogramación continua. Son muy idóneos para la enseñanza y la Ingeniería de diseño. Se va extendiendo en los fabricantes la tendencia de incluir una pequeña zona de memoria EEPROM en los circuitos programables para guardar y modificar cómodamente una serie de parámetros que adecuan el dispositivo a las condiciones del entorno.
1.4.2.5 FLASH
Se trata de una memoria no volátil, de bajo consumo, que se puede escribir y borrar. Funciona como una ROM y una RAM pero consume menos y es más pequeña. A diferencia de la ROM, la memoria FLASH es programable en el circuito. Es más rápida y de mayor densidad que la EEPROM. La alternativa FLASH está recomendada frente a la EEPROM cuando se precisa gran cantidad de memoria de programa no volátil. Es más veloz y tolera más ciclos de escritura/borrado. Las memorias EEPROM y FLASH son muy útiles al permitir que los microcontroladores que las incorporan puedan ser reprogramados en circuito, es decir, sin tener que sacar el circuito integrado de la tarjeta. Así, un dispositivo con este tipo de memoria incorporado al control del motor de un automóvil permite que pueda modificarse el programa durante la rutina de mantenimiento periódico, compensando los desgastes y otros factores tales como la compresión, la instalación de nuevas piezas, etc. La reprogramación del microcontrolador puede convertirse en una labor rutinaria dentro de la puesta a punto.
1.4.3 Líneas de E/S
Las líneas de Entrada y Salida (E/S) permiten comunicar al procesador con el mundo exterior, a través de interfaces, o con otros dispositivos. Estas puertas, también llamadas puertos, son la principal utilidad de los pines de un microcontrolador. Según los controladores de periféricos que posea cada modelo de microcontrolador, las líneas de E/S se destinan a proporcionar el soporte a las señales de entrada, salida y control. A excepción de dos pines para la alimentación, dos para el cristal de cuarzo y una mas para provocar el Reset, los restantes pines de un microcontrolador sirven para soportar su comunicación con los periféricos externos que controla.
1.4.4 Reloj Principal
Todos los microcontroladores disponen de un circuito oscilador que genera una onda cuadrada de alta frecuencia, que configura los impulsos de reloj usados en la sincronización de todas las operaciones del sistema. Esta señal del reloj es el motor del sistema y la que hace que el programa y los contadores avancen.
Generalmente, el circuito de reloj está incorporado en el microcontrolador y sólo se necesitan unos pocos componentes exteriores para seleccionar y estabilizar la frecuencia de trabajo. Dichos componentes suelen consistir en un cristal de cuarzo junto a elementos pasivos o bien un resonador cerámico o una red R-C.
Aumentar la frecuencia de reloj supone disminuir el tiempo en que se ejecutan las instrucciones pero lleva aparejado un incremento del consumo de energía y de calor generado.
1.5 Recursos Auxiliares
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 costo, el hardware y el software. Los principales recursos específicos que incorporan los microcontroladores son:
¾ Temporizadores o Timers. ¾ Perro guardián o Watchdog.
¾ Protección ante fallo de alimentación o Brownout. ¾ Estado de reposo o de bajo consumo (Sleep mode). ¾ Conversor A/D (Analógico ->Digital).
¾ Comparador analógico.
¾ Modulador de anchura de impulsos o PWM (PulseWide Modulation). ¾ Puertas de E/S digitales.
¾ Puertas de comunicación.
A continuación pasamos a ver con un poco más de detalle cada uno de ellos
1.5.1 Temporizadores o Timers
Se emplean para controlar periodos de tiempo (temporizadores) y para llevar la cuenta de acontecimientos que suceden en el exterior (contadores).
Para la medida de tiempos se carga un registro con el valor adecuado y a continuación dicho valor se va incrementando o decrementando al ritmo de los impulsos de reloj o algún múltiplo hasta que se desborde y llegue a 0, momento en el que se produce un aviso. Cuando se desean contar acontecimientos que se materializan por cambios de nivel o flancos en alguno de los pines del microcontrolador, el mencionado registro se va incrementando o decrementando al ritmo de dichos impulsos. Un ejemplo: esto es igual que el segundero de nuestro reloj digital, este va aumentando hasta que llega a 60 segundos, pero en la pantalla escribe 00, esto quiere decir que se desborda. Pero cuando cambia da un aviso y se incrementan los minutos.
1.5.2 Perro guardián oWatchdog
Cuando el computador personal se bloquea por un fallo del software u otra causa, se pulsa el botón del reset y se reinicia el sistema. Pero un microcontrolador funciona sin el control de un supervisor y de forma continua las 24 horas del día. El Perro Guardián consiste en un contador que, cuando llega al máximo, provoca un reset automáticamente en el sistema.
Se debe diseñar el programa de trabajo que controla la tarea de forma que resetee al Perro Guardián de vez en cuando antes de que provoque el reset. Si falla el programa o se bloquea (si cae en bucle infinito), no se refrescará al Perro guardián y, al completar su temporización, provocará el reset del sistema.
1.5.3 Protección ante fallo de alimentación o Brownout
Se trata de un circuito que resetea al microcontrolador cuando la tensión de alimentación (VDD) es inferior a una tensión mínima (brownout). Mientras la tensión de alimentación sea inferior al de brownout el dispositivo se mantiene reseteado, comenzando a funcionar normalmente cuando sobrepasa dicho valor. Esto es muy útil para evitar datos erróneos por transiciones y ruidos en la línea de alimentación
1.5.4 Estado de reposo ó de bajo consumo
Son abundantes las situaciones reales de trabajo en que el microcontrolador debe esperar, sin hacer nada, a que se produzca algún acontecimiento externo que le ponga de nuevo en funcionamiento. Para ahorrar energía, (factor clave en los aparatos portátiles), los microcontroladores disponen de una instrucción especial (SLEEP en los PIC), que les pasa al estado de reposo o de bajo consumo, en el cual los requerimientos de potencia son mínimos. En dicho estado se detiene el reloj principal y se congelan sus circuitos asociados, quedando sumido en un profundo sueño. Al activarse una interrupción ocasionada por el acontecimiento esperado, el microcontrolador se despierta y reanuda su trabajo. Para hacernos una idea, esta función es parecida a la opción de Suspender en el menú para apagar el equipo (en aquellos computadores con administración avanzada de energía)
1.5.5 Conversor A/D (DAC)
Los microcontroladores que incorporan un Conversor A/D (Analógico/Digital) pueden procesar señales analógicas, tan abundantes en las aplicaciones. Suelen disponer de un multiplexor que permite aplicar a la entrada del DAC diversas señales analógicas desde los pines del circuito integrado.
1.5.6 Conversor D/A (ADC)
Transforma los datos digitales obtenidos del procesamiento del computador en su correspondiente señal analógica que envía al exterior por uno de los pines del chip. Existen muchos circuitos que trabajan con señales analógicas.
1.5.7 Comparador analógico
Algunos modelos de microcontroladores disponen internamente de un Amplificador Operacional que actúa como comparador entre una señal fija de referencia y otra variable que se aplica por una de los pines de la cápsula. La salida del comparador proporciona un nivel lógico 1 ó 0 según una señal sea mayor o menor que la otra. También hay modelos de microcontroladores con un módulo de tensión de referencia que proporciona diversas tensiones de referencia que se pueden aplicar en los comparadores.
1.5.8 Modulador de ancho del pulso PWM
Son circuitos que proporcionan en su salida pulsos de ancho variable, que se ofrecen al exterior a través de lo pines del encapsulado.
1.5.9 Puertos de Entrada y Salida
La principal utilidad de los pines que posee la cápsula que contiene un microcontrolador es soportar las líneas de E/S que comunican al computador interno con los periféricos exteriores y según los controladores de periféricos que posea cada modelo de microcontrolador, se destinan a proporcionar el soporte a las señales de entrada, salida y control.
Todos los microcontroladores destinan parte de sus pines a soportar líneas de E/S digitales. Por lo general, estas líneas se agrupan de ocho en ocho formando Puertos. Las líneas digitales de los puertos pueden configurarse como Entrada o como Salida cargando un 1 ó un 0 en el bit correspondiente de un registro destinado a su configuración.
1.5.10 Puertas de comunicación
Con objeto de dotar al microcontrolador de la posibilidad de comunicarse con otros dispositivos externos, otros buses de microprocesadores, buses de sistemas, buses de redes y poder adaptarlos con otros elementos bajo otras normas y protocolos. Algunos modelos disponen de recursos que permiten directamente esta tarea, entre los que destacan:
¾ UART, adaptador de comunicación serie asíncrona.(Ej: Puerto Serie) ¾ USART, adaptador de comunicación serie síncrona y asíncrona
¾ Puerta paralela esclava para poder conectarse con los buses de otros microprocesadores.
¾ USB (Universal Serial Bus), que es un moderno bus serie para los PC. ¾ Bus I2C, que es un interfaz serie de dos hilos desarrollado por Philips.
¾ CAN (Controller Área Network), para permitir la adaptación con redes de conexionado multiplexado desarrollado conjuntamente por Bosch e Intel para el cableado de dispositivos en automóviles.
Tanto el I2C en televisores, como el Bus CAN en automóviles, fueron diseñados para simplificar la circuitería que supone un bus paralelo de 8 líneas dentro de un televisor, así como para librar de la carga que supone una cantidad ingente de cables en un vehículo.
CAPITULO II
LA FAMILIA DE LOS PICS 2.1 Introducción
Los microcontroladores PIC, están basados en la arquitectura RISC, contemplan la mayoría de las características de esta arquitectura. Entre ellas podemos destacar, set de instrucciones homogéneo, reducido número de instrucciones y alta velocidad.
Por su reducido costo, su amplia gama y la cantidad de información disponible especialmente en Internet estos tienen un lugar privilegiado, bastante importante en el mercado de los microcontroladores, siendo Microchip una empresa líder junto a Motorola o Intel. Pero el objetivo de esta monografía no es juzgar que microcontrolador es el mejor, sino mostrar como empezar a trabajar con los microcontroladores PIC en la Facultad de Ingeniería de Sistemas de la Unidad Académica de Ingeniería de Sistemas, Eléctrica y Electrónica de la UCACUE.. Para ello se utilizará el modelo básico PIC16F84A y diferentes herramientas de trabajo obtenidas gratuitamente de Internet que más adelante en el Capitulo III se explicará con más detalle.
2.2 La Familia de los Pics 2.2.1 ¿Porque los Pics?
¾ Eficiencia del código: permiten una gran compactación de los programas ¾ Rapidez de ejecución: a frecuencia de 20MHz -> 5 millones de instr./seg. ¾ Seguridad en acceso por la separación de memoria de datos y de programa ¾ Juego reducido de instrucciones y de fácil aprendizaje
¾ Compatibilidad de pines y código entre dispositivos de la misma familia o incluso de familias distintas.
¾ Gran variedad de versiones en distintos encapsulados (desde 8 hasta 84 pines) sin reducción de las prestaciones internas (muy versátiles)
¾ Posibilidad de protección del código muy fiable.
¾ Herramientas de desarrollo software y hardware abundantes y de bajo costo
2.3 Historia
En 1965, la empresa GI creó una división de microelectrónica, GI Microelectronics División, que comenzó fabricando memorias EPROM y EEPROM, que conformaban las familias AY3-XXXX y AY5-XXXX. A principios de los años 70 diseñó el microprocesador de 16 bits CP1600, razonablemente bueno pero que no manejaba eficazmente las Entradas y Salidas. Para solventar este problema, en 1975 diseñó un chip destinado a controlar E/S: el
PIC (Peripheral Interface Controller). Se trataba de un controlador rápido pero limitado y con pocas instrucciones pues iba a trabajar en combinación con el CP1600.
La arquitectura del PIC, que se comercializó en 1975, era sustancialmente la misma que la de los actuales modelos PIC16C5X. En aquel momento se fabricaba con tecnología NMOS y el producto sólo se ofrecía con memoria ROM y con un pequeño pero robusto microcódigo.
La década de los 80 no fue buena para GI, que tuvo que reestructurar sus negocios, concentrando sus actividades en los semiconductores de potencia. La GI Microelectronics División se convirtió en una empresa subsidiaria, llamada GI Microelectronics Inc. Finalmente, en 1985, la empresa fue vendida a un grupo de inversores de capital de riesgo, los cuales, tras analizar la situación, rebautizaron a la empresa con el nombre de Arizona Microchip Technology y orientaron su negocio a los PIC, las memorias EPROM paralelo y las EEPROM serie. Se comenzó rediseñando los PIC, que pasaron a fabricarse con tecnología CMOS, surgiendo la familia de gama baja PIC16CSX, considerada como la "clásica".
Una de las razones del éxito de los PIC se basa en su utilización. Cuando se aprende a manejar uno de ellos, conociendo su arquitectura y su repertorio de instrucciones, es muy fácil emplear otro modelo.
Microchip cuenta con su fábrica principal en Chandler, Arizona, en donde se fabrican y prueban los chips con los más avanzados recursos técnicos. En 1993 construyó otra fábrica de similares características en Tampa, Arizona. También cuenta con centros de ensamblaje y ensayos en Taiwan y Tailandia. Para tener una idea de su alta producción, hay que tener en cuenta que ha superado el millón de unidades por semana en productos CMOS de la familia PIC16CSX.
2.4 La Gama de los Pics
Para resolver aplicaciones sencillas se precisan pocos recursos; en cambio, las aplicaciones grandes requieren numerosos y potentes. Siguiendo esta filosofía, Microchip construye diversos modelos de microcontroladores orientados a cubrir, de forma, las necesidades de cada proyecto. Así, hay disponibles microcontroladores sencillos y baratos para atender las aplicaciones simples y otros complejos y más costosos para las de mucha envergadura.
Entre los fabricantes de microcontroladores hay dos tendencias para resolver las demandas de los usuarios:
1ª. Microcontroladores de arquitectura cerrada
Cada modelo se construye con un determinado CPU, cierta capacidad de memoria de datos, cierto tipo y capacidad de memoria de instrucciones, un número de E/S y un conjunto de recursos auxiliares muy concreto. El modelo no admite variaciones ni ampliaciones.
La aplicación a la que se destina debe encontrar en su estructura todo lo que precisa y, en caso contrario, hay que desecharlo. Microchip ha elegido principalmente este modelo de arquitectura.
2ª. Microcontroladores de arquitectura abierta
Estos microcontroladores se caracterizan porque, además de disponer de una estructura interna determinada, pueden emplear sus líneas de E/S para enviar al exterior los buses de datos, direcciones y control, con lo que se posibilita la ampliación de la memoria y las E/S con circuitos integrados externos. Microchip dispone de modelos PIC con arquitectura abierta, sin embargo, esta alternativa se escapa de la idea de un microcontrolador incrustado y se asemeja a la solución que emplean los clásicos microprocesadores.
Pero como se dijo anteriormente, los verdaderos microcontroladores responden a la arquitectura cerrada y permiten resolver una aplicación con un solo circuito integrado y a precio muy reducido.
La mayoría de los sistemas de control incrustados requieren CPU, memoria de datos, memoria de instrucciones, líneas de E/S, y diversas funciones auxiliares como temporizadores, comunicación serie y otras. La capacidad y el tipo de las memorias, el número de líneas de E/S y el de temporizadores, así como circuitos auxiliares, son parámetros que dependen exclusivamente de la aplicación y varían mucho de unas situaciones a otras. Quizás se pueda considerar la decisión más importante del proyecto la elección del modelo de microcontrolador. Para adaptarse de forma óptima a las necesidades de los usuarios, Microchip oferta tres gamas de microcontroladores de 8 bits.
Con las tres gamas de PIC se dispone de gran diversidad de modelos y encapsulados, pudiendo seleccionar el que mejor se acople a las necesidades de acuerdo con el tipo y capacidad de las memorias, el número de líneas de E/S y las funciones auxiliares precisas. Sin embargo, todas las versiones están construidas alrededor de una arquitectura común, un repertorio mínimo de instrucciones y un conjunto de opciones muy apreciadas, como el bajo consumo y el amplio margen de tensión de alimentación. En la figura 2.1 se muestra la distribución de los modelos de PIC en las tres gamas.
2.4.1 Gama Baja
La gama baja de los PIC encuadra nueve modelos fundamentales en la actualidad. La memoria de programa puede contener 512, 1 k. y 2 k palabras de 12 bits, y ser de tipo ROM ó EPROM. También hay modelos con memoria OTP, que sólo puede ser grabada una vez por el usuario. La memoria de datos puede tener una capacidad comprendida entre 25 y 73 bytes. Sólo disponen de un temporizador (TMR0), un repertorio de 33 instrucciones y un número de pines para soportar las E/S comprendido entre 12 y 20. La tensión de alimentación admite un valor muy flexible comprendido entre 2 y 6,25 V, lo cual posibilita el funcionamiento mediante pilas comunes teniendo en cuenta su bajo consumo (menos de 2 mA. a 5 V y 4 MHz).
Al igual que todos los miembros de la familia PIC16/17, los componentes de la gama baja se caracterizan por poseer los siguientes recursos.
1. Sistema POR ( POWER ON RESET).
Todos los PIC tienen la facultad de generar una autoreinicialización o autoreset al conectarles la alimentación.
2. Perro guardián, (Watchdog)
Existe un temporizador que produce un reset automáticamente si no es recargado antes que pase un tiempo prefijado. Así se evita que el sistema quede en bucle cerrado, lo
que comúnmente se denomina "colgado" dado en esa situación el programa no recarga dicho temporizador y se genera un reset.
3. Código de protección
Cuando se procede a realizar la grabación del programa, puede protegerse para evitar su lectura. También disponen, los PIC de posiciones reservadas para registrar números de serie, códigos de identificación, prueba, etc.
4. Líneas de E/S de alta corriente.
Las líneas de E/S de los PIC pueden proporcionar o absorber una corriente de salida comprendida entre 20 y 25 mA, capaz de excitar directamente ciertos periféricos.
5. Modo de reposo (bajo consumo o SLEEP).
Ejecutando una instrucción (SLEEP), el CPU y el oscilador principal se detienen y se reduce notablemente el consumo.
La gama baja tiene dos restricciones importantes.
1ª) La pila o "stack" sólo dispone de dos niveles lo que supone no poder encadenar más de dos subrutinas.
2ª) Los microcontroladores de la gama baja no admiten interrupciones.
2.4.2 Gama Media
En esta gama sus componentes añaden nuevas prestaciones a las que poseían los de la gama baja, haciéndoles más adecuados en las aplicaciones complejas. Admiten interrupciones, poseen comparadores de magnitudes analógicas, convertidores A/D, puertos serie y diversos temporizadores.
Algunos modelos disponen de una memoria de instrucciones del tipo OTP ("One Time Programmable"), que sólo la puede grabar una vez el usuario y que resulta mucho más económica en la implementación de prototipos y pequeñas series.
Hay modelos de esta gama que disponen de una memoria de instrucciones tipo EEPROM, que al ser borrables eléctricamente son mucho más fáciles de reprogramar que las EPROM, que tienen que ser sometidas a rayos ultravioleta durante un tiempo determinado para realizar dicha operación.
El temporizador TMR1 que hay en esta gama tiene un circuito oscilador que puede trabajar asíncronamente y que puede incrementarse aunque el microcontrolador se halle en el modo de reposo ("sleep"), posibilitando la implementación de un reloj en tiempo real.
Las líneas de E/S del puerto B presentan una carga "pull-up" activada por software.
2.4.3 Gama Alta
En la actualidad, esta gama esta formada por tres modelos cuyas características responden a microcontroladores de arquitectura abierta.
Los dispositivos PIC17C4X responden a microcontroladores de arquitectura abierta pudiéndose expansionar hacia el exterior al poder sacar los buses de datos, direcciones y control. Así se pueden configurar sistemas similares a los que utilizan los microprocesadores convencionales, siendo capaces de ampliar la configuración interna del PIC añadiendo nuevos dispositivos de memoria y de E/S externas. Esta facultad obliga a estos componentes a tener un elevado número de pines comprendido entre 40 y 44. Admiten interrupciones, poseen puerto serie, varios temporizadores y mayores capacidades de memoria, que alcanza los 8 k palabras en la memoria de instrucciones y 454 bytes en la memoria de datos.
2.5 Microcontrolador. PIC 16X84. 2.5.1 Descripción general.
El PIC de la serie 16x84 es un microcontrolador diseñado por la empresa Microchip, el cual se fabrica en varias versiones de las cuales las más simples, pero interesantes, son la 16C84 y la 16F84. Son idénticas en cuanto a su arquitectura interna a excepción de la memoria ROM y la memoria RAM. En el primer caso contiene una memoria EEPROM de 1Kbytes de 14 bits cada una, en el segundo diseño la memoria tiene la misma capacidad pero es de tipo Flash.
Tal y como se ha comentado, la memoria EEPROM y la Flash son eléctricamente grabables y borrables, lo que permite escribir y borrar el programa bajo prueba manteniendo el microcontrolador en el mismo zócalo y usando el mismo dispositivo para grabar y borrar. Esta característica supone una gran ventaja frente a la mayoría de los microcontroladores, que tienen como memoria de programa reescribible una tipo EPROM. Se graba eléctricamente, pero para borrarlas hay que someterlas durante cierto tiempo a rayos ultravioleta, lo que implica sacar del zócalo el circuito integrado y colocarlo en un borrador de EPROM.
Otra ventaja del PIC16X84 en cuanto a simplificar el proceso de escritura, borrado y reescritura de programas, tan necesario en la fase de diseño, es su sistema de grabación de datos, que se realiza en serie. Para escribir un programa en la memoria se manda la información en serie usando sólo dos pines, una para la señal de reloj y otra para los datos serie. A continuación exponemos las características más significativas:
¾ MEMORIA DE PROGRAMA: 1 K x 14
¾ MEMORIA DE DATOS: 36 bytes (PIC16C84) y 68 bytes (PIC16F84) ¾ MEMORIA DE DATOS EEPROM: 64 bytes
¾ PILA (Stack): De 8 niveles
¾ INTERRUPCIONES: 4 tipos diferentes ¾ JUEGO DE INSTRUCCIONES: 35
¾ ENCAPSULADO: Plástico DIP de 18 pines ¾ FRECUENCIA DE TRABAJO: 10 MHz máxima
¾ TEMPORIZADORES: Sólo uno el TMR0. También tiene Perro Guardián (WDT)
¾ LINEAS DE E/S DIGITALES: 13 (5 Puerta A y 8 Puerta B) ¾ TENSIÓN DE ALIMENTACION (VDD): De 2 a 6 V DC ¾ TENSIÓN DE GRABACION (VPP): De 12 a 14 V DC
Existen otras variantes que se comercializan y responden a la nomenclatura genérica PIC16X8X, atendiendo a diversas características como pueden ser la frecuencia máxima de funcionamiento, el tipo de oscilador externo o el margen de la tensión de alimentación.
2.5.2 Aspecto externo.
EL PIC16C(F)84 está fabricado con tecnología CMOS de altas prestaciones y encapsulado en plástico con 18 pines, con la nomenclatura que se muestra en la figura 2.2. La misión de cada pin se describe a continuación
VDD: Tensión positiva de alimentación.
OSC1/CLKIN: Entrada del circuito oscilador externo que proporciona la frecuencia de trabajo del microcontrolador.
OSC2/CLKOUT: Pin auxiliar del circuito oscilador.
MCLR#: Pin activa con nivel lógico bajo, lo que se representa con el símbolo #. Su activación origina la reinicialización ó Reset del PIC. También se usa durante la grabación de la memoria para introducir por ella la tensión VPP. RA0-RA4: Son las 5 líneas de E/S digitales correspondientes a la Puerta A. La línea RA4 multiplexa otra función expresada por TOCKI. En ese caso sirve para recibir una frecuencia externa para alimentar al temporizador TMR0.
RB0-RB7: Son las 8 líneas de E/S digitales de la Puerta B. La línea RB0 multiplexa la función de servir como entrada a una petición externa de una interrupción.
2.5.3 La frecuencia de funcionamiento. El reloj.
La frecuencia de trabajo del microcontrolador es un parámetro fundamental a la hora de establecer la velocidad de ejecución de instrucciones y el consumo de energía. Cuando un PIC16X84 funciona a 10 MHz, que es su máxima frecuencia, le corresponde un ciclo de instrucción de 400 ns, puesto que cada instrucción tarda en ejecutarse 4 períodos de reloj, o sea, 4 x 100 ns = 400 ns. Todas las instrucciones del PIC se realizan en un ciclo de instrucción, menos las de salto que tarda el doble.
Los impulsos de reloj entrar por el pin OSC1/CLKIN y se dividen por 4 internamente, dando lugar a las señales Q1, Q2, Q3 y Q4 (figura 2.3). Durante un ciclo de instrucción, que comprende las cuatro señales mencionadas, se desarrollan las siguientes operaciones:
¾ Q1: Durante este impulso se incrementa el Contador de Programa.
¾ Q4: Durante este impulso se busca el código de la instrucción en la memoria del programa y se carga en el Registro de Instrucciones.
¾ Q2-Q3: Durante la activación de estas dos señales se produce la decodificación y la ejecución de la instrucción.
Para conseguir ejecutar cada instrucción en un ciclo de instrucción (excepto las de salto), se aplica la técnica de segmentación o pipe-line, que consiste en realizar en paralelo las dos fases que comprende cada instrucción.
La estructura segmentada del procesador permite realizar al mismo tiempo la fase de ejecución de una instrucción y la de búsqueda de la siguiente. Cuando la instrucción ejecutada corresponde a un salto no se conoce cuál será la siguiente hasta que se realice, por eso en esta situación se sustituye la fase de búsqueda por un ciclo “vacío”, originando que las instrucciones de salto tarde en realizarse dos ciclos de instrucción.
2.5.3.1 Tipos de osciladores
Los PIC admiten cuatro tipos de osciladores externos para aplicarles la frecuencia de funcionamiento, se colocan entre los pines OSC1 y OSC2. El tipo empleado debe especificarse en dos bits de la “Palabra de Configuración”, como se comentará más adelante. Los tipos que se pueden emplear son:
¾ Oscilador RC: Es un oscilador de bajo costo formado por una simple resistencia y un condensador. Proporciona una estabilidad mediocre de la frecuencia, cuyo valor depende de los valores de los dos elementos R-C.
¾ Oscilador HS: Es un oscilador que alcanza una alta velocidad comprendida entre 4 y 10 MHz y está basado en un cristal de cuarzo o un resonador cerámico. ¾ Oscilador XT: Es un oscilador de cristal o resonador para frecuencias estándar
comprendidas entre 100 Khz. y 4 MHz.
¾ Oscilador LP: Oscilador de bajo consumo con cristal o resonador diseñado para trabajar en un rango de frecuencias de 35 a 200 KHz.
2.5.4 Reinicialización o RESET.
Cuando se aplica un nivel lógico bajo a la patilla MCLR# el microcontrolador reinicializa su estado. Dos acciones importantes se producen en la reinicialización o RESET:
1. El Contador de Programa se carga con la dirección 0, apuntando a la primera dirección de la memoria de programa en donde deberá estar situada la primera instrucción del programa de aplicación.
2. La mayoría de los registros de estado y control del procesador toman un estado conocido y determinado.
Se puede provocar el RESET de varias maneras, pero si se desea realizar manualmente, habrá que colocar, conectado a la patilla MCLR#, un circuito con un pulsador, que al ser apretado genere un nivel lógico bajo.
2.6 Arquitectura de los microcontroladores PIC16X84.
Para lograr una compactación de código óptima y una velocidad superior a la de sus competidores, los microcontroladores PIC incorporan en su procesador tres de las características más avanzadas en los grandes computadores:
¾ Procesador tipo RISC. ¾ Ejecución segmentada. ¾ Arquitectura HARVARD.
El juego de instrucciones se reduce a 35 y sus modos de direccionamiento se han simplificado al máximo. Con la estructura segmentada se pueden realizar simultáneamente las dos fases en que se descompone cada instrucción. Con la arquitectura HARVARD se puede acceder de forma simultánea e independiente a la memoria de datos y a la de programa. El aislamiento y la diferenciación de los dos tipos de memoria permiten que cada uno tenga la longitud y el tamaño más adecuado. De esta forma, en el PIC16X84 la longitud de datos es de un byte, mientras que la de las instrucciones es de 14 bits.
Otra característica relevante de los PIC es el manejo intensivo del Banco de Registros, los cuales participan de manera muy activa en la ejecución de las instrucciones. De igual forma, la memoria RAM complementa los registros internos implementando en sus posiciones registros de propósito específico y de propósito general.
La arquitectura interna del PIC16X84 se presenta en la figura 2.4 y consta de siete bloques fundamentales.
1. Memoria de programa EEPROM o Flash de 1 k x 14 bits.
2. Memoria de datos formada por dos áreas. Una RAM donde se alojan 22 registros de propósito específico (SFR) y 36 de propósito general (GDR), y otra de tipo EEPROM de 64 bytes.
3. Camino de datos con una ALU de 8 bits y un registro de trabajo W del que normalmente recibe un operando y envía el resultado. EL otro operando puede provenir del bus de datos o del propio código de la instrucción.
5. Base de tiempos y circuitos auxiliares.
6. Direccionamiento de la memoria de programa en base al Contador de Programa ligado a una Pila de 8 niveles de profundidad.
7. Direccionamiento directo e indirecto de la memoria RAM.
2.6.1 Organización de la memoria
Hay dos bloques de memoria en el PIC16X84. Éstas son la memoria del programa y la memoria de datos. Cada bloque posee su propio bus, con la finalidad que el acceso para cada bloque pueda ocurrir durante el mismo ciclo del oscilador. Figura 2.5.
2.6.1.1 Memoria de Programa.
La arquitectura de los PIC de la gama media admite un mapa de memoria de programa capaz de contener 8192 instrucciones de 14 bits cada una. Este mapa se divide en páginas de 2048 posiciones. Para direccionar 8 K posiciones se necesitan 13 bits, que es la longitud que tiene el Contador de Programa. Sin embargo el PIC16X84 solo tiene implementadas 1 K posiciones, por lo que se ignoran los tres bits de más peso del PC.
Al igual que todos los registros específicos que controlan la actividad del procesador, el Contador de Programa está implementado sobre un par de posiciones de la memoria RAM. Cuando se escribe el Contador de Programa como resultado de una operación de la ALU, los 8 bits de menos peso del PC residen en el registro PCL, que ocupa, repetido, la posición 2 de los dos bancos de la memoria de datos. Los bits de más peso, PC <12:8>, residen en los 5 bits de menos peso del registro PCLATH, que ocupa la posición 0A H de los dos bancos de la memoria RAM. En las instrucciones de salto, los 11 bits de menos peso del PC provienen del código de instrucción y los otros dos de los bits de PCLATH <4:3>, tal y como se muestra en la figura 2.6.
La Pila es una zona aislada de las memorias de instrucciones y datos. Tiene una estructura LIFO, en la que el último valor guardado es el primero que sale. Tiene 8 niveles de profundidad cada uno con 13 bits. Funciona como un buffer circular, de manera que el valor que se obtiene al realizar el noveno POP es igual al que se obtuvo en el primero.
2.6.1.2 Memoria de Datos RAM
La memoria de datos del PIC16X84 dispone de dos zonas diferentes:
1. Área de RAM estática o SRAM, donde reside el Banco de Registros Específicos (SFR) y el Banco de Registros de Propósito General (GPR). El primer banco tiene 24 posiciones de tamaño byte, aunque dos de ellas no son operativas, y el segundo 68.
2. Área EEPROM, de 64 bytes donde, opcionalmente, se pueden almacenar datos que no se pierden al desconectar la alimentación. La zona de memoria RAM se halla dividida en dos bancos (banco 0 y banco 1) de 128 bytes cada uno. (Figura 2.7). De esta forma los registros GPR están agrupados entre 00h-0Bh y 80h-8Bh. Los registros de propósito general pueden ser accedidos desde 0Ch-2Fh o 8Ch-AFh, aunque se recomienda siempre el primer intervalo.
Las zonas de memoria 30h-7Fh y B0h-FFh no son empleadas y devuelven 0 en lectura.
El área de memoria de datos también contiene la memoria de datos EEPROM. Esta memoria no está directamente mapeada en la memoria de datos, pero está indirectamente mapeada. Esto es, un puntero de dirección indirecta especifica la dirección de la memoria de datos EEPROM para lectura/escritura. Los 64 bytes de memoria de datos EEPROM tienen el rango de dirección 00h-3Fh.
Para acceder a la EEPROM en lectura y escritura empleamos dos registros, que forman el puntero de dirección indirecta:
EEDATA (0008h), para datos EEADR (0009h), para direcciones
Para definir el modo de funcionamiento empleamos los registros especiales: EECON1 (0088h)
EECON2 (0089h)
2.6.1.3 Direccionamiento de la memoria de datos.
En los PIC de gama media la memoria de datos está organizada para alojar un máximo de 4 bancos de 128 bytes cada uno. Los PIC16C84 sólo tienen implementados los 48 primeros bytes de los bancos 0 y 1. En el resto de los PIC de esta familia se destinan dos bits del registro ESTADO (RP0 y RP1) para determinar el banco y otros siete para elegir una de las 128 posiciones del banco seleccionado, tal y como muestra la figura 2.8.
¾ Direccionamiento Directo: El operando que utiliza la instrucción en curso se referencia mediante su dirección, que viene incluida en el código OP de la misma, concretamente en los 7 bits de menos peso. El banco a acceder lo determinan los bits RP0 y RP1 del registro ESTADO. En el caso del PIC16C84 sólo se usa el bit RP0 al tener implementados únicamente dos bancos.
¾ Direccionamiento Indirecto: Este modo de direccionamiento se usa cuando en una instrucción se utiliza como operando el registro INDF, que ocupa la dirección =de ambos bancos. En realidad el registro INDF no está implementado físicamente y cuando se le hace referencia, se accede a la dirección de un banco especificada con los bits de menos peso del registro FSR. El bit de más peso de FSR junto al bit IRP del registro ESTADO se encargan de seleccionar el banco a acceder, mientras que los 7 bits de menos peso apuntan a la posición. Como sólo hay dos bancos en el PIC16C84 en este modo de direccionamiento, el bit IRP es 0 siempre.
2.6.2 El Registro de Estado.
Hasta ahora ESTADO es el registro más usado y llega el momento de describirlo en su totalidad. Ocupa la dirección 3 tanto del banco 0 como del 1 de la memoria de datos RAM. Sus bits tienen tres misiones distintas:
1. Se encargan de avisar de la incidencias del resultado de la ALU (C, DC y Z). 2. Indican el estado de Reset (TO# y PD#).
3. Seleccionan el banco a acceder en la memoria de datos (IRP, RP0 y RP1). Cada bit de este registro tiene un significado particular que es el que sigue.
¾ BIT 0 o bit de carry ( C ). Bit de acarreo para las operaciones de suma y resta. Se lleva a uno mediante las instrucciones ADDWF y SUBWF, si se genera un acarreo en el bit de mayor peso.
Este bit también lo utilizan las instrucciones de rotación.
¾ BIT 1 o bit DC (Digit Carry). Este es un bit de acarreo de dígito, para por ejemplo la aritmética en BCD. Se pone a uno con las instrucciones ADDWF y SUBWF, si se genera un acarreo del bit 3 al grupo de cuatro bits superior.
¾ BIT 2 o bit Z (zero). Este bit se pone a uno si el resultado de la operación aritmética o lógica ejecutada es nulo.
¾ BIT 3 o bit PD (Power Down). Este bit se pone a uno durante la conexión a la alimentación del circuito, o durante la ejecución de una instrucción CLRWDT relativa al temporizador watchdog. Se pone a cero mediante una instrucción SLEEP.
¾ BIT 4 o bit TO (Time Out). Este bit se pone a uno durante una conexión a la alimentación o durante la ejecución de una instrucción CLRWDT o SLEEP. Se pone a cero cuando el temporizador Watchdog se desborda.
¾ BIT 5 Y 6 o bits RP0 y RP1. Estos bits sirven para seleccionar las páginas de memoria de programa. La tabla 1.5 precisa su modo de utilización, que es perfectamente lógico sabiendo que cada página contiene 128 bytes.
¾ BIT 7 o bit IRP. Este bit está previsto para un futuro direccionamiento de paginado indirecto, pero no se utiliza en el 16C84. Tan solo se usa para compatibilidad con las futuras versiones
2.6.3 Temporizador/Contador TMR0.
Una de las labores más habituales en los programas de control de dispositivos suele ser determinar intervalos concretos de tiempo, y recibe le nombre de “temporizador” (timer) el elemento encargado de realizar esta función. También suele ser frecuente contar los impulsos que se producen en el exterior del sistema, y el elemento destinado a este fin se denomina “contador”. Si las labores del temporizador o contador las asignamos al programa principal robarían mucho tiempo al procesador en detrimento de actividades más importantes. Por este motivo se diseñan recursos específicamente orientados a estas misiones.
Los PIC16X84 poseen un temporizador/contador de 8 bits, llamado TMR0, que actúa de dos maneras diferentes:
1. Como contador de sucesos, que están representados por los impulsos que se aplican a los pines RA4/T0CKI. Al llegar al valor FF H se desborda el contador y, con el siguiente impulso, pasa a 00 H, advirtiendo esta circunstancia con la activación de un señalizador y/o provocando una interrupción.
2. Como temporizador, cuando se carga en el registro que implementa el recurso un valor inicial se incrementa con cada ciclo de instrucción (Fosc/4) hasta que se desborda, o sea, pasa de FF H a 00 H y avisa poniendo a el bit señalizador y/o provocando una interrupción.
Para que el TMR0 funcione como un cantador de impulsos aplicados al pin T0CKI hay que poner a 1 el bit T0CS, que es el que ocupa la posición 5 del registro OPTION. En esta situación, el registro TMR0, que es el ubicado en la dirección 1 del banco 0 de la memoria de datos, se incrementa con cada flanco activo aplicado a la patilla T0CKI. El tipo de flanco activo se elige programando el bit T0SE, que es el que ocupa la posición 4 del
registro OPTION. Si T0SE 0 1, el flanco activo es el de bajada, y si T0SE = 0, es el de subida. Cuando se desea que TMR0 funcione como temporizador el bit T0CS = 0.
En realidad, los PIC16X84 disponen de dos temporizadores, el TMR0 y el Perro Guardián (Watchdog). El primero actúa como principal y sobre él recae el control de tiempos y la cuenta de impulsos. El otro vigila que el programa no se cuelgue, y para ello cada cierto tiempo comprueba si el programa se está ejecutando normalmente. En caso contrario, si el control está detenido en un bucle infinito a la espera de algún acontecimiento que no se produce, el Perro Guardián “ladra”, lo que se traduce en un Reset que inicializa todo el sistema.
A menudo el TMR0 y el Perro Guardián precisan controlar largos intervalos de tiempo y necesitan aumentar la duración de los impulsos de reloj que les incrementa. Para cubrir este requisito se dispone de un circuito programable denominado Divisor de frecuencia, que divide la frecuencia utilizada por diversos rangos. Para programar el comportamiento del TMR0, el Perro Guardián y el Divisor de frecuencia se utilizan algunos bits del registro OPTION y de la Palabra de Configuración, que se verán más adelante. En la figura 2.9 se proporciona un esquema simplificado de la arquitectura del circuito de control de tiempos usado en los PIC16X84.
El Divisor de frecuencias puede usarse con el TMR0 o con el WDT. Con el TMR0 actúa como Pre-divisor, es decir, los impulsos pasan primero por el Divisor y luego se aplican al TMR0, una vez aumentada su duración. Con el WDT actúa después, realizando la función de Post-divisor. Los impulsos, que divide por un rango el Divisor de frecuencia, pueden provenir de la señal de reloj interna (Fosc/4) o de los que se aplican al pin T0CKI. El TMR0 se comporta como un registro de propósito específico (SFR) ubicado en la dirección 1 del banco 0 de la memoria de datos. EN igual dirección, pero en el banco 1, se halla el registro OPTION.
TMR0 puede ser leído y escrito en cualquier momento al estar conectado al bus de datos. Funciona como un contador ascendente de 8 bits. Cuando funciona como temporizador conviene cargarle con el valor de los impulsos que se quiere temporizar, pero expresados en complemento a 2. De esta manera, al llegar al número de impulsos deseados se desborda y al pasar por 00 H se activa el señalizador TOIF y/o se produce una interrupción.
Para calcular los tiempos a controlar con TMR0 se utilizan las siguientes fórmulas prácticas.
Temporización = 4 • Tosc • (Valor cargado en TMR0) • (Rango del Divisor) Valor a cargar en TMR= = Temporización/4 • Tosc • Rango del Divisor
En cualquier momento se puede leer el valor que contiene TMR0, sin detener su cuenta. En la figura 2.10 se ofrece el esquema de funcionamiento de TMR0.
Obsérvese que hay un bloque que retrasa 2 ciclos la cuenta para sincronizar el momento del incremento producido por la señal aplicada a T0CKI con el que se producen los impulsos internos de reloj. Cuando se escribe TMR0 se retrasan 2 ciclos su reincremento y
2.6.4 El registro OPTION.
La misión principal de este registro es controlar TMR0 y el Divisor de frecuencia. Ocupa la posición 81 H de la memoria de datos, que equivale a la dirección 1 del banco 1. EL bit T0CS (Timer 0 Clock edge Select) selecciona en el multiplexor MPX1 la procedencia de los impulsos de reloj, que pueden ser del oscilador interno (Fosc/4) o los que se aplican desde el exterior por la patilla T0CKI. El bit T0SE (Timer 0 clock Source sElect) elige el tipo de flanco activo en los impulsos externos. El bit PSA del registro OPTION asigna el Divisor de frecuencia al TMR0 (PSA= 0) o al WDT (PSA = 1).
Los 3 bits de menos peso de OPTION seleccionan el rango por el que divide el Divisor de frecuencia los impulsos que se le aplican en su entrada. El bit 6 INTEDG (INTerrupt EDGe) sirve para determinar el flanco activo que provocará una interrupción externa al aplicarse al pin RB0/INT. Un 1 si es de subida y un 0 si es de bajada. El bit 7 RBPU# (RB Pull-Up) activa, si vale 0, o desactiva, cuando vale 1, las resistencias Pull-Up que pueden conectarse en las líneas de la Puerta B .La figura 2.11 muestra la distribución y función de los bits de OPTION.
2.6.5 El Perro Guardián (WDT).
Se trata de un contador interno de 8 bits que origina un Reset cuando se desborda. Su control de tiempos es independiente del TMR0 y está basado en un simple circuito R-C. Su actuación es opcional y puede bloquearse para que no funcione programando el bit WDTE de la palabra de Configuración. La temporización nominal con la que se halla programado el Perro Guardián es de 18 ms, pero utilizando el Divisor de frecuencia puede aumentarse hasta alcanzar los 2,3 segundos.
Para evitar que se desborde el Perro Guardián hay que refrescarle previamente. En realidad este refresco consiste en ponerle a cero mediante las instrucciones clrwdt y sleep. El programador debe analizar las instrucciones de la tarea y situar alguna de esas dos en sitios estratégicos por los que pase el flujo de control antes que transcurra el tiempo asignado al WDT. De esta manera si el programa se cuelga no se refresca el Perro Guardián y se produce la reinicialización del sistema.
La instrucción clrwdt borra al WDT y reinicia su cuenta. Sin embargo, la instrucción sleep, además de borrar WDT detiene al sistema y lo lleva a un estado de reposo o de bajo consumo. Si no se desactiva el Perro Guardián al entrar en modo de reposo, al completar su cuenta provocará un Reset y sacará al microcontrolador del modo de bajo consumo. Para desactivar el Perro Guardián hay que escribir un 0 en el bit 2 (WDTE) de la Palabra de Configuración.
2.6.6 Las Puertas de E/S.
Los PIC16X84 sólo disponen de dos puertas de E/S. La Puerta A posee 5 líneas, RA0-RA4, y una de ellas soporta dos funciones multiplexadas. Se trata de RA4/TOCKI, que puede actuar como línea de E/S o como el pin por la que se reciben los impulsos que debe contar TMR0. La Puerta B tiene 8 líneas, RB0-RB7, y también tiene una con funciones multiplexadas, la RB0/INT, que, además de línea típica de E/S, también sirve como patilla por la que reciben los impulsos externos que provocan una interrupción.
Cada línea de E/S puede configurarse independientemente como entrada o como salida, según se ponga a 1 o a 0, respectivamente, el bit asociado del registro de configuración de cada puerta (TRISA y TRISB). Se llaman PUERTA ”A” y PUERTA ”B” los registros que guardan la información que entra o sale por la puerta y ocupan las direcciones 5 y 6 del banco 0 de la memoria de datos. Los registros de configuración TRISA y TRISB ocupan las mismas direcciones pero en el banco 1. Al reiniciarse el PIC todos los bits de los registros TRIS quedan a 1, con lo que las líneas de las puertas quedan configuradas como entradas. Cada línea de salida puede suministrar una corriente máxima de
disipación máxima de la potencia del chip se restringe la corriente máxima de absorción de la Puerta A a 80 mA y la de suministro a 50 mA. La Puerta B puede absorber un máximo de 150 mA y suministrar un total de 100 mA.
2.6.6.1 La Puerta A.
Las líneas RA3-RA0 admiten niveles de entrada TTL y de salida CMOS. La línea RA4/TOCKI dispone de un circuito Trigger Schmitt que proporciona una buena inmunidad al ruido y la salida tiene drenador abierto. RA4 multiplexa su función de E/S con la entrada de impulsos externos para el TMR0. En el circuito de la figura 2.12 se muestra la adaptación de los pines RA3-RA0 a las señales internas del procesador.
Cuando se lee una línea de la Puerta A se recoge el nivel lógico que tiene en ese momento. Las líneas cuando actúan como salidas están conectadas a unos biestable, lo que significa que sus pines llevan el nivel lógico que se haya cargado por última vez en el registro PUERTA A. La escritura de una puerta, tal y como se ve en la figura 2.12, implica que primero se deposita el nivel lógico en la línea correspondiente del bus interno de datos y se activa la señal WRITE, lo que origina el almacenamiento de dicho nivel en el biestable. En esta situación, el biestable de configuración (TRIS) debería tener valor 0 para que actuase