UNIVERSIDAD AUSTRAL DE CHILE FACULTAD DE CIENCIAS DE LA INGENIERÍA ESCUELA DE ELECTRICIDAD Y ELECTRÓNICA Implementación de Alarma Monitoreada en Forma Remota Mediante Fibra Óptica. Trabajo de Titulación para optar al Título de Ingeniero en Electrónica PROFESOR PATROCINANTE: Sr. Néstor Fierro Morineaud ALUMNO: Jonatan Urtubia Ugarte VALDIVIA 2006 AGRADECIMIENTOS A los diferentes profesores de nuestra escuela y facultad, principalmente a mi profesor patrocinante el Sr. Néstor Fierro. Compañeros de estudio y de deportes por el estimulo entregado, principalmente a mi pupilo Joel Urtubia Ligarte...mi hermano. Al constante aliento brindado por mis padres y a Guillermo Valenzuela P., por su gran apoyo durante estos años, gracias. A mi novia e hijo, por su cariño, amor y apoyo incondicional. III 4 ÍNDICE Resumen 6 Introducción 8 Objetivos Generales 8 Objetivos Específicos 9 CAPITULO I: “MARCO TEÓRICO” 10 1.1 Necesidad y Presentación del Proyecto. 10 1.2 Programas Utilizados. 13 1.2.1 IC-PROG 13 1.2.2 El Mplab. 15 1.2.3 Visual Basic. 19 1.3 1.4 1.2.3.1 El Entorno De Programación Visual Basic 6.0. 19 1.2.3.2 Controles Utilizados. 21 1.2.3.3 El Control Personalizado Microsoft Comm. 23 Interfase De Comunicación 27 1.3.1 Max 232 (TTL a RS-232). 28 1.3.2 Puerto Serie (Conector DB-9). 28 LCD 29 1.4.1 Descripción De Pines. 1.5 Fibra Óptica 1.5.1 Análisis De Un Sistema De Fibra Óptica. 30 32 32 5 1.5.2 Componentes De La Fibra Óptica. 33 1.5.3 Principios Básicos. 34 1.5.3.1 Índice De Refracción. 36 1.5.3.2 Apertura Numérica. 36 1.5.3.3 Modo De Propagación. 37 1.5.3.4 Perfil Del Índice. 37 1.5.4 Tipos De Fibra Óptica. 38 1.5.4.1 Fibra Monomodo. 38 1.5.4.2 Fibra Multimodo De Índice Gradual. 39 1.5.4.3 Fibra Multimodo De Índice Escalonado. 39 1.5.5 Elementos Básicos De Un Sistema De Fibra Óptica. 40 1.5.6 Convertidor De Fibra Óptica A Rs-232/422/485 40 1.5.6.1 Detección De Velocidad Automática. 41 1.5.6.2 Ajuste de los interruptores SW1, SW2 y SW3. 41 1.6 Sensores 42 1.6.1 Detector De Humo. 42 1.6.2 Detector De Movimiento (Pir). 44 1.6.3 Sensor Magnético O Continuidad. 46 1.7 Microprocesadores (Pic). 1.7.1 Instrucciones. 46 47 6 CAPITULO II: “IMPLEMENTACIÓN” 49 2.1 Esquema General del Sistema. 49 2.2 Teclado. 50 2.2.1 Diagrama De Flujo. 52 2.2.2 Diseño (Teclado). 53 2.3 PIC 18F452 54 2.3.1 Organización De La Memoria. 55 2.3.2 Memoria De Programa. 55 2.3.2.1 Contador De Programa. 58 2.3.3 Encapsulado. 59 2.3.4 Oscilador. 60 2.3.5 Modulo De Transmisión Usart. 60 2.3.5.1 Modo Asíncrono De La Usart. 61 2.3.5.2 Transmisor Asíncrono De La Usart. 64 2.3.5.3 Calculo De La Velocidad De Transmisión En Baudios. 65 2.3.6 Temporizador. 2.4 LCD 65 67 2.4.1 Envío De Datos. 68 2.4.2 Diseño (LCD). 71 2.4.3 Funcionamiento General Del Sistema. 73 2.5 Programa VISUAL BASIC 74 7 2.5.1 Elección Del Puerto Y Velocidad. 77 2.5.2 Abrir Y Cerrar El Puerto. 79 2.5.3 Timer. 81 2.6 Instrumento Audible (Buzzer). 84 2.7 Presupuesto. 85 3.1 CONCLUSIONES 86 4.1 Referencias Bibliograficas 88 5.1 Anexo 89 5.1.1 Aeropuerto Comodoro Arturo Benítez. 89 5.1.1.1 ILS. 89 5.1.1.2 Descripción General de los diferentes Sistemas. 96 5.1.2 Desarrollo de programa en Visual Basic. 101 5.1.3 Desarrollo de programa en Mplab. 108 5.1.4 Imágenes de la Implementación. 137 8 RESUMEN La presente tesis consiste en el diseño e implementación de una alarma monitoreada en forma remota mediante fibra óptica. Para dicha tarea fue necesaria la utilización de un microcontrolador (PIC 18F452), detector de humo, sensor magnético, detector de movimiento, pantalla LCD, dos line driver o convertido de fibra óptica (transmisor y receptor) y, por ultimo, un computador. El PIC 18F452 permite el control de acceso, monitoreo de los sensores o detectores, visualización del estado del sistema (activado, desactivado, intruso, cambio de clave, etc.), y transmisión de la información. Este dispositivo se instalara en una de las casetas de radioyudas a la navegación aérea del aeropuerto de Santiago Comodoro Arturo Merino Benitez, producto que se encuentran en sectores remotos de dicho recinto. El monitoreo de dicho sistema se realizara desde la torre de control mediante un enlace de fibra óptica monomodo.. La velocidad de transmisión del dispositivo es de 9600 baudios, y su visualización será desarrollada mediante una aplicación del software Visual Basic. Para la programación del microcontrolador fue necesaria la utilización del software MPLAB y IC-PROG, este último, encargado de cargar el programa en el PIC. El proyecto esta enfocado principalmente para técnicos o ingenieros que conozcan el aérea de las telecomunicaciones, transmisión de datos, programadores, entre otros. 9 SUMMARY The present thesis consists of the design and implementation of an alarm monitoreada in remote form by means of optical fiber. For this task the use of a microcontroller was necessary (PIC 18F452), detector of smoke, magnetic, detector of movement, screen LCD, two line to driver or turned sensor of optical fiber (transmitting and receiving) and, finally, a computer. The PIC 18F452 allows the access control, monitoreo of the sensors or detectors, visualization of the state of the system (activated, deactivated, intruder, change of key, etc.), and transmission of the information. This device settled in one of the houses of radioyudas to the airplane navigation of the airport of Santiago Commodore Arturo Merino Benitez, product that are in remote sectors of this enclosure. The monitoreo of this system was made from the control tower by means of an optical fiber connection monoway. The speed of transmission of the device is of 9600 bauds, and its visualization will be developed by means of an application of Visual software BASIC. For the programming of the microcontroller the use of software MPLAB and IC-PROG was necessary, this last one, ordered to load the program in the PIC. The project this focused mainly for technicians or engineers who know the aerial one the telecommunications, data transmission, programmers, among others. 10 INTRODUCCIÓN La presente tesis consiste en el diseño e implementación de una alarma que permita ser monitoreada dentro del Aeropuerto de Santiago, debido a que diversos equipos se encuentran ubicados en sectores remotos de dicho recinto. El medio de comunicación utilizado es Fibra Óptica Monomodo, el cual permite abarcar distancias que pueden llegar a los 70 Km. Este sistema de alarma incluirá tres tipos de sensores o detectores (sensor magnético o de continuidad, detector de humo y detector de movimiento), los cuales se conectarán a un microcontrolador que permitirá la transmisión a un Convertidor de Fibra Óptica (MODEM de Fibra). Este enlace llegará a la Torre de control y allí se comunicará a otro convertidor de F.O. el cual se encargará de traspasar los datos a un computador. Para el presente trabajo, se utilizaron distintos software, entre los cuales se destacan: Mplab, IC-PROG, Visual Basic y Expres PCB (Diseño de Placa), donde los tres primeros permitirán programar, cargar al microcontrolador y visualizar en el ordenador los datos entregados por la alarma. Las variables a tomar en cuenta para este proyecto son tres: la detección de intrusos dentro de la caseta, detector de humo en caso de sobrecalentamiento de los equipos y, por último, visualizar en el computador la pérdida de la comunicación. OBJETIVOS GENERALES: • Implementar un instrumento digital que permita monitorear las variables ya descritas. • Diseñar una Alarma digital más económica que los actuales existentes en el mercado. 11 OBJETIVOS ESPECÍFICOS: • Obtener información oportuna por alguna anormalidad o eventualidad. • Desarrollar un programa amigable al usuario, como asimismo entregar ventajas para la realización de otros proyectos, ya que las bases para implementarlo entregan una gran versatilidad para realizar diversas funciones. • Diseñar un algoritmo en el ordenador, que permita apreciar el estado de los sensores y la Alarma (Activada o Desactivada). • Utilizar un dispositivo audible en caso de producirse un estado de alarma. • Diseñar un algoritmo que permita visualizar el estado de la alarma en tiempo real (incluye: ingreso de clave, error, cambio de clave, alarma activada, alarma desactivada, etc.). 12 CAPITULO I: MARCO TEORICO 1.1 Necesidad y Presentación del Proyecto. El Aeropuerto Arturo Merino Benítez cuenta con diferentes sistemas de Radioayuda (VOR, ILS, Marcador: Medio, Interno y Externo) y ayudas visuales a la navegación aérea, que permiten el aterrizaje, despegue y localización de las aeronaves. Actualmente estos equipos delicados y costosos se encuentran en sectores remotos del aeropuerto que no cuentan con ningún tipo de monitoreo antirrobo o incendio, por lo tanto el proyecto implementado apunta a satisfacer dicha necesidad. Descripción de la Situación Actual Actualmente el aeropuerto cuenta con el siguiente equipamiento: • Dos ILS (pistas 17R y 17L) • Dos VOR Doppler y DME denominados PDH y AMB. • Marcador Interno, Medio y Externo. • Casetas de transmisores y receptores. • NDB. • Sistema de Ayudas Visuales. • Transponder. • Torre de Control. El proyecto implementado será ubicado en una de las casetas que posea enlace de fibra óptica con la torre de control, la cual se aprecia en la siguiente figura (Fig.1-1): 13 (Fig.1-1) 14 Para comprensión del marco teórico, será necesario apreciar el siguiente esquema, en donde es posible observar los distintos dispositivos asociados al hardware y software (Fig.1-2): Fig.1-2 15 1.2 Programas Utilizados. Debido a que la implementación del control de acceso y transmisión se realizará mediante un microcontrolador, se programará en lenguaje de máquina, sin embargo, por la dificultad que esto representa, se utilizó el software MPLAB, que tiene la facultad de simular y apreciar distintos eventos. Una vez realizada la simulación, el software ICPROG, permitió cargar el microcontrolador con el programa realizado en MPLAB, mediante la utilización del archivo .hex. Todo lo dicho anteriormente permite la transmisión; sin embargo, para la recepción, es necesaria la utilización en el ordenador del programa Visual Basic, que permite trabajar con los periféricos (COM1, COM2, COM3….Puerto Paralelo) del computador. A continuación se describen los programas utilizados: 1.2.1 IC-Prog. Al cargar un programa en IC-Prog se siguen los mismos pasos que cualquier otro dispositivo, sin embargo, las únicas variaciones dependen de las características particulares del microprocesador a programar. Los pasos a seguir para cargar un microcontrolador, son los siguientes: 1- Configurar el tipo de programador: En la pantalla principal de IC-PROG, se accede a la configuración del hardware de distintas formas: pulsando el icono , mediante la pestaña Ajustes y luego el comando Tipo Hardware, o bien pulsando la tecla F3, de esta manera se accede a la siguiente pantalla: 16 Fig.1-3 Esta es la configuración que se debió escoger para el correcto funcionamiento del programador (cargador paralelo), que forma parte de la placa de aplicación. Una vez elegido el tipo de programador (ProPic 2), se selecciona el puerto serie adecuado (LPT 1 o Com 1). Es importante no olvidar elegir el tipo de Interface como Direct I/O, y en cuanto al tiempo de retardo, si hubiese problemas, se pueden probar tiempos más largos. 2- Seleccionar el tipo de dispositivos a programar, es decir, qué modelo de microcontrolador se va a cargar (PIC-18F452). 3- Abrir el archivo que contiene los datos a programar, el cual posee la extensión .HEX. 4- Ajustar la palabra de configuración (WDT) y el tipo de oscilador (XT). Una vez cargados los datos del archivo correspondiente, la pantalla del IC-PROG presenta el siguiente aspecto (Fig.1-4). 17 Fig.1-4 Por último, se activa el icono icono (grabar chip) y luego se comprueba mediante el (leer microcontrolador). Nota: Producto de qué la computadora utiliza el sistema operativo Windows XP, fue necesaria la descarga de un drive para el correcto funcionamiento del software. 1.2.2 EL Mplab MPLAB es un software emulador y programador de los múltiples que existen en el mercado, formado por un conjunto de herramientas de desarrollo muy completo para el trabajo o diseño con los microcontroladores (PIC) desarrollados, y fabricados por la empresa Arizona Microchip Technology (AMT). MPLAB incorpora todas las utilidades necesarias para la realización de cualquier proyecto y, para los que no dispongan de un emulador, el programa permite editar el 18 archivo fuente en lenguaje ensamblador del proyecto. Además de ensamblarlo y simularlo en pantalla, se puede ejecutar posteriormente en modo paso a paso y ver como evolucionarán de forma real tanto sus registros internos, la memoria RAM y/o EEPROM de usuario, como la memoria de programa, según se fueran ejecutando las instrucciones. Además el entorno que se utiliza es el mismo que si se estuviera utilizando un emulador. Los pasos a seguir para crear un proyecto en MPLAB son los siguientes: 1- Ir a la opción New o Nuevo en el campo Proyect como se aprecia en la siguiente figura (Fig.1-5): Fig.1-5 19 2- Luego se abrirá una ventana en donde se introducirá el Nombre del proyecto y la carpeta en que deseo guardar dicho archivo. Fig.1-6 3- Abrir la página donde se escribirá el programa, para lo cual se debe ir al menú File o Archivo, e ir a la opción New para empezar a escribir dicho programa. Fig.1-7 20 4- Una vez realizado el programa, es necesario guardarlo mediante la opción Save All, que se encuentra en el menú File. Fig.1-8 5- Una vez guardado, se va a la opción Source File.. y se introduce la tecla Add Files. Con esta última acción se abre el archivo guardado anteriormente, y ya se esta preparado para compilarlo y utilizar otro tipo de simuladores o eventos necesarios: Fig.1-9 21 1.2.3 Visual Basic El software Visual Basic está orientado a la realización de programas para Windows, en él se pueden incorporar todos los elementos de este entorno informático: ventanas, botones, cajas de diálogo y de texto, botones de opción y de selección, barras de desplazamiento, gráficos, menús, etc. En esta ocasión sólo fue necesaria la programación en caso de producirse eventos, es decir, cuando uno de estos programas ha arrancado lo único que hace es quedarse a la espera de las acciones del usuario. 1.2.3.1 El Entorno De Programación Visual Basic 6.0 Cuando se arranca Visual Basic aparece en la pantalla una configuración idéntica a la apreciada en la siguiente figura (Fig.1-10). En ella se distinguen los siguientes elementos: Fig.1-10 22 1. En la parte superior de la pantalla se identifica la barra de menús o títulos. 2. En la posición a la izquierda se presenta una caja de herramientas (toolbox) con diferentes controles disponibles. 3. El encargado de interactuar con el usuario y la entrega de los diferentes eventos es el Formulario (form) en gris, en que se pueden ir situando los controles (en el centro). Está dotado de una rejilla (grid) para facilitar la alineación de los controles. 4. La ventana de proyecto se encuentra ubicada en la parte superior derecha, donde se aprecian los formularios y otros módulos de programas que forman parte de la aplicación. Ejemplo: definición de las variables. 5. La ventana de Propiedades que se encuentra ubicada al costado derecho, permite observar las propiedades por defecto que posee el objeto seleccionado en la barra de herramientas, las cuales pueden ser modificadas a gusto del usuario. Para el monitoreo del sistema de alarma, se utilizaron diferentes controles, tanto para la visualización (TexBox), como para el control de velocidad o puerto COM a utilizar. A continuación, se detalla una lista con las propiedades más habituales utilizadas: BackColor: Establece el color de fondo de un objeto. Caption: Establece el texto que aparece dentro o junto al objeto. Tiene el papel de un título. Font: Establece las características del tipo de letra del objeto. ForeColor: Establece el color del texto y/o gráficos de un objeto. Name: Se refiere al nombre que reciben todos los objetos incluidos en un formulario para poder referirse a él a la hora de programar y la forma en la cual el debe actuar. 23 1.2.3.2 Controles Utilizados A- Botón de comando (Command Button) Este tipo de control se caracteriza por reaccionar mediante el evento click y la utilización imprescindible de la propiedad Caption, ya que ella permite al usuario identificar la función que cumple. Las otras propiedades que en si son menos importantes, se refieren a la posición en que se encuentra (Left yTop) y la apariencia que ella posee (Height, Width y tipo de letra), sin embargo, no hay que confundir lo que se refiere a nombre del objeto (Caption), con el nombre que permite identificarlo en la programación (Name). B- Cajas de texto (Text Box) Otra de las herramientas utilizadas para este proyecto son las cajas de Texto, ya que permiten visualizar el estado de los diferentes sensores. En este tipo de control las propiedades mas utilizadas son: Caption (propiedad que mencioné anteriormente y que permite indicar el estado Inicial de la alarma), Name (se refiere al nombre que identifica el programa para realizar cambios; en mi caso, en caso de producirse un evento Etiq_.Tex) y, por ultimo, la propiedad Blackcolor para hacer mas visible al usuario cualquier anormalidad (identifica el color del texto al producirse algún evento). 24 Fig.1-11 C- Etiquetas (Labels) Esta herramienta permite identificar el puerto y velocidad en que se esta ejecutando el programa; todo esto mediante las propiedades Name y Caption. D- Cajas combinadas (ComboBox) La herramienta ComboBox tiene muchas cosas en común con una lista, sin embargo, la principal diferencia que presenta es la propiedad llamada Style, que puede adoptar tres valores (0,1 ó 2) que corresponden a tres distintas formas de presentar una lista, las que se describen a continuación: Fig.1-12 25 1. Style=0 ó Style=vbComboDropDown (Dropdown Combo): Éste es el valor escogido (Style=0) para el programa, ya que permite que sólo se muestre el registro seleccionado, que es editable por el usuario, permaneciendo el resto oculto hasta que el usuario despliega la lista completa clicando sobre el botón-flecha. 2. Style=1 ó Style=vbComboSimple (Simple Combo). En este caso, el registro seleccionado también es editable, sin embargo, muestra una lista no desplegable. 3. Style=2 ó Style=vbComboDropDownList (DropDown List). En este último caso el registro seleccionado no es editable y la lista es desplegable. E- Control Timer Este control permite saber si se produce alguna anormalidad o corte del enlace, producto que se activa al no recibir información en un tiempo determinado. 1.2.3.3 El Control Personalizado Microsoft Comm Este control utilizado para el monitoreo de la alarma, posee la característica de establecer una comunicación con el puerto serie de nuestro computador, mediante la utilización de una aplicación en Visual Basic. Normalmente el control MSCOMM no se encuentra disponible en la caja de herramientas, por lo tanto, es necesario introducirlo mediante el menú Proyecto, Componentes, como se aprecia en la siguiente figura (Fig.1-13): 26 Fig.1-13 A- Propiedades del control MSCOMM Existen propiedades las cuales se pueden establecer durante el diseño o la ejecución del programa. Estas se detallan a continuación: CommPort Esta propiedad indica el numero del puerto serie utilizado y admite los valores que van de 1 a 255, sin embargo, un computador presenta normalmente dos puertos series, si se indica alguno inexistente, dará un error, por lo tanto el programa por defecto admite hasta el puerto Nº4 (COM 4). Settings En esta propiedad es posible indicar: la velocidad de transmisión o recepción, si tiene paridad, número de bits de información y cuantos bits de parada se utilizaran. MSComm1.Settings = "9600, N, 8,1" Velocidad Paridad Bits de información Bits parada 27 Velocidad: Los valores posibles para establecer la velocidad se establecen en Baudios y comprenden las siguientes velocidades (La alarma es monitoreada a una velocidad de 9600 Baudios): 50 100 110 300 600 1200 2400 4800 9600 14400 19200 28800 Paridad Los valores posibles para paridad son: N - No envía bit de paridad ni hace comprobación de paridad en la recepción. O - Envía y comprueba paridad, con el criterio de paridad IMPAR. E - Envía y comprueba paridad, con criterio de paridad PAR. Bit de Información: Los valores para el parámetro bits de Información se escogen entre los siguientes: 7 - Se envían / reciben 7 bits por trama de información. 8 - Se envían / reciben 8 bits por trama de información 5 - Se envían / reciben 5 bits por trama de información. Bit de Parada: Los valores para el parámetro bits de parada pueden ser: 1 - Se envía un bit de parada 2 - Se envían 2 bits de parada 28 B- Propiedades propias del tiempo de ejecución PortOpen Al abrir el puerto serie de nuestro ordenador, es necesario establecer la sentencia True y False al cerrarlo. Por ejemplo si tenemos un MSComm con el nombre (Name) MSComm1, para abrirlo se ejecuta la siguiente sentencia: MSComm1.PortOpen = True y al cerrarlo se ejecuta la sentencia MSComm1.PortOpen = False Output Esta propiedad permite enviar un carácter al Buffer de salida, por lo tanto es necesario asignarle un signo igual (=) entre Output y él o los caracteres que se desean enviar. Por lo tanto, la sentencia a ejecutar es la siguiente: MSComm1.Output = Alarma Input Esta propiedad permite leer el Buffer de recepción, donde el número de caracteres leídos dependerá del valor de la propiedad InputLen; sin embargo, en éste caso se le asigna por defecto 0, es decir, se lee completo el buffer. 29 1.3 INTERFASE DE COMUNICACIÓN La comunicación que se realizo entre el MODEM y el microcontrolador es una transmisión serie asíncrona, es decir, cada dispositivo (microcontrolador y MODEM), trabajan con su propio reloj. Antes de realizar la transmisión, se configuran los dispositivos a una misma velocidad de transmisión y recepción para que no se produzcan errores (en este caso 9600 baudios), donde los datos serie se encuentran encapsulados de la siguiente forma: Lo primero que se envía es el bit START, el cual da a conocer que se desea establecer una transmisión. Luego que se esta preparado para la recepción se envía el Dato (8 bits) y, por ultimo, se envía el bit de Parada o Stop para terminar la comunicación. En esta figura se puede apreciar un ejemplo de la transmisión del dato binario 10011010, donde la línea en reposo está en un nivel alto: Fig.1-14 30 1.3.1 MAX 232 (TTL a RS-232). Este circuito integrado permite adaptar los niveles RS-232 y TTL, permitiendo conectar el MODEM u computador con el microcontrolador. Sólo es necesario este integrado y 4 condensadores electrolíticos de 22 micro-faradios. El esquema es el siguiente (Fig.115): Fig.1-15 1.3.2 Puerto Serie (Conector DB9) En un MODEM o computador, el puerto serie está normalmente asociada a un conector DB9 (Fig.1-16), el cual posee 9 pines. Por lo tanto, ya que nuestro sistema de alarma trabaja mediante puerto serie, es necesario conocer en que posición se ubica los pines de la transmisión, recepción y tierra, como se observa en la siguiente figura: Fig.1-16 31 La información asociada a cada uno de los pines es la siguiente: Pin Señal Pin Señal 1 DCD (Data Carrier Detect) 6 DSR (Data Sheet Ready) 2 RX 7 RTS (Request To Send) 3 TX 8 CTS (Clear To Send) 4 DTR (Data Terminal Ready) 9 RI (Ring Indicator) 5 GND Tabla 1-1 1.4 LCD Para la visualización del estado de la alarma (activado o desactivado), ingreso de clave, cambio de clave, error, etc... se utilizó una pantalla LCD o cristal líquido, que es un dispositivo µControlado que posee la característica de representar dos filas de 16 caracteres, donde cada carácter dispone de una matriz de 5x7 puntos. Este dispositivo electrónico es controlado por un microcontrolador que regula todos los parámetros de presentación. El principio de operación para establecer la comunicación con el LCD se puede lograr de dos un bus maneras: con de 4 bits o, en este caso, con un bus de 8 bits. Como se aprecia en la siguiente figura (Fig.1-17): 32 Fig.1-17 Es posible apreciar que el control del contraste se realiza al dividir la alimentación de 5Volt con un potenciómetro de 10 K ohm. Además de esto, el LCD cuenta con tres pines de control y ocho pines de datos, como se observa en la siguiente tabla de descripción: 1.4.1 Descripción de pines PIN Nº SIMBOLO DESCRIPCION 1 Vss Tierra de alimentación GND 2 Vdd Alimentación de +5V CC 3 Vo Contraste del cristal liquido. ( 0 a +5V ) Selección del registro de control/registro de datos: 4 RS RS=0 Selección registro de control RS=1 Selección registro de datos Señal de lectura/escritura: 5 R/W R/W=0 Escritura (Write) R/W=1 Lectura (Read) Habilitación del modulo: 6 E E=0 Módulo desconectado E=1 Módulo conectado 7-14 D0-D7 Bus de datos bidireccional. Tabla 1-2 33 El LCD cuenta además con una librería básica de rutinas para su control, en donde los datos o comandos a enviar al LCD se introducen en el acumulador W antes de hacer la llamada a cualquiera de las rutinas siguientes. Genera un pulso de 1µS por PORTB2, patita 6 (Enable) del LCD. Si se usa una velocidad de micro diferente de 4MHz, LCD_E habrá que ajustar este tiempo. Chequea si el LCD esta ocupado (BUSY) LCD_BUSY y retorna de la rutina cuando ya no lo esté. Pone al LCD en modo de recibir comandos , espera a que no este ocupado LCD_REG y va a LCD_E. Pone el LCD en modo datos y manda el byte presente en W que será mostrado en LCD_DATOS pantalla. Inicialización del modulo LCD según los tiempo marcados por el fabricante. Bus de 8 bits, 2 líneas de visualización y LCD_INI caracteres de 5x7 puntos. Configura los puertos del PIC para ser LCD_PORT usados con el LCD. Tabla 1-3 34 1.5 FIBRA ÓPTICA Actualmente, el aeropuerto Comodoro Arturo Merino Benítez utiliza una gran gama de frecuencias asociadas a diversas unidades, por lo tanto, este medio de comunicación es susceptible a interferencias. Por motivos de seguridad, la fibra óptica se convierte rápidamente en el método preferido para la transmisión digital. Sus ventajas son su gran ancho de banda, no son susceptibles a interferencias ni debilitamiento, y las comunicaciones se pueden realizar con completa seguridad. El cable de fibra óptica también suele ser un apropiado sustituto a los multipares debido a su mayor capacidad y menor atenuación. El diámetro también es una característica importante ya que cada vez existe mayor congestión en las vías de comunicación y, continuamente, éstas deben ser aumentadas para contener más cables portadores, tanto para comunicaciones como alimentación. 1.5.1 Análisis de un sistema de fibra óptica La utilidad que presenta este medio de transmisión en el Aeropuerto, son las siguientes: • Menores pérdidas de potencia: Esta característica permite abarcar mayores distancias, sin la necesidad de utilizar repetidores. • Inmunidad al ruido: Producto que la fibra óptica es totalmente dieléctrica, es inmune a las interferencias de radiofrecuencia y cables de alta tensión, asimismo no genera interferencias en otros equipos de comunicación. • Dimensiones reducidas y bajo peso: La fibra óptica presenta una gran flexibilidad, por lo tanto, es sencilla su instalación, si se compara con los cables de alta tensión o multipares. • Seguridad: La información entregada mediante un enlace de fibra óptica, es en tiempo real y sin mayores interferencias. Característica importante dentro de un aeropuerto. 35 • Aislamiento eléctrico: Al ser dieléctrica, la fibra asegura el aislamiento eléctrico entre emisor y receptor, evitando así las puestas a tierra. • Gran ancho de banda: Producto que el proyecto consiste en la visualización de un sistema de alarma, la transmisión de datos no es alta, sin embargo, su utilización en al aeropuerto se extiende al monitoreo y control de equipos. • Rápida reducción de costos y mejoramiento de la calidad: Dentro de la Dirección General de Aeronáutica Civil (DGAC), el Departamento de Electrónica es el encargado del mantenimiento y resguardo de los equipos, por lo tanto, es de vital importancia el monitoreo y control a distancia de todos los sistemas de comunicaciones. 1.5.2 Componentes de la Fibra Óptica Los componentes que conforman la fibra óptica son los siguientes: • El Núcleo: El núcleo esta formado por un filamento de plástico o cristal (oxido de silicio y germanio), con un alto índice de refracción. • La Funda Óptica: Generalmente de los mismos materiales que el núcleo, pero con aditivos que confinan las ondas ópticas en el núcleo. • El revestimiento de protección: Por lo general está fabricado en plástico y asegura la protección mecánica de la fibra óptica. 36 Fig.1- 18 1.5.3 Principios Básicos En una fibra óptica, la señal se propaga a la velocidad de la luz en el vacío; sin embargo, cuando los rayos luminosos se transmiten de un medio a otro, su velocidad cambia, sufriendo además efectos de reflexión (los rayos rebotan al cambiar de medio) y de refracción (la luz, producto que además de cambiar el modulo de su velocidad, cambia de dirección de propagación). Dependiendo de la velocidad con que se propague la luz en un medio o material, se le asigna un Índice de Refracción "n", un número deducido al dividir la velocidad de la luz en el vacío y la velocidad que experimentara en dicho medio (n = c/v). Los efectos de reflexión y refracción que se dan en la frontera entre dos medios, dependen de sus Índices de Refracción, como se aprecia en la siguiente figura (Fig.1-19). 37 Fig.1-19 En la figura previa es posible observar el ángulo de incidencia y, formado por el rayo incidente y la normal, y el ángulo de refracción k’, formado por el rayo refractado y la normal. Mediante estos datos es posible entender las siguientes leyes de refracción: 1. El rayo incidente, el rayo refractado y la normal están en un mismo plano. 2. Se cumple la ley de Snell: Por lo tanto: De esta manera, la ley nos dice que si el haz de luz incide con un ángulo mayor que un cierto ángulo límite, el haz siempre se reflejará en la superficie de separación entre ambos medios. De esta forma se puede guiar la luz de forma controlada tal y como se ve en la siguiente figura (Fig.1-20): 38 Fig.1-20 1.5.3.1 Índice de refracción Cuando una onda, o en este caso un haz de luz, se propaga por un medio e ingresa a otro distinto, parte de este haz se refleja mientras otra parte sufre una refracción (cambia el haz de dirección). Por lo tanto, para estos casos se utiliza el llamado índice de refracción del material, que nos permite calcular la diferencia entre el ángulo de incidencia y el de refracción del haz. Material Índice de Refracción Vació 1 Aire 10.003 Agua 1.33 Cuarzo 1.46 Sal Rocosas 1.54 Diamante 2.42 Tabla 1-4 1.5.3.2 Apertura Numérica Se denomina apertura numérica al máximo ángulo con que un haz de luz puede ingresar a la fibra óptica para que se produzca una reflexión total interna. Esta se puede calcular utilizando los índices de refracción o con el ángulo de aceptación de la fibra. 39 1.5.3.3 Modo De Propagación El modo de propagación para una fibra óptica depende del número de trayectos que posee el haz, de luz; si son múltiples caminos se le denomina fibra óptica multimodo y, en caso de ser sólo un trayecto, se le denomina fibra óptica monomodo, tal como se aprecia en la siguiente figura (Fig.1-21): Fig.1-21 1.5.3.4 Perfil Del Índice Perfil de índice es la representación gráfica correspondiente al eje horizontal del índice de refracción del núcleo, mientras que el eje vertical representa el radio de dicha fibra. Fig.1-22 40 Como se aprecia en la figura anterior, existen básicamente dos tipos de índices, los cuales se denominan escalonado y gradual. Se designa fibra óptica con índice escalonado aquella fibra cuyo núcleo tiene un índice de refracción uniforme y de menor magnitud que el núcleo; en cambio, en una fibra óptica con índice gradual, la magnitud del índice del núcleo es variable, descendiendo gradualmente hasta llegar a igual índice del revestimiento del núcleo. 1.5.4 Tipos de Fibra Óptica La fibra óptica se divide esencialmente en tres tipos de configuraciones, las cuales se denominan: monomodo de índice escalonado, multimodo de índice escalonado y, por ultimo, multimodo de índice gradual. 1.5.4.1 Fibra Monomodo: La instalación de la alarma, será realizada mediante la utilización de fibra óptica monomodo, producto que normalmente el monitoreo de los equipos utiliza este de medio de transmisión. Esta fibra ofrece mayor capacidad de transporte de información, y tiene una banda de paso del orden de los 100 GHz/km.. En la siguiente figura (Fig.123), se aprecia que sólo pueden ser transmitidos los rayos que tienen una trayectoria, la cual sigue el eje de la fibra; por tal razón, se le denomina monomodo (modo de propagación único). Los elevados flujos que se pueden alcanzar constituyen la principal ventaja de las fibras monomodo, ya que sus pequeñas dimensiones implican un manejo delicado y dificultades para su conexión. Fig.1-23 41 1.5.4.2 Fibra Multimodo de Índice Gradual: Las fibras multimodo de índice gradual tienen una banda de paso que llega hasta los 500 MHz/km. Su principio se basa en que el índice de refracción en el interior del núcleo no es único y decrece cuando se desplaza del núcleo hacia la cubierta. Los rayos luminosos se encuentran enfocados hacia el eje de la fibra, como se puede ver en el figura 1-24. Estas fibras permiten reducir la dispersión entre los diferentes modos de propagación a través del núcleo de la fibra. Fig.1-24 1.5.4.3 Fibra Multimodo de índice escalonado: Las fibras multimodo de índice escalonado están fabricadas a partir de vidrio o plástico. Tienen una banda de paso que llega hasta los 40 MHz /km. En estas fibras, el núcleo está constituido por un material uniforme cuyo índice de refracción es claramente superior al de la cubierta que lo rodea. El paso desde el núcleo hasta la cubierta conlleva por tanto una enorme variación del índice de refracción. De ahí proviene su nombre de índice escalonado. Fig.1-25 42 1.5.5 Elementos Básicos De Un Sistema De Fibra Óptica Para establecer una comunicación mediante fibra óptica es necesario contar con tres elementos primarios, los cuales son: • Transmisor: Unidad que debe generar los rayos de luz, que puede ser conectada y desconectada muy rápidamente y/o modulada por algún tipo de señales que representen información. • Fibra óptica: Medio de transmisión. • Receptor: Encargado de reconvertir esos rayos de luz en voltajes y corrientes analógicas o digitales, de forma que la estación del usuario pueda separar y utilizar las señales de información que se habían transmitido. 1.5.6 Convertidor De Fibra Óptica A RS-232/422/485 El convertidor de serie utilizado es el TCF-142, el cual está equipado con un circuito de interfaz múltiple que pueda dirigir RS-232, o interfaces RS-422/485, mediante fibra monomodo o multimodo. Los convertidores TCF-142 se utilizan para extender la distancia de transmisión serial hasta 2 kilómetros (fibra multimodo TCF-142-M) o hasta 20 kilómetros (TCF-142-S fibra del monomodo). Como observación, los interfaces RS232 y RS-422/485 no pueden ser usados al mismo tiempo. Fig.1-26 43 Las características técnicas son las siguientes: • Alimentación 12 a 48 VCC; con protección contra inversión de la polaridad. • Terminación seleccionable mediante DIP Switch externo (para interfase RS422/485) • Amplía la distancia de la transmisión RS-232/422/485 hasta: 20 kilómetros con fibra monomodo y 2 kilómetros con fibra multimodo. • Tamaño compacto. • Disminuya las interferencias de la señal. • Proteja contra la corrosión electrónica y la degradación química. • Velocidad máxima hasta 230.4 Kbps. 1.5.6.1 Detección de Velocidad de transmisión en baudios Automática. El convertidor (TCF-142) además de trabajar con distintas interfase, incorpora un método para descubrir automáticamente la velocidad de transmisión en baudios de señal sucesiva por el hardware, en este caso, 9600 baudios. Esto es un rasgo sumamente conveniente para el usuario, porque incluso, si la velocidad de transmisión en baudios de un dispositivo es cambiada, la señal todavía será transmitida por el RS232 o RS-422/485 al convertidor de fibra sin ningún problema. Fig.1-27 1.5.6.2 Ajuste de los interruptores SW1, SW2 y SW3. Existen tres interruptores (SW1, SW2 y SW3) en la tapa del convertidor de fibra TCF142). Los interruptores SW1 y SW2 se utilizan para fijar la interfase en serie; el SW3 es 44 utilizado para permitir o inhabilitar la terminación de una resistencia de 120 ohm. Para efectuar dicho ajuste es necesario referirse a la figura 1-28 y las siguientes tablas 1-5 y 1-6: Fig.1-28 Conexión Serial SW1 RS-232 ON RS-422 OFF RS-485 4- wire OFF RS-485 2- wire OFF Tabla 1-5 SW2 OFF OFF OFF ON Incorporando terminación de 120 ohm Habilitar Deshabilitar Tabla 1-6 SW3 ON OFF 1.6 SENSORES En el presente proyecto se utilizaron tres tipos de sensores o detectores (detector de humo, sensor magnético o continuidad y, por ultimo, un detector de movimiento) los cuales se describen a continuación: 1.6.1 Detector de humo El detector de humo utilizado es iónico, producto que es más sensible a este tipo de sucesos según se aprecia en la siguiente figura (Fig.1-29): 45 Fig.1-29 Los detectores Iónicos de humo se suelen clasificar en dos grupos: • Partículas Alfa • Partículas Beta Los sensores iónicos de humo detectan partículas producidas por la combustión de un incendio, en la cual experimentan una disminución del flujo de corriente eléctrica formada por moléculas de O2 y N2 ionizadas por una fuente radiactiva entre dos electrodos. Estos sensores pueden detectar partículas visibles e invisibles generadas por la combustión, ya que su rango de operación alcanza partículas entre 1 y 0,01 micras. Las partículas visibles tienen un tamaño de 4 a 5 micras y tienden a caer por gravedad excepto en el caso de que haya una fuerte corriente turbulenta en la columna que forma la llama. Según la fuente radiactiva se dividen en detectores iónicos de partículas alfa y de partículas beta. Fig.1-30 46 La marca y el modelo del detector de humo utilizado es SYSTEM SESNSOR 1424; éste sensor tiene una alimentación nominal de 24 volt DC. con una corriente máxima de 40mA. Debido a que la alarma funciona con una tensión de 12 volt DC., es necesario contar con un transformador suplementario. Los terminales de conexión para su alimentación y monitoreo son los siguientes: Fig.1-31 1.6.2 Detector de Movimiento (PIR) El sensor PIR “Passive Infra Red”, es un dispositivo piroélectrico, que mide cambios en los niveles de radiación infrarroja emitida por objetos a una distancia máxima de 6 metros aproximadamente. Como respuesta al movimiento, el sensor cambia el nivel lógico de un “pin”, por lo cual su uso es extremadamente simple. Adicionalmente es un sensor de bajo costo y reducido tamaño, muy utilizado en sistemas de alarmas, iluminación controlada por movimiento y aplicaciones de robótica. Este tipo de sensor cuenta con tres terminales de los cuales dos se utilizan para la alimentación y, el tercero, para la detección de movimiento, como se aprecia en la figura (Fig.1-32): 47 Fig.1-32 Estos tipos de dispositivos son fabricados con un material cristalino que genera una carga eléctrica cuando se expone a la radiación infrarroja; de esta manera, detecta las variaciones de radiación provocando cambios de tensión, los cuales son amplificados. Además cuenta con filtros especiales denominado lentes de Fresnel que enfocan las señales infrarrojas sobre el elemento sensor. Cuando estas señales varían bruscamente, el amplificador activa una señal durante varios segundos, permitiendo poder ser detectadas por el microcontrolador. Sin embargo, el PIR requiere un tiempo entre 10 a 60 segundos para operar en forma correcta, ya que es necesario que se adapte a las condiciones del medio ambiente donde es instalado. La marca y el modelo del sensor movimiento utilizado es ORION EL-55; éste sensor tiene una alimentación que varia entre los 9 y 16 volt DC. con una corriente máxima de 17mA. Debido a que nuestro sistema de alarma funciona con una tensión de 12 volt DC. éste proveerá la alimentación respectiva. El sensor de movimiento posee un contador de pulsos que se encarga de controlar el número de pulsos que deberá detectarse antes que el detector transmita una señal de alarma. Para efectuar dicho ajuste es necesario referirse a la siguiente tabla (Tabla 1-7): Posición del Jumper Cuenta de Pulso Retirado 1 Pines 2 y 3 2 Pines 1y 2 3 Tabla 1-7 48 Los terminales de conexión para su alimentación y monitoreo son los siguientes: Fig.1-33 1.6.3 Sensor Magnético o Continuidad. Este sensor trabaja mediante dos imanes (uno al lado del otro), dado que es posible medir su continuidad, al igual que los sensores ya descritos. Circuitalmente uno de sus pines se conectará a tierra y el otro al microcontrolador; de esta manera, podrá ser detectado cuando el circuito se encuentre abierto. Fig.1-34 1.7 Microprocesadores (PIC) Los PIC son una familia de microcontroladores tipo RISC fabricados por Microchip Technology Inc. y derivados del PIC1650, originalmente desarrollado por la división de microelectrónica de General Instruments. El nombre actual no es un acrónimo, en realidad, el nombre completo es PICmicro, aunque generalmente se utiliza como Controlador de Interfaz Periférico. 49 El microcontrolador está diseñado para que en su memoria de programa se almacenen todas las instrucciones del programa de control. Como éste siempre es el mismo, debe estar grabado de forma permanente. Existen algunos tipos de memoria adecuados para soportar estas funciones, de las cuales se citan las siguientes: - ROM: se graba mediante el uso de máscaras. Sólo es recomendable para series muy grandes debido a su elevado costo. - EPROM: se graba eléctricamente mediante la utilización de un cargador de microcontroladores y un ordenador (en este caso se utilizó el cargador PG3B). Disponen de una ventana en la parte superior para someterla a luz ultravioleta lo que permite su borrado. - OTP: su proceso de grabación es similar al anterior, pero éstas no pueden borrarse. Su bajo costo las hace idóneas para productos finales. - EEPROM: también se graba eléctricamente, pero su borrado es mucho más sencillo, ya que también es eléctrico. No se pueden conseguir grandes capacidades y su tiempo de escritura y su consumo es elevado. - FLASH: se trata de una memoria no volátil, de bajo consumo, que se puede escribir y borrar en circuito al igual que las EEPROM, pero que suelen disponer de mayor capacidad que estas últimas. Son recomendables para aplicaciones en las que será necesario modificar el programa a lo largo de la vida del producto. Por sus mejores prestaciones está sustituyendo a la memoria EEPROM para contener instrucciones. De esta forma, Microchip comercializa dos microcontroladores prácticamente iguales que sólo se diferencian en que la memoria de programa de uno de ellos es tipo EEPROM y la del otro tipo Flash. 1.7.1 Instrucciones A continuación sé observará algunas de las instrucciones utilizadas para la programación del PIC. Las restantes se irán viendo en entregas posteriores según vaya siendo necesario su manejo: 50 Manejo de registros - clrf f : limpia el registro f, es decir, pone todos sus bits a 0. - Movlw 1: Carga un 1 en el acumulador W. - Addwf f, d: Suma W y el registro f. Si d = 0 el destino es W y si d = 1, el destino es el registro fuente f. - Subwf cuenta: Resta el acumulador (W) con el registro f (cuenta) y el resultado lo guarda en el acumulador. Manejo de bits - bcf f,b: pone a 0 el bit b del registro f. - bsf f,b: pone a 1 el bit b del registro f. Brinco - Btfsc f, b: explora el bit b del registro f y salta si vale 0 - Btfss f, b: explora el bit b del registro f y salta si vale 1 Control y Subrutinas - Goto: sitúa el cursor del programa (PCL), en una etiqueta sin posibilidad de volver. - Call y Return : Sitúa el cursor del programa en una etiqueta. Una vez terminada la subrrutina regresa a la siguiente instrucción donde empezó, mediante el comando return. 51 CAPITULO II: “IMPLEMENTACIÓN” 2.1 Esquema General del Sistema. La implementación es realizada según la siguiente figura (Fig.2-1): Fig.2-1 52 En la figura anterior se observa que el microcontrolador (PIC) se encarga se encarga del control del: teclado, pantalla LCD, Buzzer, estado de los sensores u detectores y transmisión de los datos. La información es enviada en forma continua al convertidor de fibra o line driver (RS-232 a fibra óptica) mediante el C.I. MAX-232. Los datos son recibidos en la torre de control por un line driver, traspasando la información a una computadora. 2.2 TECLADO Producto que se utilizo el PIC 18F452, el cual contiene 33 líneas de E/S, no será necesaria la optimización del teclado, producto que para la configuración de dicho programa se utilizara el puerto: A, B y C. En la siguiente figura se puede apreciar que el microcontrolador ocupa los pines: - RC1 : Numero 1 - RC0 : Numero 2 - RA5 : Numero 3 - RD0 : Numero 4 - RC3 : Numero 5 - RC2 : Numero 6 - RD3 : Numero 7 - RD2 : Numero 8 - RD1 : Numero 9 - RC5 : Numero 0 - RC4 : Cambio de Clave - RD4 : Enter Fig.2-2 Como se puede observar, cada pulsador se conectara a un pin determinado, permitiendo entregar un cero lógico (0 volt) mientras él no sea presionado, y un uno 53 lógico (5 volt), en caso contrario. Además, se colocará en cada pulsador una resistencia de 1,2 K Ohm, para no producir un cortocircuito en la fuente de alimentación. El programa en el PIC reconocerá cada pulsador y dicho dígito lo guardara en una variable, para luego compararla con la clave que trae por defecto este sistema de alarma. Las variables que se utilizaron son las siguientes: • Dígito: variable que permite guardar la tecla presionada, para luego ser comparada con la variable Var. • Num1, Num2, Num3 y Num4: Cada uno de estos registros guarda la clave correcta. • Var: Se encarga de copiar la clave correcta (Num1 o Num2 o Num3 o Num4) a medida que se ingresen los dígitos. • Cuenta: Variable que permite llevar un registro del número de dígitos ingresados. 54 2.2.1 Diagrama de Flujo Fig.2-3 Como es posible observar, la primera labor que se realiza es la declaración de las distintas variables. Luego, se procede a preguntar que tecla o numero se pulsa indefinidamente; sin embargo, cada vez que vuelve al inicio, transmite en que estado se 55 encuentra la alarma (activada o desactivada). Después de ser presionada la primera tecla, es copiada en la variable dígito y se incrementa la variable cuenta en uno, producto que de ésta manera es posible identificar la cantidad de dígitos ingresados. Las variables Num1, Num2, Num3 y Num4 van a ser copiadas en la variable Var a medida que la variable cuenta se incremente, para luego ser comparado con el digito ingresado. Una vez comparado, nuestro diagrama de flujo se dividirá en dos: Subrutina de Malo (en ella se espera que ingrese cuatro dígitos para volver al comienzo), y Termino (en ella se pregunta si fueron ingresado los cuatro dígitos). Una vez ingresada la clave, pregunta que función quiere realizar, cambio de clave o enter. 2.2.2 Diseño (Teclado): Las siguientes figuras corresponden al circuito impreso para el diseño de las pistas (Fig.2-4), y la parte superior de dicho teclado (Fig.2-5). Fig.2-4 56 Fig.2-5 2.3 PIC 18F452 El microcontrolador 18F452 posee dos pines para su alimentación (VDD), y dos a tierra (VSS); otras dos patitas se utilizan para el cristal de cuarzo (OSC1 y OSC2) que regula la frecuencia de trabajo, y una más para provocar el Reset (MCLR); las restantes patitas de un microcontrolador sirven para soportar su comunicación con los periféricos externos que controla. Las características principales de este micrcontrolador son las siguientes: • Memoria FLASH de 32K. • Memoria de datos EEPROM de 256 bytes. • Memoria RAM de 1.5K. • Treinta y tres líneas de E/S con control individual. • Oscilador máximo a 40Mhz • Compatibilidad con la Norma RS-232 y RS-485 • Set de 75 Instrucciones. • Ocho pines de entrada A/D. 57 • I/O Puertas: A,B,C,D,E. • Cuatro Timer. 2.3.1 Organización de la Memoria. Memoria Interna (RAM). La memoria interna de datos es también llamada archivo de registros (register file). Cada registro de la memoria tiene una dirección de 12bits; es decir, obtenemos una capacidad de 4096 bytes. El mapa de memoria se divide en 16 bancos de 256 bytes cada uno. La memoria de datos esta dividida en dos áreas. Una de ellas corresponde al banco de Registro de Propósito General (GPR), y la otra dedicada a los Registros de Funciones Especiales (SFR), que controla los recursos y periféricos del microcontrolador. Las dos áreas están repartidas en Bancos, que se seleccionan mediante ciertos bits destinados a ese propósito, que se hallan en el Registro de Selección de Banco (BSR). Cuando se realiza un acceso a una posición situada fuera de los bancos se ignoran los bits del BSR. El Registro de Selección del banco se emplea en conmutación de bancos en el área de la memoria de datos, y los 4 bits bajos del BSR determinan a que banco se accederá. (Fig. 2-6) 2.3.2 Memoria de Programa El contador de Programa tiene un tamaño de 21 bits y proporciona la dirección de la instrucción a la que se accede. Con 21 bits se puede direccionar hasta 2 Mbytes de memoria de programa. La memoria de programa la utilizaremos en el proyecto para el código. 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. 58 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. Fig.2-6 En los microcontroladores tradicionales todas las operaciones se realizan sobre el acumulador. La salida del acumulador está conectada a una de las entradas de la 59 Unidad Aritmética y Lógica (ALU), y por lo tanto, éste es siempre uno de los dos modos de operación para cualquier instrucción. Por convención, las instrucciones de simple operando (borrar, incrementar, decrementar, complementar), actúan sobre el acumulador. La salida de la ALU va solamente a la entrada del acumulador; por lo tanto, el resultado de cualquier operación siempre quedara en este registro. Para operar sobre un dato de memoria, luego de realizar la operación, siempre hay que mover el acumulador a la memoria con una instrucción adicional. En los microcontroladores PIC, la salida de la ALU va al registro W y también a la memoria de datos; por lo tanto, el resultado puede guardarse en cualquiera de los dos destinos. En las instrucciones de doble operando, uno de los dos datos siempre debe estar en el registro W, como ocurría en el modelo tradicional con el acumulador. En las instrucciones de simple operando el dato, en este caso, se toma de la memoria (también por convención). La gran ventaja de esta arquitectura es que permite un gran ahorro de instrucciones ya que el resultado de cualquier instrucción que opere con la memoria, ya sea de simple o doble operando, puede dejarse en la misma posición de memoria o en el registro W, según se seleccione con un bit de la misma instrucción. 60 Fig.2-7 2.3.2.1 Contador de programa Este registro, normalmente denominado PC, es totalmente equivalente al de todos los microprocesadores y contiene la dirección de la próxima instrucción a ejecutar. Se incrementa automáticamente al ejecutar cada instrucción, de manera que la secuencia natural de ejecución del programa es lineal, una instrucción después de la otra. Algunas instrucciones que llamaremos de control, cambian el contenido del PC alterando la secuencia lineal de ejecución. Dentro de estas instrucciones se encuentran el GOTO y el CALL que permiten cargar en forma directa un valor constante en el PC, haciendo 61 que el programa salte a cualquier posición de la memoria. Otras instrucciones de control son los SKIP o “saltos” condicionales, que producen un incremento adicional del PC si se cumple una condición específica, haciendo que el programa saltee, sin ejecutar, la instrucción siguiente. El PC es un registro de 21bits en los 18F452, lo que permite direccionar 2Mbytes de memoria de programa. 2.3.3 Encapsulado El PIC18F452 está disponible en varios formatos, en este caso se utilizo el encapsulado DIP. Este es el encapsulado mas empleado en montajes por taladro pasante en placa. Este puede ser cerámico (marrón) o de plástico (negro). Un dato importante en todos los componentes es la distancia entre patillas que poseen, en los circuitos es de vital importancia este dato, así en este tipo el estándar se establece en 2,54 milimetros. Fig.2-8 62 2.3.4 Oscilador Todos los microcontroladores disponen de un circuito oscilador que genera una onda cuadrada de alta frecuencia, que configura los impulsos de reloj usados en la sincronización de todas las operaciones del sistema. Generalmente, el circuito de reloj está incorporado en el microcontrolador y sólo se necesitan unos pocos componentes exteriores para seleccionar y estabilizar la frecuencia de trabajo. Dichos componentes suelen consistir en un cristal de cuarzo junto a elementos pasivos, o bien un resonador cerámico o una red R-C. Aumentar la frecuencia de reloj supone disminuir el tiempo en que se ejecutan las instrucciones, pero lleva aparejado un incremento del consumo de energía. Producto que se dispone de cristales de cuarzo, se decidió utilizar uno de 10Mhz, modelo XT. El siguiente circuito muestra como se conecta dicho cristal a los pines correspondientes del PIC (OSC1 y OSC2) para establecer la oscilación: Fig.2-9 El fabricante nos entrega los valores adecuados para los condensadores C1 y C2 (22pF). Cuanto mayor sean los condensadores, más estable será la señal; sin embargo, el tiempo de arranque será mayor. 2.3.5 Modulo de Transmisión USART Para que el microcontrolador efectué las tareas de transmisión, es necesario entender este modulo de transmisión y recepción asíncrono/síncrono universal. De esta manera el USART puede ser configurado de dos maneras: Full-Duplex o Half Duplex según sea el caso y el tipo de periférico a utilizar. Para este proyecto se utilizó una transmisión asíncrona la cual se explicara a continuación. 63 2.3.5.1 Modo Asíncrono De La USART En este modo, la USART usa el formato de no retorno a cero (un bit de START, 8 o 9 bits de datos y un bit de STOP). El USART transmite y recibe el primer bit menos significativo, donde los transmisores y receptores de USART son funcionalmente independientes, pero usan el mismo formato de datos y velocidad en baudios. El bit de paridad no es soportado por hardware pero puede ser implementado por software. El modo asíncrono es seleccionado limpiando el bit SYNC del registro TXSTA. Para entender en que consisten estos bits de configuración, se explicara los siguientes registros (TXTA y RCSTA) de control: 64 Registro De Control Y Estado De La Transmisión: TXTA CSRC TX9 TXEN SYNC 0 BRGH TRMT TX9D CSRC: selección de la fuente del reloj Modo asíncrono: No usado Modo síncrono : 1 = modo maestro (reloj generado internamente desde BRG) 0= modo esclavo (reloj desde un fuente externa) TX9: habilitación de la transmisión de 9 bits 1 = selección de 9 bits para transmitir 0= selección de 8 bits para transmitir TXEN: habilitación de la transmisión 1 = transmisión habilitada 0 = transmisión deshabilitada Nota: SREN/CREN pasa a ser TXEN en modo SYNC SYNC: selección del modo USART 1 = modo síncrono 0 = modo asíncrono BRGH: selección de la velocidad en baudios Modo asíncrono: 1 = alta velocidad 0 = baja velocidad Modo síncrono: No se usa en este modo TRMT: Bit de estado del registro de cambio transmitido 1 = TSR vacío 0 = TSR lleno TX9D: noveno bit del dato a transmitir. Puede ser el bit de paridad Tabla 2-1 65 Registro De Control Y Estado De La Recepción: RCSTA SPEN RX9 SREN CREN 0 FERR OERR RX9D SPEN: bit de habilitación del puerto serie 1 = puerto serie habilitado (Configurar pines RX/DT y TX/CK como pines del puerto serie). 0= modo esclavo (reloj desde un fuente externa). RX9: habilitación de la recepción de 9 bits. 1 = selección de 9 bits para recibir. 0= selección de 8 bits para recibir. SREN: habilitación de la recepción simple. Modo asíncrono: No usado. Modo maestro síncrono: 1 = recepción simple habilitada. 0 = recepción simple deshabilitada. Nota: Este bit es limpiado después de que la recepción sea completada. Modo esclavo síncrono: No se usa en este modo. CREN: bit de habilitación de recepción continua. Modo asíncrono: 1 = recepción continua habilitada. 0 = recepción continua deshabilitada. Modo síncrono: 1 = recepción continua habilitada hasta que el bit CREN es limpiado. 0 = recepción continua deshabilitada. FERR: bit de error de FRAME. 1= Error FRAME (Puede ser actualizado leyendo el RCREG y recibiendo en próximo byte valido). 0 = No error FRAME. OERR: bit de error de desbordamiento. 1 = Error de desbordamiento(Puede ser limpiado limpiando el bit CREN). 0 = No Error de desbordamiento. RX9D: noveno bit del dato a recibir. Puede ser el bit de paridad. Tabla 2-2 66 2.3.5.2 Transmisor asíncrono de la USART Para establecer la transmisión, el registro TSR obtiene los datos desde el buffer de transmisión de lectura/escritura TXREG. Una vez que se transfiere los datos al registro TSR, el registro TXREG se vacía y el bit de flag TXIF es puesto a 1. El estado del registro TSR se aprecia mediante el bit TRMT del registro TXSTA; sin embargo, este bit es solo lectura y es puesto a un 1 cuando el registro TSR está vacío. Pasos a seguir para realizar la transmisión Asíncrona: 1-Inicializar el registro SPBRG con la velocidad apropiada. Sí la velocidad deseada es baja, poner a 0 el bit BRGH 2-Habilitar el puerto serie asíncrono limpiando el bit SYNC y poniendo a 1 el bit SPEN 3-Si se quiere interrupciones, se coloca a 1 el bit TXIE,GIE y PEIE. (Estas no se utilizaron, producto que no fué necesario). 4-Se realiza una transmisión de 8 bits, por o tanto el bit TX9 se coloca un cero, en caso contrario se coloca un 1. 5-Luego se procede a habilitar la transmisión poniendo a 1 el bit TXEN el cual también pondrá a 1 el bit TXIF. 6-Sí la transmisión de 9 bits está seleccionada, el noveno bit debería cargarse en el bit TX9D. 7-Cargar los datos en el registro TXREG (empezar transmisión). Según lo apreciado, el registro de transmisión TXTA fue configurado de la siguiente forma: Bsf RCSTA, SPEN ; Habilita el puerto serie. Bcf TXSTA, SYNC ; Elige modo asíncrono. Bcf TXSTA, BRGH ; Baja velocidad. Movlw .64 ; Valor para los 9600 Baudios. 67 Movlw SPBRG ; Carga dicho valor en el registro SPBRG. Movlw b'00000001' ; Carga un 1 en binario en el acumulador. Movlw TXREG ; Dicho valor lo envía en ascii. Esto permitió tener siempre habilitada la transmisión, elegir su velocidad (9600 baudios) y el modo de trabajo (modo asíncrono). 2.3.5.3 Calculo De La Velocidad De Transmisión En Baudios El registro SPBRG contiene 8 bits, los cuales permiten configurar la velocidad deseada para la transmisión. En este caso se escogió una velocidad de 9600 Baudios. Modo Asíncrono: Sí BRGH = 0 (Baja Velocidad) y SYNC = 0 V(Baudios) = 10 Mhz/(64.(SPBRG + 1)) Sí BRGH = 1 (Alta Velocidad) y SYNC = 0 V(Baudios) = Fosc/16.(SPBRG + 1) 9600 Baudios = Fosc / (16 * (SPBRG + 1)) SPBRG corresponde a 0.64 2.3.6 Temporizador Debido a la necesidad de adecuar un tiempo para el desalojo y el acceso de usuarios al lugar de monitoreo, se opto por una subrutina de tiempo mediante la creación de dos variables paso y contador. La subrutina de tiempo se puede adecuar de 158 milisegundos hasta 170 minutos según la subrrutina de tiempo creada para el PIC, dado estos datos, se opto por 30 segundos para el desalojo y acceso del lugar. El tiempo estimado para estas subrutinas viene expresado por la siguiente ecuación: Temporización 68 Para la programación fue necesario transmitir al ordenador el estado presente de la alarma en forma indefinida, para una mayor seguridad; esto se realiza cada 158 milisegundos para la seguridad de los equipos. Los pasos para la programación del temporizador fueron las siguientes: CLRF CLRF MOVLW Activada la Alarma se realizan las siguientes instrucciones. contador Borro contador. paso Borro paso. b'01100000' ADDWF contador,1 Cargo contador con 96 en binario. MOVLW ADDWF b'00000010' paso,1 Cargo paso con 2 en binario. Goto INICIO Va a inicio para ingresar la clave. INICIO movlw SUBWF BTFSS GOTO CALL GOTO NOSE CALL CALL GOTO DONDE decfsz b'00000000' CUENTA1 STATUS,Z NOSE APAGADO INICIO GOTO MOVLW ADDWF decfsz ROSOL b'01100000' contador,1 paso ACTIVADOCC DONDE INICIO contador RETURN bsf PORTA,3 MOVLW b'00000010' ADDWF paso,1 Pregunto que tecla activé. Pregunto si la alarma esta activada o desactivada mediante la variable CUENTA1. La alarma se encuentra activada. Subrutina para trasmitir que la alarma esta desactivada. La alarma se encuentra activada. Subrutina para trasmitir que la alarma esta activada. Subrutina para decrementar la variable contador y paso. Decremento contador en uno y pregunto si el resultado de la operación es cero. Si no es cero va a rutina de tiempo. Cargo contador con 96 en binario. Decremento paso en uno y pregunto si el resultado de la operación es cero. Si no es cero vuelve a la subrutina NOSE. Coloca un uno lógico en el pin A3 y activa el buzzer. Cargo paso con 2 en binario. 69 RETURN ROSOL CALL PDelay RETURN CLRF CLRF Regreso a la subrutina NOSE. Subrutina de tiempo de 155 milisegundos. Desactivada la Alarma se realizan las siguientes instrucciones. contador Borro contador. paso Borro paso. Tabla 2-3 2.4 LCD Para el control, escritura y lectura de datos fue necesaria la utilización del puerto B y parte del puerto D. La distribución de los pines fue realizada de la siguiente manera: PIN Nº PIC SIMBOLO DESCRIPCION 1 Vss Vss Tierra de alimentación GND 2 Vdd Vdd Alimentación de +5V CC 3 Vo Vo Contraste del cristal liquido. ( 0 a +5V ) 4 D5 RS Selección del registro de controlregistro de datos: RS=0 Selección registro de control RS=1 Selección registro de datos 5 D6 R/W Señal de lectura/escritura: R/W=0 Escritura (Write) R/W=1 Lectura (Read) 6 D7 E Habilitación del modulo: E=0 Módulo desconectado E=1 Módulo conectado Pin 7-14 B0-B7 D0-D7 Bus de datos bidireccional. Tabla 2-4 70 2.4.1 Envío de Datos. Para el envío de cada uno de los caracteres al LCD, se utilizo el siguiente razonamiento: Fig.2-10 Producto que fue necesario enviar diferentes tipos de instrucciones al LCD, tanto para su configuración, control, escritura y lectura, se entregará el conjunto de instrucciones utilizadas a continuación: 71 CLEAR LCD Borra el módulo LCD y coloca el cursor en la primera posición (dirección 0). Pone el bit I/D a 1 por defecto. RS R/W DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 0 0 0 0 0 0 0 0 0 1 FUNCTION SET Establece el tamaño de interfase con el bus de datos (DL), número de líneas del display (N) y tipo de carácter (F). RS R/W DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 0 0 0 0 1 DL N F X X READ BUSY FLAG & ADDRESS Cuando el módulo LCD está ejecutando cualquiera de estas instrucciones, tarda un cierto tiempo de ejecución en el que no se debe mandar ninguna instrucción. Para éllo dispone de un flag llamado BUSY (ocupado) que indica que se está ejecutando una instrucción previa. Esta instrucción de lectura informa del estado de dicho flag además de proporcionar el valor del contador de direcciones de la CG RAM o de la DD RAM según la última que se haya empleado. RS R/W DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 0 1 BF Dirección de la CG RAM o DD RAM 72 DISPLAY ON/OFF CONTROL Activa o desactiva poniendo en ON/OFF tanto al display (D) como al cursor (C) y se establece si este último debe o no parpadear (B). RS R/W DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 0 0 0 0 0 0 1 D C B SET THE DD RAM ADDRESS Los caracteres o datos que se van visualizando, se van almacenando en una memoria llamada DD RAM para de aquí pasar a la pantalla. Mediante esta instrucción se establece la dirección de la memoria DD RAM a partir de la cual se irán almacenando los datos a visualizar. Ejecutando este comando, todos los datos que se escriban o lean posteriormente lo harán desde esta memoria DD RAM. Las direcciones de la 80h a la 8Fh corresponden con los 16 caracteres del primer renglón y de la C0h a la CFh con los 16 caracteres del segundo renglón, para este modelo de LCD. RS R/W DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 0 0 1 Dirección de la DD RAM ENTRY MODE SET Establece la dirección de movimiento del cursor y especifica si la visualización se va desplazando a la siguiente posición de la pantalla o no. Estas operaciones se ejecutan durante la lectura o escritura de la DD RAM o CG RAM. Para visualizar normalmente poner el bit S=0. RS R/W DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 0 0 0 0 0 0 0 1 I/D S 73 El significado de la abreviatura utilizada, es la siguiente: 1 - Desplaza la visualización cada vez que se S escribe un dato 0 - Modo normal I/D 1 - Incremento del cursor 0 - Decremento del cursor BF 1 - Módulo ocupado 0 - Módulo disponible DL 1 - Bus de datos de 8 bits 0 - Bus de datos de 4 bits N 1 - LCD de dos líneas 0 - LCD de una línea F 1 - Carácter de 5 x 10 puntos 0 - Carácter de 5 x 7 puntos B 1 - Parpadeo del cursor ON 0 - Parpadeo del cursor OFF C 1 - Cursor ON 0 - Cursor OFF D 1 - Display ON 0 - Display OFF X Indeterminado Tabla 2-5 2.4.2 Diseño (LCD): Se observa en la siguiente figura cómo el puerto B actúa como bus de datos de nuestro LCD, siendo las líneas de control los pines: RD7 (señal E), RD6 (señal RS), RD5 (señal R/W). Los diferentes sensores se ubicaron en el puerto A, tal como se aprecia en la figura. (Fig.2-11). En el se conectaron un detector de humo, sensor magnético y 74 detector de movimiento. Mientras que parte de los puertos C, D y A fueron utilizados para el teclado, como ya se había mencionado. Fig.2-11 Nota: El puerto A se consideran los pines: RA0, RA1, RA2, RA3, RA4, RA5. El puerto B corresponde a los pines: RB0, RB1, RB2, RB3, RB4, RB5, RB6, RB7 y así sucesivamente para los demás puertos. 75 2.4.3 Funcionamiento General del Sistema Al encenderse el sistema aparece en pantalla el siguiente mensaje: Fig.2-12 Fig.2-13 El mensaje que se aprecia en la figura anterior (Fig.2-12) informa que la alarma se encuentra desactivada y lista para que sea ingresada la clave (Fig.2-17). Si la clave no es correcta, la alarma indicara el error, tal como se aprecia en la figura 2-13, en caso contrario se tendrán dos posibles soluciones: Enter (Fig.2-14) o Cambio de Clave (Fig.2-15). Fig.2-14 Fig.2-15 Una vez activada la alarma, se cuenta con un tiempo de 30 segundos para el desalojo del lugar, en caso contrario ésta se activará y entregará el siguiente mensaje (Fig.2-16): Fig.2-16 Fig.2-17 Nota: Por defecto la clave inicial para quien utiliza por primera vez el “producto” es 0000. 76 2.5 Programa Visual Basic Debido a la necesidad de transmitir el estado presente de la alarma al computador, será necesaria la utilización de un software capaz de traducir la información enviada por el microcontrolador; por lo tanto, se va a utilizar el software visual basic, que permite decodificar y visualizar en el computador los datos obtenidos. En la siguiente figura (Fig.2-18) se aprecia el trabajo terminado, con la visualización de los sensores. Fig.2-18 Para trabajar con el puerto serie de un computador, es necesario utilizar el control MSCOMM, tal como se describe en el Marco Teórico. Normalmente este control no está disponible en la barra de herramientas, por lo tanto hay que introducirlo mediante el 77 menú Proyecto, Componentes y Microsof Comm Control 6.0, tal como se observa en la siguiente figura (Fig.2-19): Fig.2-19 Una vez realizada esta operación, se configura el control MSCOMM para la recepción de datos de la siguiente manera: • MSComm1.InputLen = 1 Al leer el buffer de recepción, la propiedad InputLen permite leer solo un carácter, producto que su valor es igual a uno.(En caso de querer el buffer completo su valor tiene que ser igual a 0) • MSComm1.RThreshold = 1 • MSComm1.SThreshold = 1 Estas dos propiedades tienen un valor igual a uno, producto que es la cantidad de caracteres que deben estar presentes en los Buffer de recepción y transmisión 78 respectivamente, para que se produzca el evento OnComm relativo a la recepción y transmisión de caracteres. Después se procede a declarar la variable Valor1 para la recepción de datos, mediante la instrucción Dim y se identifica como una variable cadena o String (ascii). Una vez realizada esta labor se debe decodificar esta variable, traspasándola a un número entero (Integer) y luego se procede a compararlas con las diferentes situaciones. Private Sub MSComm1_OnComm() Dim Valor, Valor1 As String Se declara variable Valo1(ascii). Dim p, pp As Integer Se declara variable pp como un Nº entero. Valor1 = ((MSComm1.Input)) El carácter que es recibido se copiara en la variable Valor1. pp = Asc(Valor1) Valor1 se copia en la variable pp como un número entero, para luego ser comparado. Tabla 2-6 79 El diagrama de flujo correspondiente se aprecia a continuación (Fig.2-20): Fig.2-20 2.5.1 Elección del Puerto y Velocidad Para la elección del puerto Com y la velocidad de trabajo, fue necesario la utilización de la herramienta ComBox, producto que es una lista desplegable y editable por el usuario. Elección del puerto: En ella se declara las variables: viejo_puerto y nro_puerto como números enteros. La variable viejo puerto permite guardar el puerto que se había 80 utilizado anteriormente y copiarlo en la variable nro_puerto. En caso de algún cambio ésta última variable se modificará según el puerto seleccionado y se asignará un mensaje, tal como se aprecia a continuación: Private Sub Combo_Puerto_Click() Dim viejo_puerto As Integer Declara la variable viejo_puerto como un Nº entero. Dim nro_puerto As Integer Declara la variable nro_puerto como un Nº entero. viejo_puerto = nro_puerto El puerto usado anteriormente pasa hacer el nuevo puerto. nro_puerto = Combo_Puerto.ListIndex Añade un registro nuevo en esa posición y borrar uno ya existente. nro_puerto=Combo_Puerto.ItemData(nr Establece un numero especifico para indicar el o_puerto) puerto seleccionado. If (nro_puerto <> viejo_puerto) And En caso que no sea el puerto antiguo manda (mensajes_cambios = True) Then un mensaje. MsgBox "Debe abrir este puerto antes de usarlo" Tabla 2-7 Elección de la velocidad: En ella se declara las variables: vieja_velocidad y velocidad como números enteros. La variable vieja_velocidad permite guardar el puerto que se había utilizado anteriormente y copiarlo en la variable velocidad. En caso de algún cambio ésta última variable se modificará según la velocidad seleccionada y se asignará un mensaje, tal como se aprecia a continuación: 81 Private Sub Combo_Puerto_Click() Dim vieja_velocidad As Integer Declara vieja_velocidad como un Nº entero. Dim velocidad As Integer Declara la variable velocidad como un Nº entero. vieja_velocidad = nro_puerto La velocidad usada anteriormente pasa a ser la nueva velocidad. velocidad = Combo_Puerto.ListIndex Añade un registro nuevo en esa posición y borrar uno ya existente. velocidad=Combo_Puerto.ItemData(nro_ Establece un numero especifico para indicar puerto) la velocidad seleccionada. If (velocidad <> vieja_velocidad) And En caso que no sea la velocidad antigua (mensajes_ cambios = True) Then manda un mensaje. MsgBox "Mensaje" Tabla 2-8 Fig.2-21 2.5.2 Abrir y Cerrar el Puerto Abrir el Puerto: Para realizar esta tarea se selecciona la herramienta Command Button, la cual funciona mediante un evento click. Al realizar ésta operación este control identifica el puerto (MSComm1.CommPort), la velocidad de transmisión y recepción (9600 Baudios) y por último se configura con un bit de parada y ocho de bits de información. Una vez abierto el puerto entrega un mensaje al usuario indicando si la operación se obtuvo con éxito o no, tal como se aprecia a continuación: 82 Private Sub Boton_Abrir_Click() On Error GoTo manejar_errores Identifica errores en la operación. MSComm1.CommPort = nro_puerto Elijo el puerto. MSComm1.Settings = Str$(velocidad) + Configura su velocidad, bits de parada, ",N,8,1" etc. MSComm1.PortOpen = True Intenta abrir el Puerto. MsgBox ("Puerto COM" + Str$(nro_puerto) + ": Mensaje: Puerto Com X : "Abierto OK". abierto OK") Etiq_Puerto.Caption = "COM" + Indica al usuario el Nº del puerto Str$(nro_puerto) + ":" abierto. Etiq_Velocidad.Caption = Str$(velocidad) + " Indica la velocidad en Baudios bauds" seleccionada. Etiq_Recepcion.Text = "Recepcion en Espera" Indica que la recepción se encuentra en espera caja de texto (Etiq_Recepcion textbox). Etiq_Recepcion.BackColor = &HFF00& Se asigna un fondo de color verde en la caja de texto Etiq_Recepcion textbox. Etiq_acero.Text = "Abierto" Indica que el puerto se encuentra abierto mediante una caja de texto denominada Etiq_acero.Text. Etiq_acero.BackColor = &HFF00& Se asigna un fondo de color verde en la caja de texto Etiq_acero.Text. manejar_errores: MsgBox ("Error al intentar Mensaje: "Error al intentar abrir Com X". abrir COM" + Str$(nro_puerto)) Tabla 2-9 Cerrar el Puerto: Para realizar esta tarea se selecciona la herramienta Command Button, la cual funciona mediante un evento click. Al realizar esta operación éste control cierra el puerto mediante la instrucción MSComm1.PortOpen = False. Una vez realizada 83 la operación, entrega un mensaje al usuario (MsgBox) indicando su resultado. La programación es la siguiente: Private Sub Boton_Abrir_Click() On Error GoTo manejar_errores Identifica errores en la operación. MSComm1.PortOpen = False Intenta cerrar el Puerto. MsgBox ("Puerto COM" + Str$(nro_puerto) + Mensaje: Puerto Com X : "Cerrado OK". ": cerrado OK") Etiq_Recepcion.Text = "Recepcion Indica que la recepción se encuentra Desabilitada" deshabilitada mediante la caja de texto denominada Etiq_Recepcion textbox. Etiq_Recepcion.BackColor = &HFF& Se asigna un fondo de color rojo en la caja de texto Etiq_Recepcion textbox. Etiq_acero.Text = "Cerrado" Indica que el puerto se encuentra cerrado mediante una caja de texto denominada Etiq_acero.Text. Etiq_acero.BackColor = &HFF& Se asigna un fondo de color rojo en la caja de texto Etiq_acero.Text. manejar_errores: MsgBox ("Error al intentar Mensaje: "Error al intentar cerrar Com X". cerrar COM" + Str$(nro_puerto)) Tabla 2-10 2.5.3 Timer Esta herramienta permite identificar la presencia de transmisión de la alarma hacia el computador, es decir, ella se encargara de preguntar cada 30 segundos sí a recibido alguna instrucción de nuestro sistema. En caso de ser positiva la respuesta, indicara que la recepción se encuentra habilitada (Etiq_Recepcion), en caso contrario mencionara que se encuentra deshabilitada (Etiq_Recepcion). 84 Para realizar dicha tarea, se creo la variable num(0), que indica si a recibido alguna instrucción durante un tiempo determinado. Para explicar su funcionamiento se muestra el siguiente diagrama de flujo: Fig.2-22 En la herramienta Timer destacan las propiedades enabled e interval, la primera indica si el Timer esta activado (True) o desactivado (False) y la segunda encargada establecer el tiempo estimado en milisegundos de cada llamada, como se aprecia a continuación Fig. (2-23): 85 Fig.2-23 Parte del programa se describe a continuación: Public num(0) As Integer Se declara la variable num(0) como numero entero. num(0) = 1 Al abrir el puerto. num(0) = 0 Al recepcionar un dato. If num(0) = 0 Then Pregunta sí num(0) = 0. Sí Etiq_Recepcion.BackColor = &HFF00& es así escribe en el Tex.box Etiq_Recepcion.Text = "Recepcion Habilitada" (Etiq_Recepcion.Text) que la num(0) = 1 recepción se encuentra End If habilitada. If num(0) = 1 Then Pregunta si num(0) = 1. Si Etiq_Recepcion.BackColor = &HFF& es así escribe en el Tex.box Etiq_Recepcion.Text = "Recepcion Desabilitada" (Etiq_Recepcion.Text) que Etiq_Estado5.BackColor = &HFF& la recepción se encuentra num(0) = 1 deshabilitada. End If Tabla 2-11 86 2.6 Instrumento Audible (Buzzer): Debido a que nuestro sistema de alarma se encontrara en un lugar remoto del aeropuerto, cercano a la pista de aterrizaje, se optó por la compra de un buzzer el cual trabaja con tensiones de 5 a 12 volt. Producto que el microcontrolador trabaja con tensiones TTL fue necesaria la compra de un relé de 12volt. El relé se ubica en una placa anexa a la alarma, debido a que entrega una mayor facilidad para su ubicación y conexión. En la siguiente figura (Fig.2-24) se aprecia el trabajo realizado: Buzzer (12 volt DC.) Fig.2-24 87 2.7 Presupuesto El costo necesario para la realización de dicho proyecto fue asumido por parte de la Dirección General de Aeronáutica Civil (DGAC) y el alumno responsable. Producto que actualmente se cuenta con módems y enlace de Fibra Óptica Monomodo para desarrollar dicho sistema de monitoreo, los materiales utilizados son los siguientes: Materiales Microprocesador Pulsadores Amplificador O. Condensadores Resistencias LCD Diodos Cristal de Cuarzo Max 232 Detector de Humo Det. de Movimiento Detec. Magnético Caja Placas Buzzer Bus de Datos Rele 12 volt Ácido Precio 8.000 300 800 50 10 10.000 300 1.000 1.000 21.000 10.000 1.000 2.700 1.800 1.200 1.000 7.000 600 Cantidad Total 1 8.000 12 3.600 1 800 10 500 15 150 1 10.000 5 1.500 1 1.000 1 1.000 1 21.000 1 10.000 1 1.000 1 2.700 1 1.800 1 1.200 1 1.000 1 7.000 1 600 Total: $72.850 Tabla 2-12 El costo de los módem de fibra óptica alcanzan un precio aproximado de $110.000 c/u; sin embargo, estos fueron adquiridos por la DGAC para diferentes propósitos. 88 3. CONCLUSIONES 1. La presente tesis entrega ventajas para la realización de otro tipo de proyectos, ya que las bases para implementarlo entregan una gran versatilidad para realizar otro tipo de funciones. 2. El PIC 18F452, permite una gran versatilidad de funciones, pudiendo controlar hasta 32 periféricos. Tiene la característica de realizar una comunicación mediante el módulo USART, pudiendo transmitir y recepcionar datos en forma síncrona y asíncrona según su configuración. 3. Producto que el microcontrolador trabaja con tensiones TTL (0 a 5 volt.), fue necesaria la utilización de un adaptador de niveles, que transforma estas tensiones a +15/-15 volt con los cuales funciona el puerto serie de nuestro computador. 4. El proyecto realizado permite establecer una comunicación con el computador mediante módem o line driver de FO, sin embargo, es posible la utilización de un módem GSM que funcione mediante la norma RS232, pero la configuración del software tendría cambios importantes, sin embargo, el hardware no tendría cambios. 5. El sistema audible consiste en un buzzer, sin embargo, es posible la utilización de una sirena que funcione con la red domiciliaria. El sistema de conexión se realizaría entonces con un relé de 5 volt; el costo en el mercado alcanza los $1.500 aproximadamente. 6. Para la visualización en tiempo real del estado del sistema, se optó por una pantalla LCD, configurada mediante un bus de 8 bits. 7. La simulación del programa se desarrolla mediante el software MPLB, donde es posible interactuar con los distintos eventos y tiempos de las subrutinas. 8. Este sistema de alarma transmitirá la información cada 30 seg., actualizando el estado de la alarma en forma indefinida. En caso de que no existir recepción de los datos, el programa ejecutable desarrollado en visual Basic, detectara una anomalía indicando al usuario que la recepción esta deshabilitada. 89 9. La aplicación desarrollada en visual Basic, permite identificar si la alarma está activada o desactivada, que detector u sensor se activó, el puerto que se está utilizando, velocidad de transmisión, recepción habilitada o deshabilitada. 10. La velocidad de transmisión del sistema es de 9600 baudios, sin embargo, esta puede ser modificada a gusto del usuario, siempre y cuando las modificaciones se realicen en el microcontrolador y computador respectivamente. 11. El desafío que significo para mí este proyecto, consiste en la programación de dos softwares, uno desarrollado en MPLAB y otro en Visual Basic. Cada uno de ellos cuenta con diferentes instrucciones y métodos de programación; la programación desarrollada en Visual Basic esta realizada mediante eventos, mientras que la programación del PIC (ensambler) se caracteriza por ser mas compleja, producto que se encarga del monitoreo de los sensores, transmisión de datos e ingreso y cambio de clave. 12. Se observa en las fotos del anexo, que el diseño e implementación del circuito impreso presenta diferentes dificultades, producto que la pantalla LCD y teclado son placas separadas a la placa de control donde se ubica el microcontrolador. Estas se unieron mediante un bus dato soldado a cada una de las placas. 13. El desarrollo de este trabajo, me ha permitido aprender, conocer y aplicar diferentes soluciones para la transmisión y control mediante microcontroladores (PIC). Su gran versatibilidad y la gama de programas que actualmente existen en el mercado hacen posible el desarrollo de diversas aplicaciones de acuerdo a las necesidades del mercado. 14. El conocimiento adquirido durante estos seis años de carrera, me han permitido entender y manejar equipos con diferentes medios de transmisión, estas herramientas, mas el desarrollo adquirido de autoaprendizaje, me han servido para enfrentar el mundo laboral. 90 4.1 Referencias Bibliograficas - Título: Aprenda Visual Basic como si estuviera en primero. Autor: Javier García de Jalón, José Ignacio Rodríguez y Alfonso Brázales. Escuela Superior de Ingenieros Industriales, Universidad de Navarra. - Título: Instalaciones De Fibra Óptica. Autor: Bob Chomycz. Editorial: McGraw-Hill. - Título: Microcontroladores PIC. Diseño práctico de aplicaciones. Autor: Angulo Usategui, José María y Angulo Martínez. Editorial: McGraw-Hill. - Título: Análisis y diseño de circuitos electrónicos- Tomo I. Autor: Donald A. Reamen. Año: 1999. - Título: Comunicaciones ópticas. Autor: José Martín Sanz. Año: 1996. - Título: Diseño de hardware electrónico. Autor: G. C. Loveday. Año: 1995. 91 5.1 Anexo 5.1.1 Aeropuerto Comodoro Arturo Benítez En el marco teórico se pudo apreciar, que el aeropuerto cuenta con diferentes radioayudas y ayudas visuales, las que se describirán a continuación para entender la importancia que estas poseen para dicho complejo: 5.1.1.1 ILS Para realizar este sistema de aterrizaje (ILS), el Aeropuerto debe contar con el siguiente equipamiento, consistente en: a. TX. del Localizador. b. TX. de la Senda de Planeo. c. Marcador externo, medio e interno. Un ILS consiste de dos subsistemas independientes: uno sirve para proporcionar guía lateral y el otro para proporcionar guía vertical. Una serie de antenas localizadoras (LOC o localizer) están situadas normalmente a unos 305 metros del final de la pista y suelen consistir en 8 ó 14 antenas direccionales. Se transmiten señales portadoras entre los 108 MHz y 112MHz definidas para cada localizador. Estas portadoras se modulan con 90 Hz y 150 Hz y con distintas fases. Esto produce el efecto que la señal de 150Hz predomine en el lado derecho de pista y la de 90Hz en el izquierdo. El receptor del localizador en el avión mide la diferencia entre la modulación entre las señales de 90 Hz y 150 Hz: cuando la diferencia es de cero, la antena receptora está en la línea central del localizador, lo que normalmente coincide con el centro de la pista. Una antena transmisora de la senda de planeo (GS, del inglés: glideslope) se sitúa a un lado de la zona de la pista donde se produce la toma. La señal GS se transmite a una 92 frecuencia de entre 328.6 MHz y 335.4 MHz, usando una técnica similar a la del localizador; la señal está situada para marcar una senda de planeo de aproximadamente 3º sobre la horizontal. Fig.5-1 a) Principios de Modulación Electrónica Un oscilador se encarga de alimentar las dos etapas moduladoras del transmisor (Fig.5-2), las cuales se modulan por separado con 90Hz y 150 Hz. A la salida de dichas etapas se obtendrán dos señales: Ambas tensiones se suman y restan en la red sub-siguiente. La suma es una portadora con ambas bandas laterales: 93 Por el contrario la diferencia entrega la supresión de la portadora, es decir, una banda lateral con la misma fase y otra desfasada 180º: Para el correcto funcionamiento de los amplificadores de potencia combinados se requiere la supresión de la portadora en la salida de las SBO (únicamente bandas laterales). Por lo tanto la compensación necesita que ambas partes de la portadora tengan la misma amplitud y fase. La fase depende principalmente de la longitud de los cables desde y hacia los amplificadores de potencia, lográndose corregir unos cuantos grados mediante condensadores de pequeña capacidad. La estabilidad en amplitud se logra mediante un bucle de control de alta ganancia. Por lo tanto, es constante el nivel de la portadora en cada amplificador de potencia. La estabilidad de amplitud de modulación también es importante, ya que una profundidad de modulación distinta influye directamente sobre la posición de la trayectoria. La estabilidad se logra, en primer lugar, mediante la generación de las frecuencias de 90Hz y 150 Hz con una buena estabilidad de amplitud, sin embargo, además se demodula la envolvente a la salida de cada amplificador de potencia, alimentándose con un circuito de realimentación negativa conectado a la entrada del amplificador de modulación, mejorando de esta manera la estabilidad de la profundidad de modulación. 94 Fig.5-2 La señal SBO (únicamente bandas laterales) se radia desde el mismo array de antenas en forma de diferencia con la señal portadora, con lo que el mínimo de la señal corresponde al eje central de la pista de aterrizaje. Los lóbulos de la diferencia (y por lo tanto los de 90 y 150 Hz) están en oposición de fase. 95 Fig.5-3 Como se aprecia en la figura anterior (Fig.5-3), en el centro del diagrama donde se produce un nulo solamente se detectan las bandas laterales con igual amplitud. A ambos lados del nulo se observa que la señal de Doble Banda Lateral (SBO) crece en forma rápida, descentrando la señal AM (Modulación de Amplitud). Los parámetro utilizados para establecer el correcto funcionamiento del equipo provienen de la señal modulada M que se define como , donde A y B constituyen la amplitud de los tonos de 90Hz y 150Hz, respectivamente y C se denomina la amplitud de la portadora. La diferencia de dichos tonos se denominan Índice de Modulación (DDM) y se define como: Los receptores miden la magnitud del índice de modulación (DDM) y calculan la desviación de la ruta, siendo ésta proporcional al ángulo azimutal de al menos 5º a los lados de la línea central. Según la Organización Internacional de Aeronáutica Civil (OACI) se requiere un DDM = que provoque un fuera de escala de la aguja de 96 desviación, valor que ocurre a una distancia de 107mts. a cada uno de los lados del eje de aproximación. b) Ajuste Electrónico De La Anchura Del Rumbo La función DDM, correspondiente al rumbo, no solo depende del diagrama SBO, sino además de la potencia de la Bandas Laterales (SBO). Dicho ajuste se puede lograr combinando los 90Hz y 150Hz, como se aprecia en la figura 5-4. En esta figura se observa como un generador alimenta a unas redes combinadas, permitiendo la adición de tensiones que constan de los 90 Hz y 150 Hz, en partes iguales. Dichas tensiones se llevan a un amplificador operacional, OP.1, que suministra la misma fase que en el generador, y los 150 Hz desfasados 180º. El potenciómetro situado en el amplificador operacional OP.2 permite ajustar esta tensión. El factor K, que se aprecia en la figura, puede adoptar cualquier valor entre +1 y -1. La tensión restante se conecta directamente a unas redes combinadas y a través de un amplificador operacional inversor, OP.3, a la otra red combinada. Fig.5-4 97 c) Categorías ILS El Sistema ILS se divide en tres categorías (I, II, III), donde cada una de ellas presenta cierto grado de limitaciones. Un ILS estándar se denomina categoría I, permitiendo aterrizajes con 732mts. de visibilidad. Los aterrizajes utilizados en la categoría II permiten realizar el descenso hasta sólo 366 mts, mientras que la categoría III permite realizar aterrizajes con una visibilidad de 213,4mts. Estas dos últimas categorías cuentan además con sistemas de ayuda visuales estandarizadas por la OACI. Fig.5-5 (Equipo Localizador - Aeropuerto Arturo Merino Benítez) 98 5.1.1.2 Descripción General de los diferentes Sistemas. Para entender mejor el funcionamiento de los demás sistemas se entregara una breve descripción de cada uno de ellos: a) VOR Doppler Se denomina VOR Doppler a un radiofaro omnidireccional VHF, que se ha adoptado internacionalmente como sistema de ayuda a la navegación por radio para las aeronaves. Su función consiste proporcionar el ángulo entre la aeronave y el norte magnético, tomando como referencia la ubicación de la estación terrestre. Fig. 5-6 (VOR Doppler - Aeropuerto Arturo Merino Benítez) 99 b) DME DME corresponde a equipo medidor de distancia, que consiste en un EMISOR- RECEPTOR UHF con indicación en cabina, que indica numéricamente la distancia a la estación DME en millas náuticas. Un transmisor de muy alta frecuencia colocado en el avión, emite una señal codificada que es recibida por una instalación terrestre. Por medio de la clave emitida, el equipo terrestre devuelve la señal al avión que la generó, donde el procesador del DME calcula la distancia al equipo terrestre, utilizando un principio parecido al de un radar. En la práctica la estación DME se combina con radio ayudas a la navegación como los sistemas VOR e ILS, permitiendo al piloto apreciar la distancia exacta de las estaciones en tierra. Fig. 5-7 (Equipo DME - Aeropuerto Arturo Merino Benítez) 100 c) Marcador Medio, Interno y Externo Los marcadores son radiofaros encargados de proporcionar la distancia del cauce, identificando puntos predeterminados a lo largo de la pista del acercamiento. Estos radiofaros son transmisores de baja potencia que funcionan a una frecuencia de 75MHz y 3 W. Operan irradiando una viga elíptica hacia el cielo, con una altitud de 305 metros, tal como se aprecia en la siguiente figura (Fig. 5-8). Fig. 5-8 d) Casetas de Transmisores y Receptores Respecto a las comunicaciones, dentro del aeropuerto existen dos casetas encargadas de recepcionar y transmitir información de las diferentes unidades del aeropuerto, entre ellas se encuentran los SEI, controladores de transito, AVSEC, etc. Estos equipos son transmisores y receptores VHF-AM y VHF-FM que funcionan principalmente para la localización y posicionamiento de las aeronaves. e) NDB El NDB (Non Directional Beacom) es el sistema de navegación aérea más antiguo y sencillo que actualmente se encuentra operativo. Este sistema consiste en un radiofaro omnidireccional que transmite a una frecuencia fija, mediante un instrumento ADF (en 101 inglés Automatic Direction Finder) a bordo de la aeronave, el piloto puede seleccionar la frecuencia de ésta emisora y apreciar la aguja del instrumento, que indicara la dirección en que se encuentra el radiofaro. Los NDB están situados a lo largo de las principales rutas de navegación aéreas, y sobre todo en las inmediaciones de los aeropuertos, donde siguen siendo de gran utilidad para los pilotos cuando realizan maniobras de aproximación con poca o nula visibilidad. La emisión se realiza en frecuencia media y el alcance es de unos 50 kilómetros. f) Sistema de Ayudas Visuales El sistema de ayudas visuales se divide en diversos subsistemas, entre los que destacan REIL, VASIS y ALS. El sistema REIL consiste en dos series de luces, que sincronizadamente emiten un flash a cada lado del último tramo de la pista. Este sistema tiene como objetivo distinguir la cabecera de la pista en lugares caracterizados por numerosas luces de suelo, como señales de neon u otras luces que pueden distraer la atención del piloto. El sistema VASIS es el encargado de indicar al piloto el grado de inclinación que presenta la aeronave en la aproximación final. Por último, el sistema ALS tiene la función de indicar la alineación de la aeronave, el balance, el horizonte, el ancho y la posición con respecto a la cabecera de la pista. g) Transponders Un transponder es un dispositivo que emite una señal identificable en respuesta a una interrogación. El término surge de la fusión de las palabras Transmisor y Respondedor. Básicamente existe dos tipos de transponder : los pasivos y los activos, estos últimos son los que operan dentro del aeropuerto ya que permiten la identificación de la aeronave, así como datos necesarios para la correcta posición de la plataforma (como altura barométrica, velocidad y demás información de interés). Generalmente los transponders funcionan bajo demanda, es decir, un interrogador o radar secundario emite una interrogación (1090 mhz), que el transponder entiende y decodifica, y genera la respuesta con la información solicitada. 102 h) Torre de Control La torre de control es un lugar físico, que tiene como objetivo monitorear y guiar el tráfico aéreo dentro del aeropuerto y sus inmediaciones, es decir, el control del rodaje, el despegue, la aproximación y el aterrizaje de las aeronaves. Su labor es compleja, debido a la gran cantidad de aviones que transitan y las condiciones atmosféricas que pueden alterar dicho tránsito. La ubicación de los diferentes sistemas se observa en la siguiente figura (Fig. 5-9): Fig. 5-9 103 5.1.2 Desarrollo de programa en Visual Basic. Private Sub Boton_Abrir_Click() On Error GoTo manejar_errores MSComm1.CommPort = nro_puerto MSComm1.Settings = Str$(velocidad) + ",N,8,1" MSComm1.PortOpen = True MsgBox ("Puerto COM" + Str$(nro_puerto) + ": abierto OK") Etiq_Puerto.Caption = "COM" + Str$(nro_puerto) + ":" Etiq_Velocidad.Caption = Str$(velocidad) + " bauds" Etiq_Recepcion.BackColor = &HFF00& 'Color verde Etiq_Recepcion.Text = "Recepcion en Espera" Etiq_acero.BackColor = &HFF00& Etiq_acero.Text = "Abierto" Al pulsar aquí abre un puerto serial. Paso 1: elijo el puerto. Paso 2: preparo parámetros de Comunicación. Paso 3: Intento abrir el puerto. Puedo no lograrlo: si no existe, o si otro programa lo está usando. Aquí puede ocurrir un error y saltaría a la etiqueta " manejar_errores " Mensaje que el puerto se encuentra abierto. num(0) = 1 GoTo Salir 'Todo Ok, continuar. manejar_errores: MsgBox ("Error al intentar abrir COM" + Str$(nro_puerto)) MsgBox ("Error detectado por Visual Basic: " + Err.Description) Resume Salir Resume me permite continuar con el programa. Salir: End Sub Private Sub Boton_Cerrar_Click() Al pulsar aquí cierra un puerto serial. 104 On Error GoTo manejar_errores MSComm1.PortOpen = False Puede haber error si intento cerrar un puerto que está en uso por otro programa, entre otras causas. MsgBox ("Puerto COM" + Str$(nro_puerto) + ": cerrado Mensaje que el puerto a sido OK") cerrado Etiq_Recepcion.BackColor = &HFF& Etiq_Recepcion.Text = "Recepcion Desabilitada" Etiq_acero.BackColor = &HFF& Etiq_acero.Text = "Cerrado" Etiq_acdec.BackColor = &HFF& Etiq_acdec.Text = "Indefinido" Etiq_Estado1.BackColor = &HFF& Etiq_Estado1.Text = "Indefinido" Etiq_Estado2.BackColor = &HFF& Etiq_Estado2.Text = "Indefinido" Etiq_Estado3.BackColor = &HFF& Etiq_Estado3.Text = "Indefinido" Etiq_Estado4.BackColor = &HFF& Etiq_Estado4.Text = "Indefinido" Etiq_Estado5.BackColor = &HFF& num(0) = 1 GoTo Salir manejar_errores: MsgBox ("Error al intentar cerrar COM" + Str$(nro_puerto)) MsgBox ("Visual basic detectó: " + Err.Description) Resume Salir Al producirse un error, este envía un mensaje al usuario. Salir: End Sub Private Sub Combo_Puerto_Click() Aquí selecciona el número del puerto a usar. Dim viejo_puerto As Integer Declara viejo_puerto como entero. 105 viejo_puerto = nro_puerto nro_puerto = Combo_Puerto.ListIndex nro_puerto = Combo_Puerto.ItemData(nro_puerto) Me fijo si el usuario intenta cambiar de puerto. If (nro_puerto <> viejo_puerto) And (mensajes_cambios Reviso si el puerto fue = True) _ cambiado para enviar un Then MsgBox "Debe abrir este puerto antes de usarlo" mensaje al usuario. End Sub Private Sub Combo_Velocidad_Click() Dim vieja_velocidad As Integer Declaro la variable vieja_velocidad como entero. vieja_velocidad = velocidad velocidad = Combo_Velocidad.ListIndex velocidad = Combo_Velocidad.ItemData(velocidad) If (vieja_velocidad <> velocidad) And (mensajes_cambios = True) _ Then MsgBox "Cambió la velocidad. Si el puerto ya estaba abierto," _+ Chr$(13) + " debe cerrarlo y luego abrirlo antes de usarlo" Me fijo si el usuario intenta cambiar la velocidad. Reviso si la velocidad fue cambiada para enviar un mensaje al usuario. End Sub Private Sub Form_Load() mensajes_cambios = False velocidad = 1200 nro_puerto = 9600 Combo_Puerto.ListIndex = 0 Combo_Velocidad.ListIndex = 0 mensajes_cambios = True MSComm1.InputLen = 1 Como InputLen vale 1, solo se recibirá el primer carácter, ignorando el resto. MSComm1.RThreshold = 1 MSComm1.SThreshold = 1 Estas dos propiedades tienen un valor igual a uno, producto 106 que es la cantidad de caracteres que deben estar presentes en los Buffer de recepción y transmisión respectivamente. MsgBox "Recuerde, debe abrir un puerto antes de empezar a usarlo" Envía este mensaje al usuario. Etiq_acero.BackColor = &HFF& Condiciones iniciales, al abrir nuestro programa. Etiq_acero.Text = "Cerrado" Etiq_Recepcion.BackColor = &HFF& Etiq_Recepcion.Text = "Recepcion Desabilitada" Etiq_Estado1.BackColor = &HFF& Etiq_Estado1.Text = "Indefinido" Etiq_Estado2.BackColor = &HFF& Etiq_Estado2.Text = "Indefinido" Etiq_Estado3.BackColor = &HFF& Etiq_Estado3.Text = "Indefinido" Etiq_acdec.BackColor = &HFF& Etiq_acdec.Text = "Indefinido" Etiq_Estado4.BackColor = &HFF& Etiq_Estado4.Text = "Indefinido" Etiq_Estado5.BackColor = &HFF& End Sub Private Sub MSComm1_OnComm() Aquí se interceptan los eventos que se producen durante la comunicación RS232. Cada vez que pasa algo relativo al puerto COM en uso, cambia el valor de la propiedad CommEvent. Dim VALOR, Valor1 As String Declaro Valor 1, como variable String. Declaro variable pp como entero.. Dim p, pp As Integer On Error GoTo malo Si llega a ocurrir algún error salta a malo. 107 Valor1 = ((MSComm1.Input)) pp = Asc(Valor1) If pp = 1 Then '(activado) Etiq_acdec.BackColor = &HFF00& Etiq_acdec.Text = "Activado" Etiq_Recepcion.BackColor = &HFF00& Etiq_Recepcion.Text = "Recepcion Habilitada" Etiq_Estado1.BackColor = &HFF00& Etiq_Estado1.Text = "Normal" Etiq_Estado2.BackColor = &HFF00& Etiq_Estado2.Text = "Normal" Etiq_Estado3.BackColor = &HFF00& Etiq_Estado3.Text = "Normal" Etiq_Estado4.BackColor = &HFF00& Etiq_Estado4.Text = "Normal" Etiq_Estado5.BackColor = &HFF00& num(0) = 0 End If If pp = 2 Then '(desactivado) Etiq_acdec.BackColor = &HFF00& Etiq_acdec.Text = "Desactivado" Etiq_Recepcion.BackColor = &HFF00& Etiq_Recepcion.Text = "Recepcion Habilitada" Etiq_Estado1.BackColor = &HFF00& Etiq_Estado1.Text = "Normal" Etiq_Estado2.BackColor = &HFF00& Etiq_Estado2.Text = "Normal" Etiq_Estado3.BackColor = &HFF00& Etiq_Estado3.Text = "Normal" Etiq_Estado4.BackColor = &HFF00& Etiq_Estado4.Text = "Normal" Etiq_Estado5.BackColor = &HFF00& num(0) = 0 End If Dato entrante por el puerto es igual a Valor 1. Pasa el dato en ascii a número entero. Según el dato recibido lo compara uno a uno para traducir la información recibida. 108 If pp = 3 Then '(alarma1) Etiq_Estado1.BackColor = &HFF& Etiq_Estado1.Text = "Intruso" Etiq_Estado5.BackColor = &HFF& num(0) = 0 End If If pp = 4 Then '(alarma2) Etiq_Estado2.BackColor = &HFF& Etiq_Estado2.Text = "Fuego" Etiq_Estado5.BackColor = &HFF& num(0) = 0 End If If pp = 5 Then '(alarma3) Etiq_Estado3.BackColor = &HFF& Etiq_Estado3.Text = "Intruso" Etiq_Estado5.BackColor = &HFF& num(0) = 0 End If malo: If Err.Number = 1117 Then Exit Sub End If End Sub Si se llega a producir un error, lo identifica al usuario. Private Sub Timer1_Timer() Este timer, permite preguntar al programa si ha recibido alguna respuesta del sistema cada 30 segundos, en caso de ser negativa la respuesta, envía un mensaje al usuario indicando que la recepción esta deshabilitada. If num(0) = 0 Then Etiq_Recepcion.BackColor = &HFF00& Etiq_Recepcion.Text = "Recepcion Habilitada" num(0) = 1 End If 109 If num(0) = 1 Then Etiq_Recepcion.BackColor = &HFF& Etiq_Recepcion.Text = "Recepcion Desabilitada" Etiq_Estado5.BackColor = &HFF& num(0) = 1 End If End Sub 110 5.1.3 Desarrollo de programa en Mplab. List include __CONFIG __CONFIG __CONFIG __CONFIG p=PIC18F452 P18F452.INC _CONFIG1H, _HSPLL_OSC_1H & _OSCS_OFF_1H _CONFIG2L, _PWRT_ON_2L & _BOR_ON_2L & _BORV_42_2L _CONFIG2H, _WDT_OFF_2H &_WDTPS_2_2H _CONFIG4L, _STVR_ON_4L & _LVP_OFF_4L & _DEBUG_OFF_4L movlw movwf b'00000111' ADCON1 Configuración del puerto A, como digitales. movlw movwf b'00000000' TRISB Configuración del puerto B como salidas. movlw movwf b'10111111' TRISC Configuración del puerto C como entradas, menos RC6. movlw movwf b'00100111' TRISA Configuración del puerto A. movlw movwf b'00011111' TRISD Configuración del puerto D. movlw movwf b'00000000' TRISE Configuración del puerto E. cblock NUM1 NUM2 NUM3 NUM4 CUENTA CUENTA1 VAR DIGITO CASO COSTO Tiempo CounterA PDel0 0x10 Declaración de las variables. 111 PDel1 PDel2 PDel3 PDel4 PDel5 contador paso endc BSF BSF RCSTA,SPEN RCSTA,CREN CONFIGURAR Ingreso de variables como estado inicial. clrf clrf clrf clrf clrf clrf clrf clrf clrf clrf BCF CUENTA CUENTA1 VAR DIGITO CASO COSTO NUM1 NUM2 NUM3 NUM4 PORTA,3 PANTALLA call call call Se configura pantalla LCD. inicializa_lcd Se aprecia en pantalla que la alarma se mensaje_AlarmaDesactiv encuentra desactivada y lista para el Ingrese_Clave ingreso de la clave. INICIO BTFSC GOTO BTFSC GOTO BTFSC GOTO BTFSC GOTO BTFSC Clave de ingreso: 0000 Rutina que se encarga de preguntar si ingrese algún digito. PORTC,1 UNO PORTC,0 DOS PORTA,5 TRES PORTD,0 CUATRO PORTC,3 112 GOTO BTFSC GOTO BTFSC GOTO BTFSC GOTO BTFSC GOTO BTFSC GOTO CINCO PORTC,2 SEIS PORTD,3 SIETE PORTD,2 OCHO PORTD,1 NUEVE PORTC,5 CERO movlw SUBWF BTFSS GOTO CALL GOTO b'00000000' CUENTA1 STATUS,Z NOSE APAGADO INICIO NOSE CALL CALL GOTO DONDE decfsz GOTO MOVLW ADDWF decfsz RETURN bsf MOVLW ADDWF RETURN ROSOL CALL RETURN UNO ACTIVADOCC DONDE INICIO contador ROSOL b'01100000' contador,1 paso Pregunto si la alarma esta desactivada o activada, para luego enviar el mensaje correspondiente. Al estar activada la alarma, va a la subrutina ACTIVADOCC que se encarga de transmitir al MODEM que la alarma se encuentra activada. Pregunto si se cumplieron los 30 segundos para activar la sirena, en caso que la alarma se encuentre activada. PORTA,3 b'00000010' paso,1 PDelay Una vez ingresado el digito, este se 113 CLRF DIGITO MOVLW 1 ADDWF DIGITO, 1 DIGITO, 1 GOTO CARGAR DOS CLRF DIGITO MOVLW 2 2 ADDWF DIGITO, 1 DIGITO, 1 GOTO CARGAR TRES CLRF DIGITO MOVLW 3 3 ADDWF DIGITO, 1 DIGITO, 1 GOTO CARGAR CUATRO CLRF DIGITO MOVLW 4 4 ADDWF DIGITO, 1 DIGITO, 1 GOTO CARGAR CINCO CLRF DIGITO MOVLW 5 5 ADDWF DIGITO, 1 DIGITO, 1 GOTO CARGAR SEIS CLRF DIGITO MOVLW 6 6 ADDWF DIGITO, 1 DIGITO, 1 GOTO CARGAR SIETE CLRF DIGITO MOVLW 7 7 ADDWF DIGITO, 1 DIGITO, 1 GOTO CARGAR OCHO carga a la variable DIGITO. 114 CLRF DIGITO MOVLW 8 8 ADDWF DIGITO, 1 DIGITO, 1 GOTO CARGAR NUEVE CLRF DIGITO MOVLW 9 9 ADDWF DIGITO, 1 DIGITO, 1 GOTO CARGAR CERO CLRF DIGITO MOVLW 0 0 ADDWF DIGITO, 1 DIGITO, 1 GOTO CARGAR CARGAR INCF CUENTA, 1 Incrementa la variable Cuenta, para identificar cuantos dígitos se ingresaron. MOVLW SUBWF BTFSS GOTO GOTO b'00000001' CUENTA,0 STATUS,Z X UNOSS X MOVLW SUBWF BTFSS GOTO GOTO b'00000010' CUENTA,0 STATUS,Z XX DOSS XX MOVLW SUBWF BTFSS GOTO GOTO b'00000011' CUENTA,0 STATUS,Z XXX TRESS XXX MOVLW b'00000100' 115 SUBWF BTFSS GOTO GOTO CUENTA,0 STATUS,Z CARGAR CUATROSS GOTO INICIO UNOSS call call clrf MOVF ADDWF VAR, 1 GOTO DOSS call clrf MOVF ADDWF VAR, 1 GOTO TRESS call clrf MOVF ADDWF VAR, 1 GOTO CUATROSS call clrf MOVF ADDWF VAR, 1 GOTO COMPARAR ADDWF VAR, 1 SUBWF BTFSS GOTO GOTO comienzo clave_x VAR NUM1,0 Llama al Lcd para indicar al usuario que la primera clave fue ingresada. Carga la primera clave en la variable VAR. COMPARAR clave_xx VAR NUM2,0 Llama al Lcd para indicar al usuario que la segunda clave fue ingresada. Carga la segunda clave en la variable VAR. COMPARAR clave_xxx VAR NUM3,0 COMPARAR clave_xxxx VAR NUM4,0 COMPARAR DIGITO STATUS,Z MALO TERMINO Llama al Lcd para indicar al usuario que la tercera clave fue ingresada. Carga la tercera clave en la variable VAR. Llama al Lcd para indicar al usuario que la cuarta clave fue ingresada. Carga la cuarta clave en la variable VAR. Compara las variables DIGITO y VAR. Si es distinta a cero va a una subrutina malo, en caso contrario pregunta si los dígitos ingresados llegaron a cuatro. 116 TERMINO CALL MOVLW SUBWF BTFSS GOTO GOTO PDelay b'00000100' CUENTA,0 STATUS,Z INICIO ENOCAM ENOCAM BTFSC GOTO BTFSC PORTD,4 ENTER PORTC,4 Pregunta si voy a pulsar cambio de clave o enter. movlw SUBWF BTFSS GOTO CALL GOTO b'00000000' CUENTA1 STATUS,Z NOXP APAGADO ENOCAM Rutina encargada de transmitir el estado de la alarma (activada o desactivada). NOXP CALL GOTO PRENDIO ENOCAM ENTER movlw SUBWF BTFSS GOTO GOTO b'00000000' CUENTA1 STATUS,Z DESACTIVADO ACTIVADO Subrutina de tiempo, para que no se produzcan rebotes. En caso de no ser ingresados los 4 dígitos vuelve al INICIO. Pregunta si debo activar o desactivar la alarma en caso de que pulse ENTER. ACTIVADO CLRF COSTO INCF CUENTA1, 1 CLRF CASO CLRF contador CALL CALL CALL comienzo mensaje_AlarmaActiv PRENDIDO Envía un mensaje al LCD que la alarma se encuentra activada. Subrutina para transmitir al MODEM que esta activada la alarma. 117 movlw movwf CARO CALL CALL CALL CALL decfsz GOTO CALL GOTO b'00001010' paso SEGUNDOS SEGUNDOS SEGUNDOS PRENDIDO paso CARO PRENDIO ACTIVADOCC PRENDIDO BCF TXSTA,BRGH MOVLW .64 MOVWF SPBRG BCF TXSTA,SYNC BSF TXSTA,TXEN movlw b'00000001' movwf TXREG COMP_TX btfss goto RETURN Envía mensaje al MODEM que la alarma esta activada. TXSTA,TRMT COMP_TX PRENDIO Envía mensaje al MODEM que la alarma esta activada. BCF TXSTA,BRGH MOVLW .64 MOVWF SPBRG BCF TXSTA,SYNC BSF TXSTA,TXEN movlw b'00000110' movwf TXREG COMPRAF btfss goto RETURN Espera 30 segundos, para que salga el usuario. TXSTA,TRMT COMPRAF 118 ACTIVADOCC BTFSC GOTO BTFSC GOTO BTFSC GOTO PORTA,0 ALA PORTA,1 ALARM PORTA,2 ALARMA movlw SUBWF BTFSS GOTO b'00000000' CASO STATUS,Z PRENDIDO CALL PRENDIDO GOTO ACTIVADOCC ALA BCF MOVLW MOVWF TXSTA,BRGH .64 SPBRG BCF TXSTA,SYNC BSF TXSTA,TXEN movlw b'00000011' movwf TXREG COMP_TXRE btfss goto GOTO Eclipce Subrutina encargada de preguntar por cada uno de los sensores. Llama a la subrutina prendido para luego volver al inicio. Llama a la subrutina prendido, para luego volver a preguntar por los sensores. Subrutina encargada de preguntar por cada uno de los sensores. Modo asíncrono de baja velocidad. Configura la velocidad de transmisión. Selecciono modo asíncrono. Inicio la transmisión. Envió un 3 en binario, para indicar que el detector de humo se encuentra activado. TXSTA,TRMT COMP_TXRE Pregunto si finalizo la transmisión. ALARM BCF MOVLW MOVWF TXSTA,BRGH .64 SPBRG Modo asíncrono de baja velocidad. Configura la velocidad de transmisión. BCF TXSTA,SYNC Selecciono modo asíncrono. 119 BSF TXSTA,TXEN movlw b'00000100' movwf TXREG COMP_TXQT btfss goto GOTO Eclipce ALARMA BCF MOVLW MOVWF Inicio la transmisión. Envió un 4 en binario, para indicar que el detector de movimiento se encuentra activado. TXSTA,TRMT COMP_TXQT Pregunto si finalizo la transmisión. TXSTA,BRGH .64 SPBRG Modo asíncrono de baja velocidad. BCF TXSTA,SYNC BSF TXSTA,TXEN movlw b'00000101' movwf TXREG COMP_TXPB btfss goto GOTO Eclipce TXSTA,TRMT COMP_TXPB Eclipce movlw SUBWF BTFSS RETURN b'00000000' CASO STATUS,Z INCF CLRF CLRF CLRF BSF CASO, 1 VAR DIGITO CUENTA PORTA,3 CALL CALL comienzo mensaje_Intruso CALL Ingrese_Clave CALL SEGUNDOS Configura la velocidad de transmisión. Selecciono modo asíncrono. Inicio la transmisión. Envió un 5 en binario, para indicar que el sensor magnético se encuentra activado. Pregunto si finalizo la transmisión. Pregunta si la alarma ya se había activado con anterioridad, para volver a la rutina inicio. Incrementa la variable CASO. Borra la variable VAR. Borra la variable DIGITO. Borra la variable CUENTA. Envía un uno lógico para activar el buzzer, mediante el pin RA3. Subrutina encargada de borra el LCD. Subrutina encargada de visualizar en el LCD la palabra intruso. Subrutina encargada de visualizar en el LCD las palabras ingrese clave. 120 CALL BCF GOTO SEGUNDOS PORTA,3 INICIO Subrutina de tiempo. Apago el Buzzer. Vuelvo a INICIO. CLRF CLRF clrf CASO COSTO CUENTA1 Rutina de sistema de alarma desactivado. Borra la variable CASO. Borra la variable COSTO. Borra la variable CUENTA1. CALL APAGADO DESACTIVADO CALL Envía mensaje al MODEM que la alarma esta desactivada. comienzo Subrutina que borra el LCD. mensaje_AlarmaDesactiv Subrutina encargada de visualizar en el LCD la palabra alarma desactivada. Ingrese_Clave Subrutina encargada de visualizar en el LCD la palabra ingrese clave. PDelay CLRF CLRF CLRF VAR DIGITO CUENTA GOTO INICIO call CALL call APAGADO BCF MOVLW MOVWF TXSTA,BRGH .64 SPBRG Configura la velocidad de transmisión. BCF TXSTA,SYNC BSF TXSTA,TXEN movlw b'00000010' movwf TXREG Selecciono modo asíncrono. Inicio la transmisión. Envió un 2 en binario, para indicar que la alarma se encuentra desactivada. COMP_TXSC btfss goto Pregunto si finalizo la transmisión. RETURN TXSTA,TRMT COMP_TXSC Modo asíncrono de baja velocidad. 121 MALO Rutina encargada de detectar una clave errónea. CALL MOVLW SUBWF BTFSS GOTO GOTO PDelay b'00000100' CUENTA,0 STATUS,Z MALITO LISTO LISTO CLRF CLRF CLRF GOTO CUENTA VAR DIGITO VICHO Pregunto si los dígitos ingresados llegan a cuatro. NUEVO CALL CALL comienzo mensaje_Error CALL Ingrese_Clave GOTO INICIO VICHO BTFSC GOTO PORTD,4 NUEVO Pregunto si pulse enter. movlw SUBWF BTFSS GOTO CALL GOTO b'00000000' CUENTA1 STATUS,Z NTEP APAGADO VICHO Pregunto si la alarma esta activada o desactivada y posteriormente enviar el mensaje correspondiente al MODEM. NTEP CALL GOTO PRENDIO VICHO MALITO BTFSC Indica el termino de la rutina MALO. Subrutina que borra el LCD. Subrutina encargada de visualizar en el LCD la palabra error. Subrutina encargada de visualizar en el LCD las palabras ingrese clave. Vuelve a INICIO. Rutina encarga de preguntar si pulse algún digito. PORTC,1 122 GOTO REMALO BTFSC GOTO PORTC,0 REMALO BTFSC GOTO PORTA,5 REMALO BTFSC GOTO PORTD,0 REMALO BTFSC GOTO PORTC,3 REMALO BTFSC GOTO PORTC,2 REMALO BTFSC GOTO PORTD,3 REMALO BTFSC GOTO PORTD,2 REMALO BTFSC GOTO PORTD,1 REMALO BTFSC GOTO PORTC,5 REMALO movlw SUBWF BTFSS GOTO CALL GOTO b'00000000' CUENTA1 STATUS,Z NOSEX APAGADO MALITO NOSEX Pregunto si la alarma esta activada o desactivada y posteriormente enviar el mensaje correspondiente al MODEM. 123 CALL CALL GOTO COMO decfsz GOTO MOVLW ADDWF decfsz RETURN bsf MOVLW ADDWF RETURN ROSOLES CALL RETURN ACTIVADOCC COMO MALITO contador ROSOLES b'11000000' contador,1 paso PORTA,3 b'00000010' paso,1 Envía un uno lógico para activar el buzzer, mediante el pin RA3. PDelay REMALO INCF CUENTA, 1 MOVLW SUBWF BTFSS GOTO GOTO Rutina de tiempo que permite la espera de 30 segundos para la activación del buzzer en caso de que la alarma se encuentre activada. Rutina encargada de enviar al LCD los dígitos ingresado, mediante la identificación de la variable CUENTA. b'00000001' CUENTA,0 STATUS,Z QW UNOSSXX QW MOVLW SUBWF BTFSS GOTO GOTO b'00000010' CUENTA,0 STATUS,Z QWE DOSSXX QWE MOVLW SUBWF BTFSS b'00000011' CUENTA,0 STATUS,Z 124 GOTO GOTO QRT TRESSXX QRT MOVLW SUBWF BTFSS GOTO GOTO b'00000100' CUENTA,0 STATUS,Z REMALO CUATROSSXX UNOSSXX call call comienzo clave_x CALL GOTO PDelay MALITO DOSSXX call clave_xx CALL GOTO PDelay MALITO TRESSXX call clave_xxx CALL GOTO PDelay MALITO CUATROSSXX call clave_xxxx CALL GOTO PDelay LISTO CAMBIOSS BTFSC GOTO BTFSC GOTO BTFSC GOTO PORTC,1 UNOX PORTC,0 DOSX PORTA,5 TRESX Llama al Lcd para indicar al usuario que la primera clave fue ingresada. Llama al Lcd para indicar al usuario que la segunda clave fue ingresada. Llama al Lcd para indicar al usuario que la tercera clave fue ingresada. Llama al Lcd para indicar al usuario que la cuarta clave fue ingresada. Subrutina que pregunta que digito se ingresa. 125 BTFSC GOTO BTFSC GOTO BTFSC GOTO BTFSC GOTO BTFSC GOTO BTFSC GOTO BTFSC GOTO PORTD,0 CUATROX PORTC,3 CINCOX PORTC,2 SEISX PORTD,3 SIETEX PORTD,2 OCHOX PORTD,1 NUEVEX PORTC,5 CEROX CALL APAGADO GOTO CAMBIOSS UNOX CLRF DIGITO MOVLW 1 ADDWF DIGITO, 1 GOTO CARGARS DOSX CLRF DIGITO MOVLW 2 ADDWF DIGITO, 1 GOTO CARGARS TRESX CLRF DIGITO MOVLW 3 ADDWF DIGITO, 1 GOTO CARGARS CUATROX CLRF DIGITO MOVLW 4 ADDWF DIGITO, 1 GOTO CARGARS Llama a la subrutina apagado, para comunicar que la alarma esta desactivada. 126 CINCOX CLRF DIGITO MOVLW 5 ADDWF DIGITO, 1 GOTO CARGARS SEISX CLRF DIGITO MOVLW 6 ADDWF DIGITO, 1 GOTO CARGARS SIETEX CLRF DIGITO MOVLW 7 ADDWF DIGITO, 1 GOTO CARGARS OCHOX CLRF DIGITO MOVLW 8 ADDWF DIGITO, 1 GOTO CARGARS NUEVEX CLRF DIGITO MOVLW 9 ADDWF DIGITO, 1 GOTO CARGARS CEROX CLRF DIGITO MOVLW 0 ADDWF DIGITO, 1 GOTO CARGARS CARGARS INCF CUENTA, 1 MOVLW SUBWF Cargo el digito en la variables NUM1, NUM2 NUM3 y NUM4 según la variable cuenta. b'00000001' CUENTA,0 127 BTFSS GOTO GOTO STATUS,Z Y UNOSSS Y MOVLW SUBWF BTFSS GOTO GOTO b'00000010' CUENTA,0 STATUS,Z YY DOSSS YY MOVLW SUBWF BTFSS GOTO GOTO b'00000011' CUENTA,0 STATUS,Z YYY TRESSS YYY MOVLW SUBWF BTFSS GOTO GOTO b'00000100' CUENTA,0 STATUS,Z CAMBIOSS CUATROSSS UNOSSS call call clrf NUM1 MOVF ADDWF NUM1, 1 GOTO comienzo clave_x DIGITO,0 TERMINOS DOSSS call clave_xx clrf NUM2 MOVF DIGITO,0 ADDWF NUM2, 1 GOTO TERMINOS TRESSS call clave_xxx 128 clrf NUM3 MOVF DIGITO,0 ADDWF NUM3, 1 GOTO TERMINOS CUATROSSS call clrf MOVF ADDWF NUM4, 1 GOTO clave_xxxx NUM4 DIGITO,0 TERMINOS TERMINOS CALL MOVLW SUBWF BTFSS GOTO GOTO PDelay b'00000100' CUENTA,0 STATUS,Z CAMBIOSS CAMBIO CAMBIO BTFSC GOTO GOTO CALL PORTD,4 REALIZADO CAMBIO APAGADO REALIZADO CLRF CLRF CLRF clrf call call call GOTO VAR DIGITO CUENTA CUENTA1 comienzo Mando un mensaje al usuario que la mensaje_AlarmaDesactiv alarma esta desactivada y lista para Ingrese_Clave ingresar la clave. INICIO PDelay movlw movwf PLoop0 movlw movwf Pregunto si fueron ingresados todos los digitos. Subrutina de tiempo para anti-rebotes. .22 PDel0 .113 PDel1 129 PLoop1 movlw movwf PLoop2 clrwdt decfsz goto decfsz goto decfsz goto clrwdt return SEGUNDOS movlw movwf Seg movlw movwf PLoop3 movlw movwf PLoop4 movlw movwf PLoop5 clrwdt decfsz goto decfsz goto decfsz goto clrwdt return decfsz goto return tiempo1 movlw .125 PDel2 clrwdt PDel2, 1 PLoop2 PDel1, 1 PLoop1 PDel0, 1 PLoop0 Subrutina para la salida del personal. b'01000000' CounterA .43 PDel3 .226 PDel4 .205 PDel5 clrwdt PDel5, 1 PLoop5 PDel4, 1 PLoop4 PDel3, 1 PLoop3 CounterA, 1 Seg Subrutina ocupada para el LCD. .14 130 movwf PLoop0w movlw movwf PLoop1w movlw movwf PLoop2w clrwdt decfsz goto decfsz goto decfsz goto PDelL1w goto PDelL2w clrwdt return DELAY_5MS movlw movwf PLoop1X movlw movwf PLoop2X clrwdt decfsz goto decfsz goto return inicializa_lcd call call PDel0 .72 PDel1 .247 PDel2 PDel2, 1 PLoop2w PDel1, 1 PLoop1w PDel0, 1 PLoop0w PDelL2w Rutina de cinco segundos. .55 PDel0 .181 PDel1 clrwdt PDel1, 1 PLoop2X PDel0, 1 PLoop1X tiempo1 tiempo1 131 call tiempo1 CALL BCF BCF LCD_PORT PORTD,5 PORTD,7 START START_1 MOVLW CALL MOVLW CALL MOVLW CALL LCD_E BSF NOP call BCF RETURN LCD_BUSY BSF MOVLW MOVWF BSF call L_BUSY BTFSC GOTO BCF CLRF BCF RETURN LCD_REG BCF MOVWF CALL CALL LCD_INI Subrutinas encargadas de inicializar el LCD. Subrutina encargada de la configuración del LCD. Borrar LCD . b'00000001' LCD_REG b'00000110' LCD_REG b'00001100' LCD_REG Prende el LCD, sin parpadeo ni cursor. PORTD,7 Activa la señal E. tiempo1 PORTD,7 Desactiva la señal E. PORTD,6 .255 TRISB PORTD,7 tiempo1 Pone el LCD en modo lectura. Puerta B actúa de entrada. Activa la señal E. PORTB,7 L_BUSY PORTD,7 TRISB PORTD,6 Chequea el bit BUSY. Si esta ocupado vuelve a L_BUSY. Desactiva el LCD (Señal E) Puerto B actúa como salida. Pone el LCD en modo escritura. PORTD,5 PORTB LCD_BUSY Desactiva RS (Modo instrucción). Saca el código de instrucción. Espera a que se libere el LCD. 132 GOTO LCD_E Genera pulso en señal E. LCD_DATOS BCF MOVWF CALL BSF GOTO PORTD,5 PORTB LCD_BUSY PORTD,5 LCD_E Desactiva la señal RS. Valor ASCII a sacar por Puerto B. Espera a que se libere el LCD. Activa la señal RS (Modo dato) . Genera pulso en señal E. LCD_INI MOVLW CALL CALL MOVLW CALL CALL MOVLW CALL CALL MOVLW CALL CALL MOVLW CALL CALL RETURN LCD_PORT CLRF MOVLW MOVWF BCF BCF b'00111000' LCD_REG DELAY_5MS b'00111000' LCD_REG DELAY_5MS b'00111000' LCD_REG DELAY_5MS b'00111000' LCD_REG DELAY_5MS b'00111000' LCD_REG DELAY_5MS TRISB b'00011111' TRISD PORTD,5 PORTD,7 mensaje_AlarmaDesactiv MOVLW CALL 0x81 LCD_REG Código de instrucción. Temporiza 5 ms. Código de instrucción. Temporiza 5 ms. Código de instrucción. Temporiza 5 ms. Código de instrucción. Temporiza 5 ms. Código de instrucción. Temporiza 5 ms. Puerto B se programa como salida. Desactiva la señal RS del modulo LCD. Desactiva la señal E del modulo LCD. Mensaje al LCD que la alarma se encuentra desactivada. Manda la dirección en la que se situara el pulsador. 133 MOVLW CALL MOVLW CALL 'A' LCD_DATOS 'L' LCD_DATOS MOVLW CALL 0x84 LCD_REG MOVLW CALL MOVLW CALL MOVLW CALL MOVLW CALL MOVLW CALL MOVLW CALL MOVLW CALL MOVLW CALL MOVLW CALL MOVLW CALL MOVLW CALL return 'D' LCD_DATOS 'E' LCD_DATOS 'S' LCD_DATOS 'A' LCD_DATOS 'C' LCD_DATOS 'T' LCD_DATOS 'I' LCD_DATOS 'V' LCD_DATOS 'A' LCD_DATOS 'D' LCD_DATOS 'A' LCD_DATOS Manda la dirección en la que se situara el pulsador. Ingrese_Clave MOVLW CALL 0xC1 LCD_REG MOVLW CALL MOVLW CALL 'I' LCD_DATOS 'N' LCD_DATOS Manda la dirección en la que se situara el pulsador. 134 MOVLW CALL MOVLW CALL MOVLW CALL MOVLW CALL MOVLW CALL 'G' LCD_DATOS 'R' LCD_DATOS 'E' LCD_DATOS 'S' LCD_DATOS 'E' LCD_DATOS MOVLW CALL 0xC9 LCD_REG MOVLW CALL MOVLW CALL MOVLW CALL MOVLW CALL MOVLW CALL 'C' LCD_DATOS 'L' LCD_DATOS 'A' LCD_DATOS 'V' LCD_DATOS 'E' LCD_DATOS return clave_x MOVLW CALL 0x83 LCD_REG MOVLW CALL MOVLW CALL MOVLW CALL MOVLW CALL MOVLW CALL 'C' LCD_DATOS 'L' LCD_DATOS 'A' LCD_DATOS 'V' LCD_DATOS 'E' LCD_DATOS Manda la dirección en la que se situara el pulsador. 135 MOVLW CALL 0x89 LCD_REG MOVLW CALL return 'X' LCD_DATOS clave_xx MOVLW 0x8A CALL MOVLW 'X' CALL return clave_xxx MOVLW CALL LCD_REG Manda la dirección en la que se situara el pulsador. Manda la dirección en la que se situara el pulsador. LCD_DATOS 0x8B LCD_REG Manda la dirección en la que se situara el pulsador. MOVLW 'X' CALL LCD_DATOS return clave_xxxx MOVLW CALL MOVLW CALL return 0x8C LCD_REG Manda la dirección en la que se situara el pulsador. 'X' LCD_DATOS mensaje_AlarmaActiv MOVLW CALL 0x83 LCD_REG MOVLW CALL MOVLW CALL 'A' LCD_DATOS 'L' LCD_DATOS Manda la dirección en la que se situara el pulsador. 136 MOVLW 0x86 CALL MOVLW CALL MOVLW CALL MOVLW CALL MOVLW CALL MOVLW CALL MOVLW CALL MOVLW CALL MOVLW CALL return LCD_REG Manda la dirección en la que se situara el pulsador. 'A' LCD_DATOS 'C' LCD_DATOS 'T' LCD_DATOS 'I' LCD_DATOS 'V' LCD_DATOS 'A' LCD_DATOS 'D' LCD_DATOS 'A' LCD_DATOS mensaje_Intruso MOVLW CALL 0x84 LCD_REG MOVLW CALL MOVLW CALL MOVLW CALL MOVLW CALL MOVLW CALL MOVLW CALL MOVLW CALL return 'I' LCD_DATOS 'N' LCD_DATOS 'T' LCD_DATOS 'R' LCD_DATOS 'U' LCD_DATOS 'S' LCD_DATOS 'O' LCD_DATOS Manda la dirección en la que se situara el pulsador. 137 mensaje_Error MOVLW 0x85 CALL MOVLW 'E' CALL MOVLW CALL MOVLW CALL MOVLW CALL MOVLW CALL return LCD_REG Manda la dirección en la que se situara el pulsador. 'E' LCD_DATOS 'R' LCD_DATOS 'R' LCD_DATOS 'O' LCD_DATOS 'R' LCD_DATOS mensaje_Cambio_Clave MOVLW CALL 0x81 LCD_REG MOVLW CALL MOVLW CALL MOVLW CALL MOVLW CALL MOVLW CALL MOVLW CALL MOVLW CALL 'I' LCD_DATOS 'N' LCD_DATOS 'G' LCD_DATOS 'R' LCD_DATOS 'E' LCD_DATOS 'S' LCD_DATOS 'E' LCD_DATOS MOVLW 0x89 CALL LCD_REG MOVLW CALL 'N' LCD_DATOS Manda la dirección en la que se situara el pulsador. Manda la dirección en la que se situara el pulsador. 138 MOVLW CALL MOVLW CALL MOVLW CALL MOVLW CALL 'U' LCD_DATOS 'E' LCD_DATOS 'V' LCD_DATOS 'A' LCD_DATOS MOVLW CALL 0xC6 LCD_REG MOVLW CALL MOVLW CALL MOVLW CALL MOVLW CALL MOVLW CALL return 'C' LCD_DATOS 'L' LCD_DATOS 'A' LCD_DATOS 'V' LCD_DATOS 'E' LCD_DATOS comienzo MOVLW CALL return end b'00000001' LCD_REG Borrar LCD y Home. 139 5.1.4 Imágenes de la Implementación. Fig.-5.10 Fig.-5.11 140 Fig.-5.12 Fig.-5.13