INDICE GENERAL CAPITULO I. CONCEPTOS BASICOS pag. 1.1 INTRODUCCION. 1 1.2 OBJETIVOS 1 1.3 JUSTIFICACION 1 CAPITULO II. SISTEMAS DE SEGURIDAD 2.1 SEGURIDAD EN EL MUSEO 3 2.2 DISPOSITIVOS TECNICOS DE SEGURIDAD 3 2..2.1 DETECTORES DE HUMO 4 2.2.2 SENSORES MAGNETICOS 5 2.2.3 DETECTOR DE MOVIMIENTO 5 2.2.4 CAMARAS DE VIDEO 6 2.2.5 CAMARAS DE VISION NOCTURNA 7 2.2.6 ALARMA CONTRA INCENDIO 8 2.3 COMPONENTES DEL SISTEMA 8 2.4 PROPUESTA DE CONTROL DE SEGURIDAD EN EL MUSEO 9 2.4.1 MUSEO DE CIENCIAS ZIGZAG 10 2.4.2 VISTA DE PLANTA DE LAS INSTALACIONES DEL MUSEO 11 2.4.3 EDIFICIO Nº 1 “N ZAC” 12 2.4.4 EDIFICIO Nº 2 “PIN-PON” 13 2.4.5 EDIFICIO Nº3 “ACCION-REACCION” 14 2.4.6 EDIFICIO Nº4 “AGUA-AIRE” 15 2.4.7 EDIFICIO Nº5 “POLOS-CARGAS” 16 2.4.8 EDIFICIO Nº6 “MAS-MENOS” 18 I 2.4.9 EDIFICIO Nº7 “VIENE-VA” 19 CAPITULO III. CIRCUITOS INTEGRADOS PROGRAMABLES (PIC) 3.1 INTRODUCCION A LOS MICROCONTROLADORES 20 3.1.2 ESTRUCTURA DE UN MICROCONTROLADOR 21 3.1.3 EL PROCESADOR O CPU 22 3.1.4 MEMORIA ROM 22 3.1.5 ROM CON MASCARA 23 3.1.6 OTP 23 3.1.7 EPROM 23 3.1.7.1 EEPROM 23 3.1.8 FLASH 24 3.1.9 MEMORIA RAM 24 3.2 REGISTROS Y BITS 24 3.3 LINEAS DE ENTRADA/SALIDA (E/S), (PUERTOS) 25 3.4 MODULOS TEMPORIZADORES INTERNOS (TMRS) 26 3.5 UTILIZANDO UN MICROCONTROLADOR 27 3.6 APLICACCIONES DE LOS MICROCONTROLADORES 28 3.7 EL MERCADO DE LOS MICROCONTROLADORES 29 3.8 RECURSOS COMUNES A TODOS LOS MICROCONTROLADORES 30 CARACTERISTICAS DEL PIC16F877X 31 3.9.1 LA ARQUITECTURA HARVARD 31 3.9.2 PRINCIPALES CARACTERISTICAS 31 3.9.3 TERMINALES DE ENTRADA-SALIDA 33 3.9.4 OTRAS TERMINALES 34 3.10 DISPOSITIVOS PERIFERICOS 35 3.11 DIFERENCIA ENTRE 28 Y 40 PINES DEL PIC 35 3.12 EL PIC 16F87X 36 3.9 II 3.13 DESCRIPCION GLOBAL DEL DISPOSITIVO 37 3.14 PROGRAMACION 40 3.14.1 INSTRUCCIONES DEL PIC16F877 40 3.14.2 INSTRUCCIONES ORIENTADAS A MANEJO DE BITS 48 3.14.3 OPERACIONES CON LITERALES Y DE CONTROL 50 EJEMPLOS DE PROGRAMACIÓN 55 3.15.1 EJEMPLO 1 55 3.15.2 EJEMPLO 2 56 3.15 CAPITULO IV. CIRCUITERIA Y EQUIPO ELECTR4ONICO USADO 4.1 SEÑALES DE ENTRADA AL SISTEMA 57 4.2 SEÑALES DE SALIDA AL SISTEMA 58 4.3 CIRCUITERIA ADICIONAL 60 4.4 CARACTERISTICAS DEL SISTEMA 66 CAPITULO V. MANUAL DEL SISTEMA DE ALARMA Y NIPLE 5.1 MANUAL DEL SISTEMA 67 5.2 MANUAL DEL NIPLE 82 5.3 INTRODUCCION AL NIPLE 84 5.4 FUNCIONES DISPONIBLES 86 CONCLUCIONES 87 CAPITULO VI. PROGRAMACION 6.1 DIAGRAMA GENERAL DE FLUJO 88 REFERENCIAS 115 III INDICE DE FIGURAS 2.4.2 VISTA DE PLANTA DE LAS INST. DEL MUSEO 11 2.4.3 EDIFICIO #1 “N-ZAC 12 2.4.4 EDIFICIO #2 “PIN-PON 13 2.4.5 EDIFICIO #3 “ACCION-REACCION 14 2.4.6 EDIFICIO #4 “AGUA-AIRE 15 2.4.7 EDIFICIO #5 “POLOS-CARGAS 16 2.4.8 EDIFICIO #6 “MAS-MENOS 18 2.4.9 EDIFICIO #7 “VIENE-VA 19 3.1 EL MICROCONTROLADOR 30 3.2 ARQUITECTURA HARVARD 31 3.3 ENCAPSULADO DIP 40 PINES 33 3.4 DIAGRAMA DE CONEXIÓNES DE ALIMENTACION 35 4.1 TARJETA PRINCIPAL DEL PIC 60 4.2 MODULO DE TECLADO Y DISPLAY 61 4.3 SENSOR INFRARROJO 62 4.4 RELOJ EN TIEMPO REAL 62 4.5 MODULO DE ENTRADAS OPTOACOPLADAS 63 4.6 FUNTE DE VOLTAJE +5 Y +12 VOLTS 63 4.7 MODULO DE SALIDAS CORRIENTE DIRECTA 64 4.8 MODULO DE SALIDAS CORRIENTE ALTERNA 64 4.9 MODULO DE SALIDAS CON REELEVADOR 65 4.10 SENSOR DE TEMPERATURA 65 5.1 COMPARACIONES DEL LENGUAJES DE PROGRAMACION 83 INDICE DE TABLAS 3.1 COMPARATIVA DE MICROCONTROLADORES 36 3.2 EL PIC 16F877 POR DENTRO 38 3.3 DESCRIPCION DE PINES 16F874 Y 16F877 39 IV 4.1 ENTRADAS DEL PIC 57 4.2 SALIDAS DEL PIC 59 V CAPITULO I 1.1 Introduccion Los sistemas digitales han logrado avanzar a tal grado que en la actualidad se pueden alcanzar logros que alguna ves solo fueron en los sueños, de forma que ahora se pueden realizar diferentes tarea complejas en lapsos de tiempo relativamente menor al que se necesitaba para algunas tareas en el pasado, una de ellas es gracias a la aparición de microcontroladores (PIC). En todo el planeta ocurren fenómenos físicos que en algunas de las situaciones necesitamos comprender de diferente manera o tal vez necesitamos controlar, por ejemplo, la temperatura de una habitáculo, paso de alguna persona o de la intrusión de un objeto, etc. para lo cual se pueden utilizar una multitud de elementos electrónicos que combinados nos llevan a mejorar la vida y agilizar procesos 1.2 Objetivos Nuestro principal objetivo es desarrollar un sistema de seguridad fiable que cubra todos los aspectos más importantes de seguridad en el museo de ciencias zigzag de Zacatecas. Para lo cual haremos una maqueta con los elementos principales que llevara el museo en caso de que así lo solicite, el cual contara con los siguientes elementos, sensores magnéticos, sensor de humo, sensor de rompimiento de cristales, sensor de temperatura con su respectivo extractor, sensor de movimiento, sensor infrarrojo y chapa eléctrica la cual contendrá un display y un teclado para manejar la alarma. 1.3 Justificacion El motivo por el cual se pretende desarrollar un sistema de seguridad para este museo, es principalmente porque este no cuenta actualmente con ningún tipo de sistema de seguridad electrónica, ya que este cuenta con equipo en exhibición e interacción algunos de alto costo, lo cual justifica la implementación de monitoreo y en algunos casos de proteger, una o varias salas. 1 CAPITULO II En este capitulo se encuentran las características de debe cumplir un museo en cuanto a seguridad y protección y algunos detalles de cada uno de los componentes electrónicos del sistema de alarma que se utilizan en algunos museos. CAPITULO III En este capitulo se pretende mostrar las características del PIC que se usara en este caso que es el PIC 16f877, así como posibles aplicaciones que tiene este, así como diferenciar entre microcontrolador y microprocesador CAPITULO IV En este capitulo se muestran las entradas y salidas del PIC 16f877, así como los componentes que va a contener cada una de las entradas y salidas ya que como en este caso será la aplicación para una alarma, se tendrán entradas y salidas CAPITULO V Con formato: Fuente: Negrita, Español (México) En este capitulo se da una pequeña introducción al software NIPLE que se uso para la programación del PIC, ademas del manual de operación del sistema de alarma. Con formato: Justificado, Interlineado: sencillo CAPITULO VI Este capitulo contiene toda la programación que se hizo mediante diagramas de flujo. 2 Con formato: Español (México) CAPITULO II.- SISTEMAS DE SEGURIDAD 2.1 Seguridad en el museo Un Museo, como entidad depositaria responsable de la salvaguarda, preservación y divulgación del patrimonio de una comunidad, debe encarar con responsabilidad el aspecto de seguridad de su acervo cultural. La pérdida o destrucción de cualquier material histórico, artístico o científico significaría siempre un perjuicio para toda la comunidad. De una manera general la seguridad aplicada a los Museos implicará: Prevención en la construcción de edificios Protección contra incendios Protección contra robos Protección contra vandalismo Sistemas de seguridad y vigilancia 2.2 Dispositivos tecnicos de seguridad La importancia y efectividad de los sistemas de detección ha sido reconocida y su tecnología se ha desarrollado hasta el punto de poder, en muchos casos, ser Regulados a distintos tiempos de respuesta. Para decidir el tipo de detectores a instalar, el Museo debe siempre tener en cuenta los objetos bajo su protección y su situación económica, a fin de seleccionar el sistema o equipo más efectivo en relación a su costo. Para la seguridad antes mencionada se tienen los siguientes dispositivos 3 Detectores de humo. Sensores magnéticos. Detector de movimiento. Cámaras de video. Cámaras de visión nocturna. Alarma contra incendio. 2.2.1 Detectores de humo Uno de los artefactos más importantes para la prevención de incendios en los museos es el detector de humo. Luego de volverse comunes a principios de la década de 1970, la venta de los detectores de humo aumentó rápidamente y el precio bajó, de manera que para el año1991, el 88 % de los museos en Estados Unidos tenía por lo menos uno, en cada sala y podían comprarse por menos de diez dólares. Varios estudios han determinado que cuando hay instalados detectores de humo, que funcionan, la probabilidad de morir a causa de un incendio se reduce a la mitad. Los detectores de humo actualmente instalados han salvado miles de vidas, aunque persisten varios problemas. Primero, el 12 % de los museos sin dichos detectores registra más de la mitad de los incendios; segundo, se estima que un tercio de los detectores de humo instalados no están funcionando, con frecuencia por la falla de no cambiar la batería gastada; y tercero, muchas son los museos que no tienen la cantidad de detectores de humo que se precisan para proteger adecuadamente a los visitantes del museo. 4 2.2.2 Sensores magneticos El censor consta de dos partes, emisor y receptor. El emisor es básicamente un potente imán el cual constantemente genera un campo electromagnético por lo que no necesita de cables y el receptor es un tipo de switch normalmente abierto que se activa por medio de un campo electromagnético. El emisor se coloca en una orilla de la parte externa de la puerta y el receptor se coloca en una parte de la orilla del marco de la puerta de tal manera que al estar cerrada el receptor quede de forma paralela y lo mas cercano posible al emisor. Le permiten tener controlado el perímetro del museo mientras usted no esta dentro. De esta forma el sistema vigilara las puertas y ventanas mientras duerme o cuando alguien no se encuentra cerca y pueda avisar de alguna intrusión. También le sirven para marcar e indicar el estado de las puertas y ventanas al salir, de esta forma no volverán a quedarse abiertas las ventanas del museo cuando no se encuentre en el. 2.2.3 Detector de movimiento La función de un detector de movimiento, como dice su propio nombre, es la de detectar cualquier cosa o persona en movimiento. Se encuentran, generalmente, en sistemas de seguridad o en circuitos cerrados de televisión. El sistema puede estar compuesto, simplemente, por una cámara de vigilancia conectada a un ordenador, que se encarga de 5 generar una señal de alarma o poner el sistema en estado de alerta cuando algo se mueve delante de la cámara. Aunque, para mejorar el sistema se suele utilizar más de una cámara, multiplexores y grabadores digitales. Además, se maximiza el espacio de grabación, grabando solamente cuando se detecta movimiento. Un algoritmo que compara la imagen actual con una de referencia y, posteriormente, cuenta los píxeles en que difieren las dos imágenes, es una forma sencilla y eficiente de detectar movimiento. Aunque los algoritmos que se emplean son más complejos, debido a que lo explicado anteriormente lleva problemas cuando la cámara que registra no se encuentra fija o cuando se producen otros cambios, como por ejemplo, de iluminación. 2.2.4 Cámaras de video Las cámaras son cada vez más resistentes, pequeñas, sensibles y más baratas que antes. Imágenes tomadas pueden retransmitirse de diversas maneras y a la inversa, la cámara puede ser manejada a distancia. Para el transporte de imágenes se puede usar todo lo que pueda transportar datos digitales: (coaxial) cables, fibra óptica, la línea telefónica normal, ISDN, teléfono de autos, radio de bolsillo, emisores/receptores y para distancias cortas es apropiada actualmente hasta la luz infrarroja. También pueden ser usados a veces, cables que se conectan al televisor. Ahora los museos se envían mensajes de ida y vuelta a través de las (partes no visibles) de determinadas frecuencias de TV. Las cámaras pueden ser conectadas a computadoras y a diversos sistemas high - tech (de alta tecnología) de manera que se pueda hacer más con la información de las imágenes. 6 2.2.5 Cámaras de visión nocturna Antes no era posible ver en la oscuridad. Gracias a la invención del amplificador de luz residual y el visor infrarrojo, es posible actualmente. Al principio la calidad de la imagen no era óptima. Podía ocurrir alguna vez que se viera en la pantalla una mancha gris en el lugar en que se suponía que debería verse la cara del asaltante del Banco. Y todavía sucede a veces. Sin embargo, actualmente hay aparatos que pueden fotografiarte o filmarte muy bien aunque tú no veas casi nada. Existen dos tipos de cámaras infrarrojas: las activas. las pasivas. La cámara activa emite luz infrarroja a través de un reflector, cuya apariencia es la de un disquete negro o rojo pálido que está sobre la cámara o en otro sitio. Así como no todos los sonidos son audibles para el oído humano, tampoco todos los tipos de luz son visibles a nuestros ojos. La luz infrarroja no puede verse sin Medios auxiliares especiales. Bajo el término de cámara infrarroja pasiva entendemos la cámara que reacciona al calor. El funcionamiento de la misma está basado en el hecho de que objetos con una temperatura entre 0 y 40 grados Celsius (quizás entre ellos tu propio cuerpo) "emiten" calor dentro de la zona infrarroja. Una moderna cámara infrarroja pasiva que registra diferencias térmicas hasta 0,01 grado, convierte el calor en imagen visible para la gente. De ese modo no puede ser reconocible un patrón térmico determinado; las superficies calientes aparecen como lugares iluminados, las frías como oscuros. Con la ayuda de una cámara de ese tipo se puede determinar cuántas personas hay presentes en un recinto cerrado y cuáles son sus siluetas. En principio, todo lo que tiene que ver con diferencias de temperatura, puede ser registrado. Lo que no quita que la imagen construida por la cámara, pueda ser interpretada erróneamente. 7 Si el detector térmico de este tipo de cámara tiene aproximadamente la misma temperatura que el objeto buscado, la misma no funciona. Por eso el detector de las mejores se enfría hasta cerca de los -200 grados Celsius. 2.2.6 Alarma contra incendio Un sistema para museos de alarma para incendios generalmente forma parte de un sistema completo de seguridad que ofrece, además de protección contra los incendios, protección contra robos. Dicho sistema vigila las puertas, ventanas y todos los espacios del museo por donde pueden entrarse a dicho museo, y puede brindar servicio de vigilancia marcando su número de teléfono para informar sobre un incendio o reportar a un intruso a una oficina de seguridad de donde se lo comunicarán al departamento de policía o al departamento local de bomberos. Dado su costo relativamente alto, esos sistemas por lo general se encuentran solamente en las casas grandes. El instalar esos sistemas puede costar 1.000 dólares o más, y los servicios de vigilancia de 24 horas cuestan entre 15 y 20 dólares al mes. 2.3 Componentes del sistema Esos sistemas constan de un panel central de control, al que están conectados los detectores de humo y los detectores térmicos, y campanas y bocinas que suenan cuando se activa el sistema. Otros sensores relacionados con los robos, conectan las puertas y ventanas, o vigilan los cuartos para detectar movimientos o el calor del cuerpo humano. El panel de control opera con la electricidad de la casa, pero también tienen una batería de emergencia que puede operar el sistema por 24 horas durante un corte del servicio eléctrico. 8 Los requerimientos básicos para la cantidad y la ubicación de las alarmas son exactamente los mismos que para los detectores individuales que mencionamos antes. La diferencia es que un sistema de alarma contra incendios le permite más flexibilidad para colocar alarmas adicionales y campanas o bocinas adicionales (o luces intermitentes, si es que alguna persona en la casa tiene dificultades para escuchar). Los sistemas de alarma para incendios que ofrecen servicios de supervisión a distancia, también se pueden usar para servicios de alerta médica. En ese caso, una persona con problemas de salud, que vive sola, carga un radio transmisor que puede activar el sistema en caso de que necesite ayuda. Las señales recibidas en la estación de vigilancia se identifican por el tipo (incendio, robo, alerta médica), para poder prestar la ayuda adecuada. 2.4 Propuesta de control de seguridad en el museo de ciencias Este es el tema de nuestra tesis por lo que nosotros proponemos lo siguiente. En el caso especifico del museo de ciencia zig-zag, el cual es un museo de ciencias dedicado a la comprensión del niño a comprender fenómenos naturales sencillos ubicado en donde era PEMEX en el centro de la ciudad de Zacatecas. Se propone implementar un sistema de seguridad en el cual se tiene planeado utilizar un tablero de 16 dígitos para introducir una contraseña y si es necesario cambiarla desde el mismo teclado sin necesidad de reprogramar el PIC, teniendo un display para poder observar en todo momento el estado del sistema de acceso, además de sensores de movimiento, de temperatura, y de incendio. Todos los sensores que se manejen tanto de movimiento, de humo y de temperatura serán controlador por el PIC, se propone usar el PIC16F877 Por lo tanto consideramos que este sistema de acceso junto con la alarma de incendio y la alarma de detección de movimiento tenemos un buen sistema de seguridad, así como el control de temperatura que también estará monitoreado y controlado por el PIC. Este sistema de temperatura se conforma principalmente del sensor LM35 y un extractor de aire. El sistema de video-vigilancia esta compuesto por las cámaras de video que sean necesarias un software y una PC, teniendo ventajas también de detección de movimiento y 9 almacenamiento en disco duro de los videos cuando se registre algún movimiento, de la misma manera pudiendo reproducir una alarma sonora en la PC. 2.4.1 Museo de ciencias zig zag Dentro de las instalaciones del museo se encuentran 7 edificios con material interactivo y de exhibición, de las cuales ninguna cuenta con equipo de seguridad tales como los que se mencionan al principio de este capitulo, a continuación se muestran algunas imágenes en general del museo y sus instalaciones, junto con el plano donde se puede observar la ubicación de cada uno de los edificios, cave mencionar que cada edificio cuenta con su nombre de acuerdo a cada tema relacionado a su destino. 10 5 P OLOS Y CARGAS AGUA Y AIRE 4 1 NZAC 2 PIN PON 6 MASMENOS 3 ACCION Y REACCI ON 7 VIE NEVA 2.4.2 VISTA DE PLANTA DE LAS INSTALACIONES DEL MUSEO 11 2.4.3 Edificio no. 1 “N zac” En esta sala aunque se encuentra con poco equipo este tiene tres pantallas de plasma que ya su calidad y elevado costo seria conveniente tomarla en cuenta y seria una de las salas que llevase más censores de movimiento enfocadas hacia las pantallas y otro a una PC de escritorio que se encuentra en la misma sala. 12 2.4.4 Edificio no. 2 “pin – pon” En esta área se encuentra un contenido de elementos de los cuales no seria factible la instalación de un sistema como el que se propone ya que todos los elementos que este contiene son solo artículos de madera y demasiado sencillos. 13 2.4.5 Edificio no. 3 “acción – reacción” En la sala anterior encontramos que la seguridad seria algo de tomar en cuenta ya que esta contiene aparatos de un valor mas elevado que en la anterior en ella encontramos de valor una cama de clavos la cual tiene un funcionamiento electrónico controlado, un equipo de nubes portátil el cual conlleva un sistema electrónico de costo medio alto, así como una hélice que produce energía eléctrica el cual también es de un costo medio elevado. Pero así como se ocuparía será solamente un equipo de censores de movimiento ya que solo seria cuidar de intrusión nocturna al habitáculo para evitar su robo. 14 2.4.6 Edificio no. 4 “agua – aire” 15 En esta sala se encuentra llena de aparatos pero a excepción de la cámara de aire que ya su gran volumen y robustez es difícil robarlo o maltratarlo, todos los de más elementos son censillos y de bajo costo por eso tomamos en cuenta solo para poner solo detectores de movimiento. 2.4.7 Edificio no. 5 “Polos – Cargas” 16 Esta es una de las salas en la que mas tenemos el interés de poder instalar el todo lo que tenemos de la alarma ya que en esta se encuentran 8 maquinas de escritorio así como la esfera de plasma que también exige supervisión y cuidado de quien la pudiera dañar así como ver que le estén dando buen uso a las maquinas y la esfera, por medio de la cámara, y por el exceso de calor se pondría un extractor de calor controlado por un censor de temperatura, así como controlar la entrada a este por medio de el teclado y la cerradura electrónica y por si acaso entraran por otro lado serian los sensores de movimiento 17 2.4.8 Edificio no. 6 “mas – menos” En esta sala se tiene poco equipo de importancia solo lo mas importante es lo que se tiene en las fotos pero igual que en algunas de las salas antes mencionadas será conveniente poner sensores de movimiento para proteger de la intuición de algún individuo no deseado, a horas que no sean de trabajo y así evitar algún robo de los equipos antes descritos, además que el calor generado por las PC de escritorio no es suficiente como para justificar el sensor de temperatura y el extractor de calor 18 2.4.9 Edificio no. 7 “viene – va” En esta sala se tiene equipo de importancia y sobre todo las dos PC de escritorio pero aun así estudiándola tomamos la decisión de solo poner sensores de movimiento, ya que el material que contiene no es de un costo tan elevado y no es tan delicado como en la sala de polos y cargas que es la que justificaría poner un sistema completo, además que el calor generado por la PC no es grande como para justificar un sensor de temperatura y un extractor de calor. 19 CAPITULO III.- CIRCUITOS INTEGRADOS PROGRAMABLES (PIC) 3.1 Introduccion a los microcontroladores. ¿Que es un microcontrolador? Los microcontroladores hicieron su aparición a principio de los ’80 y se trata de un circuito integrado programable que contiene toda la estructura (arquitectura) de una microcomputadora. Es decir que, dentro de un microcontrolador podemos encontrar: · una CPU (Unidad Central de Proceso) · Memoria RAM · Memoria ROM · Memoria EEPROM (Memoria de lectura y escritura no volátil, es decir, que no se pierden los datos cuando el circuito es desconectado) · Puertos de Entrada/Salida (Pines de E/S) E incluso muchos modelos de microcontroladores incorporan distintos módulos “periféricos”, como pueden ser; conversores analógico/digital (A/D), módulos PWM (control por ancho de pulso), módulos de comunicaciones seriales o en paralelo, y más. Todo esto lo podemos encontrar dentro del mismo circuito integrado. Cada vez existen más productos que incorporan microcontroladores con el fin de aumentar sustancialmente sus prestaciones, reducir su tamaño y costo, mejorar su confiabilidad y disminuir el consumo de energía. 20 Los microcontroladores “PIC” Los microcontroladores denominados “PIC” corresponden exclusivamente a la marca “Microchip”. PIC significa "Peripheral Interfase Controller" y fue desarrollado por Microchip a principio de los 80. Existe una gran cantidad de modelos de microcontroladores cuyas características y prestaciones varían de un modelo a otro. De esta manera los desarrolladores pueden seleccionar el modelo que mejor se ajuste a sus necesidades. Los distintos modelos de microcontroladores se agrupan por “familia”. Una familia puede estar formada por un conjunto de modelos cuyas características y prestaciones son bastante similares. Cuando compramos un microcontrolador, la memoria del mismo se encuentra “vacía” y para que funcione es necesario que sea “programado”, es decir que, el desarrollador debe escribir un programa que contenga todos los procesos que el microcontrolador debe ejecutar. Este programa se escribe en un lenguaje llamado “Assembler” (ensamblador) cuya principal característica es su alta complejidad ya que se trata de un lenguaje “de bajo nivel”, es decir, que se encuentra “más Cercano” al lenguaje de la máquina que del lenguaje humano. Por esto, sólo los técnicos altamente capacitados están en condiciones de realizar desarrollos electrónicos que incluyan microcontroladores. Incluso a estos especialistas les implica un gran esfuerzo intelectual y mucho tiempo de desarrollo. 3.1.2 Estructura de un microcontrolador Básicamente, un microcontrolador esta compuesto por los siguientes componentes: · Procesador o CPU (del inglés Central Prossesing Unit o Unidad Central de Proceso). · Memoria para el programa tipo ROM. · Memoria RAM para contener los datos. · Líneas de E/S para comunicarse con el exterior. · Diversos módulos para el control de periféricos (temporizadores, Puertas Serie y Paralelo CAD: Conversores Analógico/Digital, CDA: Co inversores Digital/Analógico, etc.). 21 3.1.3 El procesador o CPU Es el elemento más importante del microcontrolador y determina sus principales características, tanto a nivel hardware como software. La CPU (Central Processing Unit o Unidad Central de Proceso) se encarga la decodificación y ejecución del programa. Actualmente, existen 3 tipos de arquitectura de procesadores: · CISC (Computadores de Juego de Instrucciones Complejo): Disponen de más de 80 instrucciones 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 instrucciones complejas que actúan como macros. · RISC (Computadores de Juego de Instrucciones Reducido): En estos procesadores el repertorio de instrucciones es muy reducido y las instrucciones son simples y generalmente se ejecutan en un ciclo. La ventaja de éstos es que la sencillez y rapidez de las instrucciones permiten optimizar el hardware y el software del procesador. · SISC (Computadores de Juego de Instrucciones Específico): En los microcontroladores des - tinados 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. 3.1.4 Memoria ROM La memoria ROM es una memoria no volátil, es decir, que no se pierden los datos al desconectar el equipo y se destina a contener el programa de instrucciones que gobierna la aplicación. Los microcontroladores disponen de capacidades de ROM comprendidas entre 512 bytes y 8 k bytes. Existen distintos tipos de memorias ROM, la cual determinará la aplicación del microcontrolador. 22 3.1.5 ROM con máscara Es una memoria no volátil de sólo lectura cuyo contenido se graba durante la fabricación del 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. 3.1.6 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 programa desde una PC. 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. 3.1.7 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 un PC. 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 caros que los microcontroladores con memoria OTP que están hechos con material plástico. 3.1.7.1 EEPROM Se trata de memorias de sólo lectura, las cuales se puede escribir y borrar 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 un PC. Es muy cómoda y rápida la operación de grabado y la de borrado. 23 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 continúa. 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. Este tipo de memoria es relativamente lenta. 3.1.8 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 y borrado. 3.1.9 Memoria RAM La memoria RAM es una memoria volátil, es decir, que se pierden los datos al desconectar el equipo, y se destina a guardar las variables y los datos. Los microcontroladores disponen de capacidades de RAM comprendidas entre 20 y 512 bytes. 3.2 Registros y Bits Un registro es una posición de memoria en la cual se puede almacenar un dato. Es decir que la memoria esta dividida en pequeñas “partes” llamadas “Registros”. Dentro de la memoria, cada registro se identifica mediante un número, el cual se denomina “Dirección de memoria” y generalmente está expresado en formato Hexadecimal. El primer registro de una memoria corresponde a la dirección 00H. 24 Dado que identificar a cada registro mediante un número hexadecimal puede resultar muy complejo a la hora de diseñar el programa, existe la posibilidad de asignar un “nombre” a una dirección de registro. En general, este nombre está directamente relacionado con la función que cada registro cumple dentro del sistema. Los registros no solo son utilizados por el programador (usuario) para almacenar los datos que la aplicación debe procesar, sino que, además, sirven para controlar todo el funcionamiento del microcontrolador en su conjunto. Esta función, la cumple un conjunto de registros que ya vienen “Predefinidos” desde la fábrica. Es decir, que el fabricante asigna las funciones de configuración y control del microcontrolador en un grupo de registros y el usuario no puede modificar la función que cumple cada uno de éstos. Cada Registro está dividido en 8 “partes” a los cuales se los denomina “Bits”. Entonces podemos decir que un Registro esta formado por un conjunto de 8 bits. El Bit es la menor unidad de información que un sistema digital puede procesar y solo puede contener los valores lógicos 0 y 1. 3.3 Líneas de Entrada/Salida (E/S), (Puertos) Los microcontroladores cuentan con una serie de pines destinados a entrada y salida de datos o señales digitales. A estos pines se les denomina “Puerto”. Como mencionamos anteriormente, todo el funcionamiento del microcontrolador está controlado a través de los registros. Los puertos no son la excepción, también están controlados por los registros. Por esto, un puerto no puede estar formado por más de 8 pines; 1 Pin por cada Bit de un registro. Un puerto si puede estar Formado por menos de 8 pines. Un microcontrolador puede contener varios puertos dependiendo del modelo. A cada puerto se lo identifica con una letra. Por ejemplo; “Puerto A”, “Puerto B”, etc. Para poder utilizar un puerto, primero el mismo debe ser configurado. Cada pin de un puerto puede ser configurado como entrada o salida independientemente del resto de los pines del mismo puerto. 25 3.4 Módulos Temporizadores Internos (TMRs) Un temporizador interno (TMR) es un módulo de hardware incluido en el mismo microcontrolador el cual está especialmente diseñado para incrementar automáticamente el valor de un registro asociado al TMR cada vez que el módulo TMR recibe un pulso. A este pulso se lo llama “señal de reloj”. El módulo TMR siempre incrementa el valor del registro asociado, nunca decremento dicho valor. Algunos microcontroladores pueden incluir más de un módulo TMR y la señal de reloj de cada uno de éstos puede ser de origen interno o externo. Si el origen de la señal de reloj está configurado como externo, el módulo temporizador puede ser utilizado como un contador de eventos externos, incrementando el TMR con cada pulso recibido mediante el pin correspondiente. Si el origen de la señal de reloj es interno, el TMR incrementa con cada ciclo del oscilador. Esto permite utilizar el temporizador como “contador de ciclos de programa”, donde, un ciclo corresponde al tiempo de ejecución de una instrucción, lo cual se puede calcular con la siguiente fórmula: 1 -----------------( Frec. Osc. / 4) Donde “Frec. Osc.” es la frecuencia del oscilador utilizado. Dado que la velocidad de ejecución del microcontrolador corresponde a ¼ de la velocidad del cristal utilizado, cada ciclo de programa se ejecuta en un tiempo determinado según el cristal que estemos utilizando. Por ejemplo; con un cristal de 4Mhz la velocidad real de procesamiento del microcontrolador es de 1 Mhz. Esto significa que cada ciclo de programa se ejecuta a 1/1.000.000 (1 uS) y dado que cada incremento del TMR corresponde a un ciclo de programa, si contamos los incrementos de un TMR, indirectamente podremos calcular el tiempo transcurrido. 26 3.5 Utilizando un microcontrolador Como mencionamos anteriormente, el microcontrolador tiene una memoria de programa, donde grabamos las instrucciones necesarias para que el micro realice el trabajo que necesitamos. Cuando compramos un microcontrolador, la memoria de programa viene vacía. Para que un microcontrolador funcione es necesario “programarlo”. Los microcontroladores se programan en un lenguaje de programación llamado Ensamblador (en inglés Assembler) cuya principal característica es su altísima complejidad. Los lenguajes de programación se clasifican según el “Nivel” de programación en: escritura fácilmente legible y comprensible por el hombre. En la actualidad se trata de lenguajes de tipo visual. poco más al lenguaje de maquina. Permiten un acceso más amplio al control físico de la maquina (hardware). escribe código en el mismo “idioma” del procesador. Se tiene control total del sistema. Es necesario un conocimiento de la arquitectura mecánica del procesador para realizar una programación efectiva. El lenguaje de programación es muy especifico para cada modelo de procesador, incluso puede variar de un modelo a otro de procesador dentro de un mismo fabricante. Podemos decir que los lenguajes de alto Nivel se asemejan más al lenguaje humano y que los lenguajes de bajo Nivel se asemejan más al lenguaje de máquina y en el lenguaje ensamblador el usuario debe programar en el propio “idioma del procesador”. El microcontrolador sólo entiende de números, es decir que, el código Assembler (texto) no puede ser procesado directamente por el microcontrolador. Para poder grabar el programa 27 en el micro, primero debemos convertir el texto del código Assembler a números, en general, en formato hexadecimal. A este proceso Se le llama “Compilación”. Por último, después de compilado, el programa está listo para ser grabado al microcontrolador. Esto realiza mediante una “placa programadora”. A ésta placa programadora, comúnmente se la llama “programador”. Existen distintos tipos de programadores los cuales pueden ser para conectar a la PC mediante el puerto Serie (COM) o Paralelo (LPT). Cada programador trabaja en conjunto con un software, mediante el cual se realiza el proceso de lectura y escritura de los microcontroladores. A continuación se presenta un resumen del proceso de desarrollo del código y grabación de un microcontrolador: 1) Escribir el código Assembler . Se genera un archivo con extensión ASM. 2) Compilar el código Assembler . Se genera un archivo con extensión HEX. 3) Grabar (transferir) el programa desde la PC al microcontrolador mediante un programador. 3.6 Aplicaciones de los microcontroladores. Cada vez existen más productos que incorporan un microcontrolador con el fin de aumentar sustancialmente sus prestaciones, reducir su tamaño y coste, mejorar su fiabilidad y disminuir el consumo. Algunos fabricantes de microcontroladores superan el millón de unidades de un modelo determinado producidas en una semana. Este dato puede dar una idea de la masiva utilización de estos componentes. 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, el sistema de arranque de nuestro coche, etc. Y otras 28 aplicaciones con las que seguramente no estaremos tan familiarizados como instrumentación electrónica, control de sistemas en una nave espacial, 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. 3.7 El mercado de los microcontroladores. Aunque en el mercado de la microinformática la mayor atención la acaparan los desarrollos de los microprocesadores, lo cierto es que se venden cientos de microcontroladores por cada uno de aquéllos. 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. Uno de los sectores que más tira del mercado del microcontrolador es el mercado automovilístico. De hecho, algunas de las familias de microcontroladores actuales se desarrollaron pensando en este sector, siendo modificadas posteriormente para adaptarse a sistemas más genéricos. El mercado del automóvil es además uno de los más exigentes: los componentes electrónicos deben operar bajo condiciones extremas de vibraciones, choques, ruido, etc. y seguir siendo fiables. El fallo de cualquier componente en un automóvil puede ser el origen de un accidente. En cuanto a las técnicas de fabricación, cabe decir que prácticamente la totalidad de los microcontroladores actuales se fabrican con tecnología CMOS (Complementary Metal Oxide Semiconductor). Esta tecnología supera a las técnicas anteriores por su bajo consumo y alta inmunidad al ruido. 29 La distribución de las ventas según su aplicación es la siguiente: Una tercera parte se absorbe en las aplicaciones relacionadas con los computadores y sus periféricos. La cuarta parte se utiliza en las aplicaciones de consumo (electrodomésticos, juegos, TV, vídeo, etc.) El 16% de las ventas mundiales se destinó al área de las comunicaciones. Otro 16% fue empleado en aplicaciones industriales. El resto de los microcontroladores vendidos en el mundo, aproximadamente un 10% fueron adquiridos por las industrias de automoción. También los modernos microcontroladores de 32 bits van afianzando sus posiciones en el mercado, siendo las áreas de más interés el procesamiento de imágenes, las comunicaciones, las aplicaciones militares, los procesos industriales y el control de los dispositivos de almacenamiento masivo de datos. 3.8 Recursos comunes a todos los microcontroladores. 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. Sin embargo, cada fabricante intenta enfatizar los recursos más idóneos para las aplicaciones a las que se destinan preferentemente. 30 Figura 3.1 El microcontrolador. Este es un sistema cerrado. Todas las partes del Con formato: Fuente: Negrita computador están contenidas en su interior y sólo salen al exterior las líneas que gobiernan los periféricos. 3.9 Caracteristicas del PIC16F87X 3.9.1 La arquitectura harvard En el caso específico se utilizara el 16f877 La arquitectura conocida como Harvard, consiste simplemente en un esquema en el que el CPU esta conectado a dos memorias a través de dos buses independientes (y no necesariamente deben tener el mismo ancho). Una de las memorias contiene solamente las instrucciones del programa (Memoria de Programa) y la otra almacena los datos (Memoria de Datos). Bus de datos Bus de Instrucciones MEMORIA DE DATOS CPU 8 12 MEMORIA DE INSTRUCCIONES Figura 3.2 Aarquitectura harvard, Muestra como se compone un sistema harvard con la unidad principal de CPU, una memoria de datos y una memoria de programa. Los microcontroladores PIC utilizan la arquitectura Harvard, con una memoria de datos de 8 bits, y una memoria de programa que, según el modelo, puede ser de 12, 14 o 16 bits. 3.9.2 Principales características Se enumeran las prestaciones y dispositivos especiales de los PIC16F87X. · Procesador de arquitectura RISC avanzada 31 · Juego de solo 35 instrucciones con 14 bits de longitud. Todas ellas se ejecutan en un ciclo de instrucción, menos las de salto que tardan dos. · Hasta 8K palabras de 14 bits para la Memoria de Programa, tipo FLASH en los modelos 16F876 y 16F877 y 4KB de memoria para los PIC 16F873 y 16F874. · Hasta 368 Bytes de memoria de Datos RAM. · Hasta 256 Bytes de memoria de Datos EEPROM. · Pines de salida compatibles para el PIC 16C73/74/76/77. · Hasta 14 fuentes de interrupción internas y externas. · Pila de 8 niveles. · Modos de direccionamiento directo e indirecto. · Power-on Reset (POP). · Temporizador Power-on (POP) y Oscilador Temporizador Start-Up. · Perro Guardián (WDT). · Código de protección programable. · Modo SLEEP de bajo consumo. · Programación serie en circuito con dos pines, solo necesita 5V para Programarlo en este modo. · Voltaje de alimentación comprendido entre 2 y 5,5 V. · Bajo consumo: < 2 mA valor para 5 V y 4 Mhz 20 A para 3V y 32 M < 1 A en standby. 32 Figura 3.3 Encapsulado PDIP de 40 pines. Terminales del PIC16F877, esta figura muestra cada una de las terminales del microcontrolador, las flechas indican si son de entrada o salida, en caso de que cuente con dos flechas esto indica que se puede configurar como entrada o salida. 3.9.3 Terminales de entrada-salida Puerto A: Puerto de e/s de 6 pines RA0 RA0 y AN0 RA1 RA1 y AN1 RA2 RA2, AN2 y VrefRA3 RA3, AN3 y Vref+ RA4 RA4 (Salida en colector abierto) y T0CKI(Entrada de reloj del modulo Timer0) RA5 RA5, AN4 y SS (Selección esclavo para el puerto serie síncrono) Puerto B: Puerto e/s 8 pines Resistencias pull-up programables RB0 Interrupción externa RB4-7 Interrupción por cambio de flanco RB5-RB7 y RB3 programación y debugger in circuit Puerto C: Puerto e/s de 8 pines RC0 RC0, T1OSO (Timer1 salida oscilador) y T1CKI (Entrada de reloj del modulo Timer1). RC1-RC2 PWM/COMP/CAPT RC1 T1OSI (entrada osc timer1) RC3-4 IIC RC3-5 SPI 33 RC6-7 USART Puerto D: Puerto e/s de 8 pines Bus de datos en PPS (Puerto paralelo esclavo) Puerto E: Puerto de e/s de 3 pines RE0 RE0 y AN5 y Read de PPS RE1 RE1 y AN6 y Write de PPS RE2 RE2 y AN7 y CS de PPS 3.9.4 Otras terminales VDD: Positivo de alimentación. 2-6 Vcc. VSS: Negativo de alimentación. MCLR: Master Clear (Reset). Mientras en este terminal haya un nivel bajo (0 Vcc), el microcontrolador permanece inactivo. OSC1/CLKIN: Entrada del oscilador (cristal). Entrada de oscilador externo. OSC2/CLKOUT: Salida del oscilador (cristal). 34 Figura 3.4 diagrama de conexiones de alimentación En esta figura se muestran las conexiones necesarias para el funcionamiento del PIC así como los componentes necesarios que en el PIC se utilizan son un oscilador a 4 mhz dos capacitares cerámicos de 22pf y resistencia de 10k y sus conexiones a 5v y tierra. 3.10 Dispositivos periféricos 0: Temporizador-contador de 8 bits con preescaler de 8 bits 1: Temporizador-contador de 16 bits con preescaler que puede Incrementarse en modo sleep de forma externa por un cristal/clock. -contador de 8 bits con preescaler y postscaler. dulos de Captura, Comparación, PWM (Modulación de Ancho de Pulsos). Conversor A/D de 1 0 bits. Transmitter) con 9 bit. lo Esclavo (PSP) solo en encapsulados con 40 pines 3.11 Diferencias entre los modelos de 28 y los de 40 pines El PIC 16F873 y el 876 tienen 28 pines, mientras que el PIC 1 6F874 y 877 tienen 40. Nos centraremos en el PIC 16F873 y las diferencias que tiene con sus hermanos son mínimas y se detallan a continuación: Los modelos de 40 pines disponen de 5 Puertos de E/S: A, B, C, D y E, mientras que los de 28 solo tienen 3 Puertos: A, B y C. Los modelos de 40 pines tienen 8 canales de entrada al Conversor A/D, mientras que los de 28 solo tienen 5 canales. Sólo poseen el Puerto Paralelo Esclavo los PIC 16F87X de 40 pines. 35 3.12 ELl PIC 16F87X Bajo el nombre de esta subfamilia de microcontroladores, actualmente encontramos cuatro modelos: EL PIC 16F873/4/6 y 7. Estos microcontroladores disponen de una memoria e programa FLASH de 4 a 8 KBytes de 14 bits, considerablemente superior frente al PIC 16F84 en el que solo disponíamos de l Kbyte de 14 bits. De los microcontroladores indicados, el 16F873 y el 16F876 son de 28 pines, mientras que 16F874 y el 16F877 tiene 40 pines, lo que les permite disponer de hasta 33 líneas de E/S. En su arquitectura además incorporan: · Varios Timer · USART · Bus I2C Tabla 3.1 En la Tabla se muestran las características comparativas más relevantes de esta familia de microcontroladores 36 3.13 Descripción global del dispositivo Este documento contiene la información específica del dispositivo. Se puede encontrar información adicional del PICmicroTM en el Manual de Referencia de los PIC de la gama media, (DS33023) que se puede obtener en el website de Microchip. El Manual de referencia debe ser considerado un documento complementario a estos datos, y recomendable leerlo para entender mejor la arquitectura del dispositivo y el funcionamiento de los módulos periféricos. La familia consta de cuatro dispositivos (PIC16FS73, PIC16F874, PIC16F876 y PIC 16F877) en estas hojas de datos. Los PIC 1 6F876/873 entran en el bloque de dispositivos encapsulados en 28-pines y los PIC 1 6F877/874 entran en el bloque de dispositivos encapsulados en 40 pines. Los dispositivos de 28- pines no tienen implementado el puerto paralelo esclavo. 37 Tabla 3.2 El PIC16F877 por dentro. Esta figura muestra la estructura interna del Con formato: Fuente: Negrita Con formato: Fuente: Negrita Pic16f877. 38 Tabla 3.3 Descripción de los Pines del PIC 16F874 y PIC16F877 39 Descripción de los pines de los PIC 16F874 y 16F877 (Continuación Tabla 3.3) 3.14 Programacion. 3.14.1 Instrucciones del PIC16F877. Se tienen 35 instrucciones con las cuales se puede programar el PIC, y a continuación se describe cada una de ellas. ADDLW CALL INCF NOP SLEEP ADDWF CLRF INCFSZ RETFIE SUBLW ANDLW CLRW IORLW RETLW SUBWF ANDWF CLRWDT IORWF RETURN SWAPF BCF COMF MOVF RLF XORLW BSF DECF MOVLW RRF XORWF 40 BTFSC DECFSZ BTFSS GOTO MOVWF La función de cada una de las instrucciones se describe a continuación. ADDWF Acción Suma el contenido del acumulador y el registro dado, y el resultado lo guarda en d Sintaxis ADDWF f,d Funcionamiento Add W to file register (Añade W al registro) Operación d = W + f (d puede ser W ó f). Descripción Esta instrucción suma el contenido de un registro específico al contenido de W donde f puede ser un registro cualquiera con un determinado valor. ANDWF Acción Realiza la operación AND entre un registro y W Sintaxis ANDWF f,d Funcionamiento AND W with f Operación d = W AND f (d puede ser W o f). Descripción Esta instrucción realiza la operación lógica AND entre el acumulador y el registro f. el resultado se guarda dependiendo del valor de d. Si este se omite, el valor por defecto es 1 y se guarda en f 41 CLRF Acción Borra un registro Sintaxis CLRF f Funcionamiento Clear file register Operación F=0 Descripción Esta instrucción borra un registro específico, poniendo sus bits a cero CLRW Acción Borra el acumulador Sintaxis CLRW Funcionamiento Clear W Operación W=0 Descripción Esta instrucción borra el registro W solamente COMF Acción Complementa el registro F Sintaxis COMF f,d Funcionamiento Complement f Operación d = NOT f (d puede ser W ó f). Descripción Esta instrucción complementa un registro, es decir, los ceros los convierte en unos, y los unos en ceros. 42 DECF Acción Decrementa el registro f Sintaxis DECF f,d Funcionamiento Decrement f Operación d = f – 1 (d puede ser W ó f). Descripción Esta instrucción decrementa en una sola unidad el registro "f". DECFSZ Acción Decrementa el registro f, y si el resultado es cero, se salta una instrucción. Sintaxis DECFSZ f,d Funcionamiento Decrement f, skip if 0 Operación d = f – 1, si d = 0 SALTA (d puede ser W ó f). Descripción Esta instrucción decrementa el contenido del registro direccionado por el parámetro f, y si el resultado es 0 salta la instrucción siguiente. Si no, sigue con su curso habitual INCF Acción Suma una unidad al registro f Sintaxis INCF f,d Funcionamiento Increment f Operación d = f + 1 (d puede ser W ó f). Descripción Esta instrucción incrementa en una sola unidad el registro "f". 43 INCFSZ Acción Incrementa en 1 a f, y si f= 0 salta la siguiente instrucción Sintaxis INCFSZ f,d Funcionamiento Increment f, Skip if 0 Operación d = f + 1, si d = 0 SALTA (d puede ser W ó f). Descripción Esta instrucción incrementa en una sola unidad el registro "f", en la cual si el resultado “d” es igual a cero, entonces salta la instrucción siguiente. IORWF Acción Operación lógica OR entre el acumulador y un registro Sintaxis IORWF f,d Funcionamiento Inclusive Or W with F Operación d = W OR f (d puede ser W ó f). Descripción Esta instrucción realiza una operación lógica OR inclusivo entre el acumulador W y el registro direccionado por el parámetro f. El parámetro d determina donde se almacenará el resultado de la operación. Si no se pone nada, el valor por defecto es 1 y se guarda en f. MOVF Acción Mueve el contenido de un registro al acumulador o al propio registro Sintaxis MOVF f,d Funcionamiento Move f Operación d = f (d puede ser W ó f). Descripción Esta instrucción mueve el contenido del registro f en el mismo 44 registro f o en W. D determina el destino del resultado. Si no se pone nada, el valor por defecto es 1 y se guarda en f. MOVWF Acción Mueve el acumulador al registro f Sintaxis MOVWF f Funcionamiento Move W to f Operación f=W Descripción Esta instrucción copia el contenido del acumulador W en el registro direccionado por el parámetro f. NOP Acción No opera Sintaxis NOP Funcionamiento No Operation Operación Ninguna Descripción Esta instrucción no realiza ninguna ejecución, pero sirve para gastar un ciclo de máquina, equivalente a 4 de reloj RLF Acción Rota a la izquierda el registro f Sintaxis RLF f,d Funcionamiento Rotate Left through Carry f 45 Operación d = << 1 (d puede ser W ó f). Descripción Esta instrucción rota a la izquierda todos los bits del registro direccionado por el parámetro f pasando por el bit CARRY del registro STATUS (desde los bits menos significativos a los más significativos). Es como si multiplicáramos por dos el contenido del registro. Veamos el registro f de forma gráfica: El bit D7 pasa al CARRY del registro STATUS, el contenido del CARRY pasa al D0, el D0 al D1, etc. RRF Acción Rota a la derecha el registro f Sintaxis RRF f,d Funcionamiento Rotate Right through Carry f Operación d = f >> 1 (d puede ser W ó f). Descripción Esta instrucción rota a la derecha todos los bits del registro direccionado por el parámetro f pasando por el bit CARRY del registro STATUS (desde los bits más significativos a los menos significativos). Es como si dividiéramos por dos el contenido del registro. Si no se pone nada, el valor por defecto es 1 y se guarda en f. 46 SUBWF Acción Resta el contenido del registro W el registro f Sintaxis SUBWF f,d Funcionamiento Subtract W from f Operación d = f – W (d puede ser W ó f). Descripción Esta instrucción resta el valor contenido en el acumulador W del valor contenido en el registro direccionado por el parámetro f. El parámetro d determina el destino. Si no se pone nada el valor por defecto será 1 y se almacenará en f. SWAPF Acción Invierte los dos nibbles que forman un byte dentro de un registro Sintaxis SWAPF f,d Funcionamiento Swap nibbles in f Operación f = 0123 SWAP 4567 de f Descripción Esta instrucción intercambia el valor de los 4 bits más significativos (D7-D4) contenidos en el registro f, con los 4 bits menos significativos (D3-D0) del mismo. El parámetro d determina el destino. Si no se pone nada, el valor por defecto es 1 y se guarda en f. XORWF Acción Operación lógica OR-Exclusiva Sintaxis XORWF f,d Funcionamiento Exclusive OR W with f Operación d = W OR f Descripción Esta instrucción efectúa la operación lógica XOR (OR exclusivo) 47 entre el valor contenido en el acumulador W y el valor contenido en el registro direccionado por el parámetro f. El parámetro d determina el destino. Si no se pone nada el valor por defecto es 1 y se guarda en f 3.14.2 Instrucciones orientadas al manejo de bits BCF Acción Pone a cero el bit b del registro f Sintaxis BCF f,b Funcionamiento Bit Clear f Operación F(b) = 0 Descripción Esta instrucción pone a cero un bit que hayamos elegido de un registro determinado. BSF Acción Pone a uno el bit b del registro f Sintaxis BSF f,b Funcionamiento Bit Set f Operación F(b) = 1 Descripción Esta instrucción pone a uno un bit que hayamos elegido de un registro determinado. 48 BTFSC Acción Comprueba un bit b del registro f, y salta la instrucción siguiente si este es cero Sintaxis BTFSC f,b Funcionamiento Bit Test, Skip if Clear Operación F(b) = 0? SI, salta una instrucción Descripción Esta instrucción comprueba el valor del bit b en el registro f, y si b = 0 entonces se salta la siguiente instrucción. Si b = 1 no salta y sigue con su ejecución normal. BTFSS Acción Comprueba un bit b del registro f, y salta la instrucción siguiente si este es uno Sintaxis BTFSC f,b Funcionamiento Bit Test, Skip if Set Operación F(b) = 1? SI, salta una instrucción Descripción Esta instrucción comprueba el valor del bit b en el registro f, y si b = 1 entonces se salta la siguiente instrucción. Si b = 0 no salta y sigue con su ejecución normal. 49 3.14.3 Operaciones con literales y de control ADDLW Acción Suma a W un literal Sintaxis ADDLW Funcionamiento Add literal to W Operación W=W+k Descripción Esta instrucción suma un valor de un literal al contenido del registro W y lo guarda en W. ANDLW Acción Realiza la operación AND entre un literal y W Sintaxis ANDLW k Funcionamiento AND W with k Operación W = W AND k Descripción Esta instrucción realiza una operación lógica AND entre el contenido de W y k. El resultado se guarda siempre en el acumulador W CALL Acción Llama a una subrutina en la dirección k Sintaxis CALL k Funcionamiento Call subroutine Operación CALL k...RETURN PC+1. Descripción Esta instrucción llama a un grupo de instrucciones (subrutina) que comienzan en la dirección k, donde k puede ser un valor numérico o una etiqueta. Siempre termina con la instrucción de retorno (RETURN o RETLW). 50 CLRWDT Acción Pone el temporizador WDT a cero. Sintaxis CLRWDT Funcionamiento Clear WatchDog Timer Operación WDT = 0 Descripción Esta instrucción se utiliza cuando programamos el PIC con la opción Watch Dog habilitada. Para evitar el reset del PIC, el programa debe contener cíclicamente la instrucción CLRWDT para ponerlo a cero. Si no se pone a cero a tiempo, el WDT interpretará que se ha bloqueado el programa y ejecutará un reset para desbloquearlo. GOTO Acción Salto incondicional a k. Sintaxis GOTO k Funcionamiento Go to address (label) Operación Salto k Descripción Esta instrucción ejecuta un salto del programa a la dirección k. El parámetro k puede ser un valor numérico o una etiqueta. IORLW Acción Operación lógica OR entre el acumulador y un literal Sintaxis IORWF f,d Funcionamiento Inclusive OR W with l Operación W = W OR l 51 Descripción Esta instrucción realiza una operación lógica OR inclusivo entre el acumulador W y un literal. El resultado siempre se guarda en el acumulador. MOVLW Acción Copia el contenido de un literal al acumulador Sintaxis MOVLW f Funcionamiento Move literal to W Operación W=f Descripción Esta instrucción asigna al acumulador W el valor del literal k, el cual debe estar comprendido entre 0 y 255. RETFIE Acción Retorno de la llamada a una subrutina Sintaxis RETFIE Funcionamiento Return From Interrupt Operación FIN INTERRUPCIÓN Descripción Esta instrucción devuelve el control al programa principal después de ejecutarse una subrutina de gestión de una interrupción. RETLW Acción Retorno de subrutina y carga literal k en el acumulador Sintaxis RETLW Funcionamiento Return with Literal in W Operación RETORNO con W = k 52 Descripción Esta instrucción retorna de una subrutina al programa principal, cargando el acumulador W con el literal k. RETURN Acción Retorno de una subrutina. Sintaxis RETURN Funcionamiento Return from subroutine Operación RETORNO Descripción Esta instrucción retorna de una subrutina al programa principal en la instrucción siguiente a la llamada de la subrutina, tomando el valor almacenado en el stack para continuar. Es la última instrucción que forma una subrutina (al igual que RETLW). SLEEP Acción Paso a modo de bajo consumo Sintaxis SLEEP Funcionamiento Go into Standby Mode Operación EN ESPERA. Descripción Esta instrucción detiene la ejecución del programa, deja el PIC en modo suspendido y el consumo de energía es mínimo. No ejecuta ninguna instrucción hasta que sea nuevamente reinicializado (reset) o surja una interrupción. Durante este modo, el contador del Watch Dog sigue trabajando, y si lo tenemos activado el PIC se reseteará por este medio. 53 SUBLW Acción Resta al literal k el valor del acumulador. Sintaxis SUBLW k Funcionamiento Substract W from Literal Operación W=k-W Descripción Esta instrucción resta al literal k el valor almacenado en W y el resultado se guarda en el acumulador. XORLW Acción Operación lógica OR exclusivo entre el acumulador y el literal k Sintaxis XORLW k Funcionamiento Exclusive OR Literal with W Operación W = W XOR k Descripción Esta instrucción realiza un OR exclusivo entre el contenido del acumulador W y el valor del literal k. El resultado se guarda siempre en el acumulador. 54 3.4.2 Ejemplos de programacion Con formato: Fuente: Negrita 3.4.2.1 Ejemplo 1 Con formato: Fuente: Negrita ;Sumar dos valores inmediatos (p.e. 5+7) el resultado se deposita en la posición 0x10 ; List p=16F873 ;Tipo de procesador include"P16F873.INC" Resultado Inicio Stop ;Definiciones de registros internos equ 0x10 ;Define la posición del resultado org 0x00 ;Vector de Reset goto Inicio org 0x05 ;Salva el vector de interrupción movlw 0x05 ;Carga 1er. sumando en W addlw 0x07 ;Suma el 2º sumando movwf Resultado ;Almacena el resultado nop ;Poner breakpoint de parada nop end A_igual_B clrf Stop nop ;Fin del programa fuente Resultado ;Pone a 0 el resultado ;Poner breakpoint de parada nop end ;Fin del programa fuente 55 3.4.2.2 Ejemplo 2 Con formato: Fuente: Negrita Con formato: Fuente: Negrita ;El programa compara dos números A y B. Si A=B, el resultado es 0. Si A > B, el resultado ;es A-B. Si A < B el resultado es A+B; ;Hay que destacar que, al no haber instrucciones de comparación, esta se realiza mediante ;restas. List p=16F873 ;Tipo de procesador include"P16F873.INC" ;Definiciones de registros internos Dato_A equ 0x10 ;Variable del dato A Dato_B equ 0x11 ;Variable del dato B Resultado Inicio equ 0x12 ;Variable para el resultado org 0x00 ;Vector de Reset goto Inicio org 0x05 ;Salva el vector de interrupción movf Dato_B,W ;Carga el dato B subwf Dato_A,W ;Resta/compara con dato A btfsc STATUS,Z ;Son iguales (Z=1)?? goto A_igual_B ;Si btfsc STATUS,C ;No. A mayor que B (C=0)?? goto A_mayor_B ;Si A_menor_B movf Dato_A,W ;No, A es menor que B addwf Dato_B,W ;Suma a más B movwf Resultado ;Guarda el resultado goto Stop A_mayor_B movwf Resultado goto ; Stop 56 CAPITULO IV CIRCUITERIA Y EQUIPO ELECTRÓNICO USADO 4.1 Señales de entrada al sistema Con formato: Fuente: Negrita Con formato: Fuente: Negrita ETIQUETA DIRECCION TIPO FUNCION De bo hasta b7 teclado matricial Sirve para activar y D7 y d6 4x4teclas modelo desactivar el sistema s310119 mediante contraseña Sensor de humo Sirve para detectar fotoeléctrico mod. partículas de humo 4W-B en el aire Sensor magnético Detecta cuando UL Y1205 TR alguna ventana o Teclado Humo Magnético A1 A4 puerta esta abierta Movimiento A3 Sensor de Detecta movimiento Movimiento Pasivo en un área especifica Infrarrojo mod. RX40PI Temperatura A0 Sensor de Detecta variaciones temperatura LM35 de temperatura en un área especifica Cristal A2 Sensor de impacto Detecta el para cristales mod. rompimiento de DG-50 cristales Monitorean un Cámara Reloj en tiempo real espacio determinado A0 E1 y E2 reloj Es el que permite tener la hora para la alarma Tabla 4.1 en esta figura observamos las entradas al sistema las cuales se controlan mediante las entrada al PIC 57 En el caso del reloj se comenta que el protocolo de comunicación es I2C que utilizan SDA (que significa dato serial o serial data). Y SCL(serial clock) las características más salientes del bus I2C son: Se necesitan solamente dos líneas, la de datos (SDA) y la de reloj (SCL). Cada dispositivo conectado al bus tiene un código de dirección seleccionable mediante software. Habiendo permanentemente una relación Master/ Slave entre el micro y los dispositivos conectados el bus permite la conexión de varios Masters, ya que incluye un detector de colisiones. El protocolo de transferencia de datos y direcciones posibilita diseñar sistemas completamente definidos por software. Los datos y direcciones se transmiten con palabras de 8 bits. 4.2 Señales de salida al sistema ETIQUETA DIRECCION TIPO FUNCION V I P mA Chapa C1 Sirena C3 Chapa Abre y cierra eléctrica Mod. permitiendo el SK-990ª acceso Sirena para Produce un sonido exterior de sirena cuando se Mod. 748 activa la alarma y 12 - 14 800 9.6 24 140 16.8 6 - 12 300 36 5 1.1 5.5 también enciende una luz estroboscopia Torreta Luz Estrobo EST-75AM C2 Son las Luz de aviso de emergencia Display LCD Muestra función de de 16x2 acceso al sistema mW 58 Display mismas del teclado iluminado Mod. TM162AAC62 Monitor Monitor LCD Muestra las señales de 19” marca de cámaras de LG video C5 Succionar aire y Ventilador 120 120 140 16.8 enfriar la sala Dar aviso de un Buffer y led 12 problema en la alarma C7 12v cd 10ª Puerto 1 máx. C6 Puerto2 12v cd 10ª máx. Tabla 4.2 En esta figura encontramos las señales de salida del sistema las cuales son las salidas al PIC 59 VCC RD3 RD2 RD1 330 R5 LED4 VCC1 jumper 330 R4 LED3 330 R2 LED1 PD1 C3 330 R3 LED2 Buzzer 1000uF 0.33uF C5 Vout GND Vin VR1 C1 C2 22pF NA R1 10K 22pF S1 jumper 0.1uF C4 VCC1 1 RD0 3 2 1 VCC selector de fuente 2 1 entrada 5 VCC 2 1 entrada de alterna XT1 A5 A4 A3 A2 A1 A0 RB7 RB6 RB5 RB4 RB3 RB2 RB1 RB0 12 31 1 13 14 2 3 4 5 6 7 33 34 35 36 37 38 39 40 7 6 5 4 3 2 OSC1/CLKIN OSC2/CLKOUT MCLR/VPP RD6 RB0 RD7 19 20 21 22 27 28 29 30 VDD VDD 11 32 8 RE0/RD/AN5 9 RE1/WR/AN6 10 RE2/CS/AN7 RD0/PSP0 RD1/PSP1 RD2/PSP2 RD3/PSP3 RD4/PSP4 RD5/PSP5 RD6/PSP6 RD7/PSP7 15 RC0/T1OSO/T1CKI 16 RC1/T1OSI/CCP2 17 RC2/CCP1 18 RC3/SCK/SCL 23 RC4/SDI/SDA 24 RC5/SDO 25 RC6/TX/CK 26 RC7/RX/DT RA0/AN0 RA1/AN1 RA2/AN2/VREFRA3/AN3/VREF+ RA4/T0CKI RA5/AN4/SS VSS VSS 8 9 10 11 12 13 14 DIP14 1 PIC16F877-04/P RB0/INT RB1 RB2 RB3/PGM RB4 RB5 RB6/PGC RB7/PGD u1 RB1 RB2 RB3 RB4 RB5 RB6 RB7 E1 E0 E2 jumper E2 D0 E1 RD7 RD6 D1 D2 D3 D4 D5 C0 C1 C2 C3 C4 C5 C6 C7 A0 A1 A2 A3 A4 A5 jumper E0 D5 D4 D3 D2 D1 D0 C7 C6 C5 C4 C3 C2 C1 C0 jumper 1 2 3 1 2 3 4 5 6 1 2 3 4 5 6 7 8 1 2 3 4 5 6 1 2 puerto E puerto D puerto C puerto A salida voltaje 5V 4.3 circuiteria adicional Tarjeta principal del PIC16F877A 2 60 Figura 4.1 tarjeta del pic Observamos la tarjeta en la cual contiene el PIC la cual es una tarjeta individual con los conectores, para que salgan a los módulos de entradas, salidas, display y teclado para así evitar ruidos y posibles daños al PIC en caso de algún corto Modulo de Display 16x2 y Teclado Matricial 4x4 L1 T1 4 5 6 7 8 R1 R2 R3 R4 4.7K 4.7K 4.7K 4.7K VCC VCC VCC VCC 16 D 15 # 14 * 0 13 3 12 C 11 9 10 8 9 7 8 B 7 6 6 5 LCD 2x 16 Display deCristal Liquido 5 4 2 4 A 3 3 16 2 2 1 1 1 1 R5 15 RV1 10K VCC VCC B1 10 GND 9 A8 8 7 A7 A6 6 A5 5 A4 4 3 A3 A2 2 A1 19 1 VCC Y8 Y7 Y6 Y5 Y4 Y3 Y2 Y1 11 12 13 14 15 16 17 18 OE2 OE1 VCC 20 RB7 1 RB6 2 RB5 3 14 13 12 4 RB3 5 RB2 6 RB1 7 D1 11 10 9 8 RB4 VCC VCC GND RD6 RD7 RB0 Options|CenterHorizontal=True|CenterVertical=True|PrintScale=0.98|XCorrection=1.00|YCorrection=1.00|PrintKind=2|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-4|MediaType=1|DitherType=10|PaperKind=A4 (210x297 mm)|PrintScaleMode=1 Figura 4.2 Display y teclado En esta imagen observamos el diagrama de la tarjeta que contiene el display y el teclado con el cual se va a manejar la alarma ya que en esta se podrán hacer los ajustes a la alarma como es introducir la clave organizar eventos para que active alguna carga y es en donde el usuario da la señal de activar la alarma y desactivarla, también en esta tarjeta se podrán poner hora y fecha. 61 5Vcd R3 220 R2 15K R1 220 Tx conector2 1N4148 Relay MD-5 1 2 LED conector1 5Vcd GND 1 2 Q1 BC548 Rx Figura 4.3 Sensor infrarrojo En este diagrama observamos un sensor infrarrojo el cual será para evitar la intromisión externa o sea este será en las paredes del perímetro del museo de ciencias VCC C1 27pF 1 XT 32768Hz 2 Conector1 2 1 VCC VCC VCC R1 4.7K 8583 1 2 3 4 8 7 6 5 PCF8583 R2 4.7K INT SCL SDA SCL SDA INT VCC Conector2 1 2 3 R3 4.7K Figura 4.4 Reloj en tiempo real En este diagrama observamos el reloj en tiempo real el cual conectado al PIC es el que nos ayuda a mantener la fecha y hora de la alarma externamente al PIC lo cual no beneficia en que el PIC solo hace procesos importantes y no se pierden pines en hacerlo internamente Modulo de entradas 62 JP15 2 1 JP16 GND Vout Vin 3 2 1 L5 R19 330 R17 1 R20 1K U5 Optoisolator1 GND5 VR5 0.01uF R18 80K 1 2 0.01uF JP14 Figura 4.5 Este modulo de entradas optoacopladas es optó acoplada para que las conexiones con el PIC sean solo con el moc, lo cual mejora en que no hay conexión física y en caso de un corto o algún desperfecto solo se quemaría la entrada, además que se pueden conectar directamente los componentes ya que esta ya tiene su etapa de potencia TIP3055 no.1 12vcd NPN LM7812 conector1 T1 LED1 Vin Vout GND PD1 2 1 C1 4700uF C2 C3 0.22uF 0.1uF R3 470 conector2 12vcd GND121 2 GND12 TIP3055 no.2 5vcd NPN PD2 LM7805 Vin Vout GND C6 4700uF LED2 C4 C5 0.22uF 0.1uF conector3 5vcd 1 GND5 2 R4 82 GND5 Figura 4.6 Fuente de alimentación regulada +5 y +12 volts En este diagrama observamos el diseño de una fuente de 12 y 5 volts de corriente directa la cual será usada para la alimentación de la alarma 63 R2 470 JP2 2 1 R3 1K Triac 1 L1 1 2 R1 330 JP1 C1 100pF U1 Optoisolator1 Figura 4.7 Modulo de salidas corriente directa Es necesario aislar eléctricamente la etapa de potencia y la etapa digital del circuito ya que si existe una falla en cualquiera de las dos etapas la otra no se ve afectada. Para este propósito, se utiliza el optó acoplador MOC3011, que cuenta con salida a TRIAC y maneja voltajes de 120 Vca. JP4 3 2 1 R6 470 1 2 R5 U2 10K Optoisolator1 TIP31- 1 L2 R4 330 JP3 R7 5.2K Figura 4.8 Modulo de salidas alterna En este caso como en el ejemplo de arriba tenemos un modulo de salidas optó acoplado también el cual es de corriente alterna que como en los casos pasado tiene las mismas características, y es la encargada de la activación y desactivación de la cerradura. Utilizamos un optó aislador 4n35 para aislar la etapa digital de la etapa de potencia, ya que 64 además de evitar ruido, tenemos la seguridad de que si existiese alguna falla en alguna de ellas no se daña la otra conector2 DS1 1 2 U1 conector1 LED0 2 1 R1 R2 Optoisolator1 330 Q1 NPN 470 5.7K K1 R3 4 D1 1N4002 2 1 3 conector3 1 2 Header2H 5 Relay Figura 4.9 Modulo de salidas con reelevador En este caso como en el ejemplo de arriba tenemos un modulo de salidas optó acoplado también el cual tiene la ventaja que se tiene con relays lo cual beneficia en que se pueden conectar corriente directa (CD) con hasta 10 A como máximo y en corriente alterna (CA) igualmente con 10 A máximo. La ventaja es que se pueden conectar cargas como en el caso actual se conectara el ventilador extractor que en el caso es de corriente alterna. VCC 5Vpos VSRC VCC 10K 10K 4 VCC 3 2 +VS VOUT GND 2 IN 3 11 1 LM35DZ A LM324N 1 OUT VCC JP? 1 OUT 2 3 Header 3 Figura 4.10 Sensor de temperatura Esta etapa utiliza el sensor de temperatura LM35, el cual entrega una tensión de 10mV\ºC. Sin embargo, para introducir esta señal analógica al PIC necesitamos acondicionar esta 65 señal para así obtener un nivel de cuantizacion para cada ºC, de acuerdo al convertidor A\D que se este utilizando. En este caso, el convertidor que tiene integrado el PIC, emplea una conversión de 10 bits, con lo que tenemos 1024 niveles de cuantizacion. El acondicionamiento de la señal se hace con LM324, bajo una configuración de amplificador no inversor, esta configuración es de las más utilizadas ya que tiene una mejor estabilidad a la frecuencia 4.4 Caracteristicas del sistema Las características del sistema constan de de un display y un teclado con opciones el cual podrá activar la alarma así como activar y desactivar todos los sensores, la cual tendrá en pantalla los acontecimientos como en caso de que se active la alarma dará en caso de ser violada la seguridad activara una sirena, un estrobo en la sala y en el display un mensaje de que a sido violada , un buzzer y un led de destellara como alarma visual, como dato extra se menciona que es una alarma muy segura ya que sus combinaciones de la contraseña son 16x10 a la 4ª potencia lo cual nos da una gran cantidad de caracteres posibles por lo cual nos da una gran seguridad ya que la mayoría de las alarmas solo utilizan código numérico . 66 CAPITULO V. MANUAL DEL SISTEMA DE ALARMA Y DEL NIPLE 5.1 Manual del sistema de alarma Manual de usuario para la alarma LA PRMERA VEZ QUE SE ENCIENDE LA ALRMA APARECE LA SIGUIENTE PANTALLA Y AL PRECIONAR LA TECLA ENTER (# ) APARECERA LA PANTALLA DE LA SIGUIENTE MANERA EN LA CUAL POR DE FAULT TENDREMOS QUE INGRESAR LA CLAVE OOOO 67 Y APARECE LA SIGUIENTE PANTALLA PO 3 SEGUNDOS Y DE AHÍ AUTOMATICAMENTE PASA A LA SIGUIENTE PANTALLA POR 3 SEGUDOS Y AUTOMATICAMENTE PASA A LA SIGUIENTE PANTALLA EN LA CUAL PONDREMOS LA CLAVE UTILIZANDO LAS 16 TECLAS DEL TECLADO CON UNA CONVINACION DE 4 DIGITOS (TAMBIEN SE PUEDEN 68 UTILIZAR LAS FLECHAS) AL INTRODUCIR LOS 4 DIGITOS NOS DA LA SIGUIENTE PANTALLA AQUÍ AHÍ QUE VERIFICAR LA CLAVE PARA QUE EN CASO DE EQUIVOCARSE PONGA UNA CLAVE CORRECTA, SI LA CLAVE ES CORRECTA PASA A LA SIGUIENTE PANTALLA DURANTE 3 SEGUNDOS Y PASA A LA SIGUIENTE PANTALLA 69 QUE ESTA PANTALLA ES LA DE INICIO DE AQUÍ EN ADELANTE DESPUES DE HABER SIDO MODIFICADA LA CLAVE POR PRIMERA VES POR LO TANTO ESTE PASO NUNCA VOLVERA A REPETIRSE Y SI EL DATO ES INCORRECTO APARECERA LA SIGUIENTE PANTALLA ESTA PATALLA APARECE POR 3 SEGUNDOS APROX Y REGRESARA AL PUNTO DE PARTIDA QUE EN ESTE CASO ES Y ASI SE TENDRA QUE REPETIR LA SECUENCIA DESDE EL PRINCIPIO PRESIONANDO LAS FLECHAS DEL MENÚ TENEMOS QUE NOS MUESTRA EL MENÚ EN EL ORDEN DE 70 71 EN ESTE CASO SALE LA PANTALLA 6 SOLO SI ESTA NO HA SIDO CONFIGURADA EN EL CASO DE YA HABER SIDO CONFIGURADA ESTA PANTALLA SE OMITE Y APARECE LA SIGUIENTE PANTALLA AL ENTRAR AL MENU 1 QUE ES ACTIVAR O DESACTIVAR EL SISTEMA TENEMOS LA SIGUIENTE PANTALLA AL INTRODUCIR LA CLAVE SE OBSERVARA DE LA SIGUIENTE MANERA EN CASO DE QUE LA CLAVE SEA CORRECTA PONDRA EN PANTALLA LA SIGUIENTES PANTALLAS 72 (3 SEGUNDOS) Y PASA A PONER EL SIGUIENTE MENSAJE EN ESE MOMENTO EL SISTEMA DE ALARMA ESTARA ACTIVADO Y LA SEñAL ES QUE SE OIRA POR 3 SEGUNDOS EL BUZZER Y EL ESTROBO TAMBIEN ENCENDERA. PARA DESACTIVAR EL SISTEMA ES NECESARIO PRESIONAR LA TECLA ENTER QUE EN EL CASO DE EL TECLADO SERA LA TECLA INDICADA CON LA EL SIMBOLO DE (#) EN ESE MOMENTO MOSTRARA LA SIGUIENTE PANTALLA DESPUES CUANDO LA CLAVE ES INTRODUCIDA SE VERA DE LA SIGUENTE MANERA 73 ENTONCES MUESTRA (3 SEGUNDOS) DESPUES MOSTRARA LA SIGUIENTE PANTALLA SISTEMA DESACTIVADO DURA APROX 30 SEG MIENTRAS EL ESTROBO PERMANECE ENCENDIDO ESTO INDICARA QUE LA CHAPA ELECTRICA ESTARA ABIERTA DESPUES DE ESO SE MOSTRARA LA PANTALLA NUMERO 1 DEL MENU AL SELECCIONAR LA PANTALLA NUMERO DOS QUE ES HORA/FECHA TENDREMOS LA SIGUIENTE PANTALLA 74 EN ESTE CASO CON LAS FLECHAS QUE TIENEN EN UN COSTADO FECHA/HORA SE PODRA SELECCIONAR EL DIA DESEADO, YA QUE HALLAMOS INTRODUCIDO EL DATO CORRECTO PRECIONAMOS LA TECLA CON EL SIMBOLO DE # QUE NOS HARA IR A LA SIGUIENTE PANTALLA EN ESTE CASO SE REPITEN PARA EL PUNTO ANTERIOR APARECIENDO EN PANTALLA LOS MESES DEL AñO Y EN ESTE CASO SE REPITE EL CASO ANTERIOR Y LA SIGUIENTE PANTALLA ES Y SE REPITE EL PASO ANTERIOR 75 Y LA SIGUIENTE PANTALLA ES AL TERMINAR DE INGRESAR LOS SEGUNDOS NOS REGRESARA AL MENU AN LA PANTALLA NUMERO 2 EL SISTEMA TRAE POR DE FAULT UNA TEMPERATURA DE 27 GRADOS CENTIGRADOS COMO MAXIMO Y A 25 SE DESACTIVA EL VENTILADOR EN EL CASO DE SER NECESARIO LA CONFIGURACION DE OTRA TEMPERATURA SE SELECIONA LA PANTALLA NUMERO 3 Y APARECERA LA SIGUIENTE PANTALLA LA CUAL INDICA LA TEMPERATURA ALA DERECHA A LA HORA COMO SE DECIA EN EL PARRAFO ANTERIOR QUE A LOS 27°C SE VA ACTIVAR EL VENTILADOR Y A LOS 25°C SE DESACTIVARA EN ESTA MISMA PANTALLA SE 76 PODRAN HACER LOS CAMBIOS DE TEMPERATURA DESEADA LA CUAL SE PODRA HACER CON LAS FLECHAS DEL LADO DERECHO DE MENU Y SE PODRA MOVER LOS GRADOS DE DOS EN DOS COMENZANDO DESDE LA CUAL PDREMOS IR INCREMENTANDO SEGUN LAS NESESIDADES HASTA LA TEMPERATURA DE AL TENER LA TEMPERATURA DESEADA PRECIONAMOS LA TECLA # Y APRARECERA LA PANTALLA NUMERO 3 DE AHÍ PASAMOS A LA SIGUIENTE PANTALLA QUE SERA LA NUMERO 4 LA CUAL SERA PARA PROGRAMAR UN EVENTO DIARIO AL ENTRAR A ESTA APARECERA LA SIGUIENTE PANTALLA 77 EL CUAL NOS INDICA QUE ES LA CONFIGURACION DE EL PUERO EXTRA NUMERO 1 EN EL CUAL PODREMOS CONFIGURAR UNA CARGA A DETERMINADA HORA DE INICIOP Y FIN. AL PRECIONAR ENTER (#) APARECERA EN PANTALLA POR UNOS 2 SEGUNDOS LA SIGUIENTE PANTALLA Y DESPUES APARECERA LA SIGUIENTE PANTALLA AUTOMATICAMENTE Y SE PODRA CONFIGURAR LA HORA MEDIANTE LAS FLECHAS DE FECHA/HORA AL PONER LA HORA LE DAMOS ENTER (#) PASAREMOS A LA SIGUIENTE PANTALLA 78 AL PRECIONAR ENTER APARECERA POR UNOS 2 SEGURNDOS LA PANTALLA Y AUTOMATICAMENTE DESPUES APARECERA LA SIGUIENTE PANTALLA AL SELECCIONAR CON LAS FLECHAS DEL HORA /FECHA LA HORA DESEADA Y PRECIONAR ENTER PASAREMOS A LA SIGUIENTE PANTALLA Y AL DARLE ENTER TENDREMOS CONFIGURADO EL PUERO 1 PARA CONFIGURAR EL PUERTO DOS EN LA PANTALLA DEL MENU NUMERO 4 Y QUE AL DARLE ENTER ENTRAMOS AL MENU 79 PODRA SELECCIONAR ENTRE EL PUERTO 1 O 2 SEGÚN SEA NECESARIO O LOS DOS CONFIGURANDO DE UNO EN UNO Y PARA SELECCIONAR EL PUERO DOS EN ESTA PANTALLA SOLO ES NECESARIO UTILIZAR LAS FLECHAS DE MENU PARA SELECCIONAR EL PUERO NECESARIO, LA FORMA DE CONFIGURAR EL PUERTO DOS ES COMPLETAMENTE IGUAL A LA DEL PUERTO 1Y AL CONFIGURARLOS Y DARLE ENTER (#) SE SALE DE LA CONFIGURACION Y LLEGA NUEVAMNTE A LA PANTALLA 4 DE AHÍ PASAMOS A LA PANTALLA 5 AL PASAR ALA PANTALLA NUMERO 5 DEL MENU QUE ES LA SIGUIENTE Y AL DARLE ENTER (#) APARECERA LA SIGUIENTE PANTALLA 80 AL PRECIONAR LA CLAVE ACTUAL APARECERA DE LA SIGUIENTE MANERA AL DAR LOS 4 NUMERO POR UNOS BREBES SEGUNDOS APRROX 2 SEGUNDOS Y DESPUES AUTOMATICAMENTE APARECERA LA SIGUIENTE PANTALLA AL PONER LA NUEVA CLAVE APARECERA DE LA SIGUIENTE MANERA AUTOMATICAMENTE AL INTRODUCIR LA CLAVE ESTA APARECERA LA PANTALLA 81 POR UNOS SEGUNDOS APROX 2 SEGUNDOS Y REGRESARA A LA PANTALLA DEL MENU PRICIPAL NUMERO 5 Y YA ESTA CONFIGURADO, DE AHÍ PASAMOS A MENU 6 EN EL CUAL PARECERA LA SIGUIENTE PANTALLA ESTO SOLO COMO RECORDATORIO DE QUE NO HA SIDO CONFIGURADA LA FECHA Y LA HORA EN CASO CONTRARIO OSEA QUE ESTA HALLA SIDO CONFIGURADO SERA LA SIGUIENTE PANTALLA EN LA CUAL NOS INDICARA LA FECHA ARRIBA, ABAJO LA TEMPERATURA ACTUAL DE LA LECTURA DEL SENSOR DE TEMPERATURA Y ENSEGUIDA DE LA TEMPERATURA LA HORA ACTUAL TENIENDO HORAS, MINUTOS Y SEGUNDOS 5.2 Mmanualanual del niple La programación de los microcontroladores resulta una tarea muy compleja dado que el usuario debe conocer la arquitectura del procesador y además debe dominar el lenguaje de programación “Ensamblador” . Si bien existen distintas versiones del lenguaje C o Basic Adaptadas a la programación de microcontroladores, todavía la programación resulta muy compleja por el alto grado de abstracción que implica. 82 Niple es un entorno de desarrollo visual para programación de microcontroladores PIC. Con Niple, el usuario sólo diseña un diagrama de flujo de manera totalmente visual y en alto nivel de programación, en lenguaje humano, y el software genera el código Assembler de manera automática. Además, el software controla y supervisa todo el proceso de diseño, advirtiendo al usuario sobre posibles errores en la lógica del programa que se está diseñando. Esta ventaja no la tiene ningún otro lenguaje de programación. Figura 5.1 comparaciones de lenguajes de programación En esta imagen se pretende mostrar las ventajas que ofrece nicle en comparación con otras formas de programar el PIC De ésta manera Niple ofrece la posibilidad de realizar desarrollos con microcontroladores con un mínimo de esfuerzo. El principal objetivo de Niple es facilitar al máximo la programación de los microcontroladores. Para esto, el software ofrece un entorno totalmente visual, donde todo el sistema se adapta a las características del modelo de microcontrolador seleccionado; es decir que; carga el mapa de memoria con sus respectivos nombres de registros y bits, asigna las funciones correspondientes a cada Registro y Bit dentro del sistema, ajusta el tamaño de 83 la memoria EEPROM, activa los módulos correspondientes, etc. Es decir que, Ud. Tendrá disponible sólo las características que corresponden al modelo de micro en uso. El concepto de la programación es que el usuario se concentre en “qué es lo que quiere hacer”, y Nicle “sabe cómo hacerlo”. Es decir que el usuario sólo se dedica a diseñar la estructura lógica del proceso que desea realizar y el software se encarga de resolver todo el desarrollo del código Assembler , controlando hasta el más mínimo detalle. 5.3 Introducción al Niple Niple es un “Entorno Visual de Desarrollo para p programación de Microcontroladores PIC”. Con Niple podrá programar los PIC a través del diseño de un diagrama de flujo de manera gráfica y de alto nivel de programación, sin necesidad de escribir código Assembler, o escribiendo la menor cantidad de código, convirtiéndose en la forma más rápida, sencilla y productiva de desarrollar proyectos con microcontroladores PIC. Diseñe un diagrama de flujo de manera gráfica y en “lenguaje humano” mientras Niple realiza el trabajo pesado por Ud., controlando errores lógicos o de configuración, realizando cálculos, coordinando la interacción entre las distintas partes del proyecto y generando de manera automática el código Assembler Estas características, hacen de Niple la herramienta ideal tanto para quienes se inician en el mundo de los microcontroladores como para aquellos usuarios más experimentados que quieran aumentar su productividad. Entre las principales prestaciones que Niple ofrece podemos destacar: Entono Visual de Alto Nivel de programación: · Niple ofrece una metodología de programación totalmente visual y en lenguaje humano. · Bloques estandarizados, lo cual facilita la interpretación del proyecto. · Ud. se concentra en “Que Hacer“y Niple se encarga de “Como Hacerlo”. · Control automático de errores lógicos. · Supervisa el ingreso de datos. 84 Control automático de registros y bits: · Controla la existencia de todos los registros y bits necesarios para el correcto funcionamiento del proyecto en el momento de generar el código Assembler. · Controla que no existan nombres de registros y bits duplicados. · Valida los nombres de los registros y los bits en el momento de ser declarados. . Corrección automática de errores lógicos · Controla la correcta configuración de los puertos. · Controla la configuración y activación de las interrupciones. · Supervisa la creación de vínculos entre bloques. . Generación del Código Assembler: · Control automático de la sintaxis del código generado. · Control automático del cambio de página. · Generación automática de etiquetas. . Modelos de PIC soportados por Niple: · Niple para PIC 12F6xx . 12F629 . 12F675 · Niple para PIC 16F84 . 16F84 · Niple para PIC 16F6xx . 16F627 . 16F628 . 16F648 · Niple para PIC 16F87x . 16F870 . 16F873 . 16F874 . 16F876 . 16F877 · Velocidades de reloj soportadas: 4 Mhz, 10 Mhz, 20 Mhz. 85 5.4 Funciones disponibles Las funciones disponibles dependen del modelo de microcontrolador utilizado pero en general podemos mencionar: . Selección del cristal utilizado (4, 10 o 20 Mhz) . Asignación de valores a registros y bits . Configuración y manejo de interrupciones . Manejo de rutinas de usuario . Configuración, Lectura y Escritura de puertos . Lectura / Escritura de EEPROM interna del PIC . Funciones de comparación de registros y bits (condiciones =, >, <, >=, <=, <>) . Manejo automático de tablas . Temporizadores por bucle (de tiempo fijo o variable) . Visualización de datos en dígitos 7 segmentos (Ánodo común y Cátodo común) . Ingreso de datos por teclado matricial (3x3 y 3x4) . Visualización de datos en pantallas LCD (16x2, 20x2 y 20x4) . Manejo de memorias EEPROM 24Cxxx por comunicación I2C . Manejo de memorias RAM PCF8570 por comunicación I2C. . Manejo de reloj/calendario de tiempo real PCF8583, con control de alarmas por fecha. . Configuración y manejo de temporizadores internos (TMR0, TMR1 y TMR2) . Comunicaciones RS232 por código y por USART . Comunicaciones RS485 . Comparadores analógicos . Conversión A/D. La cantidad de canales depende del modelo de micro . Módulos CCP (Compara, Captura y PWM) . Cálculos matemáticos: (+, - , / , *, en 8 o 16 bits), conversión a BCD . Escalado de valores de un rango a otro (a 8 y 16 bits) . Manejo de registros de desplazamiento 86 Conclusiones generales El objetivo planteado al inicio de esta tesis se cumplió satisfactoriamente al lograr el optimo funcionamiento de cada modulo diseñado. Nosotros llegamos a la conclusión que la realización de una tesis te ayuda a la vida laboral ya que se reafirman situaciones y necesidades que no siempre tenemos oportunidad de realizar, además aprendimos mas sobre un dispositivo muy importante y que puede ayudarnos a realizar un sinfín de tareas que es el PIC16F877. Con la realización de este proyecto se aprendió a utilizar las herramientas de software aplicables al área de electrónica como son: NIPLE. Software de programación de pics mediante diagramas de flujo. ALTIUM DXP 2004. Software de diseño y simulación de esquemáticos y PCB. PROTEUS. Software de diseño y simulación de circuitos. COREL DRAW 13. software de diseño grafico Trabajo a futuro Las propuestas a futuro se pueden resumir en los siguientes puntos: . Aumento de sensores infrarrojos de presencia externos. . Cerca electrificada. . Alarma manual de incendio. . Aspersores antiincendio controlados con la misma alarma. . Control GSM. . Monitoreo por internet. 87 CAPITULO VI PROGRAMACION Iniciar 6.1 diagrama general de flujo E/A = SSE/XXEEEEEA B = SSSSSSSS C = SSSSSSSS Programa D = SSSSSSSS principal A/D=Activado, tecla2 = 0x00 RD0 = 0 hora_evento2 = 0xFF RD3 = 0 RD1 = 0 hora_evento1 = 0xFF hora_evento2fin = 0xFF RD2 = 0 hora_evento1fin = 0xFF reloj = 0x00 tecla3 = 0x00 tecla4 = 0x00 nuevo = 0x00 aster3 = 0xFA grados = 0xAF tecla = 0xF0 aster4 = 0xFA aster1 = 0xFA tecla1 = 0x00 enie = 0xBE aster2 = 0xFA evento1 = 0x00 evento2 = 0x00 temperatura_off = D'25' temperatura_on = D'27' Reg alarma = 0x01 SI LCD(1)=Activo, alarma = EEPROM,06 nuevo2 = EEPROM,00 LCD(1)=Config, LCD_BUS=B(4-7), LCD_RS=B(3), LCD_RW=B(2), LCD_Buffer=D(6), LCD_E=D(7), GIE=Activado, RBIE=Activado, NO estado = EEPROM,05 usr_lcd_armando_sistema Reg estado = 0x02 NO LCD(1)=Activo, 10_seg usr_lcd_Bienvenida NO SI usr_sistema_de_seguridad usr_menu Reg tecla = 0x14 SI estado = 0x02 usr_default usr_compara_clave 88 Rutina de interrupción lectura del teclado Interrupción por RB4 a 7 Teclado(4x4), tecla=Tecla_Pulsada, Fila_1=B0, Fila_2=B1, Fila_3=B2, Fila_4=B3, Col_1=B4, Col_2=B5, Col_3=B6, Col_4=B7, tecla = _np_tabla_teclado(tecla), 0=0x00 - 0, 1=0x01 - 1, 2=0x02 - Fin de la interrupción 89 Rutina de inicio por primera vez. Pide clave 0000 Rutina de usuario usr_default LCD_CMD, LCD=16x2, LCD_CMD=Limpiar_Pantalla, aster1 = 0xF0 contador_tecla = D'0' aster2 = 0xF0 aster4 = 0xF0 aster3 = 0xF0 tecla = 0xF0 NO LCD(1)=Activo, usr_lcd_clave Reg tecla <> 0xF0 SI contador_tecla = contador_tecla + D'01' Reg contador_tecla = D'1' NO Reg contador_tecla = NO D'2' Reg NO contador_tecla = D'3' Reg contador_tecla = NO D'4' SI SI SI SI tecla1 = tecla tecla2 = tecla tecla3 = tecla tecla4 = tecla aster1 = 0xFA aster2 = 0xFA aster3 = 0xFA aster4 = 0xFA NO LCD_CAR, LCD_CAR, LCD_CAR, LCD_CAR, LCD=16x2, LCD=16x2, LCD=16x2, LCD=16x2, LCD(2,11)=ASCII(aster1), LCD(2,12)=ASCII(aster2), LCD(2,13)=ASCII(aster3), LCD(2,14)=ASCII(aster4), Reg contador_tecla = D'4' SI 500_mse LCD_CAR, LCD=16x2, LCD(1,11)='.', 500_mse 500_mse LCD_CAR, LCD=16x2, LCD(1,12)='.', LCD_CMD, LCD=16x2, LCD_CMD=Limpiar_Pantalla, LCD_CAR, LCD=16x2, LCD(1,10)='.', 500_mse LCD_CAR, LCD=16x2, LCD(1,03)='ESPERE.', 500_mse Fin de rutina 90 Rutina de usuario Rutina de comparación de Clave, y cambio de clave En caso de que sea la primera Vez de funcionamiento Del circuito usr_compara_clave Reg nuevo = 0x00 NO SI Reg nuevo2 <> 0x01 NO key1 = EEPROM,01 key2 = EEPROM,02 SI NO Reg tecla1 = 0x00 key4 = EEPROM,04 key3 = EEPROM,03 SI NO Reg tecla2 = 0x00 Reg tecla1 = key1 NO SI SI NO Reg tecla3 = 0x00 SI NO Reg tecla2 = key2 Reg tecla4 = 0x00 SI SI Reg tecla3 = key3 nuevo = 0x01 EEPROM,00 = 0x01 NO NO SI Reg tecla4 = key4 NO LCD(1)=Activo, LCD(1)=Activo, SI LCD(1)=Activo, LCD(1)=Activo, usr_lcd_clave_incorrecta usr_lcd_clave_primera_vez usr_lcd_clave_primera_vez usr_lcd_clave_incorrecta 3_seg 3_seg 3_seg usr_cambio_de_clave Fin de rutina 91 Rutina para el cambio de clave Rutina de usuario usr_cambio_de_clave Reg estado = 0x02 SI contador_tecla = 0x00 LCD_CMD, LCD=16x2, LCD_CMD=Limpiar_Pantalla, tecla = 0xF0 NO LCD(1)=Activo, Reg nuevo = 0x01 usr_lcd_Clave_Actual NO SI Reg nuevo2 <> 0x00 NO Reg tecla <> 0xF0 SI SI contador_tecla = contador_tecla + D'01' contador_tecla = 0x00 LCD_CMD, LCD=16x2, LCD_CMD=Limpiar_Pantalla, Reg Reg Reg Reg contador_tecla = contador_tecla = = contador_tecla = NO NO contador_tecla NO D'1' D'2' D'4' D'3' tecla = 0xF0 SI SI SI LCD(1)=Activo, tecla1 = tecla NO tecla2 = tecla tecla3 = tecla SI tecla4 = tecla usr_lcd_nueva_clave LCD_CAR, LCD_CAR, LCD_CAR, LCD_CAR, LCD=16x2, LCD=16x2, LCD=16x2, LCD=16x2, LCD(1,14)=ASCII(aster2), LCD(1,16)=ASCII(aster4), LCD(1,13)=ASCII(aster1), LCD(1,15)=ASCII(aster3), Reg tecla <> 0xF0 NO NO Reg contador_tecla = D'4' SI SI contador_tecla = contador_tecla + D'01' 1_seg Reg Reg NO = contador_tecla = contador_tecla NO D'2' D'1' SI SI tecla1 = tecla tecla2 = tecla Reg contador_tecla = NO D'3' SI tecla3 = tecla Reg contador_tecla = SI D'4' SI key2 = EEPROM,02 tecla4 = tecla LCD_CAR, LCD_CAR, LCD_CAR, LCD_CAR, LCD=16x2, LCD=16x2, LCD=16x2, LCD=16x2, LCD(2,13)=ASCII(aster2), LCD(2,12)=ASCII(aster1), LCD(2,14)=ASCII(aster3), LCD(2,15)=ASCII(aster4), NO key1 = EEPROM,01 key3 = EEPROM,03 key4 = EEPROM,04 Reg contador_tecla = D'4' SI 1_seg Reg key1 = tecla1 SI NO Reg key2 = tecla2 contador_tecla = D'0' SI NO Reg key3 = tecla3 LCD_CMD, LCD=16x2, LCD_CMD=Limpiar_Pantalla, SI tecla = 0xF0 LCD(1)=Activo, NO usr_lcd_verificar_clave 92 NO Reg key4 = tecla4 NO NO contador_tecla = D'1' contador_tecla = NO D'2' contador_tecla = NO D'3' contador_tecla = D'4' SI SI SI SI tecla1 = tecla tecla2 = tecla tecla3 = tecla tecla4 = tecla SI LCD_CAR, LCD_CAR, LCD_CAR, LCD_CAR, LCD=16x2, LCD=16x2, LCD=16x2, LCD=16x2, LCD(2,13)=ASCII(aster2), LCD(2,12)=ASCII(aster1), LCD(2,14)=ASCII(aster3), LCD(2,15)=ASCII(aster4), NO key2 = EEPROM,02 key3 = EEPROM,03 key4 = EEPROM,04 Reg contador_tecla = D'4' Reg key1 = tecla1 SI SI 1_seg NO Reg key2 = tecla2 contador_tecla = D'0' SI NO Reg key3 = tecla3 LCD_CMD, LCD=16x2, LCD_CMD=Limpiar_Pantalla, SI Reg key4 = tecla4 tecla = 0xF0 NO LCD(1)=Activo, NO NO usr_lcd_verificar_clave NO Reg tecla <> 0xF0 SI contador_tecla = contador_tecla + D'01' NO NO Reg Reg Reg Reg contador_tecla = contador_tecla = NO contador_tecla = NO contador_tecla = NO D'1' D'4' D'2' D'3' SI key1 = tecla SI SI SI key2 = tecla key3 = tecla key4 = tecla LCD_CAR, LCD_CAR, LCD_CAR, LCD_CAR, LCD=16x2, LCD=16x2, LCD=16x2, LCD=16x2, LCD(2,12)=ASCII(aster1), LCD(2,13)=ASCII(aster2), LCD(2,14)=ASCII(aster3), LCD(2,15)=ASCII(aster4), NO Reg contador_tecla = D'4' SI 1_seg Reg key4 = tecla4 NO SI Reg key3 = tecla3 NO SI Reg key2 = tecla2 NO SI Reg key1 = tecla1 NO SI EEPROM,01 = tecla1 nuevo = 0x00 EEPROM,02 = tecla2 EEPROM,00 = 0x00 EEPROM,03 = tecla3 LCD(1)=Activo, EEPROM,04 = tecla4 EEPROM,00 = 0x01 EEPROM,05 = 0x02 LCD(1)=Activo, usr_lcd_clave_cambiada 3_seg usr_lcd_clave_incorrecta 93 SI Reg key2 = tecla2 NO SI Reg key1 = tecla1 NO SI EEPROM,01 = tecla1 nuevo = 0x00 EEPROM,02 = tecla2 EEPROM,00 = 0x00 EEPROM,03 = tecla3 LCD(1)=Activo, EEPROM,04 = tecla4 usr_lcd_clave_incorrecta EEPROM,00 = 0x01 EEPROM,05 = 0x02 LCD(1)=Activo, usr_lcd_clave_cambiada 3_seg Fin de rutina 94 Rutina del menú principal Rutina de usuario usr_menu tecla = 0xF0 flecha_a = 0x4E flecha_b = 0x4F NO LCD(1)=Activo, usr_lcd_MENU Reg tecla = 0xF2 Reg tecla = 0xF1 NO SI tecla = 0xF0 LCD(1)=Activo, usr_sistema_de_seguridad usr_lcd_on_off_alarma NO Reg tecla = 0x14 SI NO Reg tecla = 0xF2 NO Reg tecla = 0xF1 SI tecla = 0xF0 LCD(1)=Activo, usr_ajustar_fecha_y_hora usr_lcd_ajustar_Fecha_y_Hora Reg tecla = 0x14 SI SI NO NO Reg tecla = 0xF1 NO Reg tecla = 0xF2 SI tecla = 0xF0 95 LCD(1)=Activo, usr_ajustar_temperatura usr_lcd_ajustar_temperatura Reg tecla = 0x14 SI SI NO NO LCD(1)=Activo, usr_ajustar_fecha_y_hora usr_lcd_ajustar_Fecha_y_Hora Reg tecla = 0x14 SI NO SI NO Reg tecla = 0xF1 NO Reg tecla = 0xF2 SI tecla = 0xF0 LCD(1)=Activo, usr_ajustar_temperatura usr_lcd_ajustar_temperatura Reg tecla = 0x14 NO NO SI SI SI Reg tecla = 0xF1 NO Reg tecla = 0xF2 SI SI SI tecla = 0xF0 LCD(1)=Activo, usr_programar_evento usr_lcd_programar_evento Reg tecla = 0x14 SI NO SI Reg tecla = 0xF1 NO NO Reg tecla = 0xF2 SI tecla = 0xF0 LCD(1)=Activo, usr_cambio_de_clave usr_lcd_Cambiar_CLAVE Reg tecla = 0x14 SI NO NO SI Reg tecla = 0xF1 NO Reg tecla = 0xF2 SI tecla = 0xF0 SI 96 Reg reloj <> 0x01 SI NO usr_lcd_fech_y_ora_no_config GIE=Desactivado, RBIE=Desactivado, PCF8583, Reg tecla = 0x14 SI NO NO SI Reg tecla = 0xF1 NO Reg tecla = 0xF2 SI tecla = 0xF0 Reg reloj <> 0x01 SI SI NO usr_lcd_fech_y_ora_no_config GIE=Desactivado, RBIE=Desactivado, PCF8583, Señal_Reloj=RE2, Señal_Datos=RE1, Nro_Disp=0, dia=Día, mes=Mes, anio=Año, horas=Horas, minutos=Minutos, segundos=Segundos, usr_fecha_hora_y_tempe NO usr_lcd_tempe_fecha_y_hora usr_eventos_externos usr_leer_temperatura GIE=Activado, RBIE=Activado, Reg tecla = 0xF1 NO Reg tecla = 0xF2 NO Reg tecla = 0x14 SI Fin de rutina 97 Rutina de sistema de seguridad Rutina de usuario usr_sistema_de_seguridad Reg alarma = 0x01 SI NO usr_activar_sist_clave Reg alarma = 0x01 SI RC0 = 1 LCD(1)=Activo, NO Fin de rutina Bit RA5 = 0 SI Bit RA4_T0CKI = SI 1 NO RD1 = 1 NO usr_lcd_sistema_activado Bit RA3 = 1 SI NO NO Bit RA2 = 1 SI Bit RA1 = 0 NO NO NO RD0 = 1 SI RC2 = 1 RC3 = 1 Reg tecla = 0x14 SI usr_desact_sist_clave Reg alarma = 0x00 SI Fin de rutina 98 rutina para activar el sistema de seguridad Rutina de usuario usr_activar_sist_clave LCD_CMD, LCD=16x2, LCD_CMD=Limpiar_Pantalla, contador_tecla = 0x00 tecla = 0xF0 LCD_CAR, LCD=16x2, LCD(1,01)='INTRODUCIR CLAVE', NO NO contador_tecla = contador_tecla + D'01' SI Reg contador_tecla = D'1' NO Reg tecla <> 0xF0 Reg contador_tecla = D'2' LCD_CAR, LCD=16x2, LCD(2,07)=ASCII(aster1), Reg contador_tecla = D'3' NO tecla3 = tecla tecla2 = tecla Reg contador_tecla = D'4' SI SI SI SI tecla1 = tecla NO LCD_CAR, LCD_CAR, LCD=16x2, LCD=16x2, LCD(2,08)=ASCII(aster2), LCD(2,09)=ASCII(aster3), tecla4 = tecla LCD_CAR, LCD=16x2, LCD(2,10)=ASCII(aster4), NO Reg contador_tecla = D'4' SI tecla = 0xF0 key1 = EEPROM,01 1_seg key2 = EEPROM,02 key3 = EEPROM,03 key4 = EEPROM,04 Reg key1 = tecla1 NO SI Reg key2 = tecla2 Fin de rutina NO RC2 = 0 SI Reg key3 = tecla3 NO RD0 = 0 SI Reg key4 = tecla4 NO RD1 = 0 SI RC2 = 1 LCD(1)=Activo, LCD(1)=Activo, 3_seg usr_lcd_clave_incorrecta RD1 = 1 usr_lcd_clave_correcta 3_seg EEPROM,06 = 0x01 alarma = 0x01 RD0 = 1 RC3 = 1 10_mse RC3 = 0 99 rutina para desactivar el sistema de seguridad Rutina de usuario usr_desact_sist_clave LCD_CMD, LCD=16x2, LCD_CMD=Limpiar_Pantalla, contador_tecla = 0x00 tecla = 0xF0 NO Reg tecla <> 0xF0 SI contador_tecla = contador_tecla + D'01' LCD_CAR, LCD=16x2, LCD(1,01)='INTRODUCIR CLAVE', Reg contador_tecla = D'1' NO NO Reg contador_tecla = D'2' NO Reg contador_tecla = D'3' NO Reg contador_tecla = D'4' SI SI SI tecla2 = tecla tecla3 = tecla tecla4 = tecla SI tecla1 = tecla NO LCD_CAR, LCD_CAR, LCD_CAR, LCD=16x2, LCD=16x2, LCD=16x2, LCD(2,07)=ASCII(aster1),LCD(2,08)=ASCII(aster2), LCD(2,09)=ASCII(aster3), LCD_CAR, LCD=16x2, LCD(2,10)=ASCII(aster4), Reg contador_tecla = D'4' SI key2 = EEPROM,02 key1 = EEPROM,01 1_seg tecla = 0xF0 key4 = EEPROM,04 Reg key1 = tecla1 SI Reg key2 = tecla2 NO SI NO Reg key3 = tecla3 NO SI Reg key4 = tecla4 key3 = EEPROM,03 SI NO RD1 = 0 EEPROM,06 = 0x00 alarma = 0x00 LCD(1)=Activo, RD0 = 0 usr_lcd_clave_incorrecta RC0 = 0 3_seg RC1 = 1 LCD_CMD, LCD=16x2, LCD_CMD=Limpiar_Pantalla, 3_seg RD1 = 1 RC2 = 1 LCD_CAR, LCD=16x2, LCD(1,05)='SISTEMA', RD0 = 1 RC3 = 1 Fin de rutina RC2 = 0 RC1 = 0 LCD_CAR, LCD=16x2, LCD(2,03)='DESACTIVADO', RC3 = 0 15_seg 10_mse LCD(1)=Activo, usr_lcd_clave_correcta 100 Rutina del sistema de ventilacion Rutina de usuario usr_leer_temperatura A/D=Activado, Conv_AD, Resolución=8_Bits, Canal=0, Resultado=temperatura1, Reg temperatura1 NO >= temperatura_on Reg temperatura1 <= temperatura_off SI SI RC5 = 1 RC5 = 0 NO Fin de rutina 101 Rutina para programar los eventos externos En el puerto 1 y 2 Rutina de usuario usr_programar_evento LCD_CMD, LCD=16x2, LCD_CMD=Limpiar_Pantalla, LCD_CAR, LCD=16x2, LCD(2,02)='EXTERNO No. 1', LCD_CAR, LCD=16x2, LCD(1,01)='PUERTO DE SALIDA', tecla = 0xF0 NO Reg tecla = 0x14 Reg tecla = 0xF1 NO NO SI SI Reg tecla = 0xF2 NO Reg tecla = 0x13 SI SI LCD_CMD, LCD=16x2, LCD_CMD=Limpiar_Pantalla, tecla = 0xF0 LCD_CAR, LCD=16x2, LCD(1,01)='HORA DE INICIO', LCD_CAR, LCD=16x2, LCD(2,02)='EXTERNO No. 2', Reg tecla = 0x13 NO NO Reg tecla = 0x14 SI Reg tecla = 0xF2 SI 3_seg usr_minutos usr_horas minutos_evento1 = minutos hora_evento1 = horas LCD_CMD, LCD=16x2, LCD_CMD=Limpiar_Pantalla, LCD_CMD, LCD=16x2, NO LCD_CMD=Limpiar_Pantalla, NO SI 3_seg usr_horas minutos_evento1fin = minutos LCD_CAR, LCD=16x2, LCD(1,01)='HORA D FINALIZAR', hora_evento1fin = horas usr_minutos LCD_CAR, LCD=16x2, LCD(1,01)='HORA DE INICIO', 3_seg usr_minutos minutos_evento2 = minutos 3_seg usr_horas minutos_evento2fin = minutos Reg tecla = 0xF1 usr_horas hora_evento2 = horas SI LCD_CMD, LCD=16x2, LCD_CMD=Limpiar_Pantalla, LCD_CAR, LCD=16x2, LCD(1,01)='HORA D FINALIZAR', hora_evento2fin = horas usr_minutos Fin de rutina 102 Rutina para el control de cargas en los puertos externos 1 y 2 Rutina de usuario usr_eventos_externos SI Reg hora_evento1 = horas Reg minutos_evento1 SI = minutos evento1 = 0x01 Reg hora_evento1fin = horas NO NO evento1 = 0x00 SI Reg minutos_evento1fin SI = minutos Fin de rutina NO NO Reg hora_evento2 = horas NO Reg hora_evento2fin = horas Reg minutos_evento2fin = minutos NO SI NO Reg minutos_evento2 = minutos SI SI RD3 = 1 RD3 = 0 evento2 = 0x01 RC6 = 1 SI NO evento2 = 0x00 Reg evento1 = 0x01 RD2 = 0 NO NO RC7 = 0 Reg evento2 = 0x01 SI RC7 = 1 RC6 = 0 SI RD2 = 1 103 Rutina para ajustar la temperatura Rutina de usuario usr_ajustar_temperatura LCD_CMD, LCD=16x2, LCD_CMD=Limpiar_Pantalla, contador = D'20' LCD_CAR, LCD=16x2, LCD(2,11)=ASCII(grados), decontador = D'40' LCD_CAR, LCD=16x2, LCD(2,06)=ASCII(grados), LCD_CAR, LCD=16x2, LCD(2,01)='on 27.C-25.C off', tecla = 0xF0 LCD_CAR, LCD=16x2, LCD(1,01)='SELECCIONE TEMP.', Reg tecla = 0xF1 NO SI contador = contador + D'2' NO contador = D'20' NO NO Reg tecla = 0xF2 Reg tecla = 0x14 NO SI decontador = decontador - D'2' decontador = contador contador = decontador Reg contador >= D'20' Reg decontador <= D'40' SI Reg contador <= D'40' SI Fin de rutina NO SI Reg decontador >= D'20' NO decontador = D'40' SI SI Reg(8)_->_BCD, Reg(8)_->_BCD, (contador), (decontador), Unidad=tempe_unidad, Unidad=tempe_unidad, LCD_CAR, LCD=16x2, LCD(2,04)=ASCII(tempe_decena), LCD_CAR, LCD=16x2, LCD(2,10)=ASCII(tempe_unidad), LCD_CAR, LCD=16x2, LCD(2,05)=ASCII(tempe_unidad), LCD_CAR, LCD=16x2, LCD(2,09)=ASCII(tempe_decena), temperatura_on = contador temperatura_off = contador - D'2' Reg(8)_->_BCD, (temperatura_off), Unidad=tempe_unidad, 104 Rutina para ajustar Fecha y Hora Rutina de usuario usr_ajustar_fecha_y_hora usr_dia_del_mes usr_mes usr_anio usr_horas usr_minutos usr_segundos PCF8583, Señal_Reloj=RE2, Señal_Datos=RE1, Nro_Disp=0, Modo=32768_Khz, Iniciar=SI, Formato=24_Horas, Día=dia, Mes=mes, Año=anio, Horas=horas, Minutos=minutos, Segundos=segundos, Apagar_Alarma, Reiniciar_Timer, reloj = 0x01 Fin de rutina 105 Rutina para el dia del mes Rutina de usuario usr_dia_del_mes LCD_CMD, LCD=16x2, LCD_CMD=Limpiar_Pantalla, LCD_CAR, LCD=16x2, LCD(1,01)='SELECCIONE', contador = D'0' LCD_CAR, LCD=16x2, LCD(2,14)='--', decontador = D'32' tecla = 0xF0 LCD_CAR, LCD=16x2, LCD(2,01)='DIA DEL MES:', Reg tecla = 0xF3 NO Reg tecla = 0xF4 NO Reg tecla = 0x14 SI SI SI contador = contador + D'01' decontador = decontador - D'1' Fin de rutina decontador = contador contador = decontador Reg contador >= D'1' Reg decontador <= D'31' SI NO NO NO Reg contador <= D'31' NO decontador = D'32' SI Reg decontador >= D'1' NO SI SI Reg(8)_->_BCD, Reg(8)_->_BCD, (contador), (decontador), Unidad=dias_unidad, Unidad=dias_unidad, contador = D'0' dia = contador LCD_CAR, LCD=16x2, LCD(2,14)=ASCII(dia_decena), LCD_CAR, LCD=16x2, LCD(2,15)=ASCII(dias_unidad), 106 Rutina para el mes Rutina de usuario usr_mes LCD_CMD, LCD=16x2, LCD_CMD=Limpiar_Pantalla, LCD_CAR, LCD=16x2, LCD(2,01)='-- ----------', contador = D'0' decontador = D'13' tecla = 0xF0 NO contador = D'0' NO LCD_CAR, LCD=16x2, LCD(1,02)='SELEC. EL MES', NO Reg tecla = 0xF3 Reg tecla = 0x14 NO Reg tecla = 0xF4 NO SI SI SI contador = contador + D'01' decontador = decontador - D'1' Fin de rutina decontador = contador contador = decontador Reg contador >= D'1' Reg decontador <= D'12' SI SI Reg contador <= D'12' Reg decontador >= D'1' NO decontador = D'13' NO SI SI Reg(8)_->_BCD, Reg(8)_->_BCD, (contador), (decontador), Unidad=mes_unidad, Unidad=mes_unidad, LCD_CAR, LCD=16x2, LCD_CAR, LCD=16x2, LCD(2,16)=ASCII(mes_unidad), LCD(2,15)=ASCII(mes_decena), mes = contador LCD_CMD, LCD=16x2, LCD_CMD=Limpiar_Pantalla, Reg mes = D'1' SI LCD_CAR, LCD=16x2, LCD(2,01)='01 ENERO', SI LCD_CAR, LCD=16x2, LCD(2,01)='02 FEBRERO', SI LCD_CAR, LCD=16x2, LCD(2,01)='03 MARZO', NO Reg mes = D'2' NO NO Reg mes = D'3' NO LCD_CAR, LCD=16x2, 107 NO contador = D'0' NO D'1' SI SI Reg contador <= D'12' Reg decontador >= D'1' decontador = D'13' NO SI SI Reg(8)_->_BCD, Reg(8)_->_BCD, (contador), (decontador), Unidad=mes_unidad, Unidad=mes_unidad, LCD_CAR, LCD=16x2, LCD_CAR, LCD=16x2, LCD(2,16)=ASCII(mes_unidad), LCD(2,15)=ASCII(mes_decena), mes = contador LCD_CMD, LCD=16x2, LCD_CMD=Limpiar_Pantalla, Reg mes = D'1' SI LCD_CAR, LCD=16x2, LCD(2,01)='01 ENERO', SI LCD_CAR, LCD=16x2, LCD(2,01)='02 FEBRERO', SI LCD_CAR, LCD=16x2, LCD(2,01)='03 MARZO', SI LCD_CAR, LCD=16x2, LCD(2,01)='04 ABRIL', SI LCD_CAR, LCD=16x2, LCD(2,01)='05 MAYO', SI LCD_CAR, LCD=16x2, LCD(2,01)='06 JUNIO', SI LCD_CAR, LCD=16x2, LCD(2,01)='07 JULIO', NO Reg mes = D'2' NO NO Reg mes = D'3' NO Reg mes = D'4' NO Reg mes = D'5' NO Reg mes = D'6' NO Reg mes = D'7' NO Reg mes = D'8' SI LCD_CAR, LCD=16x2, LCD(2,01)='08 AGOSTO', NO Reg mes = D'9' SI LCD_CAR, LCD=16x2, LCD(2,01)='09 SEPTIEMBRE', NO Reg mes = D'10' SI LCD_CAR, LCD=16x2, LCD(2,01)='10 OCTUBRE', SI LCD_CAR, LCD=16x2, LCD(2,01)='11 NOVIEMBRE', SI LCD_CAR, LCD=16x2, LCD(2,01)='12 DICIEMBRE', NO Reg mes = D'11' NO Reg mes = D'12' 108 Rutina para el año Rutina de usuario usr_anio LCD_CMD, LCD=16x2, LCD_CMD=Limpiar_Pantalla, decontador = D'4' contador = 0xFF LCD_CAR, LCD=16x2, LCD(2,06)='20XX', LCD_CAR, LCD=16x2, LCD(1,01)='SELEC. EL A O', tecla = 0xF0 LCD_CAR, LCD=16x2, LCD(1,12)=ASCII(enie), Reg tecla = 0xF3 contador = 0xFF NO NO NO NO Reg tecla = 0xF4 Reg tecla = 0x14 NO SI SI SI contador = contador + D'01' decontador = decontador D'01' Fin de rutina decontador = contador contador = decontador Reg contador <= D'3' Reg decontador <= D'3' SI anio = contador Reg anio = 0x00 NO decontador = D'4' SI SI LCD_CAR, LCD=16x2, LCD(2,08)='08', SI LCD_CAR, LCD=16x2, LCD(2,08)='09', SI LCD_CAR, LCD=16x2, LCD(2,08)='10', SI LCD_CAR, LCD=16x2, LCD(2,08)='07', NO Reg anio = 0x01 NO Reg anio = 0x02 NO Reg anio = 0x03 109 Rutina para convertir el año Rutina de usuario usr_convertir_anio LCD_CMD, LCD=16x2, LCD_CMD=Limpiar_Pantalla, Reg anio = 0x00 SI LCD_CAR, LCD=16x2, LCD(1,15)='08', NO Reg anio = 0x01 SI LCD_CAR, LCD=16x2, LCD(1,15)='09', NO Reg anio = 0x02 SI LCD_CAR, LCD=16x2, LCD(1,15)='10', NO Reg anio = 0x03 SI LCD_CAR, LCD=16x2, LCD(1,15)='07', NO Fin de rutina 110 rutina para ajustar las horas Rutina de usuario usr_horas LCD_CMD, LCD=16x2, LCD_CMD=Limpiar_Pantalla, contador = 0xFF decontador = D'24' LCD_CAR, LCD=16x2, LCD(1,01)='AJUSTE --:--:--', tecla = 0xF0 LCD_CAR, LCD=16x2, LCD(2,01)=' HORA', NO Reg tecla = 0xF4 Reg tecla = 0xF3 NO NO Reg tecla = 0x14 SI contador = 0x00 NO contador = contador + D'01' decontador = contador contador = decontador Reg contador <= D'23' SI SI SI decontador = decontador - D'1' Fin de rutina Reg decontador <= D'23' NO decontador = D'24' SI Reg(8)_->_BCD, Reg(8)_->_BCD, (decontador), (contador), Unidad=hora_unidad, Unidad=hora_unidad, LCD_CAR, LCD=16x2, LCD(1,09)=ASCII(hora_decena), LCD_CAR, LCD=16x2, LCD(1,10)=ASCII(hora_unidad), horas = contador 111 rutina para ajustar los minutos Rutina de usuario usr_minutos decontador = D'60' contador = 0xFF tecla = 0xF0 LCD_CAR, LCD=16x2, LCD(2,01)='MINUTOS', NO Reg tecla = 0xF4 Reg tecla = 0x14 Reg tecla = 0xF3 NO NO SI contador = contador + D'01' decontador = contador contador = 0x00 NO minutos = contador Reg contador <= D'59' SI decontador = decontador - D'1' SI Fin de rutina contador = decontador Reg contador <= NO D'59' decontador = D'60' SI SI Reg(8)_->_BCD, Reg(8)_->_BCD, (decontador), (contador), Unidad=minutos_unidad, Unidad=minutos_unidad, LCD_CAR, LCD=16x2, LCD_CAR, LCD=16x2, LCD(1,12)=ASCII(minutos_decenas), LCD(1,13)=ASCII(minutos_unidad), 112 Rutina para ajustar los segundos Rutina de usuario usr_segundos decontador = D'60' contador = 0xFF tecla = 0xF0 LCD_CAR, LCD=16x2, LCD(2,01)='SEGUNDOS', NO Reg tecla = 0xF3NO Reg tecla = 0xF4NO Reg tecla = 0x14 SI contador = contador + D'01' SI decontador = decontador - D'1' SI Fin de rutina decontador = contador contador = 0x00 NO segundos = contador Reg contador <= D'59' contador = decontador Reg contador <= D'59' NO decontador = D'60' SI SI Reg(8)_->_BCD, Reg(8)_->_BCD, (contador), (decontador), Unidad=segundos_unidad, Unidad=segundos_unidad, LCD_CAR, LCD=16x2, LCD_CAR, LCD=16x2, LCD(1,16)=ASCII(segundos_unidad), LCD(1,15)=ASCII(segundos_decenas), 113 rutina para convertir los datos a BCD y mostrar en pantalla Reg(8)_->_BCD, (temperatura1), usr_convertir_anio Unidad=tempe_unidad, usr_fecha_hora_y_tempe Rutina de usuario Reg(8)_->_BCD,Reg(8)_->_BCD, Reg(8)_->_BCD, Reg(8)_->_BCD, (horas), (mes), (dia), (minutos), Unidad=horas_unidad, Unidad=mes_unidad, Unidad=dia_unidad, Unidad=minutos_unidad, Reg(8)_->_BCD, (segundos), Fin de rutina Unidad=segundos_unidad, Decena=segundos_decenas, Algunas rutinas se omitieron por no mostrar ningun contenido de importancia. 114 REFERENCIAS: I. Automatización de procesos con microcontroladores de la familia PIC16F8XX de microchip. Tesis Profesional #213 II. http://www.niplesoft.net/ A partir de el 20 de marzo de 2007 a mayo 2007 aquí se consulto todo sobre la programación y algunos detalles del PIC III. http://www.todopic.com.ar/ A partir de septiembre 2006 a enero 2007 y en esta pagina se consutaron detalles sobre el pic que se utilizo en la tesis IV. http://www.datasheetcatalog.net/ A partir de septiembre 2006 a mayo 2007 y en esta pagina se consultaron las hojas de datos de los circuitos utilizados en la tesis V. http://www.electronicafacil.net/circuitos/menu7.html A partir de septiembre 2006 a mayo 2007 en esta pagina se consutaron algunas configuraciones y circuitos usados en la tesis 115