1.1−. Breves antecedentes relacionados. Inicialmente cuando no existían los microprocesadores las personas se ingeniaban en diseñar sus circuitos electrónicos y los resultados estaban expresados en diseños que implicaban muchos componentes electrónicos y cálculos matemáticos. Un circuito lógico básico requería de muchos elementos electrónicos basados en transistores, resistencias, etc; pero en el año 1971 apareció el primer microprocesador el cual originó un cambio decisivo en las técnicas de diseño de la mayoría de los equipos. Al principio se creía que el manejo de un microprocesador era para aquellas personas con un coeficiente intelectual muy alto; por lo contrario con la aparición de este circuito integrado todo sería mucho mas fácil de entender y los diseños electrónicos serian mucho mas pequeños y simplificados. Entre los microprocesadores mas conocidos tenemos el popular Z−80 y el 8085. Los diseñadores de equipos electrónicos ahora tenían equipos que podían realizar mayor cantidad de tareas en menos tiempo y su tamaño se redujo considerablemente; sin embargo, después de cierto tiempo aparece una nueva tecnología llamada microcontrolador que simplifica aun mas el diseño electrónico. 1.2−. Diferencias entre un Microprocesador y un Microcontrolador. Si usted tuvo la oportunidad de realizar un diseño con un microprocesador pudo observar que dependiendo del circuito se requerían algunos circuitos integrados adicionales ademas del microprocesador como por ejemplo: memorias RAM para almacenar los datos temporalmente y memorias ROM para almacenar el programa que se encargaría del proceso del equipo, un circuito integrado para los puertos de entrada y salida y finalmente un decodificador de direcciones. Un microcontrolador es un solo circuito integrado que contiene todos los elementos electrónicos que se utilizaban para hacer funcionar un sistema basado con un microprocesador; es decir contiene en un solo integrado la Unidad de Proceso, la memoria RAM, memoria ROM, puertos de entrada, salidas y otros periféricos. 1.3−. Ventajas de un Microcontrolador Vs. un Microprocesador. Estas ventajas son reconocidas inmediatamente para aquellas personas que han trabajado con los microprocesadores y después pasaron a trabajar con los microcontroladores. Estas son las diferencias mas importantes: Por ejemplo la configuración mínima básica de un microprocesador estaba 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; pero un microcontrolador incluye todo estos elementos en un solo Circuito Integrado por lo que implica una gran ventaja en varios factores: En el ciruito impreso por su amplia simplificación de circuiteria, el costo para un sistema basado en microcontrolador es mucho menor y, lo mejor de todo, el tiempo de desarrollo de su proyecto electrónico se disminuye considerablemente. Existen unos microcontroladores mas avanzados que otros por los componentes especiales que estos incluyen. Algunos solamente contienen puertos de entrada y de salida, otros incluyen pines hasta de 12 Bits para conversiones analógicas digitales entre otros. Podemos mencionar algunas características especiales que poseen los microcontroladores actuales: Modulación por ancho de pulso, Comunicación Serial Sincrona, Comunicacion Serial Asincrona, Temporizadores, Contadores, etc. 1.4−. Los Microcontroladores, aspecto básico general. En la actualidad existen muchos microcontroladores de diferentes empresas reconocidas mundialmente, pero nuestra meta especifica es tratar el microcontrolador de la empresa Microchip Tecnologies modelo 1 PIC16F84. El archivo tiene una longitud de 1.6 Mega Byte y contiene 100 hojas en formato PDF que podrás observar con el Acrobat Reader. En ese archivo encontraras cualquier mínimos detalle que necesites conocer del microcontrolador PIC16F84 1.5−. Que es un Microcontrolador ?. Un microcontrolador es un circuito integrado programable que contiene internamente todos los componentes de un computador. Este se utiliza para controlar el funcionamiento de una tarea determinada. Sus pines de entradas y salidas se utilizan para conectar motores, relays, actuadores, etc. Una vez que el microcontrolador esta programado, se encargara de ejecutar al pie de la letra la tarea encomendada. 1.6−. Conociendo al Microcontrolador PIC16F84. El microcontrolador PIC16F84 es un circuito integrado fabricado por la empresa Microchip Tecnologies y es actualmente uno de los mas utilizados a nivel mundial, la razón de esto es por que son sencillos, rápidos, modernos y principalmente baratos, se podrán escribir los programas y borrarlos muchísimas veces, poseen gran documentación a nivel mundial en la Red de Internet y esta accesible para la mayoría de los bolsillos. Existen microcontroladores que una vez programados con el programa de control estos tienen que ser borrados con luz ultra violeta en el caso de requerir borrar el programa. Para el caso del PIC16F84, este podrá ser programado Eléctricamente con una circuiteria que proporciona la empresa Microchip Tecnologies. Este programador es sumamente sencillo y debe ser conectado al puerto paralelo de su computador. 1.7−. Características Básicas del PIC16F84. El Microcontrolador PIC16F84 es un circuito integrado de 18 pines fabricado con tecnología CMOS, existen en diferentes versiones de encapsulado como por ejemplo el DIP (Version convensional ) y el SOIC ( Montaje superficial ). La frecuencia de trabajo esta entre 4 Mhz y 20 Mhz. Las versiones que se estipulan en una frecuencia de trabajo de 4 Mhz podrán trabajar sin ningún problema hasta los 10 Mhz, prueba que hemos realizado muchas veces en nuestros diseños. Observemos la siguiente imagen que muestra como están organizados los pines del microcontrolador PIC16F84: 1.8−. Identificación de los Pines utilizados para los puertos de entrada y salidas. En la imagen anterior se podrá observar claramente que el microcontrolador tiene dos puertos denominados "A" y "B". El puerto "A" tiene 5 lineas disponibles (RA0, RA1, RA2, RA3, RA4 ) y el puerto "B" tiene 8 lineas disponibles (RB0, RB1, RB2, RB3, RB4, RB5, RB6, RB7 ). Ambos Puertos suman un total de 13 lineas que podrá ser programadas independientemente como entradas o como salidas. Estas son las lineas que estarán destinadas para comunicar el microcontrolador con el mundo exterior, como por ejemplo: Un motor Paso a Paso, Diodos Luminosos "Leds", Módulos LCD, Teclados Matriciales, etc. También observe que el Pin No. 3 perteneciente al puerto "A" = RA4 también tiene otra nomenclatura denominada "TOCKI" lo cual quiere decir que esta linea podrá ser programada como entrada, salida y temporizador/contador. 1.9−. Identificación de los pines de alimentación del Microcontrolador. 2 El microcontrolador trabaja con una tensión de 5 Vlts. DC y los pines para ello son el Pin No. 14 (+) y el Pin No. 5 (−). 1.10−. Oscilador para el PIC16F84. Todo microprocesador o microcontrolador requiere de un circuito que le indique a que velocidad debe trabajar. Este circuito es conocido por todos como un oscilador de frecuencia. Este oscilador es como el corazón del microcontrolador por lo tanto, este pequeño circuito no debe faltar. En el caso del microcontrolador PIC16F84 el Pin No. 15 y el Pin No. 16 son utilizados para introducir la frecuencia de reloj. Existen microcontroladores que tienen su oscilador internamente y no requieren de pequeños circuitos electrónicos externos. El microcontrolador PIC16F84 requiere de un circuito externo de oscilación o generador de pulsos de reloj. La frecuencia de reloj máxima es de 20 Mhz; sin embargo, nosotros le recomendamos que comience a trabajar con una frecuencia de reloj de 4 Mhz. debido a que todos nuestros experimentos estarán basados en esta frecuencia. El microcontrolador PIC16F84 utiliza cuatro periodos completos de reloj por cada instrucción por lo tanto si usted tuviera un cristal que estuviera 4 Mhz, internamente en el microcontrolador se esta corriendo a 1 Mhz debido a que se toman 4 pulsos de reloj completos para cada instrucción. El PIC16F84 puede utilizar cuatro tipo diferentes de reloj oscilador externos. El tipo de oscilador dependerá de la precisión (ej: para las rutinas de tiempo), velocidad y potencia que usted necesite; por otro lado los costos que serian un aspecto significativo en una producción en serie de algún tipo de proyecto electrónico y la velocidad de proceso mínima requerida para su proyecto electrónico. Podemos resumir entonces los diferentes tipos de osciladores: • 1−. Oscilador tipo "HS" para frecuencias mayores de 4 Mhz. en el caso del PIC16F84 podrá instalarse un oscilador hasta 20 Mhz. • 2−. Oscilador tipo "XT" para frecuencias no mayores de 4 Mhz. • 3−. Oscilador tipo "LP" para frecuencias entre 32 y 200 Khz. • 4−. Oscilador tipo "RC" para frecuencias no mayores de 5.5 Mhz. En el momento de programar el microcontrolador se deberá especificar en los parámetros el tipo de oscilador que usted utilizara en su proyecto electrónico basado específicamente en la frecuencia de trabajo. Por ejemplo si su frecuencia de trabajo es de 10 MHz entonces la configuración del microcontrolador deberá estar en "HS"; pero si su frecuencia de trabajo es de 4 Mhz entonces la configuración del microcontrolador deberá estar en "XT". • En primer lugar tenemos un Oscilador tipo "HS" basado en un Cristal para frecuencias mayores a 4 Mhz. Esta versión es la mas costosa; pero representa la forma mas practica por la cantidad de conexiones y por la precisión en la señal de reloj emitida. En la siguiente imagen se muestra como debe conectarse al microcontrolador y las características del cristal. Estos tipos de cristales están diseñados especialmente para tecnologías TTL. La frecuencia (Mhz) disponibles para esta versión de cristal son muy amplias y las mas usuales son 1 − 1.8432 − 2 − 4 − 8 − 10 − 11.059 − 12 − 14.31818 − 16 − 20 − 25 − 32 − 33 − 40 −50 − 80 y 100 Mhz. 3 • En segundo lugar tenemos el oscilador tipo RC es el mas económico por que tan solo se utiliza un condensador no polarizado y una resistencia. Este tipo de oscilador proporciona una estabilidad mediocre en la frecuencia y podrá ser utilizado para aquellos proyectos que no se requiera precisión. Observe la siguiente imagen donde se muestra como debe ser conectado al microcontrolador al circuito RC. • Es importante saber que para valores de resistencia menor a 4 K, el sistema se hace inestable o se podría detener la frecuencia de oscilación totalmente. Para valores de resistencias mayores a 100 Megas, el oscilador se hace susceptible al ruido, humedad y a la temperatura por lo tanto se recomienda que este tipo de oscilador se encuentre en el siguiente rango ( 5K < R < 100 K ). Por otro lado se recomienda utilizar un condensador no polarizado de 20 pico por el ruido del medio y la estabilidad del sistema. A continuación le proporcionamos una pequeña tabla de valores de frecuencia de oscilación según el condensador y la resistencia. También es importante saber que la tensión de alimentación que tendrá el microcontrolador influye directamente en la frecuencia final. 1.11−. Inicialización "RESET" del Microcontrolador. El microcontrolador cuando se le suministra el voltaje de alimentación ejecuta automáticamente un RESET y todos los registros son colocados es sus estados lógicos originales; sin embargo los microcontroladores dispones de un Pin destinado específicamente para ejecutar un RESET en el caso de una falla o cuando sea necesario aplicarle un RESET. Cuando se ejecuta un RESET, se aplican dos acciones importantes: 1−. El contador de programa se vuelve a colocar en el principio del programa desde la dirección 0 ( Principio del Programa ). 2−. Los registros modificados vuelven a su estado normal. 4 En la siguiente imagen se puede observar como está conectado el pequeño circuito requerido para el RESET. Cuando el pulsador "S" es accionado, se aplica un nivel lógico bajo en el Pin No. 4 del microcontrolador y automáticamente se ejecutan los dos eventos mencionados anteriormente. El microcontrolador PIC16F84 también dispone de otras formas de "RESET", entre ellas tenemos el Reset denominado "POWER ON RESET", el cual debe ser activado mediante un bit de configuración en el momento en el que se programe el PIC. Para el circuito anterior existen algunas reglas básicas importantes: • Se recomienda una resistencia menos de 40 K ( R < 40 K ). • Se recomienda a R1 entre 100 ohmios y 1 K que serán los elementos electrónicos que limitaran las corrientes que intenten entrar por el Pin del microcontrolador. • El diodo D1 es utilizado para descargar el condensador rápidamente cuando el voltaje baja de su nivel normal. 5 1.12−. Puertos del Microcontrolador PIC16F84. Los puertos del microcontrolador PIC16F84 son el medio de comunicación con el mundo exterior, en ellos podremos conectar los periféricos o circuitos necesarios como por ejemplo los Módulos LCD, motores eléctricos, etc; pero estas conexiones no se podrán realizar arbitrariamente; es decir, existen unas reglas básicas que deberán cumplirse para que el microcontrolador no sufra daños o se destruya. Todo el truco esta en conocer los limites de corriente que puede manejar el microcontrolador.. 1.12.1−. Limite de corriente para el Puerto "A" y el "B". El puerto "A" del microcontrolador y el puerto "B" podrán ser programados como entradas y salidas indiferentemente. Para el caso de que sean programadas como salida es denominado "Modo Fuente" por que suministran corriente y cuando las lineas sean programadas como entradas son llamadas "Sumidero" por que reciben corriente. Ahora, la máxima corriente que puede suministrar una linea programada como salida es de 20 mili−amperios; pero si usted utiliza toda las lineas del puerto "A" programadas como salida; la máxima corriente no deberá exceder de 50mA para todo el puerto "A" . Para el caso del puerto "B" en que todas las lineas sean programadas como salida la máxima corriente no deberá exceder de 100 mA. Ahora cuando las lineas de los puertos son programadas como entradas ( Sumidero ), la corriente máxima que puede manejar una sola linea es de 25 mA. Para el caso del puerto "A" que sea programado con todas sus lineas como entrada, la máxima corriente que puede manejar es de 80 mA. Por otro lado, para el puerto "B" si todas las lineas son programadas como entrada, la máxima corriente que puede manejar es de 150 mA. Podemos entonces resumir: 6 Si usted esta interesado en manejar periféricos que manejan mayor cantidad de corriente de la especificada, tan solo deberá aplicar un circuito acoplador como por ejemplo los buffers, transistores que se encarguen de controlar la corriente, etc. Tenemos algunos ejemplos básicos para ello en la siguiente imagen: 1.13−. ARQUITECTURA DEL PIC16F84 El microcontrolador PIC16F84 dispone de una estructura organizada interiormente conformado por bloques interconectados en donde se incluye la memoria RAM, los puertos de entrada y salida, la memoria EEPROM, etc. En la siguiente imagen se muestra la arquitectura interna del PIC16F84. Nuestra intención no abarca el detalle de como funciona internamente el microcontrolador; pero si usted esta interesado en ello, disponemos de un software educativo llamado PINPOKE en el cual usted podrá observar visualmente como trabaja el microcontrolador PIC16F84. 1.14−. REGISTROS IMPORTANTES DEL MICROCONTROLADOR PIC16F84 Antes de programar el microcontrolador, será absolutamente necesario conocer algunos aspectos básicos de la arquitectura del microcontrolador; específicamente en los detalles relacionados a la ubicación del comienzo de la memoria RAM, Memoria EEPROM, Registros reservados, etc. En la siguiente imagen ( Lado derecho ) representamos el mapa de memoria del microcontrolador PIC16F84; básicamente se puede observar que la estructura esta dividida en dos columnas denominadas banco 0 y banco 1. Los bancos difieren solamente en 7 algunos aspectos que serán explicados posteriormente; por los momentos, observe cuidadosamente y trate de identificar los bancos. 1.15−. MEMORIA RAM: El microcontrolador PIC16F84 puede direccionar 128 posiciones diferentes de memoria RAM; pero Microchip Tecnologies solamente ha implementado 80 posiciones para este PIC, esta memoria esta dividida en dos partes: • La primera parte consta de 16 registros que serán utilizados por funciones especiales del microcontrolador. En la figura anterior se puede observar los doce registros especiales: TMRO, PCL, STATUS, FSR, PORTA, PORTB, EEDATA, etc. • La Segunda parte consta de 68 registros de memoria RAM que serán utilizados para almacenar datos temporales requeridos por el programa creado por el programador. Este tipo de memoria comienza en la posición 0Ch y termina en la posición 4Fh. La memoria RAM tiene la característica básica de perder los datos si se llegase a desconectar el microcontrolador o la tensión baja por debajo de los limites mínimos. La memoria RAM así como algunos registros especiales son los mismos en los dos bancos del mapa de memoria del PIC. 1.16−. MEMORIA DE PROGRAMA TIPO EEPROM: Esta memoria tiene 1 K x 14 Bits de memoria tipo Flash. Esta memoria es la que utilizaremos para almacenar nuestro programa dentro del microcontrolador PIC16F84. El tipo de memoria utilizada en este microcontrolador, podrá se escrita o borrada eléctricamente; por otro lado, la memoria tipo Flash tiene la característica de poderse borrar en bloques completos y no podrá borrarse posiciones concretas o especificas. Este tipo de memoria no es volátil, es decir, no pierde los datos si la energía es interrumpida. En la siguiente imagen se muestra como esta organizada la memoria dentro del microcontrolador. 8 La memoria del programa comienza desde la posición 000h y termina en la posición 03FFh. NOTA IMPORTANTE: El contador de programa del microcontrolador PIC16F84 tiene una longitud de 13 Bits por lo que implica que este podrá direccionar cualquier posición comprendida en un rango de los 8 K x 14; pero la empresa Microchip Tecnologies solamente ha implementado internamente 1 K que representa desde 000h hasta 03FFh. En el caso de que usted direcciones fuera del rango estipulado, automáticamente causara un solapamiento. 1.17−. CONJUNTO DE INSTRUCCIONES DEL PIC16F84: El microcontrolador PIC16F84 dispone de un total de 37 instrucciones de una sola palabra que usted podrá aprenderse muy fácilmente. Nuestro curso va orientado a entender y programar el PIC16F84 de una manera sencilla y rápida por lo que explicaremos a continuación el conjunto de instrucciones, su significado, modo de operación y traducción. Las instrucciones tienen algunas letras que van relacionadas y que tienen cierta interpretación. Por ejemplo la letra "W" es el registro mas importante que tiene el microcontrolador y es denominado ACUMULADOR. En este registro todas las operaciones pasan a través de el. No. Instrucción 1 ADDWF f,d No. Instrucción 2 ANDWF f,d No. Instrucción 3 ANDLW k 3 Descripción Observación Esta instrucción suma el contenido de un registro específico Sumar W + f al contenido del registro de "W" donde "f" puede ser un registro cualquiera con un determinado valor. Descripción Operación lógica AND Observación Esta instrucción realiza una operación lógica "AND" entre el registro"W" y el registro "f". Descripción CLRF f Observación Operación lógica AND entre un literal y W Esta instrucción borra un registro especifico. 9 Borra registro No. Instrucción 4 CLRW No. Instrucción 5 COMP f,d No. Instrucción 6 DECF f,d No. Instrucción 7 DECFSZ f,d No. Instrucción 8 INCF f,d No. Instrucción 9 INCFSZ f,d No. Instrucción 10 IORWF f,d Descripción Borra el registro W Descripción Complementa el registro f Observación Esta instrucción borra el registro "W" solamente Observación Esta instrucción complementa el registro "f" Descripción Observación Decrementa un Esta instrucción decrementa en una sola unidad el registro registro f "f". Descripción Decrementa y si es igual a cero salta. Observación Esta instrucción decrementa en una sola unidad el registro "f" en la cual si el registro "f" es igual a cero entonces salta a una instrucción Descripción Incrementa el registro "f" en una unidad Observación Descripción incrementa y si es igual a cero salta. Observación Esta instrucción incrementa en una sola unidad el registro "f" en la cual si el registro "f" es igual a cero entonces salta a una instrucción Esta instrucción incrementa en una sola unidad el registro "f". Descripción Observación Se aplica un OR Esta instrucción aplica una operación lógica llamada OR Inclusivo INCLUSIVO entre dos registros. 1.18−. LAS BANDERAS Estas banderas se utilizan para dar información adicional cuando se realizan operaciones lógicas y aritméticas dentro del microcontrolador. Usted podrá tomar decisiones según el valor de cada una de las banderas. Existen diferentes tipos de banderas en un microcontrolador; entre ellas tenemos: 1.19−. LAS BANDERAS EN LA SUMA: Los registros básicos del microcontrolador PIC16F84 tienen una longitud de 8 bits expresados en forma binaria, lo cual quiere decir que el número máximo expresado en forma decimal será el 255. En la suma existen tres tipos de banderas que pueden proporcionarnos mayor información del resultado. Estas banderas son denominadas CARRY (C), Acarreo de Dígito (DC) y el Estado Cero (Z). Todas estas banderas son activadas según sea el caso: 10 Por ejemplo, en la suma, la bandera CARRY se coloca en "1" cuando el resultado supera el número 255 y permanecerá en "0" indicando que no se presentó ningún sobreflujo; es decir que el resultado de la suma fue menor. Por otro lado, existe otra bandera denominada Acarreo de Dígito "DC" que expresa lo que sucede con los 4 Bits menos significativos; es decir, si los cuatro Bits menos significativos sobrepasa al numero 15 expresado en forma decimal, entonces la bandera DC = 1, en el caso contrario será "0". Finalmente la bandera de estado "Z" se activa cuando la operación aritmética da como resultado un "1"; de lo contrario se coloca en "0". 1.20−. LAS BANDERAS EN LA RESTA: En la resta de dos números la bandera CARRY "C" se coloca en "1" cuando el resultado de la operación sea un número positivo, o se pone en cero para el caso contrario. Esto tan sencillamente quiere decir por ejemplo que si tenemos A=20 y B=10 donde X=A−B; el resultado será X=10 ( Número Positivo ); para el caso contrario si tenemos A=10 y B=20 donde X=A−B entonces X=−10. obteniéndose un resultado negativo. La bandera de acarreo de dígito "DC" se colocará en "1" cuando los cuatro Bits menos significativos del registro "W" sea menor que los cuatros bits menos significativos del registro que se desea restar, en caso contrario se colocará un cero. La bandera de estado "Z" solamente se activará cuando ambas cantidades sean iguales. 1.21.− LAS BANDERAS EN LA ROTACION: El microcontrolador PIC16F84 tiene disponibles dos instrucciones de rotación las cuales rotan los dígitos de un registro a la derecha o a la izquierda, segun se use. Por ejemplo, para la rotación a la izquierda supongamos que nuestro registro " f = 00001111 " y que la bandera CARRY tiene un 0; cuando se aplica el comando RLF f,0 todos los números del registro "f" se desplazan hacia la izquierda. El valor lógico que se encuentra en la bandera CARRY es colocado en el Bit No. 0 y el Bit No. 7 es colocado en la bandera CARRY. El resultado de nuestro ejemplo seria: f = 00011110. y CARRY seria 0. El orden lógico de los Bits lo tenemos definidos así: 11