Download DSpace de la Universidad Catolica de Cuenca
Document related concepts
no text concepts found
Transcript
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 2007 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” 2 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 E2PROM ..................................................... 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.3 La frecuencia de funcionamiento. El reloj.............................................. 28 2.5.3.1 Tipos de osciladores.......................................................................... 29 4 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 5 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 6 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 7 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 DSP.- Procesador de señales digitales 8 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. 9 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. 10 ¾ 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. 11 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: 12 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 13 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. 14 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 15 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. 16 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). ¾ Conversor D/A (Digital ->Analógico). 17 ¾ 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 18 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. 19 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. 20 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 21 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: 22 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. 23 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 24 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. 25 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: 26 ¾ 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. VSS: Tensión conectada a tierra o negativa de alimentación. 27 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: 28 ¾ 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. 29 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. 4. Diversos recursos conectados al bus de datos, tales como Puertas de Entrada/Salida, Temporizador TMR0, etc. 30 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. 31 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. 32 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) 33 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. 34 ¾ 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. 35 ¾ 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 36 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. 37 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 se pone a 0 el Divisor de frecuencia. 38 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. 39 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 20 mA y si es de entrada puede absorber hasta 25 mA. Al existir una limitación en la 40 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 41 como salida. Con estos valores la puerta OR tendría un 0 a su salida y la AND también. Estos valores producen la conducción de los transistores MOS, en función del valor escrito, dando como salida final VDD o VSS (1 ó 0 respectivamente). Si una línea actúa como entrada, el nivel lógico depositado en ella desde el exterior pasa a la línea correspondiente del bus interno de datos cuando se activa la señal READ y se hace conductor el dispositivo triestado que les une. Al programarse como entrada, los dos transistores MOS de salida quedan bloqueados y la línea de alta impedancia. Téngase en cuenta que cuando se lee una línea de entrada se obtiene el estado actual que tiene su pin correspondiente (almacenado en el tercer biestable) y no el que haya almacenado en el biestable de datos. La información presente en una línea de entrada se muestrea al iniciarse el ciclo de instrucción y debe mantenerse estable durante su desarrollo. 2.6.6.2 La Puerta B. Consta de 8 líneas bidireccionales de E/S, RB7-RB0, cuya información se almacena en el registro PUERTA B, que ocupa la dirección 6 del banco 0. El registro de configuración TRISB ocupa la misma dirección pero del banco 1. La línea RB0/INT tiene dos funciones multiplexadas; además el pin de E/S actúa como el pin para la petición de una interrupción externa, cuando se autoriza esta función mediante la adecuada programación del registro INTCON. A todas las líneas de esta puerta se las permite conectar una resistencia pull-up de elevado valor con el positivo de la alimentación. Para este fin hay que programar en el registro OPTION el bit RBPU# = 0, afectando la conexión de la resistencia a todas las líneas. Con el Reset todas las líneas quedan configuradas como entradas y se desactivan las resistencias de pull-up. Las cuatro líneas de más peso, RB7-RB4, pueden programarse para soportar una misión especial. Cuando las 4 líneas actúan como entradas se las puede programar para generar una interrupción si alguna de ellas cambia su estado lógico. Esta posibilidad es muy práctica en el control de teclados. En la figura 2.13 se muestra el esquema de conexionado entre los pines RB7-RB4 y las líneas correspondientes del bus interno. El estado de los pines RB7-RB4 en modo de entrada se compara con el valor antiguo que tenían y que se había almacenado en un biestable durante la última lectura de la Puerta B. El cambio de estado en alguna de esas líneas origina una interrupción y la activación del señalizador RBIF. La línea RB6 también se utiliza para la grabación serie de la memoria de programas y sirve para soportar la señal de reloj. La línea RB7 constituye la entrada de los datos en serie. 42 2.6.7 La Palabra de CONFIGURACION. Se trata de una posición reservada de la memoria de programa situada en la dirección 2007 H y accesible únicamente durante el proceso de grabación. Al escribirse el programa de la aplicación es necesario grabar el contenido de esta posición de acuerdo con las características del sistema. En la figura 2.14 se muestra la distribución y asignación de los 14 bits de la Palabra de Configuración de los PIC16F84, que tienen las siguientes funciones: CP CP CP CP CP CP CP CP CP CP PWRT WDT FOSC FOSC E# E 1 Figura 2.14 CP: BITS DE PROTECCIÓN DE LA MEMORIA DE CÓDIGO 1: No protegida 0: Protegida. El programa no se puede leer, evitando copias. Tampoco se puede sobreescribir. Además evita que pueda ser accedida la memoria EEPROM de datos y, finalmente, si se modifica el bit CP de 0 a 1, se borra completamente la EEPROM. 43 0 PWRTE: ACTIVACIÓN DEL TEMPORIZADOR “POWER-UP” El temporizador “power-up” retrasa 72 ms la puesta en marcha o Reset que se produce al conectar la alimentación al PIC, para garantizar la estabilidad de la tensión aplicada. 1: Desactivado 0: Activado WDT: ACTIVACIÓN DEL PERRO GUARDIÁN 1: Activado el WDT 0: Desactivado FOSC1-FOSC0: SELECCIÓN DEL OSCILADOR UTILIZADO 1-1: Oscilador RC 1-0: Oscilador HS 0-1: Oscilador XT 0-0: Oscilador LP 2.6.8 La memoria EEPROM de Datos. Los PIC16X84 tienen 64 bytes de memoria EEPROM de datos, donde se pueden almacenar datos y variables que interesa que no se pierdan cuando se desconecta la alimentación al sistema. Soporta 1.000.000 de ciclos de escritura/borrado y es capaz de guardar la información sin alterarla más de 40 años. La memoria EEPROM no está mapeada en la zona de la memoria de datos donde se ubican los registros SFR y GPR. Para poder leerla y escribirla durante el funcionamiento normal del microcontrolador hay que utilizar 4 registros del banco SFR: EEDATA, EEADR y EECON1. En el registro EEADR, ubicado en la dirección 9 del banco 0, se carga la dirección a acceder de la EEPROM de datos. Las 64 posiciones de un byte ocupan las direcciones de un mapa que comienza en 00 H y termina en 3F H, por eso los 2 bits de más peso de este registro siempre valen 0. En el registro EEDATA, ubicado en la dirección 8 del banco 0, se depositan los datos que se leen o escriben. El registro EECON1, que ocupa la dirección 88 H de la memoria de datos, o la dirección 8 del banco 1, tiene misiones de control de las operaciones en la EEPROM y la distribución de sus bits se presenta en la figura 2.15, sirviendo cada uno de ellos para lo siguiente: RD: Lectura 1: Se pone a 1 cuando se va a realizar un ciclo de lectura. Luego pasa a 0 automáticamente. 44 WR: Escritura 1: Se pone a 1 cuando se va a realizar un ciclo de ESCRITURA. Luego pasa a 0 automáticamente. WREN: Permiso de escritura 1: Permite la escritura en la EEPROM. 0: Prohibe la escritura. WRERR: Señalizador de error en escritura 1: Se pone a 1 cuando una operación de escritura ha terminado prematuramente. 0: La operación de escritura se ha completado correctamente. EEIF: Señalizador de final de operación de escritura 1: Cuando este señalizador se pone a 1 indica que la operación se ha completado con éxito. Se pone a 0 por programa. 0: La operación de escritura no se ha completado. ------ ------ ------ EEIF WRERR WREN WR RD Figura 2.15 2.7 Interrupciones. Las llamadas a las subrutinas mediante instrucciones del tipo CALL son desviaciones del flujo de control del programa originadas por instrucciones, por lo que se consideran síncronas. Se producen cada vez que se ejecuta dicha instrucción. La interrupciones son desviaciones del flujo de control del programa originadas asíncronamente por diversos sucesos que no se hallan bajo la supervisión de las instrucciones. Dichos sucesos pueden ser externos al sistema, como la generación de un flanco o nivel activo en una patilla del microcontrolador, o bien, internos, como el desbordamiento de un contador. El comportamiento del microcontrolador ante la interrupción es similar al de la instrucción tipo CALL de llamada a subrutina. En ambos casos se detiene la ejecución del programa en curso, se salva la dirección actual del PC en la Pila y se carga el PC con una dirección, que en el caso de CALL viene acompañando a la misma instrucción, y en el caso de una interrupción es una dirección “reservada” de la memoria de código, llamada Vector de Interrupción que da paso a un trozo de código denominado Rutina de Servicio de la Interrupción (RSI). 45 La RSI suele comenzar guardando en la memoria de datos algunos registros específicos del procesador. Concretamente aquellos que la RSI va a emplear y va a alterar su contenido. Antes del retorno al programa principal se recuperan los valores guardados y se restaura completamente el estado del procesador. Algunos procesadores salvan estos registros en la Pila, pero los PIC no disponen de instrucciones para introducir (push) y sacar (pop) información de la Pila, utilizando para este fin registros de propósito general de la memoria de datos. Los PIC16X84 pueden ser interrumpidos por 4 causas diferentes, pero todas ellas desvían el flujo de control a la dirección 0004 H, por lo que otra de las operaciones iniciales de la RSI es averiguar cuál de las posibles causas ha sido la responsable de la interrupción en curso, para ello se exploran los señalizadores de las fuentes de interrupción. Otro detalle importante en la RSI de los PIC16X84 es que estos microcontroladores poseen un bit GIE (Global Interrupt Enable) que cuando vale 0 prohibe todas las interrupciones. Pues bien, al comenzar la RSI dicho bit GIE se pone automáticamente a 0, con objeto de no atender nuevas interrupciones hasta que se termine la que ha comenzado. En el retorno final de la interrupción, GIE pasa a valer automáticamente 1 para volver a tener en cuenta las interrupciones. Antes del retorno conviene borrar el señalizador de la causa de interrupción que se ha atendido, porque si bien los señalizadores se ponen a 1 automáticamente en cuanto se produce la causa que indican, la puesta a 0 se hace por programa. En la figura 17 se muestra un organigrama de las fases más importantes que se desarrollan durante el proceso de ejecución de una interrupción. 2.7.1 Causas de Interrupción. Los PIC16X84 tienen 4 causas o fuentes posibles de interrupción: 1. Activación de la patilla RB0/INT 2. Desbordamiento del temporizador TMR0 3. Cambio de estado en una de las 4 pines de más peso (RB7-RB4) de la Puerta B 4. Finalización de la escritura en la EEPROM de datos. Cuando ocurre cualquiera de los 4 sucesos indicados se origina una petición de interrupción, que si se acepta y se atiende comienza depositando el valor del PC actual en la Pila, poniendo el bit GIE = 0 y cargando en el PC el valor 0004 H, que es el Vector de Interrupción donde se desvía el flujo de control. Cada fuente de interrupción dispone de un señalizador o “flag”, que es un bit que se pone automáticamente a 1 cuando se produce. 46 Además cada fuente de interrupción tiene otro bit de permiso, que según su valor permite o prohibe la realización de dicha interrupción. 2.7.2 El Registro de Control de Interrupciones INTCON. La mayor parte de los señalizadores y bits de permiso de las fuentes de interrupción en los PIC16X84 están implementados sobre los bits del registro INTCON, que ocupa la dirección 0B H del banco 0, hallándose duplicado en el banco 1. El significado de cada bit, que se muestra en la figura 2.16, es el siguiente: GIE EEIE T0IE INTE RBIE T0IF INTF RBIF Figura 2.16 GIE: Permiso Global de Interrupciones 0: Prohíbe todas las interrupciones. 1: Permite la ejecución de todas las interrupciones, cuyos bits de permiso individuales también las permitan. EEIE: Permiso de Interrupción por fin de escritura en la EEPROM 0: Prohíbe que se produzca esta interrupción. 1: Permite que se origine esta interrupción cuando termina la escritura en la EEPROM de datos. T0IE: Permiso de Interrupción por sobrepasamiento del TMR0 0: Prohíbe esta interrupción. 1: Permite una interrupción al desbordarse el TMR0. INTE: Permiso de Interrupción por activación de la patilla RB0/INT 0: Prohíbe esta interrupción. 1: Permite la interrupción al activarse RB0/INT. RBIE: Permiso de Interrupción por cambio de estado en RB7-RB4 0: Prohíbe esta interrupción 1: Permite esta interrupción. T0IF: Señalizador de sobrepasamiento del TMR0 0: Indica que el TMR0 no se ha desbordado. 1: Toma este valor cuando ha ocurrido el desbordamiento. 47 INTF: Señalizador de activación del pin RB0/INT 0: Indica que RB0/INT aún no se ha activado. 1: Se pone a 1 al activarse RB0/INT. RBIF: Señalizador de cambio de estado en los pines RB7-RB4 0: No ha cambiado el estado de RB7-RB4. 1: Pasa a 1 cuando cambia el estado de alguna de esas líneas. Siempre que se produzca una interrupción por cualquier causa, GIE=1 y el PC se carga con el valor 0004 H, que es el Vector de Interrupción. Para conocer que causa ha provocado la interrupción se exploran los señalizadores, tres de los cuales se ubican en el registro INTCON y el cuarto, EEIF, que se pone a 1 cuando finaliza la escritura en le EEPROM, se halla en el bit 4 del registro EECON1. Los señalizadores deben ponerse a 0 por programa antes del retorno de la interrupción y son operativos aunque la interrupción esté prohibida con su bit de permiso correspondiente. 2.7.3 Interrupción Externa INT. Esta fuente de interrupciones es sumamente importante para atender los acontecimientos externos en tiempo real. Cuando ocurre alguno de ellos activa el pin RB0/INT y se hace una petición de interrupción. Entonces, de forma automática, el bit INTF=1 y, si el bit de permiso INTE=1 se autoriza el desarrollo de la interrupción. Mediante el bit 6, llamado INTDEG, del registro OPTION se puede seleccionar cual será el flanco activo en RB0/INT. Si se desea que sea ascendente se escribe un 1 en dicho bit, y si se desea descendente se escribe un 0. El procesador explora el señalizador INTF al final del primer ciclo de reloj de cada ciclo de instrucción. Recuérdese que cada ciclo de instrucción constaba de 4 ciclos de reloj: Q1, Q2, Q3 y Q4. Al terminar Q1 se exploran los señalizadores produciéndose un período de latencia de 3 ó 4 ciclos de instrucción desde el momento que hay un señalizador activado hasta que se inicializa la interrupción. 2.7.4 Interrupción por desbordamiento del TMR0. Cuando el TMR0 se desborda y pasa del valor FF H al 00 H, el señalizador T0IF se ubica automáticamente a 1. Sí además, el bit de permiso de interrupción del TMR0 T0IE=1 y el bit de Permiso Global de Interrupciones GIE=1, se produce una interrupción. 48 CAPITULO III PROCESDOR DE SEÑALES DIGITALES 3.1 Introducción Actualmente las aplicaciones de procesamiento digital de señales (DSP) han cobrado gran importancia en muchas áreas específicas de la electrónica como: las telecomunicaciones, el control industrial y el desarrollo de equipos médicos. Un sistema de procesado digital de señal puede definirse como cualquier sistema electrónico que realice procesado digital de señal, entendiéndose por él la aplicación de operaciones matemáticas a señales representadas de forma digital. Las señales son representadas de forma digital mediante secuencias de muestras. A menudo, estas muestras se obtienen de señales físicas (por ejemplo, señales de audio) utilizando transductores (un micrófono en este caso) y convertidores analógico-digitales. Después del procesado matemático, las señales digitales pueden volver a convertirse en señales físicas mediante convertidores digital-analógicos. Si bien, en principio, el corazón de un sistema de procesado digital puede ser un microcontrolador, un procesador de propósito general o un procesador digital de señal (DSP), en sistemas en los cuales la carga computacional es extremadamente intensa la solución óptima pasa por escoger a un DSP. Estos circuitos digitales baratos y relativamente rápidos han hecho posible construir sistemas digitales altamente sofisticados, capaces de realizar funciones y tareas del procesado de señales digitales que normalmente eran demasiado difíciles y/o caras con circuitería o sistemas de procesado de señales analógicas. De aquí que muchas de las tareas del procesado de señales que convencionalmente se realizaban analógicamente se realicen hoy mediante hardware digital, más barato y a menudo más confiable. Avances en la tecnología de fabricación de circuitos integrados también abren nuevas áreas de desarrollo basadas en DSP, tales como sensores inteligentes, visión de robots y automatización, mientras entrega las bases para continuar los avances en áreas tradicionales del procesamiento digital de señales, tales como música, voz, radar, sonar, video, audio y comunicaciones. 49 Las aplicaciones más comunes y económicas las encontramos en la telefonía celular; en la figura 3.1 se ilustra a manera de bloques: Cuando se habla a través de la bocina de un teléfono celular, la voz desde un micrófono emite ondas sonoras a manera de señales analógicas, mismas que entran a un convertidor analógico-digital para su transmisión en grupos de ceros y unos; aquí es donde interviene el DSP, y en la última parte que es el receptor son nuevamente convertidos de digital a analógico para ser recibidos como señal análoga por el receptor; esto trajo como consecuencia una señal más fiel dado que eliminó el ruido de fondo y la interferencia. Como se dijo anteriormente los DSP son utilizados para los sistemas pequeños, baratos y con un gran volumen de producción como los de telefonía celular, disqueteras y modems, en donde el costo y la integración son de la mayor importancia. En sistemas portátiles, alimentados por baterías, el consumo es crítico. Sin embargo, la facilidad de desarrollo es generalmente en estas aplicaciones menos importante para el diseñador. A pesar de que estas aplicaciones casi siempre implican el desarrollo de hardware y software a medida, el enorme volumen de producción justifica el esfuerzo extra de desarrollo. Una segunda clase de aplicaciones englobaría a aquellas que procesan un gran volumen de datos mediante algoritmos complejos. Ejemplos incluyen la exploración sonar y sísmica, donde el volumen de producción es bajo, los algoritmos más exigentes y el diseño del producto más largo y complejo. En consecuencia, el diseñador busca un DSP que tenga máximas prestaciones, buena facilidad de uso y soporte para configuraciones multiprocesador. En algunos casos, más que diseñar el propio hardware y software, el sistema se construye a partir de placas de desarrollo de catálogo y el software a partir de librerías de funciones ya existentes. 3.2 ¿Qué es Procesamiento Digital de Señales? Es una técnica que convierte señales de fuentes del mundo real (usualmente en forma analógica), en datos digitales que luego pueden ser analizados. Este análisis es realizado en forma digital pues una vez que una señal ha sido reducida a valores numéricos discretos, sus 50 componentes pueden ser aislados, analizados y reordenados más fácilmente que en su primitiva forma analógica. Procesamiento digital de señal (DSP) es una operación o transformación de una señal en un hardware digital según reglas bien definidas las cuales son introducidas al hardware a través de un software específico que puede o no manejar lenguajes tanto de alto como de bajo nivel, es decir, se refiere al procesamiento electrónico de señales tales como sonido, radio y microondas usando técnicas matemáticas para realizar transformaciones o extraer información. En la práctica, las características que hacen a los DSP's tan buenos en el manejo de señales los hacen adecuados para muchos otros propósitos, tales como procesamiento de gráficos de alta calidad y simulaciones en ingeniería. Eventualmente cuándo el DSP ha terminado su trabajo, los datos digitales pueden volverse atrás como señales analógicas, con calidad mejorada. Por ejemplo: un DSP puede filtrar ruido de una señal, remover interferencias, amplificar y/o suprimir frecuencias, encriptar información, ó analizar una corriente compleja en sus componentes esenciales. Este proceso deberá ser realizado en TIEMPO REAL, lo cuál es muy rápido. Por ejemplo: los equipos de stereo manejan señales de sonido arriba de los 20 kilohertz (20.000 ciclos por segundo), necesitando así que el DSP realice miles de millones de operaciones por segundo. Para adentrar en su funcionamiento se pondrá el ejemplo de un filtro: el DSP recibirá valores digitales o muestras procedentes de la señal de entrada, calcula qué salida se obtendrá para esos valores con el filtro que se le ha programado y entrega esa salida. Un posible sistema basado en un DSP puede ser el de la figura 3.2. 51 3.3 Historia de Los Procesadores Digitales de Señales: En 1978, INTEL lanzó el 2920 como un "procesador analógico de señales". Este poseía un chip ADC/DAC con un procesador de señales interno, pero no poseía un multiplicador de hardware, el 2920 no tuvo éxito en el mercado. En 1979, AMI lanza el S2811, fue diseñado como un microprocesador periférico, al igual que el 2920 no tuvo gran éxito en el mercado. En el mismo año, BELL LABS introduce el primer chip procesador digital de señales (DSP), The Mac 4 Microprocessor. Luego en 1980 fueron presentados en el ISSCC’80 los primeros DSP completos: el PD7710 de NEC y el DSP1 de AT&T, ambos procesadores fueron inspirados en las investigaciones de PSTN Telecomunicaciones. En ese mismo año NEC comenzó la producción del PD7710, la primera producción de DSP completos en el mundo. El primer DSP producido por TEXAS INSTRUMENTS, el TMS32010, probó ser un suceso mayor. Actualmente el TMS320C4X diseñado y producido por TEXAS INSTRUMENTS, surge con ciertas ventajas frente al resto de los procesadores, ya que éste se diseña para ser escalable; es decir, para que pueda trabajar en paralelo con otros dispositivos similares. Muchos de los procesadores se engloban dentro de la filosofía CISC, (Complex Instruction Set Computers) Aunque se pueden encontrar en el mercado algunos que operen bajo la filosofía RISC (Reduced Instruction Set Computers); estos últimos dedicados para aplicaciones concretas como la telefonía móvil. 3.4 Procesador de señales digitales. Estrictamente hablando, el término DSP se aplica a cualquier chip que trabaje con señales representadas de forma digital. En la práctica, el término se refiere a microprocesadores específicamente diseñados para realizar procesado digital de señal. Los DSP utilizan arquitecturas especiales para acelerar los cálculos matemáticos intensos implicados en la mayoría de sistemas de procesado de señal en tiempo real. Por ejemplo, las arquitecturas de los DSP incluyen circuitería para ejecutar de forma rápida operaciones de multiplicar y acumular, conocidas como MAC. A menudo poseen arquitecturas de memoria que permiten un acceso múltiple para permitir de forma simultánea cargar varios operandos, por ejemplo, una muestra de la señal de entrada y el coeficiente de un filtro simultáneamente en paralelo con la carga de la instrucción. También incluyen una variedad de modos especiales de direccionamiento y características de control de flujo de programa diseñadas para acelerar la ejecución de operaciones repetitivas. Además, la mayoría de los DSP 52 incluyen en el propio chip periféricos especiales e interfaces de entrada salida que permiten que el procesador se comunique eficientemente con el resto de componentes del sistema, tales como convertidores analógico-digitales o memoria. Aunque el ejemplo del filtro de respuesta impulsiva finita (FIR) ha sido ampliamente utilizado en el entorno DSP, es quizás el más simple que permite ilustrar la necesidad de estas prestaciones en los DSP, las cuales permiten concebir muchas de las funciones de procesado en tiempo real. 3.5 Características básicas de un DSP Una de las más importantes características de un DSP es su capacidad de realizar operaciones de multiplicación y acumulación (MACs) en sólo un ciclo de reloj. Para ello, es necesario que el dispositivo posea la característica de manejar aplicaciones críticas en tiempo real. Esto requiere de una arquitectura que soporte un flujo de datos a alta velocidad hacia y desde la unidad de cálculo y memoria. Esta ejecución a menudo requiere el uso de unidades DMA (Direct Memory Acess) y generadores de direcciones duales (DAG's) que operan en paralelo con otras partes del chip. La diferencia esencial entre un DSP y un microprocesador es que el DSP tiene características diseñadas para soportar tareas de altas prestaciones, repetitivas y numéricamente intensas. Por lo contrario, los microprocesadores de propósito general o microcontroladores no están especializados para ninguna aplicación en especial. Los DGA's realizan los cálculos de direcciones, permitiendo al DSP buscar dos datos distintos para operar con ellos en un sólo ciclo de reloj, de tal forma que es posible ejecutar algoritmos complejos en tiempo real. Es importante para DSP's tener un mecanismo efectivo de salto para la ejecución de loops ya que el código generalmente programado es altamente repetitivo. La arquitectura permite realizar estos loops sin instrucciones adicionales ni demoras, las que al ejecutarse millones de veces empiezan a generar retardos significativos. Los DSP's deben manejar rangos dinámicos extendidos y de precisión para evitar overflow y underflow y para minimizar los errores de redondeo. Para acomodarse a esta capacidad, los DSP's incluyen acumuladores dedicados con registros más anchos que el tamaño nominal de los datos para así conservar la precisión (por ejemplo, DSP's de 16 bits poseen acumuladores de 32 bits para manejar el resultado de las multiplicaciones). También deben soportar el manejo de buffers circulares para la ejecución de funciones algorítmicas, tales como filtros. En estos tipos de buffers el puntero del buffer se actualiza en paralelo con otras funciones del chip en cada ciclo de reloj. En cada ciclo el buffer circular realiza una 53 comprobación de "fin de buffer" para verificar si es necesario volver al inicio de éste sin demorar así la ejecución del algoritmo a causa de la ejecución de instrucciones adicionales de comparación y salto. Por otro lado, los microcontroladores se utilizan sobre todo en aplicaciones donde existen acontecimientos externos los que requieren de la detección y el control. El ambiente externo es detectado por cualquiera de los dispositivos periféricos; puertos digitales I/O, pines dedicados de interrupción, o las entradas análogas (de analógico a digital). La fuente de las señales a estos pines viene de los interruptores, sensores análogos y/o digitales, y de las señales de estado de otros sistemas. Cada entrada representa un pedazo de información sobre el estado de un cierto acontecimiento exterior. Las salidas se envían a actuadores, relays, motores o a otros dispositivos que controlen acontecimientos. Entre la detección y actuación está el microcontrolador, analizando las entradas y el estado actual del sistema, determinando cuándo y qué encender y/o apagar. El software es el que hace todo esto, toma las decisiones, generalmente trabaja de una manera condicional; es decir, realiza saltos sólo bajo ciertas condiciones y realiza manipulaciones a nivel de bits. Las interrupciones son consideradas como condiciones externas que alteran el flujo principal del programa. 3.6 Diferencias entre Microcontroladores y DSP's: Una de las diferencias más importante encontrada entre un DSP y un Microcontrolador es la estructura de memoria que poseen. En un microcontrolador es posible encontrar una memoria lineal, en la que se almacenan tanto datos como instrucciones de programa. Esto obliga a generar programas que no sobrepasen límites de tamaño ya que podrían sobrescribirse datos por instrucciones o viceversa. Un DSP posee dos bloques separados e independientes de memoria, cada uno con su propio bus de acceso, permitiendo así al procesador ir a buscar la siguiente instrucción y dato en el mismo ciclo de reloj (Fetch). Otra diferencia importante entre un Microcontrolador y un DSP (y aún entre DSP's) es la cantidad de unidades de ejecución que poseen, las cuales son capaces de realizar operaciones en paralelo. Por ejemplo, además de la típica ALU, un DSP posee bloques MAC de multiplicación y acumulación, se encuentran también bloques sólo para corrimientos, shifters. Cabe destacar que en la actualidad cada vez se empieza a desarrollar más la tecnología mezclada entre microprocesadores y DSP's. Diversas son las razones para que se produzca esta integración, sin embargo a groso modo es posible identificar una en particular. 54 Los requerimientos de control en tiempo real bajo condiciones cada vez más exigentes en cuanto a necesidad de cálculo han llevado a los fabricantes de microcontroladores (microchip, ST, etc.) a integrar a sus microprocesadores características de DSP (unidades de cálculo paralelas, pipeling, etc.) y por el otro lado los fabricantes de DSP's (Texas, Motorola, Analog Device, etc.) empiezan a utilizar las características de Microcontroladores (Conversores A/D, puertos digitales I/O, bloques PWM) integrándolas dentro del DSP. 3.7 Ventajas y Desventajas de los DSP’s: ¾ La Tecnología VLSI (Very Large Scale Integration) da la posibilidad de diseñar sistemas con la capacidad para ejecutar procesamiento en tiempo real de muchas de las señales de interés para aplicaciones en comunicaciones, control, procesamiento de imagen, multimedia, etc. ¾ Los sistemas digitales son más confiables que los correspondientes sistemas análogos. ¾ Los sistemas digitales ofrecen una mayor flexibilidad que los correspondientes sistemas análogos. ¾ Mayor precisión y mayor exactitud pueden ser obtenidas con sistemas digitales, comparado con los correspondientes sistemas análogos. ¾ Un sistema programable permite flexibilidad en la reconfiguración de aplicaciones DSP. ¾ La tolerancia de los componentes en un sistema análogo hacen que esto sea una dificultad para el diseñador al controlar la exactitud de la señal de salida análoga. Por otro lado, la exactitud de la señal de salida para un sistema digital es predecible y controlable por el tipo de aritmética usada y el número de bits usado en los cálculos. ¾ Las señales digitales pueden ser almacenadas en un disco flexible, Disco Duro o CD– ROM, sin la pérdida de fidelidad más allá que el introducido por el conversor Análogo Digital (ADC). Éste no es el caso para las señales análogas. A pesar de ellas existen algunos inconvenientes que deberán ser tomados en cuenta al momento de escoger una plataforma para el procesamiento de señales analógicas por medios digitales: ¾ La conversión de una señal analógica en digital, obtenida muestreando la señal y cuantificando las muestras, produce una distorsión que nos impide la exacta reconstrucción de la señal analógica original a partir de muestras cuantificadas. 55 ¾ Existen efectos debidos a la precisión finita que deben ser considerados en el procesado digital de las muestras cuantificadas. ¾ Para muchas señales de gran ancho de banda, se requiere procesado en tiempo real. Para tales señales, el procesado analógico, o incluso óptico, son las únicas soluciones válidas. Sin embargo, cuando los circuitos digitales existen y son de suficiente velocidad se hacen preferibles. 3. 8 Microcontroladores de señal dsPIC El dispositivo seleccionado para el estudio de los sistemas digitales de procesado de señal, es el microcontrolador de señal dsPIC, de la empresa Microchip. Los dsPIC nacen después de que los DSP hayan sido desarrollados durante años por otras empresas. En su diseño han participado expertos y especialistas de muchas áreas. Los dsPIC se han aprovechado de la experiencia acumulada por otros fabricantes. Microchip, fabricante de los dsPIC, los ha bautizado con el nombre de DSC (Digital Signal Controller), que puede ser traducido como Controlador Digital de Señal. Un DSC es un potente microcontrolador de 16 bits al que se le han añadido las principales capacidades de los DSP. Es decir, los DSC poseen todos los recursos de los mejores microcontroladores embebidos de 16 bits conjuntamente con las principales características de los DSP, permitiendo su aplicación en el extraordinario campo del procesamiento de las señales analógicas y digitalizadas. Uniendo adecuadamente las capacidades de un DSP con un potente microcontrolador de 16 bits, el DSC reúne las mejores características de los dos campos y marca el comienzo de una nueva era del control embebido. El dsPIC DSC también incorpora la función de auto programación Flash de Microchip, lo que permite revisiones de código y datos al final del proceso de producción o en aplicaciones de usuario final, reduciendo de este modo el tiempo de desarrollo y puesta en el mercado y aumentando la eficiencia y la flexibilidad en la fabricación. 3.8.1 Características de los DsPics La familia dsPIC se caracteriza por una arquitectura Harvard de 16 bits, y añade a las características típicas de control de la MCU de Microchip la potencia de cálculo de una unidad 1xMAC DSP hasta 30 MIPS. En cuanto a memorias, la familia cuenta con hasta 144Kbytes de memoria FLASH para programa, 8Kbytes de SRAM para datos volátiles y 4Kbytes de EEPROM para datos no volátiles. Dicha familia ofrece, además, múltiples periféricos, entre los que destacan los puertos de comunicaciones CAN, SPI, I2C y UART; 56 módulos Capture/Compare, codificadores de cuadratura, múltiples conversores A/D de 12 bits, etc. Coste reducido, potencia de cálculo, variedad de periféricos y encapsulados compactos (de 28 a 64 pines) hacen la familia de controladores mixtos dsPIC idónea para el control de par, velocidad o posición de motores tanto brushed como brushless aplicando algoritmos de última generación. ¾ Temporizadores de 16 y 32 bits ¾ Captura de entrada / comparación de salida ¾ Módulos de comunicación (como UART, interfaz SPI, interfaz I2C, interfaces CAN y Codec) y un convertidor analógico-digital (ADC) de 12 bits ¾ Amplio rango de tensión de funcionamiento, 2,5V a 5,5V ¾ Memoria de programa Flash aumentada ¾ Memoria RAM de 2 Kb y memoria EEPROM no volátil de 1 Kb ¾ Número de pines reducido (18 y 28) para ahorrar espacio 3.8.2 Rango de funcionamiento La nueva familia de controladores de señal digital dsPIC consigue las mayores prestaciones de la Industria. Los dispositivos se caracterizan por tener el corazón de un procesador de señal digital totalmente implementado, 30 MIPS sin pipeline, un rango de funcionamiento de 2,5 V a 5,5 V, un compilador C de entorno amigable, y una arquitectura y entorno de diseño familiar. Los primeros 20 dispositivos dsPIC30Fxxx se caracterizan por una memoria flash incorporada de entre 12 y 144 Kbytes y hasta 8 Kbytes de memoria de datos. Los dispositivos dsPIC están disponibles en tres familias de productos apuntando a control de motores y conversión de potencia, sensor y aplicaciones de propósito general. 3.8.3 Arquitectura dsPIC de Microchip La arquitectura de controlador de señal digital dsPIC de Microchip Technology toma lo mejor de ambos mundos, combinando un potente microcontrolador de 16 bit con una rica funcionalidad DSP en una arquitectura de cadena de instrucción única estrechamente acoplada. El controlador de señal digital dsPIC fue desarrollado desde un principio con un cuidado especial tanto en los requisitos DSP como en los de microcontrolador y presentará un entorno familiar a los usuarios de microcontroladores tradicionales. Las secciones de DSP y de MCU del dsPIC trabajan de forma cooperativa. Las secciones comparten la carga de instrucciones y la lógica de decodificación. El dispositivo tiene una funcionalidad DSP completa (no es sólo un apéndice multiplicador y sumador) y soporta direccionamiento de memoria XY, un juego de operaciones de tipo MAC, lógica de 57 saturación y control de bucle por encima de cero. El MCU tiene su propia ALU y su propio juego de registros, y el DSP también utiliza el juego de registros del MCU. Además de la colección de registros el MCU, el motor DSP contiene os registradores de resultados e 40 bit. La memoria de datos de 64 Kpalabras del dsPIC está particionada en espacios X e Y, solamente para las instrucciones DSP, ver figura 3.3. El espacio X se utiliza para operaciones MCU y DSP, que mientras el espacio Y se utiliza a menudo para el almacenamiento de coeficientes con el fin de acomodar instrucciones DSP de ciclo único. Toda la memoria puede ser accesible linealmente para soportar una eficiente generación de código C. El dsPIC cuenta con un amplio conjunto de funciones de manipulación de bit, tanto para MCU como para DSP. Si bien la manipulación de bit está bien definida para los MCU, no se ha utilizado de forma generalizada en los DSP. El dsPIC se basa en las características de manipulación de bit del PIC18XXXX de Microchip, ofreciendo un amplio abanico de 58 operaciones de bit para los registros W (16 x 16 bit) y los registros de ficheros basados en memoria. De todas formas, ello añade posibilidades de manipulación de bit más potentes en la forma de un amplio abanico de operaciones de búsqueda de bit que pueden encontrar el primer bit activo en una palabra de datos. La potencia de estas operaciones es tal que elimina la necesidad de buscar una palabra, bit por bit, para encontrar el primero bit ‘uno’. Esto ofrece un valioso soporte para funciones tales como el escalado de los operandos DSP y la normalización de los valores del acumulador, y también ayuda a acelerar el proceso de bit de E/S, así como en el sondeo de interrupciones. Los recursos DSP están muy estrechamente ligados a los del MCU y consisten en un multiplicador rápido de 16 x 16 bit y en un registro de desplazamiento de 40 bit, así como de un sumador/restador y acumuladores. Además de ejecutar las instrucciones del DSP, los recursos DSP también permiten disponer de nuevas y potentes instrucciones del MCU, tales como el desplazamiento de múltiples bit en un único ciclo, utilizando para ello el registro de desplazamiento. Una característica clave del diseño del dsPIC es su habilidad para efectuar las ejecuciones de forma rápida, con bajos tiempos de retardo ocasionados por la interrupción. La arquitectura del juego de instrucciones del chip posibilita que la mayoría de las instrucciones se ejecute en ciclo único, y sólo unas pocas requieren dos o tres ciclos. El juego completo de instrucciones consta de 94 instrucciones, incluyendo 19 instrucciones DSP dedicadas. El dsPIC tiene 16 interrupciones vectorizadas: puesta a cero (reset), siete acumuladores no enmascarables y ocho interrupciones priorizadas. Todas las operaciones, tanto DSP del como del MCU, pueden ser interrumpidas. El sombreado o shadowing, es decir, cuando el hardware mantiene un juego de registros ocultos, además del juego activo, se utiliza cuando resulta apropiado con el fin de efectuar un rápido desplazamiento del contenido. Arquitectura DSPIC’s: ¾ Arquitectura Harvard ¾ Datos de 16 bits ¾ Instrucciones de 24 bits ¾ PC de 24 bits ¾ Capacidad para ejecutar instrucciones de 3 operandos en un ciclo: ej. A+B=C ¾ Instrucciones de dos tipos: MCU y DSP 59 CAPITULO IV PROGRAMACION DE LOS MICROCONTROLADORES 4.1 MicroCode Studio 4.1.1 Configuración Lo primero que tenemos que hacer para comenzar a utilizar este editor es configurarlo para tener el mejor rendimiento posible, para ello debemos colocar en una sola carpeta de mecanique los programas tanto de Pic Basic Pro y un programa llamado Ic-prog, con la finalidad de que cuando ejecutemos por primera vez el programa de microcode, pueda encontrar rápidamente su compilador Pic Basic Pro y su programador Ic-prog. Para ejecutar el programa nos vamos a la siguiente dirección "C:\Archivos de programa\Mecanique\MCS\CodeStudio.exe", al iniciarlo por primera vez aparecerá la siguiente pantalla el cual se observa en la figura 4.1. En dicha pantalla buscamos View y damos clic en Editor Options…, luego marcamos la casilla de verificación show line numbers in left gutter la cual es muy importante para que aparezca el número de línea en el cual nos encontramos programando y 60 en el momento de compilar podremos ubicarnos rápidamente en el error si este se produce(figura 4.2). Si queremos que todos nuestros proyectos se guarden en una sola carpeta, podemos indicar la carpeta predefinida en la que iremos guardando nuestro archivos *.bas, para ello damos clic en el botón de Change y seleccionamos la carpeta previamente creada en el Explorador de Windows, para guardar los cambios damos s clic en OK. Ahora vamos a seleccionar el programador para en futuro poder llamarlo directamente desde microcode, para ello otra vez entramos en View damos un clic en PICBasic Options…, a continuación damos clic en la pestaña Programmer, aquí aparecerán los programadores disponibles en nuestro caso debemos adicionar el programa IC-Prog, presionamos el botón Add New Programmer ver en la fig. 4.3, 61 inmediatamente aparece otra pantalla en donde marcamos Create a custom programmer entry y a continuación presionamos el botón Next, en la siguiente pantalla se pedirá que escribamos un nombre con el cual va a ser identificado nuestro programador, por ejemplo podemos darle el nombre IC-Prog y luego presionamos Next, ver figura 4.4. 62 Finalmente aparecerá otra pantalla en donde pedirá que ingresemos el nombre del archivo ejecutable y luego presionamos Next. Aparecerá otra pantalla en la cual podremos buscar manual ó automáticamente dicho archivo, si estamos seguros podremos presionar el botón que dice Find Automatically (Figura 4.5). 4.1.2 Manejo del Programa Microcode es un editor de texto como puede ser el Bloc de notas de Windows con la particularidad que está diseñado para facilitar la programación de los microcontroladores PIC, para la programación se debe primero escoger el modelo del PIC como por ejemplo puede ser el PIC 16F84, a continuación escribimos el programa y lo guardamos con un nombre de preferencia este debe ser que haga referencia al programa escrito, ejemplo led intermitente.bas. Al finalizar el programa debemos compilarlo y si este está bien escrito y sin fallas compilará y mostrará en la parte inferior izquierda el espacio que requiere en el PIC, y en seguida se creará automáticamente 3 archivos: led intermitente.mac, led intermitente.asm, y led intermitente.hex, este último es el más importante ya que este va a ser utilizado para grabar dentro del microcontrolador. En la figura 4.6 se describe las partes de MicroCode. 63 4.1.2.1 Modelo del MicroPic.- Como se dijo anteriormente es lo primero que se debe seleccionar <antes de empezar a programar, lo seleccionamos viendo el número del pic que se va a utilizar, ejemplo: 16F84, 16F28, 16F877A, etc. 4.1.2.2 Buscador de códigos.- Cada vez que creamos una variable, alias, incluimos un define, o creamos algunos nombres de línea, microcode va adicionando en esta ventana con la finalidad de saber qué componentes tiene el programa y también como buscador de líneas, para ello simplemente se deberá dar un clic en el nombre de la línea que deseamos encontrar y automáticamente apuntará dicha línea. 4.1.2.3 Número de línea del programa.- Es muy útil en el momento de encontrar errores, porque al compilar el programa nos indicará en que línea se produce el error, en vista de que el número de línea no viene habilitado debemos configurarlo como ya se indicó en la configuración (ver Configuración 4.1.1) 4.1.2.4 Espacio que ocupa el programa en el PIC.- Hace referencia al espacio que necesita el Pic para ser grabado y aparece una vez que haya compilado y no haya 64 presentado errores. Esto es muy importante ya que si el programa es demasiado grande debemos remplazar el Pic por otro de mayor capacidad. 4.1.2.5 Programa del microcontrolador.- En esta parte es en donde empezamos a escribir nuestro programa, microcode reconoce palabras claves como VAR, HIGH, LOW, PAUSE, etc., y los pone con mayúsculas y negrita, por lo que no se podrá utilizar esta palabras reservadas como nombres de subrutinas o variables, más adelante se indicará con más detalle cada una de estas palabras y su función. 4.1.2.6 Comentarios.- Es recomendable utilizar comentarios en lo posible aunque parezca obvio, ya que alguien podría utilizar nuestro programa y tal vez con el tiempo a lo mejor ni nosotros nos acordemos como lo hicimos ni como funciona una determinada instrucción. 4.1.2.7 Encabezado del programa.- En esta parte se coloca como comentario el nombre del programa, autor, fecha de realización, y una explicación en resumen de lo que realiza el programa. Para que en todos los encabezados de los nuevos programas salga por defecto nuestro nombre y la Empresa debemos configurarlo en View -- Editor Options – Program header. 4.1.2.8 Compilador.- Estos dos botones sirven para compilar el programa y crear los archivos, ASM, MAC y el HEX. El archivo HEX es el que va a ser utilizado para programar en el micro. El MAC solo sirve para el PicBasic y el ASM, para los que quieren ver como lo hizo el compilador en assembler ya que podemos abrirlo en MPLAB. Compile Only – F9.- Este primer botón sirve solamente para compilar, es decir nuestro programa lo cambia a assembler y crea el archivo HEX. Compile and Program – F10.- Este botón tiene doble función, aparte de hacer lo mismo que el anterior, es decir compilar, también puede llamar al progamador ICProg (ver Configuración 4.1.1), con la finalidad de ahorrarnos tiempo y no tener que abrir por separado. 4.1.3 Identificación de errores Cuando compilamos un programa, se realiza una verificación del mismo, en el caso de existir errores microcode señala el primer error marcándole con una franja café, y en la 65 parte inferior muestra los demás errores con el número de línea y su explicación. En la figura 4.7 se muestra un error en la compilación En tabla 4.1 se describe los errores más comunes Mensaje Explicación Syntax error error de sintaxis, mal escrito o falta o está demás una letra Bad expression mala expresión, mal escrito o falta o está demás una letra la línea inici no es un nivel, o nombre de la línea Id inici is not a label incorrecto For without a matching next cuando falta un next Next without a matching for cuando falta un For undefined symbol "portc" cuando ponemos un puerto que no dispone el PIC 80000 numeric overflow nos excedimos del valor límite ejem. PAUSE 80000 66 Nos olvidamos poner el número del pin 1,2,3. Ejem. bad token "." LOW portb. ejem. LOW portb.O pusimos la letra (O) en vez del cero bad variable modifier: .O. (0) este eror sale en compiladores de versiones antiguas, ya que no dispone de este modelo de PIC por ejem en el PBP processor file 12F675 2.33 undefined symbol "cncom" Indica que no existe ese registro en el PIC seleccionado Es una precaución que indica que el programa sobrepasa code crossed boundary las 2048 líneas de programación, aunque si compila no es @800h un problema Tabla 4.1 Tabla de errores más comunes 4.2 Pic Basic Pro El compilador PicBasic Pro (PBP) es nuestro lenguaje de programación de nueva generación que hace mas fácil y rápido para usted programar micro controladores Pic micro de Microchip Technology .El lenguaje Basic es mucho más fácil de leer y escribir que el lenguaje ensamblador Microchip. PBP por defecto crea archivos que corren en un PIC 16F84-04/P con un reloj de 4 Mhz. Solamente muy pocas partes son necesarias dos capacitores de 22 pf para el cristal de 4Mhz un resistor de 4.7K en el pin/MCLR y una fuente de 5 volt. Otros micros PIC además del 16F84, así como otros osciladores de frecuencias distintas pueden ser usados por este compilador. El PBP produce código que puede ser programado para una variedad de micro controladores PIC que tengan de 8 a 68 pins y varias opciones en el chip incluyendo convertidores A/D, temporizadores y puertos seriales. Hay algunos micros PIC que no trabajaran con el PBP, por ejemplo las series PIC 16C5X incluyendo el PIC 16C54 Y PIC 15C58. Estos micro PIC están basados en el viejo núcleo de 12 bit en lugar del núcleo más corriente de 14 bit. El PBP necesita alguna de las opciones que solamente están disponibles con el núcleo de 14 bit como el stack (pila) de 8 niveles. Hay muchos micros PIC, algunos compatibles pin a pin con la serie 5 X, que pueden ser usados con el PBP. La lista incluye PIC16C554, 556, 558, 61, 62(A), 620, 621, 622, 63, 64(A), 65(A), 71, 710, 711, 715, 72, 73(A), 74(A), 84, 923, 924, el PIC16F83 y 84, el PIC12C671 y 672 y el PIC14C000, y Microchip sigue agregando otros. Para reemplazo 67 directo de un PIC166C54 o 58, el PIC16C554, 558, 620 y 622 funcionan bien con el compilador y tienen aproximadamente el mismo precio. Para propósitos generales de desarrollo usando el PBP, el PIC16F84 (o PIC16C84 si el F84 no está disponible) es la elección común de micro PIC. Este micro controlador de 18 pin usa tecnología flash (EEPROM) para permitir rápido borrado y reprogramación para acelerar la depuración de programas. Con el clic de un mouse en el software, el PIC16F84 puede ser borrado instantáneamente y luego ser reprogramado una y otra vez. Otros micros PIC de las series 12C67X, 16C55X, 16C6X, 16C7X y 16C9X son programables una vez (OTP) o tienen una ventana de cuarzo en su parte superior (JW) para permitir el borrado exponiéndolo a una luz ultravioleta durante varios minutos. El PIC16F84 (y ‘C84) además, contiene 64 bytes de memoria de datos no volátil que puede ser usada para archivar el dato de programa y otros parámetros, aun cuando no haya energía. A ésta área de datos, se puede acceder simplemente usando las órdenes “Read” y “Write” del PBP. (El código programa es permanentemente guardado en el espacio de código del micro PIC, tanto si hay o no energía.) Usando el ‘F84 para el testeo del programa inicial, el proceso de depuración puede ser más rápido. Una vez que las rutinas principales de un programa estén operando satisfactoriamente, se puede utilizar un micro PIC con mayor capacidad o las opciones expandidas del compilador. Si bien muchas de las opciones del micro PIC serán discutidas en este manual, para completar la información del micro PIC, es necesario obtener las apropiadas hojas de datos del micro PIC o el CD-ROM de Microchip Technology Inc. 4.2.1 Variables Variables es donde se guardan datos en forma temporaria en un programa PBP. Son creadas usando la palabra clave VAR. Pueden bits, bytes ó word. Espacio para cada variable es automáticamente destinado en la memoria del micro controlador por PBP. El formato para crear una variable es el siguiente: Etiqueta VAR tamaño (.modificadores) Etiqueta es cualquier identificador excluyendo palabras claves como se describe anteriormente. Tamaño es bit, byte ó word. Modificadores opcionales agregan control adicional acerca de cómo se crea la variable. Algunos ejemplos de creación de variables son: perro var byte W0 var word gato var bit 68 No hay variables predefinidas de usuarios de PBP. Por razones de compatibilidad existen dos archivos que crean las variables standard usadas con BASIC stamps:“bs1defs.bas” y “bs2defs.bas”. Para usar uno de estos archivos agregue la línea cerca del comienzo del programa PBP. Estos archivos contienen numerosas declaraciones VAR que crean todas las variables de BASIC Stamps y definiciones de pin. Ejm: Include “bs1defs.bas” ó Include “bs2defs.bas” De cualquier manera, en lugar de usar estos archivos envasados le recomendamos que cree sus propias variables usando nombres con significado para usted. El número de variables disponibles depende de la cantidad de RAM en un dispositivo en particular y el tamaño de las variables y los arrays .PBP reserva aproximadamente 24 posiciones RAM para su propio uso. También puede crear variables temporarias adicionales para usar en ordenamiento de ecuaciones complejas. 4.2.2 Alias VAR también puede ser usado para crear un alias para una variable. Esto es muy útil para acceder al interior de una variable. Ejm: fido var perro´ fido es otro nombre de perro b0 var w0.byte0 ´ b0 es el primer byte de word w0 b1 var w1.byte1 ´ b1 es el segundo byte de word w0 flea var perro.0 ´ flea es bit0 de perro 4.2.3 Arreglos Los arreglos de variables pueden ser creados en una manera similar a las variables. Etiqueta VAR tamaño (número de elementos). Etiqueta es cualquier identificador, excluyendo palabras claves, como se describió anteriormente. Tamaño es BIT, BYTE ó WORD. Número de elementos es cuantos lugares en el arreglo se desean. Algunos ejemplos de creación de arreglo son los siguientes: sharks var byte[10] fish var bit [8] La primer ubicación dentro del arreglo es el elemento cero. En el arreglo fish anterior los elementos están numerados fish (0) a fish (7) conteniendo 8 elementos en total. Dada la forma en que los arreglos están localizados en memoria hay límites de tamaño para cada tipo. 69 Tamaño número máximo de elementos: BIT 128 BYTE 64 WORD 32 4.2.4 Constantes Las llamadas constantes pueden ser creadas de manera similar a las variables. Puede ser mas conveniente usar un nombre de constante en lugar de un número constante. Si el número necesita ser cambiado, únicamente puede ser cambiando en un lugar del programa donde se define la constante. No pueden guardarse datos variables dentro de una constante. Etiqueta CON expresión constante Algunos ejemplos son: Mice con 3 Traps con mice *1000 4.2.5 Símbolos SYMBOL provee otro método para renombrar (darle alias) a variables y constantes. SYMBOL no puede ser usado para crear una variable. Use VAR para crear una variable SYMBOL lion = cat ´ cat fue previamente creada usando VAR SYMBOL mouse = 1 ´ igual que mouse con 1 4.2.6 Constantes Numéricas PBP permite definir constantes numéricas en tres bases: decimal, binario y hexadecimal. Valores binarios son definidos usando el prefijo “%” y valores hexadecimales usando el prefijo “$”. Los valores decimales se toman por defecto y no requieren prefijo. ´ valor decimal 100 %100 ´ valor binario para el decimal 4. $100 ´ valor hexadecimal para el decimal 256. Para facilitar la programación, los caracteres son convertidos en sus equivalentes ASCII. La constante debe ser puesta entre comillas y contener sólo un carácter (de lo contrario, ellas son una cadena de constantes). “A” ‘ ASCII valor para el decimal 65 “d” ‘ ASCII valor para el decimal 100 70 4.2.7 Operadores Matemáticos PBP efectúa todas las operaciones matemáticas en orden jerárquico .Esto significa que existe precedencia para los operadores .Multiplicación y división son efectuados antes que suma y resta, por ejemplo..Para asegurarse que las operaciones son efectuadas en el orden que se desea, use paréntesis para agrupar las operaciones. A=(B+C)*(D-E) Todas las operaciones matemáticas se realizan sin signo y con una precisión de 16 bit. Los operadores soportados se pueden observar en la tabla 4.2. Operador Descripción Matemático SQR + Raíz Sumacuadrada & - Bit inteligente AND Resta *÷ Bit inteligente OR Multiplicación ˆ Bit inteligente EXCLUSIVE OR 16 bits superiores de la ** ~ multiplicación Bit inteligente NOT */ &/ 16 nits medios NOT de la AND multiplicación Bit inteligente /÷/ División Bit inteligente NOT OR // Resto(módulo) << Desplazamiento izquierdo >> Desplazamiento derecho ABS Valor absoluto COS Coseno DCD 2m decodificador DIG Dígito MAX Máximo MIN Mínimo NCD Codificar REV Invertir bits SIN Seno Tabla 4.2 Operadores Matemáticos 71 4.2.7.1 Multiplicación PBP efectúa multiplicaciones 16 x 16 bits .El operador ´*´ devuelve los 16 bit inferiores del resultado de 32 bit. Esta es la multiplicación típica encontrada en los lenguajes de programación. El operador ´** devuelve los 16 bit superiores del resultado de 32 bit. Estos dos operadores pueden ser utilizados en conjunto para realizar multiplexaxiones de 16 x 16 bit que produzcan resultados de 32 bit. W1 = W0 * 1000 ´ multiplica el valor de W0 por 1000 y coloca el resultado en W1 W2 = W0 ** 1000 ´ W0 por 1000 y coloca los 16 bit superiores (que Deben ser 0) en W2 El operador ´*/ ´los 16 bit medios del resultado de 32 bit. W3 = W1 */ W0 ´ multiplica W1 por W0 y coloca los 16 bit medios en W3 4.2.7.2 División PBP efectúa divisiones de 16 x 16 bit . El operador ´/ ´ devuelve el resultado de 16 bit. El operador ´// ´ devuelve el resto (módulo del número). W1 = W0 / 1000 ´ Divide el valor de W0 por 1000 y coloca el resultado en w1 W2 = W0 // 1000 ´ Divide el valor de W0 por 1000 y coloca el resto en W2 4.2.7.3 Desplazamiento Los operadores ´<<´ y ´>> ´ desplazan un valor hacia la izquierda ó derecha respectivamente, 1 a 15 veces .Los bits desplazados se colocan en 0 . B0 = B0 << 3 ´ Desplaza B0 tres lugares a la izquierda ( igual a multiplicar por 8) W1 = W0 >> 1 ´ Desplaza W0 una posición a la derecha y coloca el resultado en W1 (igual a dividir por 2). 4.2.7.4 ABS ABS devuelve el valor absoluto de un número. Si un byte es mayor de 127 (bits altos) ABS devuelve un valor 256 - . Si un word es mayor de 32767 (bits altos), devuelve un valor 65536 - . Ejm: B1 = ABS B0 4.2.7.5 COS COS es coseno en 8 bit de un valor dado. El resultado está dado en forma de dos complementos. (ejm. - 127 a 127 ) .Usa una tabla de cuarto de onda para encontrar el resultado. El coseno comienza con un valor en radianes binarios, 0 a 255, en lugar de los comunes 0 a 358 grados. Ejm: B1 = COS B0 72 4.2.7.6 DCD I DCD devuelve el valor decodificado de un número de bit. Cambia un número de bit (0 a 15) por un número binario con ese bit seteado en 1. Todos los demás bits son 0. B0 = DCD 2 ´ setea B0 como % 00000100 4.2.7.7 DIG DIG devuelve el valor de un dígito decimal . Simplemente se le indica el número de dígito a conocer ( 0 - 4 , siendo 0 el primero de la derecha) y ya está. B0 = 123 ´ setea B0 en 123 B1 = B0 DIG 1 ´ setea B1 en 2 (dígito 1 de 123) 4.2.7.8 DIV32 PBPs multiplican (*) la función 16-bit x 16-bit obtienen un resultado 32-bit. Sin embargo, puesto que el compilador utiliza solamente una talla variable máxima de 16 dígitos binarios, el acceso al resultado tuvo que suceder en 2 pasos de progresión: c = b * retorna los 16 dígitos binarios más bajos del multiplicar mientras que d = ** de b retorna los 16 dígitos binarios superiores. No había manera de tener acceso al resultado 32-bit como unidad. En muchos casos es deseable poder dividir el resultado 32-bit entero de multiplicar por un número 16-bit para hacer un promedio o escalar. Una nueva función se ha agregado para este propósito: DIV32. DIV32 es limitado realmente a dividir un entero sin signo 31-bit (máximo 2147483647) por un entero sin signo 15-bit (máximo 32767). Esto debe ser suficiente en la mayoría de las circunstancias. Pues el compilador permite solamente una talla variable máxima de 16 dígitos binarios, DIV32 confía que una multiplicación acaba de ser realizado y que las variables internas del compilador todavía contienen el resultado 32-bit de la multiplicación . Ninguna otra operación puede ocurrir entre la multiplicación y el DIV32 o las variables internas pueden ser alteradas, destruyendo el resultado de 32-bit de la multiplicación. Este medio, entre otras cosas, de los cuales ON INTERRUPT debe estar DISABLED antes de que el multiplicar hasta después del DIV32. Si ON INTERRUPT no se utiliza, allí no es ninguna necesidad de agregar DISABLE al programa. Las interrupciones en ensamblador no deben tener ningún efecto en las variables internas así que pueden ser utilizadas sin consideración alguna hacia DIV32. 73 El fragmento siguiente del código muestra la operación de DIV32: a Var Word b Var Word c Var Word dummy var Word b = 500 c = 1000 DISABLED ' necesario si ON INTERRUPT es utilizado dummy = b * c ' podría también utilizar el ** o * / a = DIV32 100 ENABLED ' necesario si se utilizó ON INTERRUPT Este programa asigna a b el valor 500 y c el valor 1000. Cuando estaba multiplicado junto, el resultado sería 500000. Este número excede la talla 16-bit de la palabra de una variable (65535). La variable simulada contiene tan solamente los 16 dígitos binarios más bajos del resultado. En ningún caso, no es utilizada por la función DIV32. DIV32 utiliza las variables internas al compilador como los operandos. En este ejemplo, DIV32 divide el resultado 32-bit de la multiplicación b * c por 100 y salva el resultado de esta división, 5000, en la variable A. 4.2.7.9 MAX y MIN MAX y MIN devuelven el máximo y mínimo ,respectivamente , de dos números . Se usan normalmente para limitar números a un valor. B1 = B0 MAX 100 ´ setea B1 al mayor de B0 y 100 (B0 debe estar entre 100 y 255 B1 = B0 MIN 100 ´ setea B1 al menor de B0 y 100(B1no puede ser mayor de 100 4.2.7.10 NCD NCD devuelve el número de prioridad de bit codificado (1-16) de un valor. Se usa para encontrar el bit codificado con 1 de un valor dado . Devuelve 0 si no existen bits con valor 1. B0 = NCD %01001000 ´ setea B0 en 7 74 4.2.7.11 REV REV invierte el orden de los bits inferiores de un valor .El número de bits a ser invertidos es de 1 a 16 . B0 = %10101100 REV 4 ´ setea B0 a %10100011 4.2.7.12 SIN SIN es seno en 8 bits de un valor . El está dado en dos complementos (ejm. -127 a 127 ) .Usa una tabla de cuarto de onda para encontrar el resultado . Comienza con un valor en radianes binarios , 0 a 255 , en lugar de los usuales 0 a 359 grados. B1 = SIN B0 4.2.7.13 SQR SQR devuelve la raíz cuadrada de un valor . Como PBP dolo trabaja con enteros , el resultado será siempre un entero en 8 bits no mayor que el resultado actual . B0 = SQR W1 ´ setea B0 con la raíz cuadrada de W1 4.2.8 Operadores de comparación Se usan en declaraciones IF ... THEN para comparar una expresión con otra .Los operadores se pueden observar en la tabla 4.3 Operador Descripción = ó == Igual < > ó ¡= No igual < Menor > Mayor <= Menor ó igual >= Mayor ó igual Tabla 4.3 Operadores de comparación Ejm: If i > 10 then loop 75 4.2.9 Operadores Lógicos Los operadores lógicos difieren de las operaciones de bit inteligente. Entregan un resultado CIERTO / FALSO de su operación .Valores 0 son tratados como falso. Cualquier otro valor es cierto. Se usan junto a operadores de comparación en una declaración IF .. THEN .Los operadores soportados se observan en la tabla 4.4 Operador Descripción AND ó && AND lógico OR ó | | OR lógico XOR ó ^ ^ OR exclusivo lógico NOT AND NAND lógico NOT OR NOR lógico NOT XOR NXOR lógico Tabla 4.4 Operadores lógicos Ejm: If (A == big) AND ( B > mean) then run 4.2.10 Referencia de declaraciones PBP En tabla 4.5 se muestran todas las instrucciones que se pueden utilizar en el Pic Basic Pro. @ Inserta una línea de código ensamblador ASM...ENDASM Inserta una sección de código ensamblador BRANCH GOTO computado(equiv. a ON..GOTO) BRANCHL BRANCH fuera de pagina(BRANCH largo) BUTTON Anti-rebote y auto-repetición de entrada en el pin especificado CALL Llamada a subrutina de ensamblador CLEAR Hace cero todas las variables COUNT Cuenta el numero de pulsos en un pin DATA Define el contenido inicial en un chip EEPROM 76 DEBUG Señal asincrónica de salida en un pin fijo y baud DISABLE Deshabilita el procesamiento de ON INTERRUPT DTMFOUT Produce tonos en un pin EEPROM Define el contenido inicial en un chip EEPROM ENABLE Habilita el procesamiento de ON INTERRUPT END Detiene la ejecución e ingresa en modo de baja potencia FOR...NEXT Ejecuta declaraciones en forma repetitiva FREQOUT Produce hasta 2 frecuencias en un pin GOSUB Llama a una subrutina BASIC en la etiqueta especificada GOTO Continua la ejecución en la etiqueta especificada HIGH Hace alto la salida del pin HSERIN Entrada serial asincrónica(hardware) HSEROUT Salida serial asincrónica(hardware) I2CREAD Lee bytes de dispositivo I2C I2CWRITE Graba bytes en dispositivo I2C IF..THEN..ELSE..ENDIF Ejecuta declaraciones en forma condicional INPUT Convierte un pin en entrada (LET) Asigna el resultado de una expresión a una variable LCDOUT Muestra caracteres en LCD LOOKDOWN Busca un valor en una tabla de constantes LOOKDOWN2 Busca un valor en una tabla de constantes o variables LOOKUP Obtiene un valor constante de una tabla LOOKUP2 Obtiene un valor constante o variable de una tabla LOW Hace bajo la salida de un pin NAP Apaga el procesador por un corto periodo de tiempo ON INTERRUPT Ejecuta una subrutina BASIC en un interrupt OUTPUT Convierte un pin en salida PAUSE Demora (resolución 1mseg.) 77 PAUSEUS Demora (resolución 1 useg.) PEEK Lee un byte del registro POKE Graba un byte en el registro POT Lee el potenciómetro en el pin especificado PULSIN Mide el ancho de pulso en un pin PULSOUT Genera pulso hacia un pin PWM Salida modulada en ancho de pulso a un pin RANDOM Genera numero pseudo-aleatorio RCTIME Mide el ancho de pulso en un pin READ Lee byte de un chip EEPROM RESUME Continua la ejecución después de una interrupción RETURN Continua en la declaración que sigue al ultimo GOSUB REVERSE Convierte un pin de salida en entrada o uno de entrada en salida SERIN Entrada serial asincrónica (tipo BS!) SERIN2 Entrada serial asincrónica (tipo BS2) SEROUT Salida serial asincrónica (tipo BS1) SEROUT2 Salida serial asincrónica (tipo BS2) SHIFTIN Entrada serial sincrónica SHIFTOUT Salida serial sincrónica SLEEP Apaga el procesador por un periodo de tiempo SOUND Genera un tono o ruido blanco en un pin STOP Detiene la ejecución del programa SWAP Intercambia los valores de dos variables TOGGLE Hace salida a un pin y cambia su estado WHILE..WEND Ejecuta declaraciones mientras la condición sea cierta WRITE Graba bytes a un chip EEPROM XIN Entrada X - 10 XOUT Salida X - 10 Tabla 4.5 Referencia de declaraciones PBP 78 Conclusiones Ha sido tanto el avance en el sector de la informática y la electrónica que hoy en día nos vemos beneficiados en ello, teniendo la posibilidad de escoger dispositivos (microcontroladores) que se adapten a nuestras necesidades y a los requerimientos planteados para la elaboración o la puesta en marcha de proyectos de automatización, o para el manejo adecuado y eficiente de datos. Dispositivos que tienen amplio campo de acción y que de una u otra forma representan gran parte del desarrollo tecnológico que se viene dando, cada uno de ellos posee un sector de aplicación distinto en que establece algunos requerimientos de trabajo a si como también poseen especificaciones para su manejo dependiendo de las aplicaciones en las cuales se van a utilizar. 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 (embedded controller). Los microcontroladores están siendo empleados en multitud de sistemas presentes en nuestra vida diaria, como pueden ser juguetes, horno microondas, frigoríficos, televisores, computadoras, impresoras, módems, sistemas de arranque de automóviles, etc. Una aplicación típica podría emplear varios microcontroladores para controlar pequeñas partes del sistema. Estos pequeños controladores podrían comunicarse entre ellos y con un procesador central, probablemente más potente, para compartir la información y coordinar sus acciones, como, de hecho, ocurre ya habitualmente en cualquier PC. Existe una gran diversidad de microcontroladores. Quizá la clasificación más importante sea entre microcontroladores de 4, 8, 16 ó 32 bits. Aunque las prestaciones de los microcontroladores de 16 y 32 bits son superiores a los de 4 y 8 bits, la realidad es que los microcontroladores de 8 bits dominan el mercado y los de 4 bits se resisten a desaparecer. La razón de esta tendencia es que los microcontroladores de 4 y 8 bits son apropiados para la gran mayoría de las aplicaciones, lo que hace absurdo emplear micros más potentes y consecuentemente más caros. Hoy, muchas aplicaciones requieren microcontroladores y DSPs trabajando conjuntamente, y los fabricantes han respondido introduciendo microcontroladores con DSPs incorporados. La operación básica de un DSP son MACC (Multiply-Accumulate). El número de datos que un DSP puede Multiplicar y Acumular en una única operación, determinará el rango y por consiguiente la aplicación 79 Recomendaciones A la hora de escoger el microcontrolador a emplear en un diseño concreto hay que tener en cuenta multitud de factores, como la documentación y herramientas de desarrollo disponibles y su precio, la cantidad de fabricantes que lo producen y por supuesto las características del microcontrolador (tipo de memoria de programa, número de temporizadores, interrupciones, etc., es decir, su datasheet). Antes de seleccionar un microcontrolador es imprescindible analizar los requisitos de la aplicación: • Procesamiento de datos: puede ser necesario que el microcontrolador realice cálculos críticos en un tiempo limitado. En ese caso debemos asegurarnos de seleccionar un dispositivo suficientemente rápido para ello. Por otro lado, habrá que tener en cuenta la precisión de los datos a manejar: si no es suficiente con un microcontrolador de 8 bits, puede ser necesario acudir a microcontroladores de 16 ó 32 bits, o incluso a hardware de coma flotante. Una alternativa más barata y quizá suficiente es usar librerías para manejar los datos de alta precisión. • Entrada Salida: para determinar las necesidades de Entrada/Salida del sistema es conveniente dibujar un diagrama de bloques del mismo, de tal forma que sea sencillo identificar la cantidad y tipo de señales a controlar. Una vez realizado este análisis puede ser necesario añadir periféricos hardware externos o cambiar a otro microcontrolador más adecuado a ese sistema. • Consumo: algunos productos que incorporan microcontroladores están alimentados con baterías y su funcionamiento puede ser tan vital como activar una alarma antirrobo. Lo más conveniente en un caso como éste puede ser que el microcontrolador esté en estado de bajo consumo pero que despierte ante la activación de una señal (una interrupción) y ejecute el programa adecuado para procesarla. • Memoria: para detectar las necesidades de memoria de nuestra aplicación debemos separarla en memoria volátil (RAM), memoria no volátil (ROM, EPROM, etc.) y memoria no volátil modificable (EEPROM). Este último tipo de memoria puede ser útil para incluir información específica de la aplicación como un número de serie o parámetros de calibración. El tipo de memoria a emplear vendrá determinado por el volumen de ventas previsto del producto: de menor a mayor volumen será conveniente emplear EPROM, OTP y ROM. En cuanto a la cantidad de memoria necesaria puede ser imprescindible realizar una versión preliminar, aunque sea en pseudo-código, de la aplicación y a partir de ella hacer una 80 estimación de cuánta memoria volátil y no volátil es necesaria y si es conveniente disponer de memoria no volátil modificable. • Ancho de palabra: el criterio de diseño debe ser seleccionar el microcontrolador de menor ancho de palabra que satisfaga los requerimientos de la aplicación. Usar un microcontrolador de 4 bits supondrá una reducción en los costes importante, mientras que uno de 8 bits puede ser el más adecuado si el ancho de los datos es de un byte. Los microcontroladores de 16 y 32 bits, debido a su elevado coste, deben reservarse para aplicaciones que requieran sus altas prestaciones (Entrada/Salida potente o espacio de direccionamiento muy elevado). • Diseño de la placa: la selección de un microcontrolador concreto condicionará el diseño de la placa de circuitos. Debe tenerse en cuenta que quizá usar un microcontrolador barato encarezca el resto de componentes del diseño. 81 Bibliografía 1. Carlos A. Reyes. “Aprenda rápidamente a programar Microcontroladores”. Ed. Gráficas Ayere C.A. 2004. 2. Microchip, PIC16X84 Datasheet 3. Microchip, dsPIC30F Family Reference Manual 4. Microchip. http://www.microchip.com. 5. Microcontroladores: Enlaces. http://www.us-epanorama.net/microprocessor.html 6. Diseño de sistemas con microcontroladores: Enlaces. http://www.info- ab.uclm.es/~amartine. 7. El Rincón del Pic. http://members.es.tripod.de/~InfoE/infop.htm. 8. Links sobre Pics de David Tait. http://www.man.ac.uk/~mbhstdj/piclinks.html. 9. http://perso.wanadoo.es/pictob/microcr.htm 10. http://es.encarta.msn.com/encyclopedia_761559091/Microprocesador.html 11. http://www.redeya.com/electronica/tutoriales/pic1.htm 12. http://html.rincondelvago.com/microcontrolador-pic-16f84.html 13. http://www.monografias.com/trabajos17/procesadores-digitalesseniales/procesadores-digitales-seniales.shtml. 14. http://www.todopic.com.ar/pbp_sp.html. 82 Glosario ADC: (Convertidor Analógico a Digital) Dispositivo que convierte las señales analógicas a señales digitales discretas o a números digitales discretos. CISC: Las computadoras de conjuntos de instrucciones complejas (complex instruction set computing) pueden ser muy poderosas; sin embargo las instrucciones requieren un alto número de ciclos del reloj para ejecutarse. CMOS: (Complementary Metal-Oxide Semiconductor), semiconductor complementario de metal óxido es un tipo de circuito integrado utilizado en los procesadores y en la memoria. CPU: (Central Processing Unit) Unidad central de proceso. DAC: (Convertidor Digital a Analógico) Dispositivo que convierte información digital, a una señal analógica. DSC: (Digital Signal Controller), controlador de señal digital DSP: (Digital Signal Processor), procesador digital de señales. EEPROM: (Electrically Erasable Programmable Read-Only Memory), memoria de sólo lectura borrable y programable eléctricamente. Chip de memoria que conserva su contenido aún sin corriente eléctrica, y cuyo contenido puede ser borrado y reprogramado bien sea dentro de la computadora o desde una fuente externa. La memoria de sólo lectura borrable y programable eléctricamente se usa donde la aplicación requiere de un medio de almacenamiento estable, sin que exista corriente, pero donde puede ocurrir que el chip tenga que ser reprogramado. EPROM: (Erasable Programmable Read-Only Memory), memoria de sólo lectura borrable y programable. Chip de memoria que conserva su contenido aún en la ausencia de corriente eléctrica, y cuyo contenido puede ser borrado y reprogramado retirando una cubierta protectora y exponiendo el chip a la luz ultravioleta. FLASH: Forma especial de memoria de sólo lectura borrable y programable eléctricamente [electrically erasable programmable read-only memory (EEPROM)] que puede ser borrada a los niveles de señal que comúnmente se encuentran en una computadora personal. Esto permite que su contenido sea reprogramado sin tener que retirar los chips de la computadora. OTP: (One Time Programmable) memoria no volátil de solo lectura programmable una sola vez. PIC: (Peripheral interface Controller) son microcontroladores fabricados por la empresa Microchip Technology INC. 83 Pin: También llamado terminal o patilla, pin es cada uno de los contactos terminales de un conector o componente electrónico (microcontrolador), fabricado de un material conductor de la electricidad. Pipeline decodificación anticipada (de instrucciones), en la arquitectura de procesadores, garantiza que el procesador nunca tiene que esperar, pues tan pronto como una instrucción se ejecuta, otra está en espera. En el procesamiento en paralelo, método utilizado para pasar instrucciones de una unidad de procesamiento a otra. PSTN: (Public Switched Telephone System), la red de voz tradicional o PSTN, usa técnicas de conmutación de circuitos. Esto significa que una comunicación particular usa un enlace dedicado durante la duración de la llamada. Aunque esta provee una conexión muy confiable para la transmisión de voz, hace un uso muy ineficiente del ancho de banda. Por otro lado, la red de datos generalmente usa conmutación de paquetes. PWM: (Pulse Wide Modulation) modulador de anchura de impulsos. RAM: (Random Access Memory), memoria de sólo lectura. RISC: (Reduce Instrucción Set Computer) en estos procesadores el repertorio de instrucciones máquina es muy reducido. ROM: (Read Only Memory), memoria de acceso aleatorio SISC: (Computadores de Juego de Instrucciones Específico) Microcontroladores destinados a aplicaciones muy concretas. UART: (Universal Asynchronous Receiver/Transmitter) receptor/transmisor asíncrono universal es un módulo electrónico que combina el conjunto de circuitos para transmitir y para recibir, necesario para la comunicación asíncrona a través de una línea en serie. USB: (Universal Serial Bus) es un moderno bus serie para los PC. 84