ESCUELA POLITÉCNICA NACIONAL ESCUELA DE FORMACIÓN TECNOLÓGICA CONSTRUCCIÓN DE TARJETA DE DESARROLLO PARA VERIFICAR PROGRAMAS DE MICROCONTROLADORES PIC’S DE LA FAMILIA 18FXXX PARA EL LABORATORIO DE MICROPROCESADORES DE LA ESFOT PROYECTO PREVIO A LA OBTENCIÓN DEL TÍTULO DE TECNÓLOGO EN ELECTRÓNICA Y TELECOMUNICACIONES ROJAS ROJAS LUIS JAVIER [email protected] MOLINA ALVAREZ DARWIN GEOVANNY [email protected] DIRECTOR: COSTALES GUADALUPE ALCIVAR EDUARDO [email protected] Quito, julio 2010 DECLARACIÓN Nosotros, ROJAS ROJAS LUIS JAVIER y MOLINA ALVAREZ DARWIN GEOVANNY declaramos bajo juramento que el trabajo aquí descrito es de nuestra autoría; que no ha sido previamente presentada para ningún grado o calificación profesional; y, que hemos consultado las referencias bibliográficas que se incluyen en este documento. A través de la presente declaración cedemos nuestros derechos de propiedad intelectual correspondiente a este trabajo, a la Escuela Politécnica Nacional, según lo establecido por la Ley de Propiedad Intelectual, por su reglamento y por la normatividad institucional vigente. Rojas Rojas Luis Javier Molina Álvarez Darwin Geovanny CERTIFICACIÓN Certifico que el presente trabajo fue desarrollado por ROJAS ROJAS LUIS JAVIER y MOLINA ALVAREZ DARWIN GEOVANNY, bajo mi supervisión. Ing. Alcivar Costales DIRECTOR DE PROYECTO DEDICATORIA El presente trabajo primeramente lo dedico a Dios que me permite terminar un ciclo más en la vida y me da la fuerza diaria para continuar, a mis Padres José Oswaldo Rojas y Deifilia Rojas que con su esfuerzo y compresión supieron darme los valores necesarios para llegar a ser un excelente profesional, a mi hermana Fernanda Rojas le dedico este trabajo que es con gran esfuerzo y que siempre continúe en la vida hasta lograr alcanzar sus metas. Este trabajo también le dedico a mi novia Joselyn que supo llegar a mi vida en el momento preciso y que nunca deje sus sueños y metas porque todo se consigue con esfuerzo. A todos mis compañeros y amigos que han valorado el esfuerzo que implica tener una gran amistad. Rojas Rojas Luis Javier DEDICATORIA El presente trabajo lo dedico a Dios por permitirme alcanzar una meta mas en mi vida, a mis padres Marco Molina y Aida Alvarez quienes con su amor y paciencia siempre me han apoyado y guiado por el buen camino, a mis hermanos Sonia, Mónica, Marco y Freddy quienes me aconsejaron para siempre cumplir las metas que hay en la vida y me dieron fuerzas para conseguirlas paso a paso, a mi novia Andrea Gavilanes quien siempre estuvo a mi lado tanto en los buenos como en los malos momentos y finalmente a mis compañeros que estuvieron pendientes de mi formación profesional. Molina Alvarez Darwin Geovanny TEMARIO i. RESÚMEN. ii. INTRODUCCIÓN. CAPITULO 1. 1.1 MARCO TEÓRICO TECLADO MATRICIAL. .................................................................................1 1.1.1 ESTRUCTURA INTERNA. ......................................................................... 1 1.1.2 CONEXIÒN. ............................................................................................... 2 1.2 LCD I2C. .......................................................................................................3 1.2.1 PARTES CONSTITUTIVAS. .................................................................... 4 1.2.2 MEMORIA INTERNA. .............................................................................. 4 1.2.3 CONEXIÒN. ............................................................................................. 5 1.3 TOUCH SCREEN. ..........................................................................................5 1.3.1 TIPOS ...................................................................................................... 6 1.3.2 BENEFICIOS Y UTILIDADES. ................................................................. 9 1.3.3 PROGRAMACIÒN. .................................................................................. 9 1.4 MICROPROCESADORES. ...........................................................................13 1.4.1 PIC`s 18FXXX. ....................................................................................... 13 1.4.2 DISPONIBILIDAD I2C. ............................................................................. 15 1.5 PROTOCOLO I2C. .......................................................................................15 1.5.1 INTRODUCCIÒN. ..................................................................................... 15 1.5.2 COMUNICACIÒN I2C. ............................................................................. 16 1.5.3 IMPLEMENTACIÒN. ................................................................................ 17 1.6 USB .............................................................................................................18 1.6.1 INTRODUCCIÒN. .................................................................................... 18 1.6.2 USOS. ..................................................................................................... 21 1.7 VISUAL BASIC. ..........................................................................................22 1.7.1 INTRODUCCIÒN. ................................................................................... 22 1.7.2 APLICACIONES A LOS Pic´s 18FXXX .......................................... 24 CAPITULO 2. 2.1 DISEÑO HARDWARE. .............................................................................................. 25 2.1.1 DIAGRAMA EN BLOQUES................................................................. 25 2.1.2 PLANIFICACIÒN DE ELEMENTOS EN PROTO – BOARD. .............. 28 2.1.3 ENSAMBLAJE EN PROTO – BOARD. ............................................ 30 2.1.4 ELABORACIÒN DE PLACA ELECTRÒNICA. ................................... 31 2.1.4.1 Creación De Pistas Mediante Proteus Professional (ARES) ....... 31 2.1.4.2 Traslado De Pistas Hasta Baquelita Para Obtener Tarjeta Final... 36 2.1.5 2.2 CONEXIONES. ..................................................................................... 37 SOFTWARE. ............................................................................................... 38 2.2.1 SIMULACIÒN MEDIANTE PROTEUS PROFESSIONAL (ISIS). ....... 38 2.2.2 PROGRAMAS DE PRUEBA PARA LA TARJETA ELABORADA EN MIKRO–C. ......................................................................................................... 41 2.2.3 IMPLEMENTACIÒN DE UN PROGRAMA EN VISUAL BASIC PARA INTERACCIÒN PC – TARJETA . ...................................................................... 62 2.2.4 CORRECCIÒN DE ERRORES. ............................................................ 89 CAPITULO 3. 3.1 CONCLUSIONES Y RECOMENDACIONES ........................................... 91 3.2 BIBLIOGRAFÍA. ...................................................................................... 94 3.3 ANEXOS. ................................................................................................. 95 i. RESÙMEN. El presente trabajo abarca aspectos metodológicos conocidos en su mayoría por los estudiantes, que permitirán desarrollar una gran gama de aplicaciones para comprender y familiarizarse con dispositivos electrónicos desarrollados de tal manera que son compatibles con tecnologías que hoy en día son muy comunes y están presentes en muchas aplicaciones ya sean domésticas, industriales, mecánicas, etc. El comportamiento creciente de aplicaciones que utilizan microprocesadores para control y monitoreo de múltiples aplicaciones, hace que sea de gran importancia el conocimiento del manejo de estos dispositivos y aprovechar al máximo su potencial, es así, que ponemos en consideración algunas aplicaciones que puedan ayudar a entender el funcionamiento de un Pic 18F4550 y la forma como interactuar entre medios tangibles y no tangibles (medios físicos y programación involucrada). ii. INTRODUCCIÒN. La utilización de dispositivos electrónicos en múltiples aplicaciones es muy común en muchos lugares que visitamos y varía de acuerdo a las necesidades y requerimientos del cliente. Así para quién diseña y proporciona los diferentes dispositivos, trata de que sean lo más sencillo posible para una interacción fácil y rápida. Utilizar pantallas táctiles (Touch Screen) como perfiles de entrada y salida a la vez, dejando de lado la necesidad de utilizar botones (Teclados), selectores manuales, temporizadores externos, etc., producen una optimización del microcontrolador que gobierna todo el circuito y así tener más aplicaciones controladas por un solo dispositivo inteligente. Es necesario conocer entonces el funcionamiento de elementos tales como: Touch Screen, Teclado Matricial, PIC 18F4550, LCD I2C utilizados en este proyecto y que se los encuentra en múltiples lugares y en múltiples aplicaciones. Además de la interacción con un ordenador ya sea mediante comunicación serial (RS 232), comunicación paralela (Puerto de Impresora LPT) o ya sea mediante USB que es la que se utiliza en nuestro proyecto, es importante también conocer como un complemento entre medios físicos hacia un ordenador y viceversa. CAPÌTULO 1 1 MARCO TEÒRICO 1.1 TECLADO MATRICIAL. Representa un dispositivo de entrada generalmente conectado hacia el microprocesador el cual permite introducir únicamente señales de voltaje al momento de ser presionada una de las teclas y de esta manera ser procesado este valor (voltaje) para su respectiva aplicación. Figura 1.1 Teclado Matricial 1.1.1 ESTRUCTURA INTERNA. Un teclado matricial está constituido por pulsadores normalmente abiertos formando un circuito, el cual se activa al momento de presionar cualquiera de las teclas enviando así una señal de voltaje que será procesada en el microprocesador o ya sea mediante un decodificador de teclados. Figura 1.2 Teclado Matricial – Estructura Interna Para nuestro proyecto se utilizó un teclado matricial 4x3 que tiene cuatro filas y tres columnas (Figura 1.2), el cuál es un circuito muy simple permitiendo que solo se active el pulsador o tecla que ha sido 2 presionado. El dispositivo LDC I2C que se utiliza en este proyecto consta de una conexión para este tipo de teclado. Existen teclados que en su estructura interna poseen decodificadores los cuáles envían hacia el microprocesador únicamente un valor numérico el cual representa el número de tecla que ha sido presionada. 1.1.2 CONEXIÒN. La conexión de un teclado matricial depende del número de filas y columnas que tenga éste y generalmente cada salida del teclado matricial se lo conecta a una entrada del microprocesador que va a gobernar el circuito ya sea en un solo puerto o entre puertos. Figura 1.3 Teclado Matricial – Esquemático En algunos casos se utilizan resistencias de protección para evitar enviar valores parásitos debido a armónicos que se generan en muchos dispositivos electrónicos. Mediante software implementado en el compilador, se puede disminuir de manera considerable los denominados “rebotes” o armónicos realizando un muestreo continuo a una rapidez determinada. 3 1.2 LCD I2C. Es un dispositivo esclavo, es decir, únicamente recibe datos desde el microprocesador y los presenta en pantalla. En si es un LCD gobernado por un microprocesador en su estructura constitutiva, el cual permite transferir datos desde el microprocesador principal, es Figura 1.4 LCD I2C decir, desde el circuito de aplicación, hacia la pantalla utilizando 2 protocolos de transferencia: - Protocolo I2C (el cuál se va a utilizar en este proyecto) y, - Protocolo SPI. Los dos protocolos son de tipo serial, y necesitan únicamente un bus de datos para su funcionamiento. La forma de utilización entre un protocolo y otro se la realiza mediante la utilización de un jumper, el cual permite inicializar el LCD en modo SPI (jumper on) o I2C (jumper off). Se ha considerado a este dispositivo como LCD I2C ya que es el protocolo de transferencia que se va a utilizar en este proyecto, la forma correcta de llamarlo es LCD SERIAL. 4 Tal como fue mencionado anteriormente, el dispositivo LCD I2C tiene incorporado pines de entrada para un teclado matricial 4x3. El software de programación ( MikroC por ejemplo ) a utilizarse debe tener incluida la función para habilitar el modo I2C , el cuál envía códigos hacia el microprocesador propio del LCD Serial, el cuál interpreta, procesa y muestra el carácter deseado. 1.2.1 PARTES CONSTITUTIVAS. En la Figura 1.5, tenemos la distribución de pines del LCD Serial, en la cual se muestra al lado izquierdo en color rojo 4 pines los cuales representan la polarización del LCD así como el BUS SERIAL de datos, en la parte inferior y de color rojo también se muestran los pines Figura 1.5 LCD I2C –Parte correspondientes a la conexión del TECLADO MATRICIAL 4x3 indicándose la forma de conexión tanto en filas y columnas y por último en una circunferencia de color rojo se muestra el jumper para selección entre modo SPI e I2C. 1.2.2 MEMORIA INTERNA. Teniendo en cuenta que el dispositivo en su conjunto lleva incluido un microprocesador 16F819, es aquí donde se ha designado un Buffer de 64bytes para recibir datos desde el circuito principal, procesarlos y sacarlos en pantalla 5 mediante sistema FIFO (First In First Out). Se trata entonces de un Buffer de 8 bytes, con lo que puede recibir hasta paquetes de hasta 8 caracteres por vez. 1.2.3 CONEXIÒN. Como se trata de un BUS I2C únicamente, las líneas SDA y SCL del LCD I2C son conectadas directamente hacia los pines P33 (RB0) y P34 (RB1) del microprocesador 18F4550 respectivamente y en alguna parte de esta conexión conectar resistencias de pull-up de un valor de 10KΩ c/u necesarias para protección del dispositivo I2C y necesarias también para las condiciones de Inicio de transferencia de datos (Start) y Parada de transferencia de datos (Stop). 1.3 TOUCH SCREEN. Un Touch Screen o pantalla táctil es una lámina resistiva transparente que puede detectar una pulsación dentro de una área determinada, esta pulsación puede estar dada por la mano o comúnmente por un lápiz óptico. El dispositivo actúa como periférico de entrada y la acción ocurrida en esté se Figura 1.6 G LCD con Touch Screen lo transfiere a un GLCD (Graphical Led Display). Se tiene una gran variedad de aplicaciones para estos dispositivos generalmente en computadoras y celulares. 6 1.3.1 TIPOS En el desarrollo de los Touch Screen se utilizan varias topologías como: • Capacitancia. • Superficie de Onda Acústica (SAW). • Infrarrojo. • Resistiva. TOUCH SCREEN CAPACITIVO Recubierto con un material que almacena cargas eléctricas, cuando el panel está tocado, una pequeña cantidad de carga es atraída por el punto de contacto. Circuitos ubicados en cada esquina del panel detectan la variación de corriente y envía información al controlador para su procesamiento. Paneles de pantalla táctil capacitiva se debe tocar con un dedo a diferencia de los paneles de resistencia y la onda de superficie que pueden utilizar los dedos y lápiz, además que pantallas táctiles capacitivas no se ven afectadas por elementos externos y tienen una gran claridad. TOUCH SCREEN DE SUPERFICIE DE ONDA ACÙSTICA (SAW). La tecnología Surface Acoustic Wave es uno de los tipos de pantalla táctil más avanzada y se basa en el envío de ondas acústicas a través de un panel de vidrio transparente con una serie de transductores y reflectores. Cuando un dedo toca la pantalla, las ondas son absorbidas causando un evento táctil que se detecta en ese punto. Debido a que el panel es enteramente de cristal, no hay capas que se puede usar, dando a esta tecnología el mayor factor de durabilidad y también la mayor claridad. 7 TOUCH SCREEN DE INFRARROJO. En una pantalla táctil de infrarrojos se utiliza una matriz de XY infrarrojos LED y un foto-detector pares alrededor de los bordes de la pantalla para detectar una alteración en el patrón de LED. Al momento de la pulsación, se interrumpe el haz de luz infrarrojo desde el emisor hasta el detector, provocando en ambos ejes (X, Y) un punto “muerto” que es detectado y enviado al microcontrolador para su procesamiento. Una ventaja importante de este sistema es que puede detectar prácticamente cualquier entrada incluyendo un dedo, dedo enguantado, lápiz o bolígrafo. A diferencia de pantallas táctiles capacitivas, las pantallas táctiles de infrarrojos no requieren ningún patrón en el cristal que aumenta la durabilidad y la claridad óptica de todo el sistema. TOUCH SCREEN RESISTIVO. Usada en nuestro proyecto, esta topología es la más común y por tanto la más utilizada debido a su fortaleza y confianza al momento de realizar alguna aplicación. Podemos encontrar Touch Screen de 4, 5, 6, 7, 8 hilos. La diferencia entre uno y otro varía de acuerdo al tamaño de la pantalla táctil, puntos de sensibilidad y sobre todo la aplicación. 8 El funcionamiento de esta topología básicamente consta de un divisor de tensión (voltaje) de acuerdo a cuatro posiciones X, Y, -X, -Y, como se puede ver en la Figura 1.7. Figura 1.7 Capas de Touch Screen (4 Hilos) El diseño de un Touch Screen se basa en tres capas: • Capa X+Y+. • Capa X- Y-. • Capa de vidrio transparente. Las capas: X+Y+ y X-Y- son resistivas y su composición es un bañado de ITO (oxido de indio y estaño). Los voltajes analógicos que en estas capas se generan son enviados hacia el microprocesador para ser procesados. En cambio la capa de vidrio transparente es únicamente de protección para las otras 2 capas y evita que estas se deterioren. 9 1.3.2 BENEFICIOS Y UTILIDADES. Tenemos variedad de aplicaciones entre otros tenemos: • Monitores. • Control de Computadoras. • Control de UPS. • Celulares. • Lector de Huellas. • Teclados Virtuales. • Aplicaciones Gráficas de Alta Velocidad. • Control de Refrigeradoras, Televisores, Lavadoras, etc. 1.3.3 PROGRAMACIÒN. De acuerdo a la aplicación, el funcionamiento y por tanto la programación de un Touch Screen depende básicamente de un controlador diseñado a base de transistores PNP y NPN que trabajan conjuntamente para obtener valores analógicos de voltaje de las 2 capas resistivas que constituyen el Touch Screen. De esta manera los valores obtenidos son procesados y convertidos en valores digitales para aplicarlos ya sea en un LCD o en un GLCD. 10 Figura 1.8 Controlador de Touch Screen Nótese en la Figura 1.8 que existen 2 Drivers (DRIVEA y DRIVEB) los cuáles van conectados hacia el microprocesador y controlan (salidas digitales) el estado de polarización de los transistores tanto NPN como PNP para que puedan ser obtenidos valores analógicos desde cada una de las capas (X+Y+ y X-Y-). Valores analógicos ingresan al microprocesador mediante pines que son configurados como entradas analógicas (depende de cada microprocesador) para su procesamiento y posterior aplicación. Estos valores analógicos una vez convertidos en valores digitales son ya interpretados por el microprocesador y nos dan coordenadas X (capa X+Y+) y coordenada Y (capa X-Y-) para representar un punto en el GLCD o bien realizar la lectura de un valor previamente programado. Es necesario entender también que el rango en el que puede caer el valor digital está estrechamente relacionado con el rango de conversión que nos da el microprocesador, el cual está dado por el número de bits de conversión. 11 Es así que al tener un convertidor A/D de 10 bits, implica que el menor valor analógico leído y procesado corresponderá a un valor digital 0x0 (0 en sistema decimal) y el mayor valor analógico leído y procesado corresponderá a un valor digital 0x3FF (1023 en sistema decimal) de acuerdo con la fórmula: # Valores digitales = 2#bits A/D -1 Ecuación 1.1 El valor digital (1023 valores) que corresponde a cada valor de voltaje analógico depende en cambio del tamaño del paso del convertidos A/D y de los valores de la fuente de polarización tanto en estado bajo como en estado alto ya que la diferencia de potencial entre estos estados determinan cada qué valor de voltaje analógico es asignado un valor digital. Sea K = tamaño del paso: Ecuación 1.2 En nuestro caso al tener una fuente de polarización de 0v (0mv) en estado bajo y 5v (5000mv) en estado alto, el tamaño del paso es de: Así para un valor analógico de 2v, el valor digital será: De esta forma se obtienen los valores digitales para cada capa (X+Y+, X-Y-) y por tanto se determina la coordenada X, Y para representar un punto en el GLCD. Nótese que la resolución obtenida se refiere a un sistema cuadrado de 1024 12 x 1024 puntos o pixeles posibles el cuál debe ser transformado a una resolución que pueda ser vista en el dispositivo que se esté utilizando, es decir, si se utiliza un GLCD de resolución 128x64 pixeles para el eje de coordenadas X el mayor valor digital (1023) corresponderá el valor 128 y para el otro eje de coordenadas Y el mayor valor digital (1023) corresponderá en cambio el valor 64. Este cambio de coordenadas se lo puede realizar de manera sencilla en el programa que se esté diseñando utilizando una variable la cual toma el valor para cada coordenada mediante una simple regla de tres. Para nuestro proyecto se utilizaron: Entradas Analógicas (PIC 18F4550): - Port A.F0 (Left Touch Screen) - Port A.F1 (Bottom Touch Screen) Salidas Digitales (PIC 18F4550): - Port A.F2 (Driver A) - Port A.F3 (Driver B) Ejemplos de aplicación son detallados en el Capítulo 2.2.2 Programas de Prueba Para La Tarjeta Elaborada en Mikro-C 13 1.4 MICROPROCESADORES. Un Microprocesador forma parte de un circuito integrado llamado Microcontrolador. Un Microcontrolador en su interior incluye las tres unidades de una computadora y puede ser programado: - Unidad Central de Procesamiento (CPU). - Memoria y - Unidades de E/S (Entrada y Salida): Figura 1.9. Esquema de un Microcontrolador. La estructura interna de un microprocesador es muy compleja y depende del tipo de chip que se trate. Aunque todos poseen el esquema general mostrado en la Figura 1.9 1.4.1 PIC`s 18FXXX. Son Microcontroladores en cuya estructura interna se tienen características mejoradas en comparación con Microcontroladores de familias anteriores, sean estas 16FXXX y/o 14FXXX, tanto en memoria de programa, de datos, como en funciones para las que se les puede utilizar. 14 El número de puertos y por tanto el número de pines de algunos Microcontroladores de esta familia se incrementa teniendo así hasta 44 pines con los cuáles se optimiza de mejor manera la utilización de un único microprocesador para múltiples funciones tales como: • Convertidores Analógicos Digitales y viceversa. • Comunicación con otros Microcontroladores. • Modulación PWM. • Comunicación SPI. • Comunicación I2C. • Comunicación USB. Estas 2 últimas (USB e I2C) propias de varios tipos de microcontroladores 18FXXX por ejemplo: • 18F2455. • 18F2550. • 18F4455. • 18F4550. El microprocesador que se utiliza para desarrollar nuestra tarjeta es el PIC18F4550, se lo escogió por sus características tanto de memoria y facilidad de conectarse a la computadora ya que permite conexión USB y además podemos trabajar mediante comunicación I2C. Figura 1.10 Distribución de Pines del 18F4550 15 1.4.2 DISPONIBILIDAD I2C. Detallados en el numeral anterior, los microprocesadores con disponibilidad I2C pueden ser de 2 formatos. • SDIP (Standard DIP) • SOIC (Small Outline Integrated Circuit) • TQFP (Thin Quad Flat Pack) • PDIP(Dual In Line Package) Es decir, en formato planar (soldados encima de la placa) o en formato transversa (soldados al lado contrario de la placa mediante orificios para cada pin). 1.5 PROTOCOLO I2C. El protocolo de comunicación I2C (Integrated Integrated Circuit) es una forma serial de enviar o recibir datos desde distintos dispositivos conectados en una “red” y se la realiza mediante un BUS I2C. 1.5.1 INTRODUCCIÓN. En un BUS I2C están conectados todos los dispositivos I2C todos ellos con distintas direcciones físicas y que requieren: • Una única línea para transmitir y recibir datos (SDA) dependiendo de qué dispositivo inicia la transferencia de datos. • Una línea la cual representa la señal de reloj a la que trabaja el sistema (SCL). • Dos líneas para polarización de los dispositivos conectados al bus: GND y VCC. 16 En el BUS I2C las líneas de datos y reloj SDA y SCL respectivamente, van conectadas hacia la fuente de polarización Vcc mediante resistencias de pull-up generalmente de 10KΩ cada una. La transmisión y recepción de datos se realiza únicamente en la línea de datos SDA mediante códigos de start, dirección de dispositivo, instrucción a realizar y código de stop básicamente. Figura 1.11 Condiciones de START y STOP del Bus I2C 1.5.2 COMUNICACIÒN I2C. Para nuestro proyecto, la comunicación se realiza entre el microprocesador (18F4550) y el LCD I2C únicamente ya que este tipo de LCD está diseñado con esta finalidad (además de comunicación SPI). Si bien es posible la comunicación de un microprocesador con una PC mediante comunicación I2C, este tipo de conexión no es común ya que la comunicación mediante USB representa la gran mayoría de dispositivos Plug & Play por su gran rapidez y facilidad de conexión. Entonces si es posible la comunicación PC-I2C a través de una interfaz ya sea RS232 o el llamado USB ya que muchas computadoras llevan integradas en sus tarjetas madre (mainboards) éstos terminales (RS232 y USB). Dispositivos I2C tales como: relojes en tiempo real, sensores, microprocesadores, memorias, etc. pueden ser conectados hacia el bus I2C únicamente conectando sus respectivas líneas (SDA y SCL) hacia el bus como 17 podemos observar en la Figura 1.12 Figura 1.12 Dispositivos en Bus I2C 1.5.3 IMPLEMENTACIÒN. Con la ayuda del compilador MikroC el cual tiene incorporado librerías necesarias para que la comunicación I2C sea realizada, se realiza el programa que permitirá enviar datos desde el microprocesador (dispositivo maestro) hacia el LCD I2C (dispositivo esclavo) y mostrar los caracteres deseados en una determinada secuencia que puede ser repetitiva o no. Si bien es posible la comunicación entre PC – LCD I2C, esta requiere de una interfaz que permita esta comunicación ya sea mediante USB o RS232 como ya se expuso anteriormente. De hecho para enviar datos o instrucciones desde una PC hacia el LCD I2C se realiza la siguiente operación: • Con la ayuda de una aplicación en Visual Basic desde el ordenador hacia el microprocesador (18F4550) utilizando comunicación USB se realiza la interacción PC - µC. • Mediante programación en MikroC se realiza la interacción µC - LCD I2C. Ejemplos de aplicación serán detallados en la sección 2.2.2 Programas de prueba para la tarjeta elaborada en Mikro-C, además de la sección ANEXOS en la 18 que están detallados todos los programas que se realizaron para este proyecto. 1.6 USB El protocolo de comunicación USB ( Universal Serial Bus ) como su nombre lo indica es otro tipo de comunicación serial que al igual que el protocolo I2C se lo realiza mediante un Bus en el cuál constan la línea de datos D+, línea de reloj D- y dos líneas de polarización GND y Vcc. La diferencia entre USB e I2C radica en la mayor velocidad con la que en USB son transferidos los datos desde un lugar a otro, ideal para dispositivos que requieren “rapidez” para su funcionamiento tales como: • Impresoras. • Cámaras Web. • Micrófonos. • Parlantes. • Teléfonos Móviles. • Lectores de Huellas, etc. Por esta razón a sido difundido con mayor amplitud este tipo de comunicación y por tanto los dispositivos que utilizan este protocolo también han ido en aumento. 1.6.1 INTRODUCCIÒN. (Universal Serial Bus) o bus serial universal nació con el propósito de remplazar la comunicación serie o paralelo que teníamos anteriormente. Con la comunicación USB se pudo unificar todos los periféricos externos. 19 La comunicación USB es la más aplicada en nuestros días ya que por sus facilidades, su velocidad y versatilidad han permitido un desarrollo increíble con este protocolo de comunicación, lo que permite que una gran cantidad de periféricos puedan conectarse a la computadora de una forma simple y rápida. En un bus USB existen dos tipos de elementos: Anfitrión ("host") y dispositivos; a su vez, los dispositivos pueden ser de dos tipos: concentradores y funciones Los concentradores ("Hubs") son el centro de una estrella, y sirven para conectar con el sistema anfitrión, con otro hub o con una función. Cada hub puede conectar hasta 7 dispositivos, aunque lo normal es que sean de 4 salidas y proporcionan 500 mA de alimentación (hasta 2.5 W) a cada uno de ellos, ya que el cable de conexión tiene hilos de señal (datos) y de alimentación (5 V. CC ± 0.25 V). Una función es un dispositivo capaz de transmitir o recibir datos o información de control en un bus USB, suele conectarse como un dispositivo independiente enlazado por un cable de menos de 5 metros, a un puerto del hub o directamente al sistema anfitrión. Que un hub pueda estar conectado a otro hub, significa que pueden conectarse dispositivos en cascada; el sistema soporta un total 127dispositivos. Una característica importante es que el concentrador (hub), proporcionan la energía necesaria a la función por el cable de conexión (que transporta fuerza y datos), lo que evita la necesidad de fuentes de alimentación independientes a las funciones. El cable USB es de 4 hilos, y comprende línea de señal de datos (D+), línea de señal de reloj (D-) y alimentación (GND y Vcc) con lo que las funciones pueden utilizar un único cable. Existen dos tipos de cable: apantallado y sin apantallar, en el primer caso el par de hilos de señal es trenzado; los de tierra y alimentación son rectos, y la 20 cubierta de protección (pantalla) solo puede conectarse a tierra en el anfitrión, en el cable sin apantallar todos los hilos son rectos, las conexiones a 15 Mbps y superiores exigen cable apantallado. AWG mm Ø long. Máx. 28 0.321 0.81 m 26 0.405 1.31 m 24 0.511 2.08 m 22 0.644 3.33 m 20 0.812 5.00 m Pin Nombre Descripción Color 1 VBUS + 5 V. CC rojo 2 D- Data - azul 3 D+ Data + amarillo 4 GND Tierra verde Figura 1.13 Izq. Propiedades del Conductor, Der. Distribución de Pines USB Se utilizan diámetros estándar para los hilos de alimentación del bus, para cada sección se autoriza una longitud máxima del segmento, en la tabla izquierda se muestran estas distancias, a la derecha se muestran la disposición de pines y colores de identificación. Se usan dos tipos de conectores, A y B, ambos son polarizados (solo pueden insertarse en una posición) y utilizan sistemas de presión para sujetarse. Los de tipo A utilizan conectores hembra en el sistema anfitrión, y suelen usarse en dispositivos en los que la conexión es permanente (por ejemplo, ratones y teclados). Los de tipo B utilizan conectores hembra en el dispositivo USB (función) y se utilizan en sistemas móviles (por ejemplo, cámaras fotográficas o altavoces). 21 En general podemos afirmar que los conectores tipo A están en el lado del host (PC) o de los concentradores (hubs), mientras que los conectores tipo B están del lado de los periféricos. Conector tipo A Conector tipo B Figura 1.14 Tipos de Conectores USB 1.6.2 USOS. Los usos son diversos dentro de este sistema de comunicación por la gran diversidad ya que hoy en día casi todas las conexiones de los periféricos se los realizan con un protocolo de comunicación USB, los periféricos como el mouse, o memorias externas, cámaras digitales, teclados, etc. Una diversidad de periféricos ha adoptado este protocolo de comunicación. La tarjeta de prueba que se desarrolló lleva implementada una comunicación USB lo que nos permite conectar nuestro microprocesador con una CPU para poder interactuar entre estos dos dispositivos, para esto se desarrollo programa creado en visual Basic y en micro C con la finalidad de enviar datos y se puedan observar en display en nuestro caso un LCD. 22 1.7 VISUAL BASIC. Mediante este software, es posible generar un programa el cuál permita de manera didáctica controlar los dispositivos pertenecientes a la TARJETA. Esta interacción PC-TARJETA se la realiza gracias a un asistente de conexión (no es el único) llamado Easy HID. 1.7.1 INTRODUCCIÒN. Visual Basic es un software de programación orientado a objetos, es decir, posee funciones prediseñadas las que pueden ser utilizadas indistintamente sin necesidad de generar código alguno para su creación mas si para su funcionamiento. De esta manera podemos diseñar a nuestro parecer y de manera sencilla una aplicación para interactuar desde el computador y así enviar códigos hacia el microprocesador ubicado en la tarjeta para controlar los dispositivos electrónicos, sean estos el GLCD y/o LCD I2C. Esta interacción (PC-TARJETA) se la realiza mediante protocolo de comunicación USB utilizando para ello un Asistente de Conexión, que para nuestro proyecto es el EASY HID WIZARD. EASY HID WIZARD es un software de distribución gratuita (hasta ciertos límites), que genera automáticamente los códigos necesarios para la comunicación USB tanto para Visual Basic como para el compilador utilizado para programar el microprocesador. 23 Figura 1.15Archivos Generados por EASY HID. En la Figura 1.15 se muestran los archivos generados mediante EASY HID, y nótese que para el compilador se genera un archivo en PicBasicPRO lo cuál no es útil para nuestro proyecto ya que nuestro compilador es MikroC. Para solucionar este problema se recurre a generar el programa para conexión USB utilizando el Asistente HID (Human Interface Device) del propio MikroC, el que permite generar el código para MikroC, MikroBasic o MikroPascal como se observa en la Figura1.16. Figura1.16 Archivo Generado por Mikro C Adjuntando el archivo generado por el Asistente HID de MikroC al programa de aplicación que se esté realizando para la comunicación entre el computador y la tarjeta mediante comunicación USB, se genera en el computador un lazo de 24 unión que es reconocido e instalado y de esta manera realizar operaciones entre PC-TARJETA a través de la aplicación diseñada en Visual Basic. Los pasos a realizarse para este efecto, son detallados en la sección 2.2.3 Implementación de un programa en Visual Basic para interacción PC- Tarjeta. 1.7.2 APLICACIONES A LOS Pic´s 18FXXX Como se explicó anteriormente, el software que ayuda a generar tanto la aplicación para Visual Basic como para el compilador a utilizarse es EASY posibles HID WIZARD, siendo únicamente 4 microcontroladores 18FXXX para comunicación USB, ya que éstos microcontroladores son los Figura 1.17 Proyecto Generado por EASY HID únicos de esta familia con disponibilidad USB. De esta manera se debe estar seguro del microprocesador a utilizarse para comenzar a generar la aplicación en Visual Basic y así no tener problemas de reconocimiento del dispositivo físico (Tarjeta Electrónica). CAPÌTULO 2 25 DISEÑO 2.1 HARDWARE. Mediante las pruebas realizadas en Proto-Board en lo que a conexión USB se refiere, se determinó la necesidad de utilizar una fuente externa ya que el puerto USB no entrega la corriente necesaria para el funcionamiento de la tarjeta. Esto se debe a que teóricamente cualquier puerto USB tiene la capacidad de entregar una corriente máxima de 500mA, pero en la práctica, esta corriente no alcanza los 100mA razón por la cual al momento de conectar la tarjeta al computador, ésta no llega a funcionar normalmente debido precisamente a cuestiones eléctricas. Con la fuente de voltaje externa y diseñada para una corriente máxima de 1A, se supera este problema pero constituye un “bloque” adicional a la Tarjeta. El diseño de la tarjeta con todas las consideraciones tanto de energía como de espacio, han determinado un total de 4 bloques de hardware los cuales son detallados a continuación. 2.1.1 DIAGRAMA EN BLOQUES. El programador de Pic´s GTP-USB dispuesto en nuestra Tarjeta Electrónica resulta muy útil debido a la facilidad de utilización y rapidez al momento de programar un microprocesador. 26 J1 USBCONN D2 D3 DIODE DIODE DIODE 2k2 1 3 2 4 18 1uF Q1 Q2 R3 BC548 BC548 4k7 4k7 U1 RD0/SPP0 RD1/SPP1 RD2/SPP2 RD3/SPP3 RD4/SPP4 RD5/SPP5/P1B RD6/SPP6/P1C RD7/SPP7/P1D RE0/AN5/CK1SPP RE1/AN6/CK2SPP RE2/AN7/OESPP RE3/MCLR/VPP VUSB C2 1uF 100nF RA0/AN0 RC0/T1OSO/T1CKI RA1/AN1 RC1/T1OSI/CCP2/UOE RA2/AN2/VREF-/CVREF RC2/CCP1/P1A RA3/AN3/VREF+ RC4/D-/VM RA4/T0CKI/C1OUT/RCV RC5/D+/VP RA5/AN4/SS/LVDIN/C2OUT RC6/TX/CK RA6/OSC2/CLKO RC7/RX/DT/SDO OSC1/CLKI RB0/AN12/INT0/FLT0/SDI/SDA RB1/AN10/INT1/SCK/SCL RB2/AN8/INT2/VMO RB3/AN9/CCP2/VPO RB4/AN11/KBI0/CSSPP RB5/KBI1/PGM RB6/KBI2/PGC RB7/KBI3/PGD C1 10uF C7 U2 33 34 35 36 37 38 39 40 DIODE C3 R2 PROGRAMADOR GTP - USB LITE 2 3 4 5 6 7 14 13 D4 R1 VCC D+ DGND D1 15 16 17 23 24 25 26 2 3 4 5 6 7 10 C4 15pF C5 21 22 23 24 25 26 27 28 15pF 19 20 21 22 27 28 29 30 8 9 10 1 PIC18F4550 R5 R6 100 100 RA0/AN0 RC0/T1OSO/T1CKI RA1/AN1 RC1/T1OSI/CCP2/UOE RA2/AN2/VREF-/CVREF RC2/CCP1 RA3/AN3/VREF+ RC4/D-/VM RA4/T0CKI/C1OUT/RCV RC5/D+/VP RA5/AN4/SS/LVDIN/C2OUT RC6/TX/CK RA6/OSC2/CLKO RC7/RX/DT/SDO RB0/AN12/INT0/FLT0/SDI/SDA RB1/AN10/INT1/SCK/SCL RB2/AN8/INT2/VMO RB3/AN9/CCP2/VPO RB4/AN11/KBI0/CSSPP RB5/KBI1/PGM RB6/KBI2/PGC RB7/KBI3/PGD OSC1/CLKI VUSB RE3/MCLR/VPP 11 12 13 15 16 17 18 9 C6 14 1 47uF R4 PIC18F2550 10k D6 R7 D7 DIODE R9 1k LED-BLUE 2k2 D5 R8 1k LED-BLUE Figura 2.1 Esquema del Programador GTPUSB LITE (PROTEUS) Windows XP es compatible con este programador ya que versiones posteriores tienen conflictos al momento de conectarlo al computador. Q4 J1 2N3906 CONTROLADOR TOUCH SCREEN 1 2 3 4 CONN-H4 R2 R1 R11 1k 1k 1k Q2 R4 de un arreglo de transistores NPN-PNP, J2 1 2 3 4 Botton Left Driver A Driver B CONN-H4 2N3904 resistores y capacitores que permiten leer valores analógicos desde el dispositivo Touch Screen mediante valores lógicos de polarización R3 1k El controlador de Touch Screen consiste Left Top Right Botton 47k C1 enviados 100n desde el microprocesador para polarizar los transistores ubicados en lugares VSS Q1 Q3 R5 2N3904 2N3904 C12 100n adecuados. 1k R6 1k R12 Esto permite que en tiempos muy 47k Q5 2N3906 R8 pequeños (µs) se obtengan valores de cada 1k una de las capas individualmente, es decir, una R7 1k Figura 2.2 Esquema del Controlador Touch Screen (Proteus). esto se capa por vez. Dependiendo de qué Driver actúa primero se habilita una de las capas del Touch Screen y lo realiza mediante programación en el microprocesador. 27 El microcontrolador conjuntamente con el GLCD, Touch Screen, Teclado Matricial y LCD I2C constituyen otro bloque de nuestra tarjeta aunque puede ser dividida en 2 pequeños bloques debido a la posibilidad de utilizar un par de dispositivos independientemente. Nos referimos al par Touch Screen – GLCD y al par LCD I2C – Teclado Matricial. La habilitación de cada par se la realiza mediante la activación de un switch, esto debido a que una vez conectada la fuente de energía a la tarjeta, siempre se tendrá activados los dispositivos de la misma y mediante el uso switch podemos inhabilitar una sección cualquiera que se trate ahorrando de esta manera energía en el sistema. J4 AU-Y1006-R TECLADO 4X3 I2C CONN-SIL7 GLCD 1 2 3 4 5 6 7 AMPIRE128X64 2 3 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 SW2 1 -Vout RST DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 E R/W RS V0 VCC GND CS2 CS1 VCC D+ DGND 1k RV1 A 1 2 3 B 4 5 6 C 7 8 9 0 # J7 SW ITCH - GLCD _ TOUCH SCREEN 1 CONN-SIL1 D J6 U3 1 2 3 4 2 3 4 5 6 7 14 13 CONN-H4 33 34 35 36 37 38 39 40 OSC C9 J10 RA0/AN0 RC0/T1OSO/T1CKI RA1/AN1 RC1/T1OSI/CCP2/UOE RA2/AN2/VREF-/CVREF RC2/CCP1/P1A RA3/AN3/VREF+ RC4/D-/VM RA4/T0CKI/C1OUT/RCV RC5/D+/VP RA5/AN4/SS/LVDIN/C2OUT RC6/TX/CK RA6/OSC2/CLKO RC7/RX/DT/SDO OSC1/CLKI RB0/AN12/INT0/FLT0/SDI/SDA RB1/AN10/INT1/SCK/SCL RB2/AN8/INT2/VMO RB3/AN9/CCP2/VPO RB4/AN11/KBI0/CSSPP RB5/KBI1/PGM RB6/KBI2/PGC RB7/KBI3/PGD RE0/AN5/CK1SPP RE1/AN6/CK2SPP RE2/AN7/OESPP RE3/MCLR/VPP 20Mz C8 100p 18 100p RD0/SPP0 RD1/SPP1 RD2/SPP2 RD3/SPP3 RD4/SPP4 RD5/SPP5/P1B RD6/SPP6/P1C RD7/SPP7/P1D VUSB 15 16 17 23 24 25 26 1 2 3 1 2 19 20 21 22 27 28 29 30 100n LCD I2C 1 2 3 4 SW ITCH - LCD I2C CONN-H4 J11 8 9 10 1 1 CONN-SIL1 R18 10k C10 CONN-SIL2 SW3 PIC18F4550 C11 CONN-SIL3 J8 J9 1 CONN-SIL1 R19 100n R20 1k J12 1 10k CONN-SIL1 R21 10k J13 1 CONN-SIL1 FU1 SW1 1A SW ITCH-PRINCIPAL J3 1 2 HEADER Figura 2.3 Esquema de la Tarjeta de Desarrollo (Proteus) 28 Además se ubica un interruptor general (switch) para encender o apagar la tarjeta en su conjunto. La FUSIBLE fuente de TRANSFORMADOR 12/12 V alimentación es considerada PUENTE DIODOS / 1A V U1 7805 120V VI VO 3 1 2 GND 1 SALIDA FUENTE 5V 2 R1 1k C2 100p C1 2200u D1 LED J1 un bloque adicional a la Tarjeta Electrónica ya que como se anteriormente, explicó la energía suministrada por un puerto Figura 2.4 Esquema de la Fuente de Alimentación 5V/1A (Proteus). USB es insuficiente para el correcto funcionamiento de los dispositivos constitutivos de dicha tarjeta. Como podemos observar es una fuente muy simple con la particularidad de entregar hasta una corriente máxima de 1A, lo cual es suficiente para su correcto funcionamiento. 2.1.2 PLANIFICACIÒN DE ELEMENTOS EN PROTO – BOARD. Pensando en la comodidad para el usuario, la ubicación de los dispositivos se ha diseñado de tal manera que el GLCD con su respectivo TOUCH SCREEN estén lo más cerca posible hacia el CONTROLADOR Touch Screen ya que es necesario para su funcionamiento y de la misma manera, el LCD I2C lo más cerca posible del TECLADO MATRICIAL ya que en su conjunto forman un único dispositivo completo. Se refiere entonces a la sección inferior de la Tarjeta Electrónica en la que se ubica el Controlador Touch Screen precisamente a continuación del GLCD con su respectivo Touch Screen y con el switch que habilita o deshabilita todo este conjunto permitiendo ahorrar energía para aplicaciones en las que no se utilice estos dispositivos. 29 Cabe recalcar que para aplicaciones en las que interviene únicamente el GLCD, tanto el Controlador y el Touch Screen pasan desapercibidos ya que su funcionamiento depende de una programación mediante 4 pines del microprocesador, caso contrario no recibe polarización y por consiguiente no intervendrían en lo absoluto. En la parte superior en cambio se ubica el Teclado Matricial 4x3 a continuación del LCD I2C y de igual manera un switch el cuál habilita o deshabilita el conjunto de igual manera para ahorrar energía. Finalmente, en la parte inferior derecha se ubica el programador de pic´s (18F4550 y 18F2550) GTP-USB LITE para facilidad y rapidez al momento de poner en práctica los programas desarrollados para los dispositivos electrónicos de la Tarjeta Electrónica. La programación de microprocesadores se la realiza mediante el software WinPic800 el que es distribuido de manera gratuita en la siguiente dirección http://www.winpic800.com/ y como se explicó anteriormente es compatible con Windows XP. 30 2.1.3 ENSAMBLAJE EN PROTO – BOARD. Figura 2.5 Ensamblaje y Pruebas en Proto-Board De acuerdo a la ubicación que tomará cada dispositivo en la Placa Electrónica, se procede a armar el circuito en Proto-Board tomando en cuenta la optimización del espacio físico en una dimensión aconsejable para su correcta manipulación. Nótese que en la Figura mostrada, no consta el Programador GTP-USB Lite ya que no constituye una herramienta de control desde el computador o el microprocesador. 31 2.1.4 ELABORACIÒN DE PLACA ELECTRÒNICA. Consiste de 3 etapas claramente diferenciadas y que para cada una de ellas se realiza un procedimiento dirigido, es decir, tomar en cuenta aspectos eléctricos, aspectos físicos y medios químicos. Así por ejemplo para el diseño se determinan aspectos eléctricos mediante Proteus ISIS (2.2.1 Diagrama En Bloques), el cual nos ayuda a determinar la validez o no de una conexión mediante simulación. Para aspectos físicos en cambio nos remitimos a ARES, el cual nos permite representar los elementos en un plano (Board Edge) y así determinar las distancias correctas a las que se debe ubicar un elemento de otro para optimizar el espacio. Y en aspectos químicos nos referimos al método mediante el cual nuestras pistas eléctricas ya elaboradas son “transferidas” hacia un medio tangible (baquelita) ubicando nuestros dispositivos electrónicos y así realizar las respectivas pruebas de funcionamiento para determinar posibles errores. Para nuestro caso se realizó el método de Insolación el cuál será explicado posteriormente. 2.1.4.1 CREACIÒN DE PISTAS MEDIANTE PROTEUS PROFESIONAL (ARES) Terminada la etapa de diseño en bloques realizada en Proteus ISIS, mediante el procedemos ícono ARES a ubicar los , elementos electrónicos en la posición detallada en el capítulo 2.2 Planificación de elementos en Proto-Board previamente estableciendo la capa de soldadura (Board Edge) indispensable para la creación de pistas, sin esta Figura 2.6 Selección de Capa de Suelda. sería imposible “enrutar” cada dispositivo mediante una línea de conexión y así colocar 32 cada elemento de tal forma que sean lo más compactamente posible y tomando en cuenta espacios físicos reales de los elementos constituyentes de la Tarjeta Electrónica. Una vez ingresado al software para creación de pistas ARES , inmediatamente tenemos todos los elementos utilizados en el diseño mediante Proteus ISIS y cuya lista aparece en orden alfabético y así ubicar un elemento rápidamente para su colocación en el plano de soldadura Figura 2.7 Traslado de Componentes para el Diseño. Trasladados todos los elementos a la mesa de trabajo se procede a la ubicación de nuestros elementos. Esta tal vez es la parte más complicada ya que para evitar errores al mandar a enrutar nuestro circuito, lo hacemos a doble lado por la complejidad y dimensiones de la tarjeta. De esta manera se logra disminuir potenciales errores en lo que a cercanía de pistas se refiere aunque esto conlleva a la creación automática de “puentes” que para nuestra tarjeta resultan ser 9. La forma de ubicar los elementos electrónicos se la realiza de manera 33 manual o automática, siendo esta última la menos recomendable ya que si bien enruta todos los elementos electrónicos establece en muchos de los casos un número exagerado de “puentes” que hacen difíciles las conexiones entre capas superior e inferior. Se observa en la Figura 2.8 un ejemplo de distribuir - enrutar automáticamente todos los elementos y la generación de “puentes” señalados por el círculo en rojo. Para evitar precisamente este problema, se coloca manualmente todos y cada uno de los elementos electrónicos de manera tal que cumpla con las características de ser compacta y disminuir al máximo la generación de puentes. Una vez planificada adecuadamente la distribución de elementos y colocadas en nuestro plano de soldadura, teniendo enrutamos como resultado un total de 19 Figura 2.8 Enrutamiento Automático (Generación de Múltiples Puentes). puentes los que son reducidos a 9 mediante caminos manuales de pista ya que existen caminos que no son tomados en cuenta por el Diseño Automático de Pistas ya que se trata de un software que sigue determinados parámetros. Logrando así un circuito eléctrico tanto en capa superior como en capa inferior con un número relativamente aceptable de uniones alternas (puentes). 34 Así nuestra tarjeta en capa inferior (Bottom) consiste en su mayor parte de pistas con un espesor T30 y en capa superior con puentes del mismo espesor indicado. El gráfico en la Figura 2.9 detallado muestra el esquema final de la placa en su parte inferior (Bottom) y nótese que se ha agregado un relleno de cobre. Figura 2.9 Tarjeta de Desarrollo – Parte Inferior En la Figura 2.10 se observa el esquema de la placa final en la parte superior (Top), en el que constan tanto los puentes generados (9) además de la 35 simbología de los elementos electrónicos utilizados. Figura 2.10 Tarjeta de Desarrollo – Parte Superior 36 2.1.4.2 TRASLADO DE PISTAS HASTA BAQUELITA PARA OBTENER TARJETA FINAL. El proceso mediante el cual se traslada el diseño con sus respectivas pistas electrónicas desde un computador hacia un medio físico se lo realiza de muchas maneras algunas sofisticadas y otras caseras. Así por ejemplo como medio sofisticado tenemos máquinas especiales que de manera automática y guiadas mediante algún software, graban en una placa las pistas de forma muy precisa y rápida , pero que constituyen una alternativa no muy económica en lo que a ahorro de dinero se refiere. Por esta razón se determinó la necesidad de seguir un método alternativo y relativamente económico para trasladar las pistas hacia una placa. De esta manera construimos un INSOLADOR que mediante exposición a rayos ultravioleta en un ambiente oscuro con ayuda de NEGATIVOS tanto de placa inferior como de placa superior y de algunos químicos (Ácido Nítrico, Esmalte Fotosensible, Ácido Crómico) permiten grabar en una baquelita o placa las pistas diseñadas de forma muy aceptable. El procedimiento es el siguiente: • En primer lugar lijar (lija # 40 o # 50) la superficie de la baquelita para obtener una superficie suficientemente liza para que pueda ser impregnada de mejor manera el Esmalte Fotosensible. • Una vez lijado y secado, limpiamos la superficie con Polvo Blanco de España (polvo muy fino), el cual elimina cualquier resto de impurezas presentes todavía en la baquelita. • Se la lava con agua y se la seca nuevamente. • Aislamos en un ambiente obscuro para impregnar sobre esta el Esmalte Fotosensible y la dejamos secar. • Seco el Esmalte Fotosensible y siempre en un ambiente obscuro, se procede a adjuntar los negativos del circuito electrónico al lado correcto para ingresar el conjunto a la INSOLADORA. 37 • Alrededor de 6 minutos son necesarios para impregnar mediante luz ultravioleta los campos (pistas) en la baquelita. • Luego de sacar el conjunto de la INSOLADORA, se sumerge la baquelita en Acido Crómico hasta distinguir claramente todas las pistas de la capa en cuestión (15 a 20 seg.). • Inmediatamente después se rocía con agua a chorro para eliminar el exceso de Esmalte que no fue expuesto a luz ultravioleta, obteniendo de esta manera un “dibujo” exacto del negativo. • Con la ayuda de un mechero a una distancia de al menos 10cm y siempre en movimiento la baquelita, se “queman” las pistas hasta llegar a una coloración Café Oscuro punto en el cual está lista para retirar el cobre que no es de nuestra utilidad. • Finalmente, introducimos la baquelita en Acido Nítrico hasta que únicamente queden las pistas de color Café Oscuro y con cuidado ya que se trata de químicos muy peligrosos. Experimentando este método y al momento de realizar pruebas de funcionamiento se obtienen resultados satisfactorios. 2.1.5 CONEXIONES. Una vez retirado el cobre innecesario, realizamos en primer lugar una verificación visual cuidadosa del circuito impreso para detectar posibles fallas de conexión al utilizar el método por INSOLACIÓN. De no encontrar ninguna anomalía visual, retiramos el Barniz de los puntos de soldadura de los elementos con una lija suave para mediante el uso de un Multímetro medir continuidad desde todos y cada uno de los puntos hacia sus respectivos terminales (conexiones) asegurando con los 2 procesos anteriores que no exista falencias en conexiones y así someter a pruebas de funcionamiento nuestra Placa Electrónica. 38 De existir fallas detectadas visualmente o mediante el multímetro será necesario elaborar la Tarjeta Electrónica nuevamente desde un inicio. 2.2 SOFTWARE. El presente capítulo se refiere a las herramientas informáticas (software) que ayudan al usuario a diseñar, simular e interactuar con dispositivos electrónicos de manera sencilla y lógica. Así para determinar la validez de una conexión recurrimos a una “simulación” la cuál muestra el funcionamiento de un determinado circuito y de esta manera asimilar los conocimientos y determinar la validez o no de dicha conexión. Podemos decir que el diseño y la simulación van claramente de la mano ayudándonos a realizar un circuito y a determinar errores por confusión de ideas o por fallidas conexiones. En lo que a interacción se refiere una forma de realizarla es precisamente mediante simulación, en especial para “comunicarnos” hacia nuestra tarjeta la que existe como un medio virtual dentro de nuestro computador. Esto siempre y cuando tengamos un programa para el microprocesador que permita dichas simulaciones y que para nuestro caso utilizamos MikroC. 2.2.1 SIMULACIÒN MEDIANTE PROTEUS PROFESSIONAL (ISIS). Proteus Professional ISIS es una herramienta muy útil que nos permite diseñar con una gran cantidad de dispositivos eléctricos y electrónicos un sin- 39 número de circuitos y poder observar su funcionamiento como si tuviéramos el hardware en nuestras manos. El manejo de este software es relativamente simple ya que permite interconectar cada elemento de forma rápida y sin necesidad de crear puntos de acceso a ellos como si resulta ser en otro simulador (Eagle). Observamos una simulación en la cual únicamente interviene un Pic 18F4550 y un GLCD Figura 2.11. Nótese que los pines utilizados para el manejo del GLCD, MCLR y polarización del GLCD intervienen en la simulación. Tanto el oscilador como resistencias adicionales al circuito quedan relegadas ya que se supone deben estar conectadas. LCD1 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 -Vout RST DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 E R/W RS V0 VCC GND CS2 CS1 AMPIRE128X64 U1 2 3 4 5 6 7 14 13 33 34 35 36 37 38 39 40 18 RA0/AN0 RC0/T1OSO/T1CKI RA1/AN1 RC1/T1OSI/CCP2/UOE RA2/AN2/VREF-/CVREF RC2/CCP1/P1A RA3/AN3/VREF+ RC4/D-/VM RA4/T0CKI/C1OUT/RCV RC5/D+/VP RA5/AN4/SS/LVDIN/C2OUT RC6/TX/CK RA6/OSC2/CLKO RC7/RX/DT/SDO OSC1/CLKI RB0/AN12/INT0/FLT0/SDI/SDA RB1/AN10/INT1/SCK/SCL RB2/AN8/INT2/VMO RB3/AN9/CCP2/VPO RB4/AN11/KBI0/CSSPP RB5/KBI1/PGM RB6/KBI2/PGC RB7/KBI3/PGD VUSB RD0/SPP0 RD1/SPP1 RD2/SPP2 RD3/SPP3 RD4/SPP4 RD5/SPP5/P1B RD6/SPP6/P1C RD7/SPP7/P1D RE0/AN5/CK1SPP RE1/AN6/CK2SPP RE2/AN7/OESPP RE3/MCLR/VPP 15 16 17 23 24 25 26 19 20 21 22 27 28 29 30 8 9 10 1 PIC18F4550 Figura 2.11 Conexión del GLCD mediante Pic 18F4550 40 LCD1 Representado AMPIRE128X64 RV2 RV1 1k 1k por 2 potenciómetros, 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 -Vout RST DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 E R/W RS V0 VCC GND CS2 CS1 el siguiente circuito muestra una simulación mediante Touch Screen en la U1 2 3 4 5 6 7 14 13 33 34 35 36 37 38 39 40 18 RA0/AN0 RC0/T1OSO/T1CKI RA1/AN1 RC1/T1OSI/CCP2/UOE RA2/AN2/VREF-/CVREF RC2/CCP1/P1A RA3/AN3/VREF+ RC4/D-/VM RA4/T0CKI/C1OUT/RCV RC5/D+/VP RA5/AN4/SS/LVDIN/C2OUT RC6/TX/CK RA6/OSC2/CLKO RC7/RX/DT/SDO OSC1/CLKI RB0/AN12/INT0/FLT0/SDI/SDA RB1/AN10/INT1/SCK/SCL RB2/AN8/INT2/VMO RB3/AN9/CCP2/VPO RB4/AN11/KBI0/CSSPP RB5/KBI1/PGM RB6/KBI2/PGC RB7/KBI3/PGD RD0/SPP0 RD1/SPP1 RD2/SPP2 RD3/SPP3 RD4/SPP4 RD5/SPP5/P1B RD6/SPP6/P1C RD7/SPP7/P1D RE0/AN5/CK1SPP RE1/AN6/CK2SPP RE2/AN7/OESPP RE3/MCLR/VPP VUSB 15 16 17 23 24 25 26 cual se observa un 19 20 21 22 27 28 29 30 coordenada 8 9 10 1 PIC18F4550 punto por cada XY generadas por cada R1 convertidor A/D. 10k Figura 2.12 Representación de Touch Screen Mediante División de Tensión Esto es precisamente el funcionamiento de un Touch Screen y su resultado expresado en un GLCD es muy diverso dependiendo del programa. Un Touch Screen nos ayuda a poner en práctica varias aplicaciones tanto didácticas como de seguridad. Por ejemplo: - Con la ayuda de un lápiz propio de un Touch Screen dibujar y grabar un bosquejo para luego editarlo si se desea. - Un programa para crear una calculadora táctil con su respectivo valor expresado en la misma pantalla. - Control de acceso mediante el uso de una contraseña. - Interacción entre dispositivos escogidos desde la pantalla táctil. - Control de iluminación de un sector de una vivienda, edificio, etc. 41 Debemos tener en cuenta que todas estas aplicaciones las realiza el microprocesador que gobierna el circuito, un Touch Screen únicamente nos da una facilidad visual y estética de cualquier aplicación que deseemos. 2.2.2 PROGRAMAS DE PRUEBA PARA LA TARJETA ELABORADA EN MIKRO–C. Los programas expuestos a continuación son desarrollados en MikroC, comprobados mediante Proto-Board y únicamente representan pruebas de funcionamiento de cada uno de los elementos electrónicos componentes de nuestra tarjeta electrónica (GLCD, LCD I2C y Touch Screen). El resultado obtenido puede ser observado mediante fotografías tomadas al momento de poner en práctica el programa desarrollado. * PRIMER PROGRAMA DE PRUEBA: Prueba de Funcionamiento del GLCD. unsigned char const ESFOT_bmp [1024] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,240, 48, 16, 16, 16, 16, 16, 0, 0, 0, 0, 0, 0, 42 0, 0, 0, 0, 0, 0,192,224, 48, 16, 16, 16, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,240,112, 16, 16, 16, 16, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,192, 96, 32, 16, 16, 16, 16, 48,224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 16, 16,240,240, 16, 16, 16, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,192,254, 7, 4, 4, 4, 4, 0, 0, 0,128,128, 0, 0, 0, 0, 0, 0, 0,128, 0, 1, 3, 6,140,252,120, 0, 0,128,128, 0, 0, 0, 0, 0, 0, 0, 0,192,254, 15, 4, 4, 4, 4, 0, 0,128,128, 0, 0, 0, 0, 0, 0, 0, 0,124,255,129, 0, 0, 0, 0,128,192,120, 31, 0, 0,128,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,252, 31, 0, 0, 0, 0, 0,128,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0,128, 1, 1, 0, 0, 0, 0,128, 0, 0, 0, 1, 1,129,129,129,128, 0, 0, 0, 1,129, 128,128,128, 0, 0, 0, 0,128,129,129,128, 0, 0, 0, 0, 0, 128, 1, 1, 0, 0,128,128,128,128,128,128, 0, 0,129,129,129, 129, 1, 0, 0, 0,128,128,128,129, 1, 0, 0,128, 0, 0, 0, 128,128,128,128, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,120, 67, 64, 64, 96, 16, 28, 19, 17, 31, 64, 0, 0,120, 71, 68, 68, 62, 1, 0, 60, 67, 64, 64, 64, 32, 25, 6, 0,120, 7, 4, 12,114, 1, 96, 16, 28, 19, 17, 31, 64, 0, 0, 0, 96, 31, 0, 0, 0, 60, 67, 64, 64, 64, 32, 25, 6, 0,120, 7, 4, 12,114, 1, 0,120, 3, 0, 60, 67, 64, 64, 64, 32, 25, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 43 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,224, 28, 28,192, 0,128, 32, 24,236, 12, 0,192, 28, 0, 224, 24, 12, 4, 4, 12, 0,192, 60, 36,100,148, 8, 0,224, 24, 4, 4, 4, 4,200, 48, 0,192, 92, 68, 68, 36, 24, 0,192, 60, 36,100,148, 8, 0,224, 24, 4, 4, 4, 4,200, 48, 0,224, 24, 12, 4, 4, 12, 0,192, 60, 36, 36, 4, 4, 16, 44,100,196, 8, 0,128,224,152,140,248, 0, 0, 0,192, 28, 4, 4, 4,200, 48, 0,224, 24, 4, 4, 4, 4,200, 48, 0,192, 60, 36,100,148, 8, 0,192, 60, 36, 36, 4, 4, 16, 44,100,196, 8, 0, 0, 0, 0, 0, 0, 3, 0, 0, 3, 3, 0, 0, 0, 3, 0, 0, 3, 0, 0, 1, 2, 2, 2, 1, 0, 0, 3, 0, 0, 0, 3, 0, 0, 1, 2, 2, 2, 2, 1, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 3, 0, 0, 1, 2, 2, 2, 2, 1, 0, 0, 0, 1, 2, 2, 2, 1, 0, 0, 3, 2, 2, 2, 0, 1, 2, 2, 2, 1, 0, 3, 0, 0, 0, 0, 0, 2, 0, 0, 3, 2, 2, 2, 1, 0, 0, 0, 1, 2, 2, 2, 2, 1, 0, 0, 0, 3, 0, 0, 0, 3, 0, 0, 3, 2, 2, 2, 0, 1, 2, 2, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; unsigned char const TARJETA_bmp[1024] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2,130,254, 30, 2, 2, 2, 2, 0, 0,128, 96, 56, 14, 30,252, 0, 0, 0, 0, 0,192, 254,142,130,130,194,102, 60, 8, 0, 0, 0, 0,248, 62, 0, 0, 192,254,134,130,130,130, 2, 2, 0, 0, 2, 2,130,254, 30, 2, 2, 2, 2, 0, 0,128, 96, 56, 14, 30,252, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,192,254, 6, 2, 2, 2, 2, 4,252, 96, 0, 0,192,254,134,130,130,130, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 63, 3, 0, 0, 0, 0, 48, 28, 7, 5, 4, 4, 4, 4, 15, 63, 0, 0, 0, 56, 63, 1, 0, 0, 1, 15, 62, 0, 32, 32, 32, 48, 31, 3, 0, 0, 56, 63, 32, 32, 32, 32, 32, 0, 0, 0, 0, 0, 48, 63, 3, 0, 0, 0, 0, 48, 28, 7, 5, 4, 4, 4, 4, 15, 63, 0, 0, 0, 0, 0, 0, 0, 0, 56, 63, 32, 32, 32, 32, 16, 24, 14, 3, 0, 0, 56, 63, 32, 32, 32, 32, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,192,254, 6, 2, 2, 2, 2, 4,252, 96, 0, 0,192,254,134,130,130,130, 2, 2, 0, 0, 56,124,198, 130,130, 2, 4, 0, 0, 0,128, 96, 56, 14, 30,252, 0, 0, 0, 0, 0,192,254,142,130,130,194,102, 60, 8, 0, 0,192,254,142, 130,130,194,102, 60, 8, 0,128,240, 56, 12, 4, 2, 2, 2, 2, 6,252, 0, 0, 0,192,254, 6, 0, 0, 0, 0, 0,192,254, 6, 0, 0, 0, 0,128,240, 56, 12, 4, 2, 2, 2, 2, 6,252, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56, 63, 32, 32, 32, 32, 16, 24, 14, 3, 0, 0, 56, 63, 32, 32, 32, 32, 32, 0, 0, 16, 32, 32, 32, 32, 49, 31, 15, 0, 48, 28, 7, 5, 4, 4, 4, 4, 15, 63, 0, 0, 0, 56, 63, 1, 0, 0, 1, 15, 62, 0, 0, 0, 56, 63, 1, 0, 0, 1, 15, 62, 0, 0, 0, 15, 31, 48, 32, 32, 32, 32, 16, 24, 15, 3, 0, 0, 56, 63, 32, 32, 32, 32, 0, 0, 56, 63, 32, 32, 32, 32, 0, 0, 15, 31, 48, 32, 32, 32, 32, 16, 24, 15, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 46 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; unsigned char const grupo_bmp[1024] = { 0, 0, 0, 0, 0, 0, 0,128,128,128,128,128, 0, 0, 0, 0, 0, 0, 0,128,128, 0, 0, 0, 0, 0,128,128,128,128,128, 0, 0, 0,128, 0, 0, 0, 0,128,128, 0, 0, 0, 0,128,128, 0, 0,128, 0, 0, 0,128, 0, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0,128,128, 0, 0, 0, 0, 0, 0,128,128, 0, 0, 0, 0, 0,128,128,128,128, 0, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0,128, 0, 0, 0,128, 0, 0, 0, 0, 0,128, 0, 0, 0, 0, 0,128,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,224, 63, 1, 0, 0,128,193, 63, 12,128,224, 48, 44, 35, 33, 63,240, 0, 0,224, 63, 17, 16, 48,232, 15, 0, 0, 0,255,128,192, 48, 12, 3,255,128,192, 48, 12, 3, 0,224, 63, 1, 0,224, 63, 1, 7, 60,224,192,124, 7, 0, 0, 0, 0, 0,224, 63, 3, 15,248,128, 96, 48, 12, 6,241, 15, 0, 0,248, 134, 1, 0, 0,128,192,127, 4, 0,224, 63, 1, 0, 0, 0, 0, 224, 63, 1, 0,224, 63, 1, 7, 60,224,192,124, 7,128,224, 48, 44, 35, 33, 63,240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 47 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,240, 28, 0, 0,128, 96, 24, 12,252,128, 0, 0, 0,252,128, 0, 0,192,112, 24, 4, 0,248, 12, 0, 0,248, 76, 68, 68, 68, 4, 0, 0,248,140,132,132, 68,124, 0, 0, 0, 0, 0, 0, 0,248,140,132,132, 68,124, 0, 0,192, 48, 8, 4, 4, 4, 4,248, 32, 0, 0, 0,240, 28, 0, 0,128, 96, 24, 12, 252,128, 0, 0, 0,120, 68,196,132, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 8, 6, 3, 0, 12, 7, 1, 1, 1, 1, 1, 15, 0, 0, 0, 0, 15, 12, 3, 0, 0, 0, 0, 15, 1, 0, 0, 15, 9, 8, 8, 8, 0, 0, 0, 15, 1, 0, 0, 1, 15, 0, 0, 0, 0, 0, 0, 0, 15, 1, 0, 0, 1, 15, 0, 0, 0, 7, 12, 8, 8, 8, 12, 6, 3, 0, 8, 8, 6, 3, 0, 12, 7, 1, 1, 1, 1, 1, 15, 0, 4, 8, 8, 8, 8, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,192,192, 0, 0, 0, 0, 0, 0,192,192, 0, 0, 0, 0, 0,128,192,192, 0, 0, 0, 0,192, 0, 0, 0, 0,192, 64, 0, 0,128, 64, 64, 64, 64,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,192, 96, 0, 0, 0, 0, 0,128, 64, 64, 64,192, 0, 0, 0,128,192, 64, 64,192,128, 0, 0, 0,128, 128,192, 0, 0, 0, 0,128,192, 64, 64,192,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,240, 31, 1, 7,252,192, 48, 24, 6, 3,248, 7, 0,192, 112, 24, 22, 17, 16, 31,248, 0, 0, 0, 1,255, 28, 6, 3, 0, 0,124,195,128,128,128,192, 96, 63, 2, 0, 0, 0, 0, 0, 0, 48 0, 0,128, 96, 48, 12, 3, 0, 0, 0, 0, 0,128,192,224,176, 152,140, 7, 0, 0,126,131,128,128, 64, 56, 15, 0,128,129,193, 252,131,128, 0, 0,126,131,128,128, 64, 56, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; unsigned char const estudiando_bmp[1024] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,192, 64,192,128,128,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 49 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,224, 8,248,252,252,252, 248,184,240,224,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 32, 64, 32,156,228, 33,153,251, 3, 31,243, 7, 6, 6, 5, 13, 12, 8, 24, 26, 26, 16, 52, 52, 52, 40, 40,104, 80,240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,255,128,193,255,255,255, 255,255,127, 31, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 64, 32, 32, 96,192,192,192,192,192,128, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,128,128,128,128,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 96, 96, 96,176,136, 68, 38, 33, 24, 16, 2, 7,140,124, 63, 7, 63,240, 3,124,192, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,124,192, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,135,255,255,255,255, 255,224,192,192,192,192,192,128,128,128,128,128,192,192,192,192, 248, 1, 0, 0, 0, 0, 99,255,255,255,255,255,255,240,240,248, 252,252,254,254,252,252,254,254,254,255,254,255,229,195,154, 70, 46, 94, 62, 54, 42, 10, 22, 10, 10,222,223,184,184,112,224,192, 192,192,192,192, 64, 64,192, 7,127, 64, 97,254,252,240,240,240, 224,224, 96,224,224,224,192,192,192,192,192,192,192,128,131,158, 240,192, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 24, 31, 31, 31, 63, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 48, 72,224, 96,244,255,255,255,255,223,207,199,231,243,243, 251,255,255,255,255,255,255,255,255,255,255,255,255,255,255,254, 50 254,254,124,124,126, 60, 62, 28, 31, 31, 15, 15, 15, 15, 15, 12, 30, 29, 61, 61, 57,125,125,125,251,243,243,247,251,250,250,242, 180, 22, 28, 13, 13, 13, 3, 2, 3,195,199,197, 77,109,191,135, 3, 3, 0,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 124,192,146,207,253,253,127,127,127,127,127,255,255,127, 63, 31, 15, 15, 7, 7, 3, 3, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 3, 7, 7, 6, 12, 24, 16, 48, 32, 41, 49, 43,110,124, 52, 39, 38, 62, 10, 11, 15, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; void main() { ADCON1=0b00001101; TRISB=0; TRISD=0; Glcd_Init(&PORTB,2,3,4,5,6,7,&PORTD); repita: Glcd_Fill(0); Glcd_Image(ESFOT_bmp); 51 delay_ms(100); Glcd_Fill(0); Glcd_Image(TARJETA_BMP); delay_ms(100); Glcd_Fill(0); Glcd_Image(grupo_BMP); delay_ms(100); Glcd_Fill(0); Glcd_Image(estudiando_bmp); delay_ms(100); goto repita; } 52 Nótese en la Figura 2.13 que los gráficos generados en este ejemplo constituyen la gran mayoría de líneas de código y en sí el programa para presentar en pantalla estos caracteres es por lo contrario muy corto. Observamos el resultado deseado mostrado en pantalla de acuerdo a la programación. Figura 2.13 GLCD – Prueba de Funcionamiento (Proto - Board). Resultado real en nuestra tarjeta electrónica Figura 2.14 GLCD – Prueba de Funcionamiento (Tarjeta de Desarrollo). 53 * SEGUNDO PROGRAMA DE PRUEBA: Prueba de Funcionamiento del LCD–I2C. void main(){ ADCON1 = 0xFF; TRISB = 0; PORTB = 0; repita: Soft_I2C_Config(&PORTb, 0, 1); Soft_I2C_Start(); Soft_I2C_Write(0xc6); Soft_I2C_Write(0); Soft_I2C_Write(19); Soft_I2C_Write(12); Soft_I2C_Write(0); Soft_I2C_Write(2); Soft_I2C_Write(1); Soft_I2C_Write('D'); Soft_I2C_Write('A'); Soft_I2C_Write('R'); Soft_I2C_Write('W'); Soft_I2C_Write('I'); Soft_I2C_Write('N'); Soft_I2C_Write(0); Soft_I2C_Write(2); Soft_I2C_Write(21); Soft_I2C_Write('G'); 54 Soft_I2C_Write('E'); Soft_I2C_Write('O'); Soft_I2C_Write('V'); Soft_I2C_Write('A'); Soft_I2C_Write('N'); Soft_I2C_Write('N'); Soft_I2C_Write('Y'); Soft_I2C_Write(0); Soft_I2C_Write(2); Soft_I2C_Write(41); Soft_I2C_Write('M'); Soft_I2C_Write('O'); Soft_I2C_Write('L'); Soft_I2C_Write('I'); Soft_I2C_Write('N'); Soft_I2C_Write('A'); Soft_I2C_Write(0); Soft_I2C_Write(2); Soft_I2C_Write(61); Soft_I2C_Write('A'); Soft_I2C_Write('L'); Soft_I2C_Write('V'); Soft_I2C_Write('A'); Soft_I2C_Write('R'); Soft_I2C_Write('E'); Soft_I2C_Write('Z'); Soft_I2C_Stop(); 55 delay_ms(1000); Soft_I2C_Start(); Soft_I2C_Write(0xc6); Soft_I2C_Write(0); Soft_I2C_Write(19); Soft_I2C_Write(12); Soft_I2C_Write(0xc6); Soft_I2C_Write(0); Soft_I2C_Write(12); Soft_I2C_Write(0); Soft_I2C_Write(2); Soft_I2C_Write(6); Soft_I2C_Write('E'); Soft_I2C_Write('S'); Soft_I2C_Write('C'); Soft_I2C_Write('U'); Soft_I2C_Write('E'); Soft_I2C_Write('L'); Soft_I2C_Write('A'); Soft_I2C_Write(0); Soft_I2C_Write(2); Soft_I2C_Write(24); Soft_I2C_Write('P'); Soft_I2C_Write('O'); Soft_I2C_Write('L'); Soft_I2C_Write('I'); Soft_I2C_Write('T'); 56 Soft_I2C_Write('E'); Soft_I2C_Write('C'); Soft_I2C_Write('N'); Soft_I2C_Write('I'); Soft_I2C_Write('C'); Soft_I2C_Write('A'); Soft_I2C_Write(0); Soft_I2C_Write(2); Soft_I2C_Write(46); Soft_I2C_Write('N'); Soft_I2C_Write('A'); Soft_I2C_Write('C'); Soft_I2C_Write('I'); Soft_I2C_Write('O'); Soft_I2C_Write('N'); Soft_I2C_Write('A'); Soft_I2C_Write('L'); Soft_I2C_Stop(); delay_ms(1000); goto repita; } 57 Observamos un correcto funcionamiento de nuestro LCD-I2C teniendo en cuenta que el control del mismo es desarrollado mediante software: ⇒ Figura 2.15 LCD I2C – Prueba de Funcionamiento (Proto – Board). Soft_I2C_Config(&PORTb, 0, 1); Resultado en nuestra tarjeta. Figura 2.16 LCD I2C – Prueba de Funcionamiento (Tarjeta de Desarrollo). 58 * TERCER PROGRAMA DE PRUEBA: Prueba de Funcionamiento del Touch Screen. const unsigned int ADC_THRESHOLD = 970; //Máximo valor digital de GLCD float x_min, y_min, x_max, y_max; char PressDetect() { // para detectar una presión del touch unsigned adc_rd; char result; PortA.F2=0; PortA.F3=0; adc_rd = ADC_read(1); result = (adc_rd > ADC_THRESHOLD); Delay_us(10); adc_rd = ADC_read(1); result = result & (adc_rd > ADC_THRESHOLD); return result; } unsigned int x() { // para encontrar la cordenada x unsigned int lecturax; float x; PortA.F2=1; PortA.F3=0; lecturax=adc_read(0); x=lecturax/8,0; return x; } unsigned int y() { unsigned int lecturay; float y; // para encontrar la coordenada y 59 PortA.F2=0; PortA.F3=1; lecturay=adc_read(1); y=lecturay/16,0; return y; } unsigned float x1(){ //sectorización de GLCD float x1; x1 = ((x()+1)-(64/x())); return x1; } unsigned float x2(){ //sectorización de GLCD float x2; x2 = (((5*x())-64)/4); return x2; } unsigned float y1(){ //sectorización de GLCD float y1; y1 = ((y()+1)-(72/y())); return y1; } unsigned float y2(){ //sectorización de GLCD float y2; y2 = (((4*y())-33)/3); return y2; } void main(){ ADCON1=0b00001101; 60 PORTA=0; TRISA=0b0000011; Glcd_Init(&PortB,2,3,4,5,6,7,&PortD); Glcd_Fill(0); delay_us(100); repita: Glcd_Rectangle(119,1,127,11,1); Glcd_Write_Text("B",121,0,1); while(!PressDetect()){ //Mientras hay pulsación if ((x()<=64)&&(y()<=32)){ glcd_dot(x1(),y1(),1); delay_us(750); goto repita;} if ((x()<=64)&&(y()>32)){ glcd_dot(x1(),y2(),1); delay_us(750); goto repita;} if ((x()>64)&&(y()<=32)){ x2(); y1(); if((((x2()<=127)&&(y1()<=10))&&((x2()>=119)&&(y1()>=0)))){ glcd_fill(0); delay_us(750); goto repita;} else { glcd_dot(x2(),y1(),1); delay_us(750); goto repita;} } 61 if ((x()>64)&&(y()>32)){ glcd_dot(x2(),y2(),1); delay_us(750); goto repita;} } } Observamos un bosquejo cualquiera realizado con la ayuda de un lápiz plástico el cuál protege las delicadas capas que conforman el Touch Screen. Figura 2.17 Touch Screen – Prueba de Funcionamiento (Proto – Board). Resultado en Placa Electrónica. Figura 2.18 Touch Screen – Prueba de Funcionamiento (Tarjeta de Desarrollo). 62 2.2.3 IMPLEMENTACIÒN DE UN PROGRAMA EN VISUAL BASIC PARA INTERACCIÒN PC – TARJETA. Como anteriormente se mencionó, mediante la ayuda de EASY HID generamos la aplicación de Interfaz de Usuario PC-TARJETA. Esta aplicación tiene que ser diseñada de acuerdo a nuestras necesidades de tal manera que sea realista y fácil de implementar. A continuación de muestran los pasos realizados para este efecto tanto en Visual Basic como en MikroC. * GENERACIÓN DE PROYECTO MEDIANTE EASY HID. ⇒ Figura 2.19 PARÁMETROS DE IDENTIFICACIÓN. ⇒ Figura2.20 PARÁMETROS IMPORTANTES COMPATIBILIDAD MIKRO C PARA CON 63 ⇒ Figura 2.21 NOMBRE DE PROYECTO USB EN VISUAL BASIC Y SU LOCALIZACIÓN. ⇒ Figura 2.22 VALORES PREDETERMINADOS RECOMENDADOS) ⇒ Figura 2.23 PROYECTO CREADO Y GUARDADO EN LA DIRECCIÓN DESEADA. 64 * ARCHIVO CREADO MEDIANTE MIKROC * ⇒ Figura 2.24 COMPATIBILIDAD CON VISUAL BASIC Figura 2.25 DIRECCIÓN EN DONDE ES CREADO EL ARCHIVO EN MIKROC (Cambiar la extensión del archivo y ponerlo en “USB_CONEXIÓN.c”) 65 * DISEÑO DEL PROGRAMA EN VISUAL BASIC * ⇒ Figura 2.26 Diseño de Botones y Textos constitutivos del programa de prueba. ⇒ Figura 2.27 Asignación de variables. ⇒ Figura 2.28 Generación del archivo FORMESFOT.EXE 66 * GENERACIÓN DEL PROGRAMA EN MIKROC * ⇒ Figura 2.29 Variables del Proyecto a Realizarse. **** PROGRAMA EN MIKROC. **** #include "C:\Users\Darwin Geovanny\Desktop\ESFOT\USB_CONEXION.c" unsigned char const SERVICIOS_BMP[1024] = { 0, 0, 0,192, 0, 0, 0, 0,192, 0, 0,128, 64, 64, 64, 64, 0, 0,128, 64, 64,128,128, 0, 0, 0, 0, 64,248, 68, 68, 4, 64, 64, 64,128, 0, 0, 0,192, 64, 64, 64, 64,128, 64, 64, 64, 64,128, 0,196, 0, 0,252, 0, 0,196, 0, 0, 0, 0, 64, 64, 64,128, 0, 0,128,128, 64, 0, 0, 0, 0, 0,128, 64, 64, 64, 64,192, 0, 0, 0,128, 64, 0,192, 64, 64, 64, 64,128, 64, 64, 64, 64,128, 0,252, 64, 64, 64,128, 0, 0, 0,128, 64, 64, 64, 128, 0, 0, 0,252, 0, 0,128, 64, 64, 64, 64, 0, 0, 0, 0, 0, 0, 0, 15, 16, 16, 16, 16, 31, 0, 0, 9, 18, 18, 12, 0, 0, 15, 18, 18, 18, 18, 11, 2, 0, 0, 0, 0, 31, 0, 0, 12, 18, 17, 17, 31, 0, 0, 0, 31, 0, 0, 0, 0, 31, 0, 0, 0, 67 0, 31, 0, 31, 0, 0, 31, 0, 0, 31, 0, 0, 0, 12, 18, 17, 17, 31, 0, 0, 31, 0, 0, 0, 0, 0, 0, 0, 9, 18, 18, 12, 0,129,198, 56, 6, 1, 0, 0, 31, 0, 0, 0, 0, 31, 0, 0, 0, 0, 31, 0, 31, 16, 16, 16, 8, 7, 0, 0, 15, 16, 16, 16, 8, 7, 0, 0, 31, 0, 0, 9, 18, 18, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64,224, 240,240, 96, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,240,248,248,240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,224,160, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,160,224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,192,224,112, 48, 56,248,252,252,254,254,252, 249,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48,248,252, 252,252,248, 56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255, 0, 1, 2, 4,136,208, 96, 64, 64, 64, 64, 64, 64, 96, 208,136, 4, 2, 1, 0,255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31, 31, 0, 0,252,255,255,255,255,199, 1, 3, 7, 6, 14, 12, 28, 24, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,192,192,224,240,240,248,248,252,255,255,255,255, 254,252,248,248,240,240,224,192,192,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 0,255,255, 255,192,192,192,192,192,192,192,192, 0, 0, 0, 0, 0, 0, 0, 0, 31, 24, 28, 22, 19, 17, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 17, 19, 22, 28, 24, 31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68 0, 0, 0, 0, 0, 0,192,248,255,127, 31, 7, 3, 7, 31,255, 254,248,192, 0, 0, 0, 0, 0, 0, 0, 0, 0,112,120,124, 62, 62, 63, 31, 31, 31, 15, 15, 15, 7, 7, 7, 3,255,255,255,255, 3, 3, 7, 7, 7, 15, 15, 15, 31, 31, 31, 63, 62, 62,124,120, 112, 0, 0, 0, 0, 0,128,240,252, 28, 6, 7, 3, 0, 31, 31, 31, 25, 25, 25, 25, 25, 25, 25, 25, 24, 24,248,248,240,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 30, 31, 7, 1, 0, 0, 0, 0, 0, 0, 0, 7, 31, 31, 28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,128,192,224,255,255,127,255, 240,224,192,128,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 31, 62,248,240,192,128,128, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,192,224,240,112, 7, 63,255,252, 224, 96, 96,112, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 1, 1, 0, 0, 0, 0, 0, 1, 1, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 3, 3, 3, 6, 6, 6, 6, 7, 7, 3, 3, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; unsigned char const ESTUDIANDO_bmp[1024] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 69 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,192, 64,192,128,128,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,224, 8,248,252,252,252, 248,184,240,224,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 32, 64, 32,156,228, 33,153,251, 3, 31,243, 7, 6, 6, 5, 13, 12, 8, 24, 26, 26, 16, 52, 52, 52, 40, 40,104, 80,240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,255,128,193,255,255,255, 255,255,127, 31, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 64, 32, 32, 96,192,192,192,192,192,128, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,128,128,128,128,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 96, 96, 96,176,136, 68, 38, 33, 24, 16, 2, 7,140,124, 63, 7, 63,240, 3,124,192, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,124,192, 0, 70 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,135,255,255,255,255, 255,224,192,192,192,192,192,128,128,128,128,128,192,192,192,192, 248, 1, 0, 0, 0, 0, 99,255,255,255,255,255,255,240,240,248, 252,252,254,254,252,252,254,254,254,255,254,255,229,195,154, 70, 46, 94, 62, 54, 42, 10, 22, 10, 10,222,223,184,184,112,224,192, 192,192,192,192, 64, 64,192, 7,127, 64, 97,254,252,240,240,240, 224,224, 96,224,224,224,192,192,192,192,192,192,192,128,131,158, 240,192, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 24, 31, 31, 31, 63, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 48, 72,224, 96,244,255,255,255,255,223,207,199,231,243,243, 251,255,255,255,255,255,255,255,255,255,255,255,255,255,255,254, 254,254,124,124,126, 60, 62, 28, 31, 31, 15, 15, 15, 15, 15, 12, 30, 29, 61, 61, 57,125,125,125,251,243,243,247,251,250,250,242, 180, 22, 28, 13, 13, 13, 3, 2, 3,195,199,197, 77,109,191,135, 3, 3, 0,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 124,192,146,207,253,253,127,127,127,127,127,255,255,127, 63, 31, 15, 15, 7, 7, 3, 3, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 3, 7, 7, 6, 12, 24, 16, 48, 32, 41, 49, 43,110,124, 52, 39, 38, 62, 10, 11, 15, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 71 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; unsigned char const GRUPO_bmp[1024] = { 0, 0, 0, 0, 0, 0, 0,128,128,128,128,128, 0, 0, 0, 0, 0, 0, 0,128,128, 0, 0, 0, 0, 0,128,128,128,128,128, 0, 0, 0,128, 0, 0, 0, 0,128,128, 0, 0, 0, 0,128,128, 0, 0,128, 0, 0, 0,128, 0, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0,128,128, 0, 0, 0, 0, 0, 0,128,128, 0, 0, 0, 0, 0,128,128,128,128, 0, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0,128, 0, 0, 0,128, 0, 0, 0, 0, 0,128, 0, 0, 0, 0, 0,128,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,224, 63, 1, 0, 0,128,193, 63, 12,128,224, 48, 44, 35, 33, 63,240, 0, 0,224, 63, 17, 16, 48,232, 15, 0, 0, 0,255,128,192, 48, 12, 3,255,128,192, 48, 12, 3, 0,224, 63, 1, 0,224, 63, 1, 7, 60,224,192,124, 7, 0, 0, 0, 0, 0,224, 63, 3, 15,248,128, 96, 48, 12, 6,241, 15, 0, 0,248, 134, 1, 0, 0,128,192,127, 4, 0,224, 63, 1, 0, 0, 0, 0, 224, 63, 1, 0,224, 63, 1, 7, 60,224,192,124, 7,128,224, 48, 44, 35, 33, 63,240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 72 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,240, 28, 0, 0,128, 96, 24, 12,252,128, 0, 0, 0,252,128, 0, 0,192,112, 24, 4, 0,248, 12, 0, 0,248, 76, 68, 68, 68, 4, 0, 0,248,140,132,132, 68,124, 0, 0, 0, 0, 0, 0, 0,248,140,132,132, 68,124, 0, 0,192, 48, 8, 4, 4, 4, 4,248, 32, 0, 0, 0,240, 28, 0, 0,128, 96, 24, 12, 252,128, 0, 0, 0,120, 68,196,132, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 8, 6, 3, 0, 12, 7, 1, 1, 1, 1, 1, 15, 0, 0, 0, 0, 15, 12, 3, 0, 0, 0, 0, 15, 1, 0, 0, 15, 9, 8, 8, 8, 0, 0, 0, 15, 1, 0, 0, 1, 15, 0, 0, 0, 0, 0, 0, 0, 15, 1, 0, 0, 1, 15, 0, 0, 0, 7, 12, 8, 8, 8, 12, 6, 3, 0, 8, 8, 6, 3, 0, 12, 7, 1, 1, 1, 1, 1, 15, 0, 4, 8, 8, 8, 8, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,192,192, 0, 0, 0, 0, 0, 0,192,192, 0, 0, 0, 0, 0,128,192,192, 0, 0, 0, 0,192, 0, 0, 0, 0,192, 64, 0, 0,128, 64, 64, 64, 64,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,192, 96, 0, 0, 0, 0, 0,128, 64, 64, 64,192, 0, 0, 0,128,192, 64, 64,192,128, 0, 0, 0,128, 128,192, 0, 0, 0, 0,128,192, 64, 64,192,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,240, 31, 1, 7,252,192, 48, 24, 6, 3,248, 7, 0,192, 112, 24, 22, 17, 16, 31,248, 0, 0, 0, 1,255, 28, 6, 3, 0, 73 0,124,195,128,128,128,192, 96, 63, 2, 0, 0, 0, 0, 0, 0, 0, 0,128, 96, 48, 12, 3, 0, 0, 0, 0, 0,128,192,224,176, 152,140, 7, 0, 0,126,131,128,128, 64, 56, 15, 0,128,129,193, 252,131,128, 0, 0,126,131,128,128, 64, 56, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; unsigned char Read_buffer[8]; unsigned char Write_buffer[8]; unsigned char Buffer; // Timer interrupt service routine void interrupt() { HID_InterruptProc(); TMR0L = 100; INTCON.TMR0IF = 0; } void main() { // Keep alive // Re-load TMR0L // Re-enable TMR0 interrupts 74 ADCON1 = 0xFF; TRISB = 0; PORTB = 0; TRISc = 0; PORTc = 255; // Set PORT B to digital I/O // Set PORT B to outputs // Clear all outputs // Set PORT c to outputs // Clear all outputs TRISD=0; // Set interrupt registers to power-on defaults // Disable all interrupts INTCON=0; INTCON2=0xF5; INTCON3=0xC0; RCON.IPEN=0; PIE1=0; PIE2=0; PIR1=0; PIR2=0; // Configure TIMER 0 for 3.3ms interrupts. Set prescaler to 256 // and load TMR0L to 100 so that the time interval for timer // interrupts at 48MHz is 256*(256-100)*0.083 = 3.3ms // The timer is in 8-bit mode by default T0CON = 0x47; TMR0L = 100; INTCON.TMR0IE = 1; T0CON.TMR0ON = 1; // Prescaler = 256 // Timer count is 256-156 = 100 // Enable T0IE // Turn Timer 0 ON 75 INTCON = 0xE0; // Enable interrupts // Enable USB port Hid_Enable(&Read_buffer, &Write_buffer); Delay_ms(1000); // Read from the USB port. Number of bytes read is in num Soft_I2C_Config(&PORTb, 0, 1); // Initialize full master mode Soft_I2C_Start(); Soft_I2C_Write(0xc6); // Issue start signal // Address LCD Soft_I2C_Write(0); // Start from word at address 0 (configuration word) Soft_I2C_Write(12); // Start from word at address 0 (configuration word) Soft_I2C_Write(19); Soft_I2C_Write(2); Soft_I2C_Write(22); Soft_I2C_Write('L'); Soft_I2C_Write('A'); Soft_I2C_Write('B'); Soft_I2C_Write('O'); Soft_I2C_Write('R'); Soft_I2C_Write('A'); Soft_I2C_Write('T'); Soft_I2C_Write('O'); Soft_I2C_Write('R'); Soft_I2C_Write('I'); Soft_I2C_Write('O'); Soft_I2C_Write(' '); 76 Soft_I2C_Write(' '); Soft_I2C_Write(' '); Soft_I2C_Write('D'); Soft_I2C_Write('E'); Soft_I2C_Write(0); Soft_I2C_Write(2); Soft_I2C_Write(41); Soft_I2C_Write('M'); Soft_I2C_Write('I'); Soft_I2C_Write('C'); Soft_I2C_Write('R'); Soft_I2C_Write('O'); Soft_I2C_Write('P'); Soft_I2C_Write('R'); Soft_I2C_Write('O'); Soft_I2C_Write('C'); Soft_I2C_Write('E'); Soft_I2C_Write('S'); Soft_I2C_Write('A'); Soft_I2C_Write('D'); Soft_I2C_Write('O'); Soft_I2C_Write('R'); Soft_I2C_Write('E'); Soft_I2C_Write('S'); Soft_I2C_Stop(); while (1){ 77 Buffer=Read_buffer[0]; if (Read_buffer[0] == 'A'){ Soft_I2C_Start(); Soft_I2C_Write(0xc6); // BACKLIGHT ON Soft_I2C_Write(0); Soft_I2C_Write(19); Soft_I2C_Stop(); Read_buffer[0]=0;} if (Read_buffer[0] == 'B'){ Soft_I2C_Start(); Soft_I2C_Write(0xc6); // BACKLIGHT OFF Soft_I2C_Write(0); Soft_I2C_Write(20); Soft_I2C_Stop(); Read_buffer[0]=0;} if (Read_buffer[0] == 'C'){ Soft_I2C_Start(); Soft_I2C_Write(0xc6); // MOSTRAR CURSOR Soft_I2C_Write(0); Soft_I2C_Write(5); Soft_I2C_Stop(); Read_buffer[0]=0;} if (Read_buffer[0] == 'D'){ Soft_I2C_Start(); Soft_I2C_Write(0xc6); // OCULTAR CURSOR 78 Soft_I2C_Write(0); Soft_I2C_Write(4); Soft_I2C_Stop(); Read_buffer[0]=0;} if (Read_buffer[0] == 'E'){ Soft_I2C_Start(); Soft_I2C_Write(0xc6); // BORRAR LCD-I2C Soft_I2C_Write(0); Soft_I2C_Write(12); Soft_I2C_Stop(); Read_buffer[0]=0;} if (Read_buffer[0] == 'F'){ Soft_I2C_Start(); Soft_I2C_Write(0xc6); Soft_I2C_Write(0); Soft_I2C_Write(12); Soft_I2C_Write(0); Soft_I2C_Write(2); Soft_I2C_Write(6); Soft_I2C_Write('E'); Soft_I2C_Write('S'); Soft_I2C_Write('C'); Soft_I2C_Write('U'); Soft_I2C_Write('E'); Soft_I2C_Write('L'); Soft_I2C_Write('A'); // MOSTRA TEXTO EN PANTALLA 79 Soft_I2C_Write(0); Soft_I2C_Write(2); Soft_I2C_Write(24); Soft_I2C_Write('P'); Soft_I2C_Write('O'); Soft_I2C_Write('L'); Soft_I2C_Write('I'); Soft_I2C_Write('T'); Soft_I2C_Write('E'); Soft_I2C_Write('C'); Soft_I2C_Write('N'); Soft_I2C_Write('I'); Soft_I2C_Write('C'); Soft_I2C_Write('A'); Soft_I2C_Write(0); Soft_I2C_Write(2); Soft_I2C_Write(46); Soft_I2C_Write('N'); Soft_I2C_Write('A'); Soft_I2C_Write('C'); Soft_I2C_Write('I'); Soft_I2C_Write('O'); Soft_I2C_Write('N'); Soft_I2C_Write('A'); Soft_I2C_Write('L'); Soft_I2C_Stop(); Read_buffer[0]=0;} if (Read_buffer[0] == 'G'){ 80 Glcd_Init(&PORTB,2,3,4,5,6,7,&PORTD); Glcd_Fill(0); Glcd_Image(ESTUDIANDO_BMP); delay_ms(10); Read_buffer[0]=0;} if (Read_buffer[0] == 'H'){ Glcd_Init(&PORTB,2,3,4,5,6,7,&PORTD); Glcd_Fill(0); Glcd_Image(SERVICIOS_BMP); delay_ms(10); Read_buffer[0]=0;} if (Read_buffer[0] == 'I'){ Glcd_Init(&PORTB,2,3,4,5,6,7,&PORTD); Glcd_Fill(0); Glcd_Image(GRUPO_BMP); delay_ms(10); Read_buffer[0]=0;} if (Read_buffer[0] == 'J'){ Glcd_Init(&PORTB,2,3,4,5,6,7,&PORTD); Glcd_Fill(0); delay_ms(10); Read_buffer[0]=0;} } Hid_Disable(); } 81 **** PROGRAMA DE VISUAL BASIC **** ' vendor and product IDs Private Const VendorID = 100 Private Const ProductID = 1 ' read and write buffers Private Const BufferInSize = 8 Private Const BufferOutSize = 8 Dim BufferIn(0 To BufferInSize) As Byte Dim BufferOut(0 To BufferOutSize) As Byte Private Sub Command1_Click() BufferOut(0) = 0 BufferOut(1) = Asc("A") hidWriteEx VendorID, ProductID, BufferOut(0) Label4 = "BACKLIGHT ON..." End Sub Private Sub Command10_Click() BufferOut(0) = 0 BufferOut(1) = Asc("J") hidWriteEx VendorID, ProductID, BufferOut(0) Label4 = "GLCD BORRADO!!!" End Sub Private Sub Command11_Click() Form_Unload (0) End 82 End Sub Private Sub Command2_Click() BufferOut(0) = 0 BufferOut(1) = Asc("C") hidWriteEx VendorID, ProductID, BufferOut(0) Label4 = "CURSOR ON..." End Sub Private Sub Command3_Click() BufferOut(0) = 0 BufferOut(1) = Asc("E") hidWriteEx VendorID, ProductID, BufferOut(0) Label4 = "LCD - I2C BORRADO !!!!" End Sub Private Sub Command4_Click() BufferOut(0) = 0 BufferOut(1) = Asc("B") hidWriteEx VendorID, ProductID, BufferOut(0) Label4 = "BACKLIGHT OFF..." End Sub Private Sub Command5_Click() BufferOut(0) = 0 BufferOut(1) = Asc("D") hidWriteEx VendorID, ProductID, BufferOut(0) Label4 = "CURSOR OFF..." End Sub 83 Private Sub Command6_Click() BufferOut(0) = 0 BufferOut(1) = Asc("F") hidWriteEx VendorID, ProductID, BufferOut(0) Label4 = "TEXTO ENVIADO..." End Sub Private Sub Command7_Click() BufferOut(0) = 0 BufferOut(1) = Asc("G") hidWriteEx VendorID, ProductID, BufferOut(0) Label4 = "ESTUDIANDO EN PANTALLA..." End Sub Private Sub Command8_Click() BufferOut(0) = 0 BufferOut(1) = Asc("H") hidWriteEx VendorID, ProductID, BufferOut(0) Label4 = "SERVICIOS EN PANTALLA..." End Sub Private Sub Command9_Click() BufferOut(0) = 0 BufferOut(1) = Asc("I") hidWriteEx VendorID, ProductID, BufferOut(0) Label4 = "GRUPO EN PANTALLA..." End Sub 84 ' **************************************************************** ' when the form loads, connect to the HID controller - pass ' the form window handle so that you can receive notification ' events... '***************************************************************** Private Sub Form_Load() ' do not remove! ConnectToHID (Me.hwnd) End Sub '***************************************************************** ' disconnect from the HID controller... '***************************************************************** Private Sub Form_Unload(Cancel As Integer) DisconnectFromHID End Sub '***************************************************************** ' a HID device has been plugged in... '***************************************************************** Public Sub OnPlugged(ByVal pHandle As Long) If hidGetVendorID(pHandle) = VendorID And hidGetProductID(pHandle) = ProductID Then ' ** YOUR CODE HERE ** Label4 = "TARJETA CONECTADA !!!!" End If End Sub '***************************************************************** 85 ' a HID device has been unplugged... '***************************************************************** Public Sub OnUnplugged(ByVal pHandle As Long) If hidGetVendorID(pHandle) = VendorID And hidGetProductID(pHandle) = ProductID Then ' ** YOUR CODE HERE ** Label4 = " TARJETA DESCONECTADA !!!" End If End Sub '***************************************************************** ' controller changed notification - called ' after ALL HID devices are plugged or unplugged '***************************************************************** Public Sub OnChanged() Dim DeviceHandle As Long ' get the handle of the device we are interested in, then set ' its read notify flag to true - this ensures you get a read ' notification message when there is some data to read... DeviceHandle = hidGetHandle(VendorID, ProductID) hidSetReadNotify DeviceHandle, True End Sub '***************************************************************** ' on read event... '***************************************************************** Public Sub OnRead(ByVal pHandle As Long) 86 ' read the data (don't forget, pass the whole array)... If hidRead(pHandle, BufferIn(0)) Then ' ** YOUR CODE HERE ** ' first byte is the report ID, e.g. BufferIn(0) ' the other bytes are the data from the microcontrolller... End If End Sub '***************************************************************** ' this is how you write some data... '***************************************************************** Public Sub WriteSomeData() BufferOut(0) = 0 ' first by is always the report ID BufferOut(1) = 10 ' first data item, etc. ' write the data (don't forget, pass the whole array)... hidWriteEx VendorID, ProductID, BufferOut(0) End Sub 87 *** RECONOCIMIENTO DEL DISPOSITIVO COMO ENTRADA USB EN ELCOMPUTADOR *** Figura 2.30 Reconocimiento de la Tarjeta de Desarrollo en el Computador. 88 * UTILIZACIÓN DEL ARCHIVO FORMESFOT.EXE PARA CONTROL DE TARJETA * Figura 2.31 Conexión PC – TARJETA DE DESARROLLO mediante archivo FORMESFOT.exe *** RESULTADO EN MEDIO EXTERNO *** Figura 2.32 Conexión PC – Proto - Board. 89 Se distingue la aplicación realizada desde el computador para el LCD-I2C (ESCUELA POLITECNICA NACIONAL) y para el GLCD (DARWIN MOLINA, JAVIER ROJAS MAYO 2010). Figura 2.33 Conexión PCTARJETA DE DESARROLLO. 2.2.4 CORRECCIÒN DE ERRORES. Los siguientes errores que se obtuvieron al diseñar nuestra Tarjeta de Desarrollo fueron los siguientes: • Mediante pruebas realizadas en Proto – Board, la corriente entregada por el puerto USB del computador (∼ 500mA) no eran suficientes para alimentar los dispositivos pertenecientes a la Tarjeta de Desarrollo, por lo que recurrimos a implementar una fuente de alimentación externa la cual está diseñada para entregar una corriente máxima de 1A 90 • Una vez trasladados los elementos hasta la primera placa de prueba, nos dimos cuenta que algunos elementos tenían sueldas frías lo que provocaba fallas de voltaje que impedían el correcto funcionamiento del Microprocesador, GLCD, LCD I2C. • Al momento de diseñar la placa, tuvimos problemas en el tamaño de las pistas ya que resultaron ser muy finas, que al momento de soldar con cautín de 40w, algunas pistas se dañaron y no soportaron el exceso de calor, lo que condujo a que en el diseño final de la Tarjeta de Desarrollo se incremente considerablemente el grosor de las pistas para evitar los mismos errores que tuvimos en la placa de prueba. • La manipulación incorrecta y excesiva del Touch Screen en las pruebas iníciales condujo a la rotura irreversible del FLEX que es la parte fundamental de conexión entre el Touch Screen y el Microcontrolador, lo que obligó a comprar un nuevo dispositivo. • Debido a la utilización de una fuente de alimentación externa, nos dimos cuenta que al momento de conectar la Tarjeta de Desarrollo hacia el computador, era necesario unir la Tierra del computador con la Tierra de la fuente externa y deshabilitar el voltaje proveniente del computador, debido a que no reconocía el computador a la Tarjeta como un Dispositivo de Interfaz Humana (HID). • En el primer diseño no se tomó en cuenta el tamaño del porta – fusible que se puede encontrar en nuestro medio, lo que llevó a modificar el diseño final considerando el tamaño más estético y existente en el mercado. CAPÌTULO 3 92 3.1 CONCLUSIONES Y RECOMENDACIONES El diseño y construcción de nuestra “Tarjeta de Desarrolló” para el laboratorio de microprocesadores genera las siguientes conclusiones obtenidas durante el proceso de elaboración: El objetivo de nuestra Tarjeta era lograr interactuar entre el hardware y software lo que se obtuvo satisfactoriamente. Se desarrolló una tarjeta con la facilidad para que el estudiante pueda elaborar nuevos programas utilizando la tecnología que ofrece un touch screen, además de lograr utilizar la comunicación I2C a través de un LCD con dicha tecnología. La facilidad que tiene la Tarjeta de programar y borrar los Pics que se utilicen a través de un puerto USB es una gran ventaja de nuestro sistema ya que se puede conectar a cualquier computadora que tenga un sistema operativo XP o Vista, no se ha probado la tarjeta con otros sistemas operativos como Windows 7 o Linux. Nuestra Tarjeta consta de un sistema de protección en caso de un corto circuito lo que permite protegerla de cualquier sobre carga que se pueda producir. Con la finalidad de facilitar al estudiante en el desarrollo de nuevos programas para interactuar con una PC también la Tarjeta puede conectarse directamente a un computador ya que la reconoce como un Dispositivo de Interfaz Humana (Human Interface Device), esto nos permite utilizar el programa Visual Basic dando una potencialidad al estudiante dentro de la programación orientada a objetos. 93 Además la construcción de nuestra Tarjeta se la realizó por etapas lo que permite utilizarla cuando se requiera manejar el touch screen con el GLCD o solo el LCD I2C o a su vez los dos al mismo tiempo, tomando en cuenta que esto nos permite ahorrar energía dentro de nuestra tarjeta. La ventaja que ofrece nuestra Tarjeta es que permite utilizar todos los pines del Pic siempre y cuando se tome en cuenta la distribución del mismo con relación al GLCD y el LCD I2C lo que aumenta la potencialidad del mismo para desarrollar diferentes tipos de programas. Se recomienda que cuando se utilice la tarjeta para programar el Pic se utilice el sistema operativo de Windows XP ya que con este sistema se obtuvo mejores resultados. Además se recomienda que se utilice la fuente que se diseño para nuestra tarjeta que aproximadamente consume 800mA. Al realizar las pruebas con la tarjeta utilizando el programa Visual Basic se probaron en los sistemas operativos XP y Vista, en ambos casos los resultados fueron satisfactorios. Se recomienda utilizar Windows XP para el funcionamiento del Programador GTP-USB LITE ya que es diseñado únicamente para el sistema operativo mencionado. 94 3.2 BIBLIOGRAFÍA. Folletos - Pic18F4550 Datasheet Microchip Páginas Web -http://www.winmate.com.tw/ (Información Touch Screen) -http://www.dmccoltd.com/ (Touch Screen) -http://www.actel.com/documents/ (Documentación Touch Screen) -http://www.eetimes.com/design/ (Resistividad del Touch Screen) -http://www.eetimes.com/design/ (Datos Touch Screen) -http://www.alldatasheet.com/ (Datasheets Componetes) -http://es.wikipedia.org/wiki/USB (Tutoriales de USB) -http://msdn2.microsoft.com/en-us/ default.aspx (Ayuda Visual Basic) 95 3.3 ANEXOS. Proceso de elaboración de la placa baquelita a través del método de insolación. Foto donde se puede observar los negativos de nuestra placa tanto superior como inferior. Para la elaboración de los dos lados de nuestra placa los dos negativos deben fijarse para que las dos caras concuerden correctamente. 96 Momento dentro de la cámara de insoladora donde se absorbe el aire para que el negativo de nuestra placa se pegue a la baquelita. Momento donde se fotocopia el negativo de nuestra placa a la baquelita a través de luz ultravioleta (Cámara insoladora) 97 Foto donde se observa la impresión de nuestro negativo en la placa baquelita después de terminar el proceso de la insolación y revelado. Foto donde se ve terminada la placa baquelita después del atacado químico. 98 Tarjeta de Desarrollo Terminada Oros ejemplos, manuales (PIC 18F4550, LCD I2C, Touch Screen) y videos de elaboración de la placa electrónica son incluidos dentro del CD ANEXOS.