Desarrollo de una estación meteorológica USB Adela M. Rodríguez Zaragozá Tutor: José Antonio Boluda Grau 5 de septiembre de 2006 Universitat de València - ETSE Agradecimientos A mis padres, abuela, tío y tías, por su apoyo, paciencia y confianza en mí. A Marian, por compartir conmigo un montón de experiencias, por todos los buenos momentos que me has hecho pasar y por hacer que los menos buenos no fueran tan malos, por tu paciencia aguantando mis agobios y locuras transitorias, por todas esas bi y por lo mucho que me haces reír. Sin ninguna duda, tu amistad es lo mejor que me ha aportado la carrera. A Oscar, por su ayuda con la electrónica, apoyo, consejos y ánimos. A Blanca, por sufrir conmigo el PIC y el C#, por prestarme la placa y por esas peazo de trufas belgas!! A Sara y M. José, por todos esos momentos que hemos pasado juntas, me alegro de que nuestra amistad no se haya limitado a la facul y que seáis mucho más que unas compañeras de clase. A mi tutor, por su disponibilidad y ayuda durante el desarrollo del proyecto. A Isaac, por atenderme y resolver mis dudas. A Natalia, por hacerme reír y ayudarme a desconectar. A Marita, Miriam, Inés y Montse, por todo lo que me han enseñado y encomendado (y espero que sigan!). A Isabel y Amparo, que aunque pase el tiempo y cambien las circunstancias, siempre están ahí. A Isidoro, por su ayuda en el estudio y con los exámenes, y a Beto, por estar siempre pendiente de mí y encontrarme sitio para aparcar. DOG - OIB Índice General I Memoria 1 1. 3 2. Introducción. 1.1. Enunciado y objetivos del proyecto.......................................................3 1.2. Resumen de la memoria.........................................................................4 Estado del arte. 2.1. 7 Interconexión entre ordenador y periféricos. .........................................7 2.1.1. Interfaces serie. ..............................................................................9 2.1.1.1. La interfaz RS-232.......................................................................10 2.1.1.2. El Bus Serie Universal (USB)......................................................10 2.1.1.3. El estándar IEEE 1394 o FireWire...............................................14 2.1.2. Interfaces paralelas.......................................................................16 2.1.2.1. La interfaz Centronics..................................................................16 2.1.2.2. El estándar IEEE 1284. ................................................................17 2.1.2.3. Small Computer Systems Interface (SCSI)..................................17 2.1.3. 3. 4. Comunicación inalámbrica. Bluetooth.........................................18 2.2. Microcontroladores. .............................................................................21 2.3. Sistemas de adquisición de datos mediante sensores...........................26 Metodología y materiales. 29 3.1. Metodología. ........................................................................................29 3.2. Material utilizado. ................................................................................31 3.2.1. Software. ......................................................................................31 3.2.2. Hardware......................................................................................34 Análisis de alternativas. 4.1. 35 Requisitos.............................................................................................35 4.2. 4.2.1. Interconexión entre el periférico y el ordenador..........................36 4.2.2. Microcontrolador. ........................................................................38 4.2.3. Lenguajes y herramientas de desarrollo de aplicaciones. ............40 4.3. 5. 8. 47 5.1. Diseño del hardware. ...........................................................................48 5.2. Diseño del firmware.............................................................................53 5.2.1. Registros de configuración. .........................................................53 5.2.2. Registros del oscilador.................................................................55 5.2.3. Registros del módulo A/D. ..........................................................58 5.2.4. Registros del módulo USB...........................................................63 5.2.5. Descriptores. ................................................................................66 Diseño del software..............................................................................71 Implementación. 73 6.1. Implementación del hardware..............................................................73 6.2. Implementación del firmware. .............................................................75 6.2.1. Programación del microcontrolador. ...........................................75 6.2.2. Creación del fichero INF. ............................................................78 6.2.3. Creación de una nueva clase. .......................................................80 6.3. 7. Selección. .............................................................................................43 Diseño. 5.3. 6. Evaluación de alternativas. ..................................................................36 Implementación del software...............................................................82 Experimentación. 85 7.1. Instalación del periférico......................................................................85 7.2. Medición de la temperatura. ................................................................86 7.3. Comprobación del software. ................................................................87 Presupuesto. 89 8.1. Coste de los recursos hardware............................................................89 8.2. Coste de los recursos software.............................................................90 8.3. Coste de los componentes y fabricación del PCB. ..............................91 8.4. Coste de los recursos humanos. ...........................................................92 8.5. 9. Coste total del proyecto. ......................................................................93 Conclusiones y trabajo futuro. 95 9.1. Conclusiones. .......................................................................................95 9.2. Trabajo futuro. .....................................................................................97 II Planos y especificaciones 99 10. Planos del PCB. 101 10.1. Esquema eléctrico. .............................................................................101 10.2. Listado de componentes.....................................................................103 10.3. Diseño del PCB. Caras Top y Bottom. ..............................................104 10.4. Pinout. ................................................................................................105 11. Especificaciones. 107 11.1. Condiciones económicas....................................................................108 11.2. Especificaciones técnicas...................................................................108 11.2.1. Condiciones de trabajo del sistema............................................108 11.2.2. Requerimientos de las señales del sistema.................................109 11.3. Características de los materiales. .......................................................110 11.3.1. Especificaciones de los circuitos integrados..............................110 11.3.2. Componentes pasivos y conductores. ........................................111 11.4. Condiciones de ejecución. .................................................................113 11.4.1. Fabricación del PCB. .................................................................113 11.4.2. Montaje de componentes. ..........................................................114 III Apéndices 115 A. Código del microcontrolador 117 B. Fichero .INF 123 C. Código de la aplicación 125 D. Manual de usuario de TempUSB 139 D.1. Instalación del dispositivo……………………………………………...139 D.2. Instalación de la aplicación..…………………………………………...140 D.3. Utilización de la aplicación…………………………………………….141 Bibliografía 145 Índice de Figuras Figura 2.1: Topología de una conexión USB...............................................................12 Figura 2.2: Formato del tipo de cable utilizado............................................................13 Figura 2.3: Utilización de microcontroladores por sectores.........................................25 Figura 4.1: Encapsulado PIC18F2550..........................................................................45 Figura 5.1: Flujo de comunicaciones entre un dispositivo USB y el host....................47 Figura 5.2: Sensor de temperatura LM50.....................................................................49 Figura 5.3: Alimentación a través del bus USB...........................................................50 Figura 5.4: Conector USB tipo A.................................................................................50 Figura 5.5: Oscilador cristal o cerámico (configuración XT, HS o HSPLL)...............52 Figura 5.6: Detección de la velocidad de un dispositivo USB.....................................53 Figura 5.7: Módulo del oscilador.................................................................................55 Figura 5.8: Registro CONFIG1L..................................................................................56 Figura 5.9: Registro CONFIG1H.................................................................................57 Figura 5.10: Registro OSCCON...................................................................................58 Figura 5.11: Registro ADCON0...................................................................................59 Figura 5.12: Registro ADCON1...................................................................................60 Figura 5.13: Secuencia de conversión A/D..................................................................61 Figura 5.14: Conversión A/D con tiempo de adquisición manual...............................62 Figura 5.15: Registro ADCON2...................................................................................63 Figura 5.16: Registro UCON........................................................................................64 Figura 5.17: Módulo USB............................................................................................65 Figura 5.18: Registro UCFG........................................................................................66 Figura 5.19: Jerarquía de descriptores..........................................................................67 Figura 5.20: Descriptores del periférico.......................................................................69 Figura 5.21: Registro UEPn.........................................................................................70 Figura 6.1: Diagrama de bloques del programa...........................................................77 Figura 6.2: Nueva clase en el Administrador de Dispositivos.....................................82 Figura 11.1: Dimensiones del conector USB tipo A………………..………………112 Índice de Tablas Tabla 4.1: Comparación entre FireWire y USB...........................................................37 Tabla 5.1: Modos de funcionamiento del oscilador en el PIC18F2550.......................51 Tabla 5.2: Registros de configuración.........................................................................54 Tabla 5.3: TAD frente a frecuencia del oscilador........................................................62 Tabla 5.4: Valores de los registros de configuración...................................................70 Tabla 8.1: Presupuesto de los recursos hardware.........................................................90 Tabla 8.2: Presupuesto de los recursos software..........................................................91 Tabla 8.3: Presupuesto de los componentes y el PCB.................................................92 Tabla 8.4: Presupuesto del coste de tareas del ingeniero.............................................93 Tabla 8.5: Presupuesto del coste de tareas del técnico.................................................93 Tabla 8.6: Coste total de los recursos humanos...........................................................93 Tabla 8.7: Coste total del proyecto..............................................................................94 Tabla 10.1: Listado de componentes..........................................................................103 Tabla 10.2: Pinout del microcontrolador PIC18F2550..............................................105 Tabla 10.3: Pinout del conector USB.........................................................................106 Tabla 11.1: Condiciones de la señal de alimentación................................................109 Tabla 11.2: Márgenes de tensión para los niveles lógicos en USB 1.1.....................109 Tabla 11.3: Características eléctricas del PIC18F2550..............................................110 Tabla 11.4: Características eléctricas del sensor LM50.............................................111 Tabla 11.5: Parámetros requeridos para la fabricación del PCB…………………....113 Parte I Memoria 1 2 1. Introducción. 1.1. Enunciado y objetivos del proyecto. La aparición de nuevos periféricos en el mercado es constante, desde los tradicionales ratones o impresoras hasta las cámaras digitales o los pendrives pasando por webcams, escáners, conversores A/D o modems. Actualmente muchos dispositivos que se utilizan de forma cotidiana como pueden ser cámaras de fotos, vídeo, reproductores de música o incluso un teléfono móvil pueden ser conectados a un ordenador. Esto hace que el desarrollo de dispositivos periféricos esté en continua evolución, haciendo especial hincapié en la forma de interconexión entre estos dispositivos y el ordenador. Cada día aparecen nuevas utilidades de mayor potencia, con más posibilidades y mucho más gráficas, que requieren de más capacidad y por lo tanto, las tareas ordinarias son cada vez de mayor volumen. Para poder almacenar, transmitir o recibir dichas tareas, aparecen en el mercado periféricos y componentes de mayor capacidad pero también es necesario que la "vía" por la que se van a transmitir esos datos sea más fiable y más rápida, de forma que se ajuste a los nuevos avances. _____________________________________________________________________ Ingeniería Informática 3 Universidad de Valencia El objetivo de este proyecto es llevar a cabo el desarrollo de un periférico, desde el diseño del esquema hardware del dispositivo hasta la implementación de una aplicación software que permita la comunicación con él. El periférico consiste en un sistema de adquisición de datos a través de sensores. Estos datos deberán ser convertidos a formato digital para posteriormente, ser enviados al ordenador donde podrán ser tratados y visualizados. A continuación se enumeran los principales objetivos del proyecto: • Diseño e implementación de un circuito impreso que realice la adquisición de datos a través de sensores. • Estudio de los distintos medios de interconexión entre el dispositivo y el ordenador, seleccionando el que más se adecue a nuestras necesidades. • Implementación del protocolo de comunicación entre el periférico y el host. • Desarrollo de una aplicación software que permita visualizar los datos adquiridos mediante los sensores. 1.2. Resumen de la memoria. La memoria se ha dividido en los siguientes capítulos intentando ofrecer una visión clara de todas las fases del proyecto: • Capítulo 1: Enunciado y objetivos del proyecto y resumen del contenido de la memoria. • Capítulo 2: Estado del arte, es decir, la base teórica sobre la que se basa el proyecto. • Capítulo 3: Metodología y materiales utilizados en el desarrollo del proyecto. _____________________________________________________________________ Ingeniería Informática 4 Universidad de Valencia • Capítulo 4: Especificación de los requisitos a cumplir por el proyecto. Exposición y análisis de las diferentes alternativas de las que se dispone para realizar el proyecto y justificación de la decisión final adoptada. • Capítulo 5: Diseño del hardware, firmware y software del proyecto. • Capítulo 6: Descripción del proceso de implementación. • Capítulo 7: Descripción y resultados de las pruebas realizadas. • Capítulo 8: Estimación económica del proyecto. • Capítulo 9: Conclusiones extraídas y posibles líneas de desarrollo futuras a partir del estado final del proyecto. • Capítulo 10: Esquema eléctrico, planos del PCB y listado de componentes. • Capítulo 11: Especificaciones técnicas y características de los materiales. • Apéndice A: Código del microcontrolador. • Apéndice B: Fichero INF. • Apéndice C: Código de la aplicación software. • Apéndice D: Manual de usuario donde se indica cómo instalar el periférico y utilizar la aplicación software. • Bibliografía. _____________________________________________________________________ Ingeniería Informática 5 Universidad de Valencia _____________________________________________________________________ Ingeniería Informática 6 Universidad de Valencia 2. Estado del arte. En el presente capítulo se expondrán las bases teóricas del diseño de periféricos, para ello el capítulo se divide en tres secciones. En la primera se van a describir los estándares más importantes y comunes que se utilizan para conectar los periféricos al ordenador. La segunda sección trata sobre la importancia de los microcontroladores en el desarrollo de periféricos y, por último, en la tercera sección se hablará sobre los sistemas de adquisición de datos a través de sensores. 2.1. Interconexión entre ordenador y periféricos. En cualquier ordenador existe una parte muy importante llamada subsistema de Entrada/Salida, que es la que hace posible la comunicación con el mundo exterior. Este sistema está formado por varios dispositivos periféricos que proporcionan un medio para intercambiar datos con el exterior y que se comunican con el procesador a través de una serie de módulos llamados de E/S. Cualquiera de estos módulos contiene una serie de controladores que se encargan de manejar el funcionamiento de uno o varios periféricos. Los módulos de E/S no deben conectar directamente el periférico con el bus del sistema, sino que tienen que poseer una cierta inteligencia para poder realizar la comunicación entre el periférico y el procesador de forma eficiente. Si se observan _____________________________________________________________________ Ingeniería Informática 7 Universidad de Valencia algunas de las características del subsistema de Entrada/Salida será posible darse cuenta de esta necesidad: • Existe una gran diversidad de periféricos que utilizan métodos de operación diferentes. No sería lógico que la CPU tuviera que incorporar toda la lógica necesaria para controlar este rango de dispositivos. • La velocidad de transferencia de los datos de los periféricos es a menudo mucho más lenta que la que tiene el procesador con el sistema de memoria, por lo tanto resulta poco práctico usar el bus del sistema de alta velocidad para comunicarse directamente con los periféricos. • A menudo los periféricos utilizan formatos y longitudes de palabra de datos diferentes a los que utiliza el procesador. Debe haber por tanto algún mecanismo para adecuar las señales de ambos dispositivos. Los módulos de E/S establecen una serie de reglas (llamadas interfaces) que les permiten por un lado conectarse con la CPU y la memoria a través del bus del sistema o del de expansión y, por otro lado, conectarse con los dispositivos periféricos a través de enlaces dedicados para datos. Estos enlaces se caracterizan porque son más lentos, tienen una menor longitud de palabra y menores velocidades de transferencia de datos. Su diseño se basa en un estándar para permitir la interconexión de dispositivos de diferentes fabricantes. [MBP01] A continuación se describirán algunos de los estándares más importantes utilizados en la interconexión del ordenador y los periféricos, haciendo para ello una distinción entre interfaces serie e interfaces paralelas: • Interfaz serie: Se utiliza una única línea para transmitir los datos. • Interfaz paralela: Se utilizan varias líneas de datos para transmitir múltiples bits de forma simultánea. _____________________________________________________________________ Ingeniería Informática 8 Universidad de Valencia 2.1.1. Interfaces serie. La conexión a través de esta interfaz es muy importante debido a su gran flexibilidad. En los ordenadores personales la interfaz serie se utiliza para conectar múltiples dispositivos como plotters, módems, ratones y también impresoras. En la transmisión serie se van transfiriendo los bits de información de uno en uno a través de una línea de datos, pudiendo ser las transferencias síncronas o asíncronas. Si se utilizan señales adicionales (reloj o señales de petición y reconocimiento) para indicar cuándo el bit siguiente es válido, entonces se dice que la transmisión se realiza de forma síncrona. La principal ventaja de este tipo de transferencias es que el receptor puede funcionar a varias frecuencias de reloj (siempre que no sobrepase su frecuencia máxima de funcionamiento). Simplemente bastará con retrasar el envío de la señal de reconocimiento para ralentizar el protocolo. En las transferencias asíncronas, por el contrario, tanto el receptor como el transmisor deben funcionar a la misma frecuencia. En este caso se envía también información de sincronización a través de la línea de datos, que se corresponde con un bit de comienzo (bit de start), que indica el comienzo de una unidad de datos, un bit de fin (bit de stop) indicando su finalización y, opcionalmente, un bit de paridad para controlar los posibles errores. El bit de paridad lo generan los controladores serie de forma automática, pudiendo configurarse entre las opciones de: sin paridad, paridad par (odd), paridad impar (even), siempre un nivel alto (mark) o siempre un nivel bajo (space). Las tasas de transferencia de datos se miden en baudios. Los baudios indican el número de veces que puede cambiar una señal en la línea de transmisión por segundo. En una interfaz serie, las señales cambian siempre a la misma frecuencia y se realiza una codificación binaria de la información de forma que cuando se quiere enviar un ‘1’ se pone la línea a nivel alto y cuando se quiere enviar un ‘0’ se pone la línea a nivel bajo. En este caso los baudios coinciden con el número de bits por segundo transferidos si se incluyen también los bits de comienzo, de fin y de paridad. _____________________________________________________________________ Ingeniería Informática 9 Universidad de Valencia 2.1.1.1. La interfaz RS-232. Este estándar lo incorporan todos los ordenadores personales y está definido por la EIA (Electronic Industries Association) aunque en Europa se le conoce como el estándar V.24 definido por la CCITT (Consultative Committee for International Telephone and Telegraph). En él se definen todas las características mecánicas, eléctricas y los protocolos necesarios para conectar un equipo terminal de datos (DTE- Data Terminal Equipment) con un equipo transmisor de datos (DCE – Data Carrier Equipment). Inicialmente se definió para realizar la comunicación entre un ordenador personal y un módem, aunque actualmente se utiliza con muchos otros propósitos para enviar datos de forma serializada. El estándar define voltajes que oscilan entre + [3-15] V para el nivel alto y – [315] V para el nivel bajo. Debido a la gran diferencia de voltaje que existe entre los niveles altos y bajos, se permiten tasas de transferencia de hasta 115.200 baudios si la longitud del cable es de unas pocas decenas de metros. Si se utiliza este estándar para conectar otros periféricos diferentes de los módems, éstos se comportan como dispositivos DTE y, por lo tanto, las señales cambian de significado. 2.1.1.2. El Bus Serie Universal (USB). El USB es un estándar (1995) que define un bus utilizado para conectar periféricos al ordenador. La principal característica que tiene es que la conexión es muy sencilla, ya que utiliza un único conector para conectar a través de un bus serie todos los dispositivos. En él se definen los conectores y los cables, una topología especial tipo estrella para conectar hasta 127 dispositivos y protocolos que permiten la detección y configuración automática de los dispositivos conectados. USB 1.0 soporta dos tasas de transferencia diferentes, una baja de 1,5 Mbps para la conexión de dispositivos lentos de bajo coste (joysticks, ratones) y otra alta de hasta 12 Mbps para la conexión de dispositivos que requieren un mayor ancho de banda (discos o CDROMS). _____________________________________________________________________ Ingeniería Informática 10 Universidad de Valencia La especificación de este estándar ha sido respaldada por las empresas líderes mundiales en el campo de la informática: Intel, IBM, DEC, Microsoft, Compac, NEC y Northem Telecom, empresas que garantizan su continuidad y utilización. A mediados del año 2000 aparece la versión 2.0, que fue creada por el conjunto de compañías arriba mencionadas, a las cuales se unieron Hewlett Packard, Lucent y Philips. USB 2.0 multiplica la velocidad del bus por un factor de 30 o 40, llegando a alcanzar una velocidad de 480 Mbps, con una diferencia de coste casi inapreciable. Es compatible con la versión anterior y utiliza los mismos cables y conectores, únicamente se necesitan nuevos hubs que soporten la versión 2.0. Estos hubs son algo más complejos que los anteriores, ya que tienen que manejar el tráfico de datos de tres velocidades distintas sin ser excluyentes entre ellas. Cabe también destacar que USB 2.0 nunca llegará a reemplazar completamente a USB 1.0, ya que existen algunos tipos de dispositivos, como los HID (teclados, ratones,…), que no requieren las altas velocidades que alcanza esta nueva versión y que únicamente encarecerían el dispositivo. [Usb] Anteriormente los periféricos se conectaban mapeados directamente en direcciones de E/S, se les asignaba una dirección específica y en algunos casos un canal DMA. Esta situación conducía a tener conflictos en la asignación de estos recursos, puesto que siempre han estado bastante limitados en el ordenador. Además cada dispositivo tenía su propio puerto de conexión y utilizaba sus cables específicos, lo que daba lugar a un incremento de los costes. Debido a que a cada dispositivo se le tenían que asignar unos recursos específicos la detección del mismo debía hacerse a la hora de arrancar el sistema y nunca se podía incorporar un nuevo dispositivo cuando el sistema estaba en marcha. Los dos aspectos fundamentales que motivaron la realización de este estándar fueron la necesidad de configurar de forma sencilla los periféricos conectados al ordenador y la necesidad de aumentar el número de puertos disponibles. Este estándar define una topología de conexión en estrella, tal como se muestra en la figura 2.1, por medio de la incorporación de varios concentradores (hubs) _____________________________________________________________________ Ingeniería Informática 11 Universidad de Valencia conectados en serie. Cada concentrador se conecta por un lado al ordenador, que contiene una o dos interfaces de este tipo en la placa base, o a otro concentrador y, por otro lado, se conecta a varios dispositivos o incluso a otro concentrador. De este modo pueden existir periféricos que vengan ya preparados con nuevos conectores USB para incorporar nuevos dispositivos, hasta un total de 127, todos ellos funcionando simultáneamente. Los hubs tienen la misión de ampliar el número de dispositivos que se pueden conectar al bus. Son concentradores cableados que permiten la conexión simultánea de múltiples dispositivos y lo más importante es que se pueden concatenar entre sí ampliando la cantidad de puertos disponibles para los periféricos. El concentrador detecta cuándo un periférico es conectado o desconectado a/de uno de sus puertos, notificándolo de inmediato al controlador de USB. También realiza funciones de acoplamiento de las velocidades de los dispositivos más lentos. Figura 2.1: Topología de una conexión USB Existe una gran variedad de dispositivos USB que se conectan todos al mismo bus. La característica más importante es que todos ellos utilizan el mismo tipo de cable y de conector y se conectan de la misma forma tan sencilla. El host decide qué dispositivo puede acceder al bus, utilizando un protocolo parecido al de paso de testigo. Este protocolo se caracteriza porque entre los diferentes dispositivos se va pasando un identificador a lo largo del tiempo que permite la utilización del bus. _____________________________________________________________________ Ingeniería Informática 12 Universidad de Valencia El host USB tiene las funciones de: • Detectar la conexión/desconexión de dispositivos y configurarlos. • Controlar las transferencias de datos y de control que tienen lugar en el bus. • Realización de auditorias sobre la actividad del sistema. • Servir como fuente de alimentación a los dispositivos. El USB define dos líneas para transmitir datos y otras dos para transmitir potencia (véase la figura 2.2). Los datos de transmiten de forma balanceada a velocidades entre 1,5 Mbps y 12 Mbps. La señal se transmite codificada en un código autoreloj de no retorno a cero invertido (NRZI) para poder incluir junto con los datos información de sincronización. Las líneas de alimentación (Vbus y GND) evitan la necesidad de utilizar fuentes de alimentación externas. Tiene una tensión de 5 V y la corriente se limita a un máximo de 3 a 5 amperios por razones de seguridad, siendo el consumo y la configuración eléctrica totalmente transparente al usuario. La distancia entre dos periféricos conectados al mismo cable no debe ser superior a 5 metros para evitar problemas de caídas de tensión. Figura 2.2: Formato del tipo de cable utilizado El computador identifica automáticamente el dispositivo que se conecta mientras opera y lo configura sin tener que instalar drivers específicos del fabricante. Al comienzo se detectan los dispositivos conectados midiendo los niveles de voltaje de las líneas. Si un dispositivo está conectado, entonces el dispositivo envía información sobre el tipo o la clase a la que pertenece, qué modo de transferencia utilizará y cuáles son sus necesidades de ancho de banda. El host reconocerá el dispositivo buscando en la lista de drivers del sistema operativo y teniendo en cuenta los demás dispositivos _____________________________________________________________________ Ingeniería Informática 13 Universidad de Valencia conectados le asignará un ancho de banda determinado. De la misma forma también se pueden desconectar los dispositivos del sistema. El controlador USB del host asigna un número diferente de dispositivo a cada uno de los periféricos que se conectan a este bus. Para empezar la transferencia, éste envía un paquete que identifica al dispositivo objeto de la transferencia. El protocolo soporta cuatro tipos de transferencias: • Control. Son transferencias que se utilizan para leer información de los descriptores en los registros de los dispositivos (llamados endpoints), interpretarla y poder configurarlos. • Interrupción. Usadas en los periféricos del tipo de los controladores de juegos, teclados y ratones, cuya comunicación es unidireccional y poco frecuente. • Masiva. Son transferencias no periódicas que precisan de todo el ancho de banda disponible. Utilizadas por las impresoras y los scanners. • Isócrona. Dedicadas a las transferencias de telecomunicaciones, como voz o vídeo, que garantiza unas tasas de transferencia constantes. Se caracterizan porque el número de pulsos de reloj que transcurren entre la transmisión de dos caracteres es constante, por lo tanto, se está enviando información constantemente entre el host y el dispositivo. [MBP01] 2.1.1.3. El estándar IEEE 1394 o FireWire. Apple y Sony inventaron el FireWire a mediados de los 90 y lo desarrollaron hasta convertirlo en el estándar multiplataforma IEEE 1394. FireWire es una tecnología para la entrada/salida de datos en serie a alta velocidad y la conexión de dispositivos digitales como videocámaras o cámaras fotográficas digitales que ha sido ampliamente adoptado por fabricantes de periféricos digitales como Sony, Canon, JVC y Kodak. FireWire es uno de los estándares de periféricos más rápidos que se han desarrollado, característica que lo hace ideal para su uso con periféricos del sector multimedia (como cámaras de vídeo) y otros dispositivos de alta velocidad como, por _____________________________________________________________________ Ingeniería Informática 14 Universidad de Valencia ejemplo, lo último en unidades de disco duro e impresoras. Se ha convertido en la interfaz preferida de los sectores de audio y vídeo digital, ya que reúne numerosas ventajas, entre las que se encuentran la elevada velocidad, la flexibilidad de la conexión y la capacidad de conectar un máximo de 63 dispositivos. Además de cámaras y equipo de vídeo digital, la amplia gama de productos FireWire comprende reproductores de vídeo digital, sistemas domésticos para el ocio, sintetizadores de música, escáneres y unidades de disco duro. Con un ancho de banda 30 veces mayor que el conocido estándar de periféricos USB 1.1, el FireWire 400 se ha convertido en el estándar más respetado para la transferencia de datos a alta velocidad. Apple fue el primer fabricante de ordenadores que incluyó FireWire en toda su gama de productos. Una vez más, Apple ha vuelto a subir las apuestas duplicando la velocidad de transferencia con su implementación del estándar IEEE 1394b o FireWire 800. La velocidad sobresaliente del FireWire 800 frente al USB 2.0 convierte al primero en un medio mucho más adecuado para aplicaciones que necesitan mucho ancho de banda, como las de gráficos y vídeo, que a menudo consumen cientos o incluso miles de megabytes de datos por archivo. Algunas de las características más importantes del FireWire son: • Flexibles opciones de conexión. Admite un máximo de 63 dispositivos con cables de hasta 4,25 metros. • Distribución en el momento. Fundamental para aplicaciones de audio y vídeo, donde un fotograma que se retrasa o pierde la sincronización arruina un trabajo. • Alimentación por el bus. Mientras el USB 2.0 permite la alimentación de dispositivos sencillos que consumen un máximo de 2,5 W, como un ratón, los dispositivos FireWire pueden proporcionar o consumir hasta 45 W, más que suficiente para discos duros de alto rendimiento y baterías de carga rápida. _____________________________________________________________________ Ingeniería Informática 15 Universidad de Valencia • Es conectable/desconectable en uso. Lo que significa que no se necesita desactivar un dispositivo para conectarlo o desconectarlo y que no es necesario reiniciar el ordenador. • Funciona tanto con Mac como con PC. Lo que garantiza la compatibilidad con una larga lista de productos con FireWire a precios razonables. [App] 2.1.2. Interfaces paralelas. Los ordenadores personales incorporan tradicionalmente un puerto paralelo consistente en un conector DB25. Este tipo de interfaz se caracteriza porque se envían simultáneamente los bits de datos por medio de diferentes líneas. Desde siempre se ha considerado la interfaz paralela como el puerto utilizado para conectar la impresora, pero desde comienzos de la década de los noventa se viene utilizando con otros fines, ya sea para comunicar diferentes sistemas informáticos o bien para conectar dispositivos de almacenamiento masivo. La clave para su expansión fue la utilización de estándares que permitían la comunicación bidireccional por las líneas de datos. 2.1.2.1. La interfaz Centronics. Inicialmente se diseñó una interfaz con 36 pines, que utilizaba la casa Centronics Data Computer Corporation en sus impresoras. Sin embargo, la interfaz Centronics de los ordenadores personales actuales fue diseñada por Epson Corporation. La interfaz consta de 8 pines para datos más 5 señales que controlan la impresora y cinco que vienen de la misma. Se utilizan voltajes TTL con señales no balanceadas, por lo que son susceptibles de recibir ruido y producir errores. El bus soporta tasas de transferencia de datos de hasta 100 Kbytes/s. Actualmente se han diseñado dos estándares que tratan de aumentar el ancho de banda de la interfaz Centronics sin perder la compatibilidad con el mismo, permitiendo además la comunicación bidireccional. Son las interfaces ECP (Extended Capabilities Port) y EPP (Enhanced Capabilities Port) que se definen en el estándar _____________________________________________________________________ Ingeniería Informática 16 Universidad de Valencia del IEEE 1284. ECP se utiliza en las impresoras y escáners, puesto que permite mayores tasas de transferencia con protocolos sencillos, mientras que EPP sirve para los demás dispositivos en donde se necesita un control de errores más exhaustivo. 2.1.2.2. El estándar IEEE 1284. Este nuevo estándar define 5 modos de transferencia de datos, desde el viejo Centronics hasta dos métodos que permiten la comunicación bidireccional entre el ordenador y el dispositivo. Debido a que los protocolos se implementan por hardware, EPP y ECP permiten tasas de transferencia de datos mucho mayores, llegando incluso al Megabyte por segundo. Los 5 modos de transferencia de datos que define el estándar son: modo compatible, 4 bits, 8 bits (modo byte), ECP y EPP. El estándar describe el formato de las señales, la asignación de pines y los mecanismos de detección y corrección de errores, sin embargo las funciones de la BIOS, la interfaz software y el control de los puertos están a cargo de los fabricantes. El puerto paralelo se configura inicialmente en el modo compatible. Después se establece un diálogo con el periférico para decidir el modo de funcionamiento final, aunque debido a la facilidad con la que se puede cambiar el modo, es posible realizar transferencias cambiando los modos de emisión y de recepción de datos de forma dinámica. Los modos byte, ECP y EPP son opcionales en el estándar. 2.1.2.3. Small Computer Systems Interface (SCSI). La interfaz SCSI es una interfaz paralela, con 8, 16 o 32 líneas de datos, que se utiliza para comunicar dispositivos rápidos, como discos CD-ROM, dispositivos de audio y dispositivos de almacenamiento externo de datos. Normalmente se considera a la configuración SCSI como un bus (conexión multipunto), sin embargo, los dispositivos están conectados entre sí formando una conexión daisy-chain. Cada dispositivo tiene dos conectores, uno de entrada y otro de salida. El comienzo del bus se conecta con el host y el último dispositivo incorpora un terminado para evitar _____________________________________________________________________ Ingeniería Informática 17 Universidad de Valencia problemas de reflexiones de las señales. Los dispositivos funcionan de forma independiente y pueden intercambiar datos tanto entre sí como con el host. Este bus puede soportar múltiples procesadores y múltiples dispositivos periféricos. Soporta hasta 8 dispositivos, de los cuales cada uno puede tener 8 unidades lógicas, cada una de las cuales soporta 256 subunidades lógicas. La especificación original se llamó SCSI-1 y usaba 8 líneas de datos a una frecuencia de 5 MHz, permitiendo una transferencia de datos de 5 Mb/s. SCSI-1 soporta hasta 7 dispositivos que pueden ser encadenados al bus. En 1991 surgió una extensión estándar, el SCSI-2, que incrementaba el número de líneas de datos a 16 o 32 bits e incrementaba la frecuencia de reloj a 10 MHz. Así se logran tasas de transferencia máxima de hasta 40 Mbytes/s. Las transferencias en el bus siempre tienen lugar entre un iniciador (dispositivo que manda comandos) y un objetivo (dispositivo que ejecuta los comandos). Normalmente el host es el iniciador y el controlador del dispositivo es el objetivo, aunque puede haber algún dispositivo que sea ambas cosas a la vez. Las señales que se transmiten por el bus pueden estar implementadas utilizando un solo cable cada una y compartiendo una masa común en el caso de un single-ended SCSI o utilizando dos cables cada una en el caso del differential SCSI. El primero se utiliza para distancias menores a 6 metros y el segundo para distancias menores a 25 metros. Los conectores son de 50 pines. [MBP01] 2.1.3. Comunicación inalámbrica. Bluetooth. Bluetooth es la norma que define un estándar global de comunicación inalámbrica que posibilita la transmisión de voz y datos entre diferentes equipos mediante un enlace por radiofrecuencia. Los principales objetivos que se pretende conseguir con esta norma son: _____________________________________________________________________ Ingeniería Informática 18 Universidad de Valencia • Facilitar las comunicaciones entre equipos móviles y fijos. • Eliminar cables y conectores entre éstos. • Ofrecer la posibilidad de crear pequeñas redes inalámbricas y facilitar la sincronización de datos entre nuestros equipos personales. [Bol06] La tecnología Bluetooth comprende hardware, software y requerimientos de interoperabilidad, por lo que para su desarrollo ha sido necesaria la participación de los principales fabricantes de los sectores de las telecomunicaciones y la informática, tales como: Ericsson, Nokia, Motorola, Toshiba, IBM e Intel, entre otros. Posteriormente se han ido incorporando muchas más compañías, y se prevé que próximamente lo hagan también empresas de sectores tan variados como automatización industrial, maquinaria, ocio y entretenimiento, fabricantes de juguetes, electrodomésticos, etc., con lo que en poco tiempo se nos presentará un panorama de total conectividad de nuestros aparatos tanto en casa como en el trabajo. Bluetooth proporciona una vía de interconexión inalámbrica entre diversos aparatos que tengan dentro de sí esta tecnología, como móviles, consolas, ordenadores de mano, cámaras, ordenadores portátiles, impresoras o simplemente cualquier dispositivo que un fabricante considere oportuno, usando siempre una conexión segura de radio de muy corto alcance. El alcance que logran tener estos dispositivos es de 10 metros para ahorrar energía ya que generalmente estos dispositivos utilizan mayoritariamente baterías. Sin embargo, se puede llegar a un alcance de hasta 100 metros (similar a Wi-Fi) pero aumentando el consumo energético considerablemente. La especificación de Bluetooth define un canal de comunicación de máximo 720Kb/s (1 Mbps de capacidad bruta) con rango óptimo de 10 metros (opcionalmente 100 m con repetidores). La frecuencia de radio con la que trabaja está en el rango de 2,4 a 2,48 GHz con amplio espectro y saltos de frecuencia con posibilidad de transmitir en full duplex con un máximo de 1600 saltos/seg. Los saltos de frecuencia se dan entre un total de 79 frecuencias con intervalos de 1 MHz; esto permite dar seguridad y robustez. _____________________________________________________________________ Ingeniería Informática 19 Universidad de Valencia La potencia de salida para transmitir a una distancia máxima de 10 metros es de 0 dBm (1 mW), mientras que la versión de largo alcance transmite entre 20 y 30 dBm (entre 100 mW y 1 W). El protocolo de banda base (canales simples por línea) combina conmutación de circuitos y paquetes. Para asegurar que los paquetes no lleguen fuera de orden, los slots pueden ser reservados por paquetes síncronos, un salto diferente de señal es usado para cada paquete. Por otro lado, la conmutación de circuitos puede ser asíncrona o síncrona. Tres canales de datos síncronos (voz), o un canal de datos síncrono y uno asíncrono, pueden ser soportados en un solo canal. Cada canal de voz puede soportar una tasa de transferencia de 64 Kb/s en cada sentido, la cual es suficientemente adecuada para la transmisión de voz. Un canal asíncrono puede transmitir como mucho 721 Kb/s en una dirección y 56 Kb/s en la dirección opuesta, sin embargo, para una conexión asíncrona es posible soportar 432,6 Kb/s en ambas direcciones si el enlace es simétrico. El hardware que compone el dispositivo Bluetooth esta compuesto por dos partes: • Un dispositivo de radio, encargado de modular y transmitir la señal. • Un controlador digital, compuesto por una CPU, por un procesador de señales digitales (DSP - Digital Signal Processor) llamado Link Controller (o controlador de enlace) y por los interfaces con el dispositivo anfitrión. El LC (Link Controller) está encargado de hacer el procesamiento de la banda base y del manejo de los protocolos ARQ y FEC de capa física. Además, se encarga de las funciones de transferencia (tanto asíncrona como síncrona), codificación de audio y encriptación de datos. La CPU del dispositivo se encarga de atender las instrucciones relacionadas con Bluetooth del dispositivo anfitrión, para así simplificar su operación. Para ello, sobre la CPU corre un software denominado Link Manager que tiene la función de comunicarse con otros dispositivos por medio del protocolo LMP. _____________________________________________________________________ Ingeniería Informática 20 Universidad de Valencia 2.2. Microcontroladores. Un controlador es un dispositivo que se emplea en el gobierno de uno o varios procesos. Aunque el concepto de controlador ha continuado inalterable a través del tiempo, su implementación física ha variado frecuentemente. Hace tres décadas, los controladores se construían exclusivamente con componentes de lógica discreta; posteriormente se utilizaron los microprocesadores, que se rodeaban con chips de memoria y E/S sobre una tarjeta de circuito impreso. En la actualidad, todos los elementos del controlador se han podido incluir en un chip que recibe el nombre de microcontrolador. En definitiva, un microcontrolador es un circuito integrado programable que contiene todos los componentes de un computador. Se utiliza para controlar el funcionamiento de una tarea determinada y, debido a su reducida medida, suele ir incorporado en el propio dispositivo que gobierna. Esta última característica es la que le confiere la denominación de controlador incrustado (embedded controller). El microcontrolador es un computador dedicado. En su memoria solamente reside un programa destinado a gobernar una aplicación determinada; sus líneas de entrada/salida soportan la conexión de los sensores y actuadores del dispositivo a controlar y todos los recursos complementarios disponibles tienen como única finalidad atender sus requerimientos. Una vez programado y configurado el microcontrolador solamente sirve para gobernar la tarea asignada. Un microcontrolador posee todos los componentes de un computador pero con unas características fijas que no pueden alterarse. Todos disponen de los bloques esenciales: procesador, memoria de datos y de instrucciones, módulos de E/S, oscilador de reloj y módulos controladores de periféricos. Además de estos elementos, existen una serie de recursos especiales que los fabricantes pueden ofertar, algunos amplían las capacidades de las memorias, otros incorporan nuevo recursos y hay quienes reducen las prestaciones al mínimo para aplicaciones muy simples. Depende del programador el encontrar el modelo mínimo que se ajuste a sus requerimientos y _____________________________________________________________________ Ingeniería Informática 21 Universidad de Valencia así minimizar el coste, el hardware y el software. Algunos de los principales recursos específicos que incorporan los microcontroladores son: • Temporizadores (Timers). • Perro guardián (Watchdog). • Protección frente a fallo de alimentación (Brown-out). • Estado de bajo consumo. • Conversores AD y DA. • Modulador de anchura de pulsos PWM. • Comparadores analógicos. • Puertos de E/S digital. • Puertos de comunicación: serie, CAN, USB, I2C,… Los microcontroladores pueden clasificarse según su arquitectura, que puede ser Von Neumann o Harvard. La arquitectura Von Neumann se caracteriza por disponer de una sola memoria principal donde se almacenan datos e instrucciones de forma indistinta. A dicha memoria se accede a través de un sistema de buses único. Hay aspectos positivos en esta configuración como los accesos a tablas almacenadas en memoria ROM y un set de instrucciones más ortogonal. El bus de direcciones es usado para identificar qué posición de memoria esta siendo accedida, mientras que el bus de datos es utilizado para trasladar información entre la CPU y alguna dirección de memoria o viceversa. Con un único sistema de buses, la arquitectura Von Neumann es usada secuencialmente para acceder a instrucciones de la memoria de programa y ejecutarlas regresando desde/hacia la memoria de datos. Esto significa que el ciclo de instrucción no puede solaparse con ningún acceso a la memoria de datos. Una desventaja de esta arquitectura podría ser que el contador de programa o algún otro registro se corrompieran y apuntaran a la memoria de datos y se tomara ésta momentáneamente como memoria de programa. Consecuentemente se ejecutaría una instrucción no deseada o un error en la decodificación de la instrucción. _____________________________________________________________________ Ingeniería Informática 22 Universidad de Valencia La Arquitectura Harvard se caracteriza por disponer de dos memorias independientes, una que contiene sólo instrucciones y otra con sólo datos. Ambas disponen de sus respectivos sistemas de buses de acceso y es posible realizar operaciones de acceso (lectura o escritura) simultáneamente en ambas memorias. Una de las ventajas de esta arquitectura es que la operación del microcontrolador puede ser controlada más fácilmente si se presentara una anomalía en el contador de programa. Existe otra arquitectura que permite accesos a tablas de datos desde la memoria de programa. Esta arquitectura es la llamada arquitectura Harvard modificada. Esta última arquitectura es la dominante en los microcontroladores actuales ya que la memoria de programa es usualmente ROM, OTP, EPROM o FLASH mientras que la memoria de datos es usualmente RAM. Consecuentemente, las tablas de datos pueden estar en la memoria de programa sin que sean perdidas cada vez que el sistema es apagado. Otra ventaja importante en la arquitectura Harvard modificada es que las transferencias de datos pueden ser solapadas con los ciclos de decodificación de instrucciones. Esto quiere decir que la siguiente instrucción puede ser cargada de la memoria de programa mientras se está ejecutando una instrucción que accede a la memoria de datos. La desventaja de la arquitectura Harvard modificada podría ser que se requieren instrucciones especiales para acceder a valores en memoria RAM y ROM haciendo la programación un poco complicada. Según [Per05] las principales ventajas que se pueden encontrar en el uso de microcontroladores son: • Gestión eficiente de procesos. • Aumento de la fiabilidad. • Reducción del tamaño, consumo y coste. • Mayor flexibilidad (únicamente se requiere la reprogramación). Existe una gran diversidad de microcontroladores. Quizá la clasificación más importante sea entre microcontroladores de 4, 8, 16 o 32 bits. Aunque las prestaciones de los microcontroladores de 16 y 32 bits son superiores a los de 4 y 8 bits, la realidad es que los microcontroladores de 8 bits dominan el mercado y los de 4 bits se resisten _____________________________________________________________________ Ingeniería Informática 23 Universidad de Valencia a desaparecer. La razón de esta tendencia es que los microcontroladores de 4 y 8 bits son apropiados para la gran mayoría de las aplicaciones, lo que hace innecesario emplear microcontroladores más potentes y consecuentemente más caros. En cuanto a las técnicas de fabricación, cabe decir que prácticamente la totalidad de los microcontroladores actuales se fabrican con tecnología CMOS 4 (Complementary Metal Oxide Semiconductor). Esta tecnología supera a las técnicas anteriores por su bajo consumo y alta inmunidad al ruido. El número de productos que funcionan en base a uno o varios microcontroladores aumenta de forma exponencial. La industria informática acapara gran parte de los microcontroladores que se fabrican. Casi todos los periféricos del computador, desde el ratón o el teclado hasta la impresora, son regulados por el programa de un microcontrolador. Los electrodomésticos (desde hornos y lavadoras hasta televisores y vídeos) incorporan también numerosos microcontroladores e, igualmente, los sistemas de supervisión, vigilancia y alarma en los edificios, utilizan estos chips para optimizar el rendimiento de los ascensores, calefacción, aire acondicionado, etc. Las comunicaciones y sus sistemas de transferencia de información utilizan profusamente estos pequeños computadores, incorporándolos en los grandes automatismos y en los teléfonos móviles. La instrumentación y la electromedicina son dos campos idóneos para la implantación de estos circuitos integrados. Finalmente, una importante industria consumidora de microcontroladores es la de la automoción, que los aplica en el control de la climatización, la seguridad y los frenos ABS. En la siguiente figura se puede ver la utilización de los microcontroladores en distintos sectores de consumo. _____________________________________________________________________ Ingeniería Informática 24 Universidad de Valencia 10% 33% 16% 16% Periféricos Electrodomésticos Comunicación Industria Automoción 25% Figura 2.3: Utilización de microcontroladores por sectores Algunos de los principales fabricantes de microcontroladores son Microchip, Motorota, Intel, Atmel, Siemens, Philips, Hitachi o Nacional Semiconductor, entre otros. De entre todos los fabricantes expuestos, Microchip es el que más diversidad posee, cuenta actualmente con 159 microcontroladores distintos además de todas sus versiones según encapsulado. A continuación se exponen algunos de los microcontroladores más populares: • 8048 (Intel). Es el padre de los microcontroladores actuales, el primero de todos. Su precio, disponibilidad y herramientas de desarrollo hacen que todavía sea muy utilizado. • 8051 (Intel y otros). Es sin duda el microcontrolador más popular. Fácil de programar pero potente. Está bien documentado y posee cientos de variantes e incontables herramientas de desarrollo. • 80186, 80188 y 80386 EX (Intel). Versiones en microcontrolador de los microprocesadores 8086 y 8088. Su principal ventaja es que permiten aprovechar las herramientas de desarrollo para PC. • 68HC11 (Motorola y Toshiba). Es un microcontrolador de 8 bits potente y con gran cantidad de variantes. _____________________________________________________________________ Ingeniería Informática 25 Universidad de Valencia • 683xx (Motorola). Surgido a partir de la familia 68k, a la que se incorporan algunos periféricos. Son microcontroladores de altísimas prestaciones. • PIC (Microchip). Familia de microcontroladores que gana popularidad día a día. Fueron los primeros microcontroladores RISC. Es preciso resaltar en este punto que existen innumerables familias de microcontroladores, cada una de las cuales posee un gran número de variantes. 2.3. Sistemas de adquisición de datos mediante sensores. Adquirir datos es el proceso de medir los parámetros físicos que los sensores transforman en señales eléctricas e introducirlos en el sistema. Mientras se adquiere, se producen procesos que involucran esos datos adquiridos: alarmas, escalado de datos, a veces control, guardar los datos, etc. Posteriormente a la adquisición de datos se realizan análisis para extraer información útil a partir de la cual se reportan los datos, se visualizan resultados y se comparte la información. Estas fases representan la funcionalidad de los sistemas modernos de adquisición de datos basada en PC. La función de adquisición es una de las componentes más críticas. En un sistema basado en PC la adquisición se realiza mediante un hardware especializado de medición que puede desglosarse en sensores, conectividad de la señal o de los sensores, acondicionamiento de la señal, y conversión analógica-digital. Una amplia variedad de sensores se usan para convertir magnitudes físicas en señales eléctricas. Los hay de todos los tipos: de temperatura como termopares y termistores, transductores de presión, galgas extensiométricas y acelerómetros,… Después de instalar los sensores, hay que conectarlos al sistema de adquisición. La conectividad de la señal describe los componentes del hardware con los cuales se conectan los sensores al equipo. Hay muchos tipos de conectores y es un factor a decidir a la hora de configurar el equipo. _____________________________________________________________________ Ingeniería Informática 26 Universidad de Valencia El acondicionamiento de la señal es uno de los componentes más importantes de un equipo de adquisición basado en PC. Muchas señales requieren algún tipo de preparación antes de ser digitalizadas. Por ejemplo, los termopares producen señales de muy bajo nivel que requieren amplificación, filtrado y linealización. Otros sensores, como termistores, galgas y acelerómetros, requieren alimentación además de amplificación y filtrado, mientras que otras señales pueden requerir aislamiento para proteger el sistema de alto voltaje. Idealmente un equipo debería permitir todo tipo de acondicionamiento incluido la combinación de algunos procesos, si bien éste ha de adaptarse a las posibles necesidades del usuario. Después de que los parámetros físicos se han convertido en señales eléctricas y se acondicionan correctamente, las señales eléctricas analógicas se convierten en valores digitales y se pasan estos valores al computador. La conversión analógica-digital se realiza a través de una tarjeta de adquisición de datos o en un sistema integrado con acondicionamiento y conectividad. La combinación de sensores, conectividad de la señal, acondicionamiento y conversión analógica-digital constituye el hardware de medición de un equipo de adquisición basado en PC. Este hardware se configura y se controla a través de software construyendo aplicaciones a la medida de la aplicación deseada. _____________________________________________________________________ Ingeniería Informática 27 Universidad de Valencia _____________________________________________________________________ Ingeniería Informática 28 Universidad de Valencia 3. Metodología y materiales. 3.1. Metodología. En el diseño de sistemas se suelen seguir una serie de pasos que van desde la especificación de requisitos hasta la comercialización del producto final. El presente proyecto tiene como objetivo final la construcción de un prototipo, por lo que el ciclo de diseño no abarcará hasta la fase final de fabricación en serie del producto y posterior comercialización. Este ciclo de diseño se ha adaptado a las características del proyecto y constará de las fases de especificación de requisitos, establecimiento de la arquitectura del sistema, desarrollo del hardware y software, test y debug y, por último, diseño y fabricación del PCB. A continuación se detallan las fases: • Especificación de requisitos. En esta fase se establecen los requisitos que se quiere que cumpla el producto a desarrollar. Así pues, se tendrán que especificar parámetros tales como el coste máximo, el rendimiento mínimo, las ampliaciones futuras, el consumo de energía, tamaño o peso. • Establecimiento de la arquitectura del sistema teniendo en cuenta que lo más importante es el micro. También se habrá de tener en cuenta el subsistema de E/S, estableciendo que tipo de enlace se utilizará en la comunicación del periférico con el ordenador. _____________________________________________________________________ Ingeniería Informática 29 Universidad de Valencia • Desarrollo del hardware y software. Una vez se tiene claro lo que se quiere hacer, es el momento de empezar a desarrollarlo y para ello, en primer lugar, se hace una selección de los componentes a utilizar en la placa, realizando también el esquema de la circuitería. Hay que tener en cuenta que en el ciclo de diseño hardware se pueden dar situaciones de diseño-prototipo-testeo-vuelta atrás, con el consiguiente encarecimiento del producto final. Por esta razón, se deja la fase de diseño y fabricación del PCB para el final, desarrollando antes una primera placa de prueba que servirá para verificar en la siguiente fase de testeo tanto el correcto diseño de la circuitería como el firmware del micro y la aplicación software desarrollados en la fase actual. • Test y debug. Una vez acabado el desarrollo del hardware, firmware y software se procede a comprobar su correcto funcionamiento. Para probar el firmware, se podría realizar una simulación desde la herramienta de desarrollo utilizada, pero el gran inconveniente que presentan estos simuladores es que es difícil simular la entrada y salida de datos del microcontrolador y los posibles ruidos en las entradas. Este mismo problema de simulación de las entradas se puede encontrar también en la aplicación software desarrollada. Por esta razón, debido a que se trabaja con datos que pasan los sensores al micro y este los pasa a través del USB a la aplicación, se optó, como se ha dicho anteriormente, por realizar el testeo utilizando una primera versión de prueba de la placa (desarrollada en la fase anterior) antes de la fabricación del PCB. • Diseño y fabricación del PCB. Por último, una vez se ha comprobado el correcto funcionamiento de la placa de prueba, se realiza el diseño del circuito impreso y se envían estos ficheros de diseño a un fabricante especializado. Una vez recibido el PCB se realiza una comprobación eléctrica para detectar posibles defectos de fabricación. Después del testeo se montarán los componentes manualmente y se realizará una nueva comprobación para verificar que el montaje se ha realizado correctamente. _____________________________________________________________________ Ingeniería Informática 30 Universidad de Valencia • Testeo y experimentación. Con el prototipo listo se realizarán experimentaciones para validarlo y comprobar que todo funciona correctamente. 3.2. Material utilizado. 3.2.1. Software. Las herramientas software utilizadas en el desarrollo del proyecto son cinco: el paquete Orcad 9.2, el compilador de C para PICs PCWH versión 3.235 de CCS, el programa EduMic versión 2.0, Microsoft Windows Server 2003 SP1 Driver Development Kit (DDK) y el Visual C# 2005 Express Edition. A continuación se hará una descripción de cada una de estas herramientas indicando su utilidad y sus principales características. Orcad El paquete Orcad, entre otras muchas funcionalidades, permite el diseño de PCBs multicapa de forma sencilla y rápida. Consta del Orcad Capture, con el que se realizan los esquemas del circuito, y del Orcad Layout, con el que se realiza el diseño del PCB. El Orcad Capture permite la gestión de proyectos de forma jerárquica y la división de grandes diseños en otros más pequeños. Por medio del Orcad Capture se realiza el esquema del circuito incluyendo sus componentes. Aunque posee gran cantidad de librerías de componentes, permite la creación de librerías propias y el diseño de componentes específicos. Una vez realizado el esquema del diseño se utilizará el Orcad Layout para realizar el diseño del PCB. Para mayor facilidad permite la posibilidad de realizar un rutado automático de las pistas del diseño así como diferentes opciones de rutado para minimizar los costes de implementación. _____________________________________________________________________ Ingeniería Informática 31 Universidad de Valencia Compilador CCS Este compilador de lenguaje C ha sido desarrollado por CCS Inc. para resolver las características específicas de los microcontroladores PIC. Es una herramienta de desarrollo importante que permite disminuir el tiempo de desarrollo de los proyectos ya que este software cuenta con librerías con métodos para funciones específicas del PIC (conversión A/D, entrada y salida, configuración de timers, etc.) y el software ICProg para la programación del PIC. Incluye también el código fuente de numerosos programas de ejemplo para módulos LCD, teclados, conversores A/D, etc. Este software puede ser integrado con MPLAB y usa 1, 8, 16 y 32 bits de tipo entero y 32 bits de tipo flotante. El código ensamblador puede ser insertado en cualquier parte y puede referenciar a variables C. Además incluye una función que permite desplegar información formateada en HEX o en decimal. [CCS] EduMic El programa EduMic se encarga de descargar sobre el microcontrolador PIC de la tarjeta el fichero HEX generado por la herramienta de compilación que se utilice. El software soporta la mayoría de microcontroladores PIC de la familia 16 que soporten ICSP y la versión 2.0 permite además grabar varios de los dispositivos de la familia 18, incluyendo todos los que tienen USB. Algunas de sus características más importantes son: • Soporta casi todos los sistemas operativos (todos los MS Windows y Linux). • El software es de libre distribución. • Admite la especificación en el fichero binario HEX tanto de la memoria de programa como de la memoria de datos (EEPROM), así como la palabra de configuración y el identificador. _____________________________________________________________________ Ingeniería Informática 32 Universidad de Valencia • La palabra de configuración se puede establecer en el propio programa seleccionando en las opciones que se deseen. • Admite la especificación de un identificador para el microcontrolador PIC. • El programa sirve tanto para escribir el microcontrolador PIC como para leerlo. • Se permite la edición de los datos (programa y EEPROM) antes de enviarlo al microcontrolador PIC. • Tiene la característica de poder desproteger los microcontroladores PIC protegidos contra lectura/escritura si son de tipo Flash. Una vez desprotegido el microcontrolador pierde toda su información pero puede ser reutilizado. • Dispone de un fichero de configuración para poder incorporar nuevos microcontroladores PIC y funcionalidades según vayan apareciendo, sin necesidad de descargar nuevas versiones del software. El propio usuario puede modificar este fichero de forma sencilla. [Edu] Windows Driver Development Kit (DDK) DDK es una herramienta de desarrollo de drivers consolidada que proporciona un entorno de desarrollo, herramientas, ejemplos y documentación que permiten el desarrollo de drivers para la familia de sistemas operativos de Windows. En concreto, la versión utilizada, Windows Server 2003 SP1 DDK, permite la creación de drivers para los sistemas operativos Windows Server 2003, Windows XP y Windows 2000. Esta versión contiene además una herramienta (PREfast) que detecta ciertas clases de errores que no son fácilmente detectados por los compiladores comunes. [DDK] _____________________________________________________________________ Ingeniería Informática 33 Universidad de Valencia Visual C# Visual C# .NET es un lenguaje de programación seguro y orientado a objetos, que combina la potencia de Visual C y Visual C++ con la sencillez funcional de las herramientas de desarrollo de aplicaciones modernas y rápidas, permitiendo desarrollar software .NET para Microsoft Windows, la web y un gran rango de dispositivos. Posee una sintaxis que se asemeja a C++, un entorno de desarrollo flexible (IDE) y ofrece la posibilidad de desarrollar soluciones para una gran gama de plataformas y dispositivos. [Mic] 3.2.2. Hardware. El hardware necesario para la realización del proyecto consiste por una parte, en la plataforma hardware sobre la que utilizar el software de desarrollo, por otra, en los elementos necesarios para el montaje de los componentes y testeo de la placa y, por último, en la tarjeta EduMic. La plataforma utilizada para el software de desarrollo es un PC con procesador Intel Pentium M a 1 GHz y con memoria RAM de 1 GB. El sistema operativo es el Windows XP Profesional. En cuanto al material para el montaje de los componentes sobre la placa se utilizará un soldador de montaje superficial y para el testeo de la misma será necesario utilizar un multímetro. La tarjeta Edumic será necesaria para programar el microcontrolador PIC. Esta tarjeta permite la programación de la mayoría de micros PIC de la familia 16 y 18 que soporten ICSP (casi todos). La programación se hace a través del puerto paralelo. _____________________________________________________________________ Ingeniería Informática 34 Universidad de Valencia 4. Análisis de alternativas. En este capítulo se realizará la especificación de los requisitos que debe cumplir el proyecto para, posteriormente y basándose en ellos, analizar distintas alternativas a tener en cuenta en el desarrollo del proyecto, tanto desde el punto de vista del hardware (tipo de microcontrolador o de bus) como del software (lenguaje de programación o herramienta de desarrollo), y seleccionar la opción más óptima para la consecución de los objetivos. 4.1. Requisitos. Los requisitos a nivel de usuario que ha de cumplir el proyecto se pueden dividir en tres grupos: requisitos del periférico, requisitos de la aplicación software y requisitos generales del proyecto. El periférico debe ser manejable y tener un tamaño lo más pequeño posible. Se pide también que la alimentación sea a través del bus de interconexión con el ordenador, de manera que al no tener fuente de alimentación propia, el número de componentes de la placa es menor y por lo tanto esto influye en su tamaño y coste. Respecto a la aplicación software, esta debe ser intuitiva y fácil de usar, con un número de opciones por ventana limitado con el objetivo de no inundar de _____________________________________________________________________ Ingeniería Informática 35 Universidad de Valencia información al usuario. Con esta finalidad, se escribirá un manual de usuario del programa para así facilitar su introducción y manejo. Este manual se adjunta con la presente memoria (ver apéndice D). Un requisito general del proyecto es la fácil instalación tanto del periférico como de la aplicación (esto también se incluye en el manual de usuario mencionado anteriormente) y la posibilidad de que sea soportado por varios sistemas operativos. Por otra parte, se quiere que sea posible realizar ampliaciones futuras, pudiendo añadir más sensores en la placa y, por lo tanto, nuevas funcionalidades en la aplicación. Por último, todo lo mencionado anteriormente se quiere conseguir con el mínimo coste posible. 4.2. Evaluación de alternativas. Una vez establecidos los requisitos que debe cumplir el proyecto, se pasa a analizar las distintas opciones que se nos plantean, indicando los pros y los contras de cada una de ellas. 4.2.1. Interconexión entre el periférico y el ordenador. El tipo de enlace utilizado en la interconexión del dispositivo con el ordenador es una de las decisiones que hay que tomar más importantes, ya que de ella dependerán otras decisiones también importantes como el tipo de microcontrolador utilizado, debido a que dependiendo del tipo de bus que se utilice para comunicar al periférico con el ordenador, se elegirá un micro que disponga de puertos que soporten ese tipo de comunicación. Otro aspecto en el que influye también esta decisión es en el diseño del periférico ya que según el enlace que se utilice, se usarán unos componentes u otros, influyendo esto tanto en el tamaño como en el coste de la placa. _____________________________________________________________________ Ingeniería Informática 36 Universidad de Valencia De los distintos tipos de interconexión descritos anteriormente en la sección 2.1. se hará especial hincapié en FireWire y USB, ya que estos tipos de enlace son dos de los más utilizados actualmente en el desarrollo de periféricos y además ambos permiten la alimentación a través del bus (uno de los requisitos mencionados en la sección 4.1.), presentando velocidades de transferencia de datos muy superiores a las interfaces paralelas y a la interfaz serie RS-232. Otro tipo de comunicación muy utilizado actualmente es mediante Bluetooth pero este tampoco se tendrá en cuenta ya que generalmente estos dispositivos utilizan mayoritariamente baterías. USB vs. FireWire En el capítulo 2 ya se habló sobre estas dos tecnologías, indicando cuáles eran sus principales características, ventajas y desventajas. Por esta razón, este apartado se centrará, basándose en lo descrito anteriormente, en realizar una comparación entre ambos tipos de enlace. Tanto FireWire como USB son tecnologías que persiguen un nuevo método de conectar múltiples periféricos a un ordenador, permitiendo que estos sean añadidos o desconectados sin la necesidad de reiniciar. Ambos usan cables ligeros y flexibles con conectores duraderos, pero aquí terminan los parecidos. Aunque los cables de FireWire y USB pueden parecer a la vista los mismo, la cantidad de datos que por ellos transcurre es bastante diferente. Como muestra la siguiente tabla, la velocidad y la capacidad de transferencia marcan la principal distinción entre estas dos tecnologías: FireWire USB Número máximo de dispositivos 63 127 Cambio en caliente (agregar o quitar dispositivos sin tener que reiniciar el ordenador) Sí Sí 200 Mbps 400 Mbps 800 Mbps 1,5 Mbps 12 Mbps 480 Mbps Sí No Velocidad de transferencia de datos Conexión de periféricos interna Tabla 4.1: Comparación entre FireWire y USB _____________________________________________________________________ Ingeniería Informática 37 Universidad de Valencia Como puede verse, FireWire ofrece velocidades de transferencia de datos superiores a las ofrecidas por USB pero esto no significa que FireWire gane la "guerra" de interfaces. Los conectores FireWire y USB pueden coexistir pacíficamente. USB 1.0 queda reservado para periféricos con un pequeño ancho de banda (ratones, teclados, módems, etc.), mientras que FireWire, gracias a su mayor ancho de banda, es más adecuado para aplicaciones de vídeo digital (DV), audio profesional, cámaras fotográficas digitales de alto nivel y aparatos de ocio domésticos. 4.2.2. Microcontrolador. Antes de seleccionar un microcontrolador es imprescindible analizar los requisitos de la aplicación que se quiere desarrollar. A continuación se indican algunos de los aspectos que normalmente hay que tener en cuenta a la hora de realizar la elección: • Procesamiento de datos: puede ser necesario que el microcontrolador realice cálculos críticos en un tiempo limitado. En ese caso debemos asegurarnos de seleccionar un dispositivo suficientemente rápido para ello. Por otro lado, habrá que tener en cuenta la precisión de los datos a manejar: si no es suficiente con un microcontrolador de 8 bits, puede ser necesario acudir a microcontroladores de 16 o 32 bits, o incluso a hardware de coma flotante. • Entrada/Salida: para determinar las necesidades de Entrada/Salida del sistema es conveniente conocer el diagrama de bloques del mismo, de tal forma, que sea sencillo identificar la cantidad y tipo de señales a controlar. Una vez realizado este análisis puede ser necesario añadir periféricos externos o cambiar a otro microcontrolador más adecuado a ese sistema. • Consumo: algunos productos que incorporan microcontroladores están alimentados con baterías. Lo más conveniente en un caso como éste puede ser que el microcontrolador esté en estado de bajo consumo pero _____________________________________________________________________ Ingeniería Informática 38 Universidad de Valencia que despierte ante la activación de una señal (una interrupción) y ejecute el programa adecuado para procesarla. • Memoria: en cuanto a la cantidad de memoria necesaria se debe hacer una estimación de cuánta memoria volátil y no volátil es necesaria y si es conveniente disponer de memoria no volátil modificable. • Ancho de palabra: el criterio de diseño debe ser seleccionar el microcontrolador de menor ancho de palabra que satisfaga los requerimientos de la aplicación. Usar un microcontrolador de 4 bits supondrá una reducción en los costes importante, mientras que uno de 8 bits puede ser el más adecuado si el ancho de los datos es de un byte. Los microcontroladores de 16 y 32 bits, debido a su elevado coste, deben reservarse para aplicaciones que requieran altas prestaciones. • Diseño de la placa: la selección de un microcontrolador concreto condicionará el diseño de la placa. Deberá tenerse en cuenta el encapsulado del mismo. Además de todo lo mencionado también es importante tener en cuenta la documentación y herramientas de desarrollo disponibles para cada microcontrolador. Según volumen de ventas y diversidad de modelos se puede establecer como principales fabricantes a los siguientes: • Microchip Technology Corp. • STMicroelectronics • Atmel Corp. • Motorola Semiconductors Corp. De todos los fabricantes expuestos, Microchip es el que más diversidad posee, cuenta actualmente con 159 microcontroladores distintos además de todas sus versiones según encapsulado. _____________________________________________________________________ Ingeniería Informática 39 Universidad de Valencia 4.2.3. Lenguajes y herramientas de desarrollo de aplicaciones. Existe gran diversidad de lenguajes de programación convenientes para desarrollar aplicaciones software que funcionen bajo Windows. Tanto C como C++ son lenguajes de programación de propósito general. Todo puede programarse con ellos, desde sistemas operativos y compiladores hasta aplicaciones de bases de datos y procesadores de texto, pasando por juegos, aplicaciones a medida, etc. Para un desarrollo más fácil de aplicaciones Windows aparecieron herramientas de desarrollo visual, cuyos exponentes más conocidos son Borland Delphi, de Inprise, y Visual Basic, de Microsoft. La escritura de aplicaciones con herramientas de este tipo se basa en el uso de componentes o controles prefabricados. Así, la creación de la interfaz de usuario deja de ser un trabajo tedioso y el programador puede centrarse en el núcleo del programa. Estos entornos de desarrollo visual también facilitan operaciones habituales en Windows, como la comunicación con otras aplicaciones, el uso de cuadros de diálogo comunes, la gestión de bases de datos, etc. Cada elemento de un programa, sea visual o no, viene representado por un componente. Algunas de estas herramientas de desarrollo visual se describen a continuación. Visual Basic Visual Basic es una herramienta de diseño de aplicaciones para Windows en la que estas se desarrollan en una gran parte a partir del diseño de una interfaz gráfica. En una aplicación Visual Basic, el programa está formado por una parte de código puro y otras partes asociadas a los objetos que forman la interfaz gráfica. Es por tanto, un término medio entre la programación tradicional, formada por una sucesión lineal de código estructurado, y la programación orientada a objetos. Combina ambas tendencias. Desde su salida al mercado, cada versión supera y mejora la anterior. Dados los buenos resultados a nivel profesional de este producto y el apoyo prestado por el _____________________________________________________________________ Ingeniería Informática 40 Universidad de Valencia fabricante para la formación de programadores, Visual Basic se ha convertido en la primera herramienta de desarrollo de aplicaciones en entorno Windows. El lenguaje base del Visual Basic es el BASIC, de gran simplicidad e ideal para el programador novel. Conserva de él su sencillez de manejo, pero si lo que se quiere es llegar al fondo de la máquina y controlar uno a uno sus registros, será necesario utilizar otro lenguaje que permita bajar el nivel de programación (Visual C, Visual C++, etc.) o utilizar librerías (DLLs) que lo hagan. [Mic] Visual C++ Es la herramienta preferida por los profesionales de las aplicaciones Windows. Es el compilador más vendido del mercado y ofrece casi todo lo que se necesita. Le falta soporte CORBA y le sobran requerimientos de hardware. Aconsejable para desarrollar aplicaciones MFC. Visual C++ .NET proporciona a los programadores numerosas características de nivel profesional y les permite crear aplicaciones y componentes para Windows extremadamente eficaces. De principio a fin, la herramienta ofrece características que ayudan a optimizar el proceso de programación de software con C++. Los asistentes para aplicaciones proporcionan plantillas eficaces para iniciar proyectos con rapidez. Las bibliotecas de marcos de aplicación MFC y ATL que se incluyen, son las más eficaces, productivas y populares disponibles para la programación de aplicaciones basadas en Windows y ahora, se han mejorado para Windows XP. Estas características están totalmente integradas con un compilador de nivel profesional y un depurador avanzado. Juntos proporcionan una experiencia de programación eficaz y coherente. C++ es uno de los lenguajes más conocidos del mundo y con Visual C++ .NET, los programadores disfrutan de una excelente herramienta de programación en C++. Se trata de un lenguaje interoperable, basado en estándares, pudiéndose aprovechar los conocimientos de este lenguaje en varias comunidades y entornos informáticos. [Mic] _____________________________________________________________________ Ingeniería Informática 41 Universidad de Valencia Visual C# C# es el nuevo lenguaje diseñado por Microsoft para su plataforma .NET. En concreto, ha sido diseñado por Scott Wiltamuth y Anders Hejlsberg, éste último también conocido por haber sido el diseñador del lenguaje Turbo Pascal y la herramienta RAD Delphi. Aunque en realidad es posible escribir código para la plataforma .NET en muchos otros lenguajes, como Visual Basic .NET o JScript .NET, C# es el único que ha sido diseñado específicamente para ser utilizado en esta plataforma, por lo que programarla usando C# es mucho más sencillo e intuitivo que hacerlo con cualquiera de los otros lenguajes. Por esta razón, Microsoft suele referirse a C# como el lenguaje nativo de .NET, y de hecho gran parte de la librería de clases base de .NET ha sido escrito en este lenguaje. C# es un lenguaje orientado a objetos sencillo, moderno, amigable, intuitivo y fácilmente legible que ha sido diseñado con el ambicioso objetivo de recoger las mejores características de muchos otros lenguajes, fundamentalmente Visual Basic, Java y C++, y combinarlas en uno sólo en el que se unan la alta productividad y facilidad de aprendizaje de Visual Basic con la potencia de C++. Aunque actualmente no se consiguen prestaciones en velocidad tan altas como usando el C++ tradicional, Microsoft asegura que en futuras versiones se irá aumentando la eficiencia del lenguaje, gracias fundamentalmente a la posibilidad de generar dinámicamente código optimizado para aprovechar las características de la máquina sobre la que se ejecute el programa. [Mic] Tanto Visual Basic como Visual C++ y Visual C# forman parte del paquete Visual Studio 2005 de Microsoft. _____________________________________________________________________ Ingeniería Informática 42 Universidad de Valencia 4.3. Selección. Una vez realizado el estudio de las posibles alternativas para llevar a cabo el proyecto se pasa a tomar una decisión sobre cual de ellas es la más adecuada. En primer lugar, se decide que el mejor modo para la interconexión del periférico y el ordenador es mediante USB. Aunque comparado con FireWire, USB tenga una velocidad de transferencia de datos menor, esto no resulta un problema en el periférico a desarrollar, ya que la cantidad de datos a transmitir es pequeña y con un dispositivo USB a baja velocidad (1,5 Mbps) resultaría suficiente. Además de esto, la utilización de USB proporciona muchas ventajas tanto desde el punto de vista del usuario como del diseñador de periféricos. Desde el punto de vista del usuario hay que destacar su facilidad de uso, fiabilidad, bajo coste y bajo consumo. Respecto a la facilidad de uso, hay que decir que USB es una interface plug&play, lo que significa que es posible conectar un dispositivo hardware al PC sin necesidad de incorporar ningún driver, ya que la configuración se realiza de forma automática. Además posee una conectividad excepcional, ya que puede manejar hasta 127 dispositivos simultáneamente, que se pueden conectar y desconectar sin tener que reiniciar el sistema. Desde el punto de vista del diseñador hay que destacar su flexibilidad, ya que posee diversos tipos de transferencias y la definición de la interfaz eléctrica no se hace en función del dispositivo. Otra ventaja es que es soportado por todos los sistemas operativos Windows posteriores a Windows 98 y también por Linux. Además, existe una gran cantidad de herramientas que facilitan el desarrollo de periféricos que utilizan este estándar y la especificación USB y otros documentos relacionados están disponibles de manera gratuita online por lo que, dentro de la complejidad del protocolo USB, se facilita la tarea del diseñador. [Axe99] Entre los distintos fabricantes de microcontroladores nos decantamos por Microchip Technology. Los microcontroladores PIC de Microchip están muy extendidos actualmente en el mercado gracias a su gran variedad y bajo coste. Otra _____________________________________________________________________ Ingeniería Informática 43 Universidad de Valencia razón de su éxito es su utilización, ya que una vez se ha aprendido a utilizar uno, conociendo su arquitectura y juego de instrucciones, es muy fácil emplear otro modelo diferente. Además de estas ventajas, la principal razón de la elección es que para programar el micro se utilizará la placa EduMic y esta está diseñada para su utilización con PICs. Microchip dispone de tres gamas de microcontroladores PIC para atender todas las aplicaciones, microcontroladores de gama baja, gama media y gama alta. Así, hay disponibles microcontroladores sencillos y baratos para atender aplicaciones simples, y otros complejos y más costosos para las de mucha envergadura. Con las tres gamas de PIC se dispone de gran diversidad de modelos y encapsulados, pudiendo seleccionar el que mejor se acople a las necesidades de acuerdo con el tipo y capacidad de las memorias, el número de líneas de E/S y las funciones auxiliares precisas. Sin embargo, todas las versiones están construidas alrededor de una arquitectura común, un repertorio mínimo de instrucciones y un conjunto de opciones muy apreciadas, como el bajo consumo y el amplio margen del voltaje de alimentación. Una vez se tiene claro el fabricante, hay que determinar cual es el micro que mejor se adapta a las necesidades del proyecto. Para ello, deberá tener las siguientes características: • Debe disponer de un puerto de comunicaciones USB. • La longitud de palabra será de 8 bits ya que no hemos de manejar gran cantidad de información. • Debe disponer de un conversor A/D. • La memoria de programa debe ser Flash. • Un componente opcional sería una memoria ROM de datos donde se podrían guardar todos los datos adquiridos a través de los sensores para ser enviados mas tarde al ordenador. En este proyecto no se ha implementado esta solución, pero al escoger el microcontrolador lo tenemos en cuenta por si se quiere implementar en un futuro. _____________________________________________________________________ Ingeniería Informática 44 Universidad de Valencia Teniendo en cuenta lo anterior, se ha optado por el PIC18F2550 ya que dispone de un puerto USB que puede funcionar tanto a baja velocidad (1,5 Mbps) como a velocidad completa (12 Mbps) y soporta transferencias de control, interrupción, masivas e isócronas. Además tiene un módulo conversor A/D con 10 canales de entrada y una memoria de datos EEPROM (Electrical Erasable Programmable Read Only Memory) de 256 bytes. Se trata de una memoria de lectura, programada y borrada eléctricamente. La operación de borrado y programación es muy sencilla y se puede grabar y borrar tantas veces como se quiera. Las letras que hay en los diferentes modelos de cada PIC, en este caso la F (18F2550), indican el tipo de memoria de programa que utiliza. En este caso se tiene una memoria de tipo Flash, que es una memoria no volátil, de bajo consumo y que se puede escribir y borrar eléctricamente. Su funcionamiento es como el de las memorias ROM y RAM, pero consume menos y es más pequeña. A diferencia de la ROM, la memoria Flash es programable en el propio circuito. Es más rápida y de mayor densidad que la EEPROM. La alternativa Flash es más recomendable que la EEPROM cuando se necesita gran cantidad de memoria de programa no volátil. Es más rápida y tolera más ciclos de escritura/borrado. En la figura 4.1 podemos ver el encapsulado del PIC18F2550 con sus pines de entrada y salida. Figura 4.1: Encapsulado PIC18F2550 Aunque la empresa Microchip ofrece una serie de herramientas de desarrollo totalmente gratuitas y potentes, como el entorno de desarrollo MPLAB y el _____________________________________________________________________ Ingeniería Informática 45 Universidad de Valencia compilador de C C18, se ha optado por utilizar para la programación del firmware del PIC el extendido compilador CCS, en concreto la versión 3.235, ya que, a diferencia de las herramientas ofrecidas por Microchip, este incorpora bibliotecas para el uso del USB permitiendo de esta forma, disminuir el tiempo de desarrollo de los proyectos. Además, si se desea, el compilador CCS puede ser integrado con MPLAB. Respecto a la herramienta de desarrollo de la aplicación, aunque cualquiera de las tres opciones sería válida para este proyecto, al final se ha optado por utilizar el Visual C# ya que se trata de una herramienta que no hemos utilizado a lo largo de nuestra formación académica y, por lo tanto, preferimos ampliar conocimientos. _____________________________________________________________________ Ingeniería Informática 46 Universidad de Valencia 5. Diseño. Antes de entrar de lleno en el diseño, se realizará una pequeña descripción de la forma en que un dispositivo USB se comunica con el host, ya que nos hemos basado en esta arquitectura para desarrollar este proyecto. En la siguiente figura se puede ver la arquitectura del sistema y el flujo de comunicaciones entre los distintos niveles. Figura 5.1: Flujo de comunicaciones entre un dispositivo USB y el host _____________________________________________________________________ Ingeniería Informática 47 Universidad de Valencia El flujo de datos del bus USB desde un punto de vista lógico hay que entenderlo como una serie de puntos finales (endpoints), que se agrupan en conjuntos que dan lugar a interfaces, las cuales permiten controlar la función del dispositivo. La arquitectura se puede dividir en tres niveles o capas. En el nivel mas bajo el controlador de host USB se comunica con la interfaz del bus utilizando el cable USB, mientras que en un nivel superior el software USB del sistema se comunica con el dispositivo lógico utilizando la tubería de control por defecto. En lo que al nivel de función se refiere, el software cliente establece la comunicación con las interfaces de la función a través de tuberías asociadas a puntos finales. Cada dispositivo USB está compuesto por unos puntos finales independientes y una dirección única asignada por el sistema en tiempo de conexión, de forma dinámica. A su vez, cada punto final dispone de un identificador único dentro del dispositivo (número de endpoint) que viene asignado de fábrica, además de una determinada orientación del flujo de datos. Cada punto final es por si solo una conexión simple, que soporta un flujo de datos de entrada o de salida. Una tubería USB es una conexión lógica entre un punto final del periférico y el software del host, que permite intercambiar datos entre ellos. La tubería que esta formada por el punto final 0 se denomina tubería de control por defecto. Esta tubería está siempre disponible una vez se ha conectado el dispositivo y ha recibido un reset del bus. El resto de tuberías aparecen después de que se configure el dispositivo. La tubería de control por defecto es utilizada por el software USB del sistema para obtener la identificación y para configurar al periférico. 5.1. Diseño del hardware. En los capítulos anteriores se han visto los requisitos que debe cumplir el proyecto y se han tomado decisiones importantes como el tipo de bus utilizado en la comunicación con el ordenador y el microcontrolador que se empleará. Con todo esto claro y la arquitectura del sistema establecida, ya estamos en condiciones de empezar _____________________________________________________________________ Ingeniería Informática 48 Universidad de Valencia a diseñar el periférico. Empezaremos por el hardware, seleccionando los componentes a utilizar en la placa y realizando también el esquema de la circuitería. Respecto a los sensores se utilizará únicamente un sensor de temperatura. Se deja como trabajo futuro el añadir algún otro tipo de sensor (de humedad, luminosidad,…). Como sensor de temperatura se utiliza el circuito integrado LM50 que tiene la característica de que cada 10 mV de la tensión de salida equivale a 1 grado centígrado, siendo 500 mV equivalente a 0ºC. Este sensor permite medir temperaturas negativas, con un rango que va de -40ºC a 125ºC, sin necesidad de utilizar tensión negativa. Estas dos características permiten simplificar la circuitería en entornos donde se desee medir temperaturas negativas, ya que no es necesario utilizar ningún tipo de circuito acondicionador ni conversores de tensión. La salida del LM50 está conectada directamente a la entrada AN1/RA1 del microcontrolador PIC. Figura 5.2: Sensor de temperatura LM50 Para más información sobre el sensor de temperatura se puede consultar el datasheet del LM50 que se encuentra en la página web de Nacional Semiconductor. [Nat] Otros dos elementos que incluiremos en el diseño son un switch para poder realizar un reset del dispositivo y un led que indicará que el periférico tiene alimentación y está listo para usarse. Como se ha comentado en los requisitos, la alimentación del dispositivo será a través del bus USB, que suministra una tensión de 5 V. En la siguiente figura se muestra como deben estar conectados los pines del microcontrolador para que esto sea posible. [PIC] _____________________________________________________________________ Ingeniería Informática 49 Universidad de Valencia Figura 5.3: Alimentación a través del bus USB Existen dos tipos de conectores USB, tipo A y tipo B. El que hemos utilizado es de tipo A, por lo que el cable empleado para conectar el dispositivo con el ordenador será tipo A - tipo A. Figura 5.4: Conector USB tipo A Respecto al oscilador, el PIC18F2550 incorpora múltiples fuentes de reloj que se pueden dividir en tres tipos: • Osciladores primarios: son los cristales externos. Pueden ir acompañados de los osciladores internos. • Osciladores secundarios: son las fuentes externas conectadas al Timer 1. • Bloque del oscilador interno: se utiliza como fuente de reloj para los modos de bajo consumo. Estas tres fuentes hacen que el oscilador disponga de doce modos distintos de funcionamiento: _____________________________________________________________________ Ingeniería Informática 50 Universidad de Valencia Tabla 5.1: Modos de funcionamiento del oscilador en el PIC18F2550 Los modos de funcionamiento del oscilador y el módulo USB están muy relacionados. En microcontroladores PIC anteriores a la familia PIC18F2455/2550/4455/4550, todos los módulos del microcontrolador, incluidos los puertos de comunicaciones, utilizaban la misma fuente de reloj, pero en los microcontroladores de esta familia, el oscilador primario forma parte del módulo USB, de manera que este módulo sólo puede tomar la señal de reloj del oscilador primario. Sin embargo, el resto del micro puede utilizar cualquier otra fuente. Dependiendo de si utilizamos USB de baja velocidad o de velocidad completa, la señal de reloj del módulo USB deberá ser de 6 MHz o de 48 MHz, respectivamente. Como se ha dicho en la sección 4.3, nuestro dispositivo será de baja velocidad así que el reloj del módulo USB deberá ser de 6 MHz. De los doce modos de funcionamiento, sólo los ocho primeros pueden utilizarse para USB y de estos se ha optado por HSPLL, con un cristal de 4 MHz. Al utilizar esta frecuencia el módulo USB tendrá un reloj de 6 MHz mientras que el resto del _____________________________________________________________________ Ingeniería Informática 51 Universidad de Valencia micro funcionará a 24 MHz, utilizando para ambos únicamente el oscilador primario. En la siguiente sección se explicará más a fondo como se consiguen estas dos frecuencias a partir de los 4 MHz del cristal, así como los valores que deben tener los registros para que esto sea posible. Según el datasheet del microcontrolador [PIC] los valores de los condensadores que acompañan al cristal deben ser de 27 pF. Estos valores son orientativos. Una capacidad mayor produce mayor estabilidad del cristal pero también un tiempo de arranque mayor. La resistencia Rs puede ser necesaria para no sobre alimentar al cristal. Figura 5.5: Oscilador cristal o cerámico (configuración XT, HS o HSPLL) La detección de un periférico USB por parte de un ordenador se realiza conectando en el dispositivo, la línea D+ o D- a 3,3 V a través de una resistencia de pull-up. El hub tiene una resistencia de pull-down de 15 KΩ en cada una de las dos líneas de datos del puerto USB, D+ y D-. El dispositivo tiene una resistencia de pullup de 1,5 KΩ en la línea D+ (para velocidad completa) o D- (para baja velocidad) conectada a una tensión de 3,3 V. Cuando el periférico se conecta al puerto, la línea que tiene la resistencia de pull-up conectada se pone a nivel alto y cuando el hub detecta este nivel alto en una de las líneas, asume que un dispositivo está conectado y determina su velocidad en función de la línea que sea. [Axe99] _____________________________________________________________________ Ingeniería Informática 52 Universidad de Valencia Figura 5.6: Detección de la velocidad de un dispositivo USB Para realizar esto se dispone de dos opciones: utilizar un transceiver y una resistencia de pull-up externa o utilizar el transceiver y las resistencias de pull-up internos de que dispone el microcontrolador. En el diseño se ha optado por esta última opción, utilizando los componentes internos del microcontrolador. El esquema completo del diseño puede verse en el capítulo 10. 5.2. Diseño del firmware. 5.2.1. Registros de configuración. Los PIC18F2550 incluyen varias características especiales pensadas para maximizar las prestaciones y minimizar el coste eliminando componentes externos. Además permiten ahorrar energía y proteger el código frente a copia. _____________________________________________________________________ Ingeniería Informática 53 Universidad de Valencia Estos elementos son: • Varias fuentes de osciladores diferentes. • Diversos tipos de RESET. • Varias fuentes de interrupción, con dos niveles de prioridad. • Temporizador Watchdog. • Varios modos de bajo consumo. • Monitor de fallo del reloj. • Start-up de dos velocidades. • Protección de código. • Posiciones de identificación ID. • Circuitería de programación serie en circuito. Los registros de configuración permiten controlar estas características especiales del microcontrolador. Están mapeados a partir de la dirección de memoria de programa 300000h. Esta dirección está más allá de la memoria de programa de usuario, de hecho, pertenece al espacio de memoria de configuración (300000h3FFFFFh). Tabla 5.2: Registros de configuración La descripción de estos registros así como los valores que toman se irá indicando en los siguientes apartados. _____________________________________________________________________ Ingeniería Informática 54 Universidad de Valencia 5.2.2. Registros del oscilador. El funcionamiento del oscilador en el PIC18F2550 se controla a través de dos registros de configuración (CONFIG1L y CONFIG1H) y dos registros de control (OSCCON y OSCTUNE). A continuación se muestra el esquema del módulo del oscilador indicando la fuente utilizada (oscilador primario) y los valores que toman los distintos bits de estos registros para conseguir, a partir de un cristal de 4 MHz, una velocidad en el módulo USB de 6 MHz. Figura 5.7: Módulo del oscilador _____________________________________________________________________ Ingeniería Informática 55 Universidad de Valencia Antes de explicar los registros del oscilador, recordemos lo que se pretende hacer. Se utilizará el oscilador primario en modo HSPLL como reloj tanto para el módulo USB como para el resto del microcontrolador. El cristal externo empleado será de 4 MHz y, al ser el dispositivo USB de baja velocidad, hay que configurar los registros de manera que al módulo USB llegue una frecuencia de 6 MHz. Los registros de configuración, CONFIG1L y CONFIG1H, permiten seleccionar el modo de funcionamiento del oscilador y las opciones de pre y post-escalado. Figura 5.8: Registro CONFIG1L El valor de USBDIV en este caso daría igual cuál fuera ya que este bit se utiliza para USB de velocidad completa. _____________________________________________________________________ Ingeniería Informática 56 Universidad de Valencia Figura 5.9: Registro CONFIG1H El registro de control OSCTUNE se utiliza para calibrar y ajustar la frecuencia del oscilador interno pero debido a que únicamente utilizamos el oscilador primario como fuente del reloj, el valor de este registro no nos interesa. El otro registro de control (OSCCON) controla varios aspectos de la operación del reloj, entre ellos, el que más nos interesa es que permite seleccionar la fuente de reloj que se utilizará (SCS1:SCS0). _____________________________________________________________________ Ingeniería Informática 57 Universidad de Valencia Figura 5.10: Registro OSCCON 5.2.3. Registros del módulo A/D. El módulo conversor A/D tiene una resolución de 10 bits con 10 canales para los dispositivos de 28 pines y 13 canales para los de 40/44 pines. El módulo tiene 5 registros: • ADRESH: Parte alta del resultado de la conversión A/D. • ADRESL: Parte baja del resultado de la conversión A/D. • ADCON0: Controla el funcionamiento del módulo A/D. • ADCON1: Configura la función de los pines de los puertos. _____________________________________________________________________ Ingeniería Informática 58 Universidad de Valencia • ADCON2: Configura el reloj del conversor A/D, el tiempo de adquisición y el formato del resultado de la conversión. Figura 5.11: Registro ADCON0 El canal analógico utilizado será el 1 que se corresponde con el pin 3 (AN1/RA1) del microcontrolador PIC. Los pines que se utilicen como entradas analógicas deben configurarse como entradas mediante los correspondientes registros TRIS. La resolución en la conversión depende de Vref = ((Vref+) - (Vref-)): Resolución = ((Vref+) - (Vref-)) / 1024 = Vref / 1024. Vref+ y Vref- determinan los límites máximo y mínimo de la tensión analógica que se puede convertir. El Vref mínimo es de 2V. _____________________________________________________________________ Ingeniería Informática 59 Universidad de Valencia Vref+ y Vref- pueden ser internas (VDD y GND) o externas a través de los pines RA3->(Vref+) y RA2->(Vref-). Aquí se utilizarán VDD y GND como voltaje de referencia. Figura 5.12: Registro ADCON1 El tiempo para convertir un dato está formado por dos periodos: Tiempo de Adquisición y Tiempo de Conversión. _____________________________________________________________________ Ingeniería Informática 60 Universidad de Valencia Figura 5.13: Secuencia de conversión A/D El tiempo de adquisición puede ser programado para que el micro lo tenga en cuenta durante el proceso de conversión de forma automática. Los bits ACQT2:ACQT0 del registro ADCON2<5:3> proporcionan un rango desde 2 hasta 20 TAD (periodo de conversión por bit). De esta forma después de seleccionar el canal no hay que esperar el periodo de adquisición por programa hasta poder activar el bit de inicio de la conversión GO/#DONE. El micro automáticamente espera el tiempo de adquisición programado en ACQT2:ACQT0. También se puede seguir haciendo la espera de forma manual por programa si la combinación seleccionada en ACQT2:ACQT0 es 000. Cuando el bit GO/#DONE se activa, el módulo supone que ya ha pasado el periodo de adquisición y comienza la conversión inmediatamente. En este caso utilizaremos adquisición manual, indicando en el programa el tiempo de espera antes de la conversión. _____________________________________________________________________ Ingeniería Informática 61 Universidad de Valencia La conversión comienza justo después del tiempo de adquisición. Para completar una conversión deben pasar 11 TAD. Figura 5.14: Conversión A/D con tiempo de adquisición manual Existen 7 posibles formas de seleccionar el reloj del conversor para TAD (ADCS2:ADCS0): utilizar la señal de reloj del micro (2, 4, 8, 16, 32 o 64Tosc) o utilizar un oscilador RC interno propio del módulo A/D que funciona a 1Mhz. TAD debe elegirse para que tenga un valor entre 0,7us - 25us para PIC18FXXXX o 1,4us - 25us para PIC18LFXXXX. En el caso de utilizar el RC interno este periodo debe ser de 1us. De esta forma, los cálculos de TAD nos indican que el modo que se debe utilizar dependiendo de la frecuencia de la señal de reloj es: Tabla 5.3: TAD frente a frecuencia del oscilador Teniendo en cuenta todo lo dicho, el registro ADCON2 se configuraría de la siguiente forma: _____________________________________________________________________ Ingeniería Informática 62 Universidad de Valencia Figura 5.15: Registro ADCON2 5.2.4. Registros del módulo USB. El control y la configuración del módulo USB se lleva a cabo a través de 22 registros de estado y control. Estos son: • Registro de control USB (UCON). • Registro de configuración USB (UCFG). • Registro de estado de transferencia USB (USTAT). • Registro de dirección de dispositivo USB (UADDR). • Registros de número de frame (UFRMH:UFRML). • Registros (del 0 al 15) de habilitación de puntos finales (UEPn). El registro de control UCON contiene los bits necesarios para controlar el comportamiento del módulo USB durante las transferencias. _____________________________________________________________________ Ingeniería Informática 63 Universidad de Valencia Figura 5.16: Registro UCON El módulo USB dispone de un regulador interno de 3,3 V para suministrar tensión al transceiver interno. Esto se debe a que USB utiliza 3,3 V para las comunicaciones, por lo tanto, mientras el resto del micro puede utilizar una alimentación de 5 V, el transceiver debe alimentarse de una fuente distinta (Vusb). El regulador se controla a través del bit VREGEN del registro de configuración CONFIG2L. Cuando está habilitado (VREGEN = 1), el voltaje es visible en el pin Vusb. Si el regulador está deshabilitado, una tensión de 3,3 V debe ser suministrada externamente a través de Vusb. Hay que tener en cuenta que las resistencias de pullup internas únicamente pueden utilizarse si el transceiver interno está activo. _____________________________________________________________________ Ingeniería Informática 64 Universidad de Valencia Figura 5.17: Módulo USB Como puede verse en la figura 5.17, se ha optado por utilizar todos los elementos internos de que dispone el microcontrolador, el regulador, el transceiver y los pullups, de esta manera, el número de componentes del dispositivo será menor, lo cual repercute tanto en el tamaño como en el coste del periférico. La configuración del transceiver y los pull-ups así como de la velocidad del dispositivo se debe llevar a cabo antes de habilitar el módulo y no puede ser cambiada mientras este esté habilitado. El registro que se encarga de realizar esta configuración es UCFG. _____________________________________________________________________ Ingeniería Informática 65 Universidad de Valencia Figura 5.18: Registro UCFG Antes de configurar los registros de habilitación de puntos finales (UEPn) analizaremos los descriptores del periférico y veremos cuántos puntos finales se necesitan y de que tipo serán (IN/OUT y el tipo de transferencia que soportan). 5.2.5. Descriptores. Como puede verse en la figura 5.19, todos los dispositivos USB tienen una jerarquía de descriptores: • Descriptor de dispositivo: Es único. Incluye la versión de USB, el identificador de vendedor y producto (que identifican el driver) y el número de configuraciones que el dispositivo tiene. _____________________________________________________________________ Ingeniería Informática 66 Universidad de Valencia • Descriptor de configuración: Especifica la potencia requerida y si el dispositivo tiene alimentación propia o no. Puede haber varias configuraciones (diferentes combinaciones de interfaces y endppoints) y el host puede seleccionar una. Sólo puede haber una activa. • Descriptor de interface: Es una unión de puntos finales en un grupo funcional que realizan una tarea única. Ejemplo: impresora, scaner y fax, cada uno es un interface. • Descriptor de punto final: Especifica el tipo de transferencias usadas, la dirección de los datos y el tamaño máximo del paquete de datos para cada endpoint. El punto final 0 siempre es de control por defecto y no tiene descriptor. La dirección de los datos es desde el punto de vista del host (IN: del periférico al host, OUT: del host al periférico). Figura 5.19: Jerarquía de descriptores Existe un tipo de descriptor opcional, descriptor de cadena, que suministra información que se puede interpretar directamente (cadenas de información). Los descriptores de dispositivo y de interface contienen campos para su clasificación: clase, sub-clase y protocolo. Estos campos son usados por el sistema operativo para asociar un dispositivo o un interface a un driver genérico, especificado para esa clase. La definición de clases de dispositivos e interfaces y su estandarización permite el desarrollo de drivers genéricos que permiten manejar múltiples implementaciones basadas en ese estándar. _____________________________________________________________________ Ingeniería Informática 67 Universidad de Valencia Una clase define un marco con la funcionalidad mínima que todos los dispositivos e interfaces de una determinada clase deben presentar. En el descriptor de dispositivo existe un campo (bDeviceClass) que indica si el dispositivo pertenece a una clase USB definida. En este caso, el campo presentará un valor entre 01h y FEh dependiendo de la clase a la que pertenezca. El valor FFh significa que la clase es específica de un vendedor y está definida por este. Algunos dispositivos (como HIDs) especifican la clase en el descriptor de interface, para este tipo de dispositivos este campo será 00h y en el campo bInterfaceClass del descriptor de interface se indicará la clase a la que pertenece. No todos los dispositivos pertenecen a una clase. Si el periférico no pertenece a una clase ya definida o se le quiere asignar un driver específico (no genérico), los campos de clase, subclase y protocolo del descriptor de dispositivo o interface deben de valer FFh (clase específica de un vendedor) y en los campos del descriptor de dispositivo idVendor y idProduct se debe indicar tanto el identificador de vendedor y como el del producto. Cada fabricante tiene un identificador de vendedor único que debe incluir en el descriptor de dispositivo de sus productos. El identificador de producto lo decide el fabricante para identificar a los dispositivos. Estos dos valores se deben incluir también en un fichero INF que el sistema operativo utilizará para decidir que driver debe asignar al periférico en función de estos dos valores. Cuando el sistema operativo enumera un nuevo dispositivo USB, el Administrador de Dispositivos compara los datos de todos los ficheros INF con la información de los descriptores obtenida del dispositivo durante la enumeración. Para evitar tener que leer todos los INF cada vez que se detecta un nuevo dispositivo, Windows tiene una base de datos de información sobre drivers con información obtenida de los ficheros INF. [Axe99] El periférico que se va a desarrollar no pertenece a ninguna clase genérica, así que habrá que indicar el driver que se le quiere asignar. El driver que se utilizará será un driver USB de propósito general para Windows suministrado por Microchip (mchpusb.sys). Así mismo, Microchip proporciona un identificador de vendedor (0x04D8) que puede ser utilizado en productos desarrollados con microcontroladores PIC. _____________________________________________________________________ Ingeniería Informática 68 Universidad de Valencia Respecto a los puntos finales, además del EP0 (que siempre se utiliza), se necesitará otro más para pasar los datos del periférico al host. La dirección de los datos será de entrada y el tipo de transferencia que se utilizará será de interrupción, ya que el dispositivo es de baja velocidad y sólo soporta transferencias de control y de interrupción. Por lo tanto, se utilizará el punto final 1. En la siguiente figura pueden verse los descriptores del periférico desarrollado: Dispositivo Vendor ID 0x04D8 Product ID 0x0011 Clase 0x00 Configuración 1 Interface 0 Clase 0xFF Subclase 0xFF Protocolo 0xFF Endpoint 1 IN Transf. interrupción Figura 5.20: Descriptores del periférico Una vez determinados los puntos finales necesarios hay que configurar los registros de habilitación de puntos finales (UEPn) del módulo USB. Los registros UEP0 y UEP1 tendrán respectivamente los valores 0001 0110 y 0001 0010, de manera que se habilita el punto final 0 para soportar transferencias de control y el punto final 1 para soportar transferencias de interrupción de entrada. _____________________________________________________________________ Ingeniería Informática 69 Universidad de Valencia Figura 5.21: Registro UEPn Una vez vistos todos los módulos y registros necesarios para configurar el microcontrolador, los valores de los registros de configuración quedarían de la siguiente manera: Tabla 5.4: Valores de los registros de configuración _____________________________________________________________________ Ingeniería Informática 70 Universidad de Valencia 5.3. Diseño del software. La interfaz de usuario debe proveer la funcionalidad necesaria para una buena comunicación entre el hombre y la máquina. Un buen diseño agiliza el uso de una aplicación, tanto al visualizar aquella información más importante, como al realizar aquellas tareas más habituales con sólo unos pocos clicks de ratón. El diseño de la interfaz debe realizarse de manera que esta resulte simple e intuitiva de utilizar. Lo primero que deberá realizar la aplicación será establecer, de forma totalmente transparente al usuario, una tubería para obtener los datos del dispositivo. Para ello Microchip proporciona una API (mpusbapi.dll) que contiene un conjunto de funciones que permiten comunicarse con el periférico desarrollado. Una vez se tienen estos datos (la temperatura medida por el sensor) se quiere que la aplicación muestre continuamente la temperatura actual. Otras funcionalidades que deberá implementar la aplicación son: • Mostrar la temperatura máxima y mínima. • Permitir seleccionar el intervalo de tiempo de captura de la temperatura. • Capturar datos, creando un fichero que los contenga, indicando además las temperaturas máxima y mínima capturadas. • Programar la captura, indicando la fecha y la hora de inicio y de fin así como el nombre del fichero donde se guardarán los datos. • Deshabilitar una captura programada. • Mostrar los datos capturados. • Generar y mostrar gráficas con los datos capturados. Además se deberá de tener en cuenta una serie de restricciones al programar una captura: • Se debe indicar el nombre del fichero donde guardar los datos. • La fecha y hora de inicio deben ser posteriores a la fecha y hora actuales. _____________________________________________________________________ Ingeniería Informática 71 Universidad de Valencia • La fecha y hora de fin de captura deben ser posteriores a la fecha y hora de inicio. Otras restricciones serán: • El intervalo de tiempo de captura no puede modificarse mientras se está realizando una captura (programada o no). • Si se está realizando una captura, no se pueden mostrar ni los datos ni la gráfica correspondiente a dicha captura hasta que esta no finalice. _____________________________________________________________________ Ingeniería Informática 72 Universidad de Valencia 6. Implementación. 6.1. Implementación del hardware. Como se mencionó en el apartado de metodología (capítulo 3), antes de la fabricación del circuito impreso final se creará una placa de prueba para comprobar que la selección de los componentes y el diseño del esquema eléctrico son correctos. Esta placa de prueba se crea soldando los componentes sobre una tarjeta de montaje según el esquema diseñado. Una vez terminada se realizará un testeo con un multímetro para comprobar las conexiones. Si el diseño es correcto se procederá a la creación del PCB partiendo del esquema eléctrico. Esta tarea se puede dividir en dos fases: • Diseño del circuito impreso. Partiendo del Netlist generado con el Orcad Capture a partir del esquema realizado se diseñará el PCB. En el diseño del circuito impreso se utilizará la herramienta de CAD Orcad Layout que generará como resultado los ficheros gerber con el diseño. • Fabricación y montaje del PCB. En la fabricación del PCB las máquinas de fabricación utilizarán los ficheros gerber para obtener el circuito impreso. Una vez se ha fabricado el PCB se soldarán los componentes a él. _____________________________________________________________________ Ingeniería Informática 73 Universidad de Valencia El tamaño del PCB es de 7 x 15 cm. y, aunque se podría haber hecho más pequeño, la razón por la que se han establecido estas medidas es que en los ensayos realizados con la placa de pruebas, al acercar al sensor una fuente de frío o de calor, el resto de componentes también sufrían las variaciones de temperatura, por lo que se pensó que sería mejor alejar el sensor del resto de elementos de la placa. Tanto la colocación de los componentes como el rutado de las pistas se realizarán de forma que se puedan conseguir los siguientes objetivos: • Minimizar la longitud de las pistas. • Minimizar el número de pistas. • Minimizar el número de cruces entre pistas. • Facilitar el soldado de los componentes. • Facilitar el acceso al interruptor y al conector USB. El elemento central del diseño es el microcontrolador, el emplazamiento del resto de componentes dependerá de él, haciéndose en función de la conexión de cada uno de estos elementos con el micro y poniendo especial atención al interruptor y al conector USB, de forma que se pueda acceder a ellos con facilidad. Para la implementación del circuito se utilizarán dos caras de trazado de pistas, Top y Bottom. La anchura de las pistas será de 0,6 mm. y viene impuesta por la máquina de fabricación de los PCBs. El rutado de las pistas se hará de forma manual. Una vez finalizado el diseño es necesario generar los ficheros de diseño gerber para enviarlos a fábrica. Posteriormente, con el PCB llegado de fábrica se realizará una inspección visual para detectar posibles defectos de fabricación y se comprobarán mediante un multímetro las conexiones. El soldado de los componentes se realizará de forma manual mediante un soldador de montaje superficial. Terminada la soldadura de los componentes, se realizará una inspección de las conexiones mediante un multímetro para comprobar que no existen cortocircuitos entre las señales y que cada pata de los componentes está correctamente soldada. En caso de cortocircuito o de _____________________________________________________________________ Ingeniería Informática 74 Universidad de Valencia mala conexión siempre existe la posibilidad de corrección aplicando más estaño o retirándolo con el soldador. El diseño del circuito impreso, los componentes y el pinout pueden verse en el capítulo 10. 6.2. Implementación del firmware. 6.2.1. Programación del microcontrolador. Para la programación del microcontrolador se utiliza el compilador de C CSS, concretamente la versión 3.235 que incorpora bibliotecas para el uso de USB. Antes de empezar a escribir nuestro programa hay que modificar algunas características de los archivos que proporciona el compilador y que utilizaremos en el proyecto. Estos archivos contienen la definición de los registros y funciones USB. Estos ficheros son: • 18F2550.h: Fichero de cabecera estándar para dispositivos PIC18F2550. • pic18_usb.h: Capa hardware de los dispositivos PIC18Fxx5x. • USB.C: Manejador de peticiones USB estándar. • USB.H: Prototipos de funciones, definiciones y variables globales USB. Para que la conversión A/D se realice de forma correcta, es necesario añadir en el fichero 18F2550.h la directiva #device PIC18F2550 ADC=10. Esta directiva indica el número de bits que debe devolver la función read_adc(). Es necesario indicarlo porque en caso contrario sólo nos devolvería los 8 bits más significativos de la conversión A/D (registro ADRESH). En la conversión A/D se utiliza justificación a izquierdas por lo que, de los 10 bits resultantes de la conversión, se almacenan los 8 más significativos en ADRESH y los 2 menos significativos en los dos bits más significativos del registro ADRESL. _____________________________________________________________________ Ingeniería Informática 75 Universidad de Valencia En el fichero pic18_usb.h se deberá cambiar la velocidad del dispositivo de velocidad completa a baja velocidad: #ifndef USB_USE_FULL_SPEED #define USB_USE_FULL_SPEED FALSE #endif Al no ser el periférico HID también hay que hacer un cambio en USB.H: #ifndef USB_HID_DEVICE #define USB_HID_DEVICE FALSE #endif Una vez hechas estas modificaciones, empezamos a desarrollar el programa que ejecutará el microcontrolador. Lo primero será establecer la palabra de configuración seleccionando las opciones adecuadas: oscilador en modo HSPLL con los valores de pre y post-escala adecuados para obtener una frecuencia de 6 MHz en el módulo USB, habilitación del regulador interno del módulo USB y deshabilitación del watchdog timer que no vamos a utilizar en el proyecto. Por último, para terminar con las definiciones, se habilita el punto final 1 para que soporte transferencias de interrupción de entrada. El programa, al conectar el periférico al host y llegarle alimentación, hará que se encienda el led para después de unos segundos apagarse. Lo siguiente que ocurrirá será la inicialización de los registros USB antes del comienzo del proceso de enumeración y si este finaliza correctamente, se volverá a encender el led y se configurará el módulo A/D. A continuación, empezará la conversión A/D y una vez terminada, se enviarán los datos a través del bus USB. La conversión y el envío de datos se realizará continuamente insertando un retraso de 60 us entre cada conversión, ya que, como se comentó en el diseño, la adquisición se realiza de forma manual. El diagrama de bloques del programa puede verse en la siguiente figura: _____________________________________________________________________ Ingeniería Informática 76 Universidad de Valencia Led ON / Led OFF Inicialización Registros USB Enumeración Dispositivo Enumerado?? No Si Led ON Configuración Módulo A/D Conversión A/D Transmisión de datos FIN Figura 6.1: Diagrama de bloques del programa Se ha creado también un fichero de cabecera (TempUSB.h) que contiene los descriptores del dispositivo USB siguiendo el esquema de la figura 5.20. Además de estos se han incluido dos descriptores de cadena que indican el fabricante del producto y su descripción. Una vez se tiene todo esto, se compila el proyecto y el fichero HEX resultante se carga en el microcontrolador utilizando para ello tanto la placa como el programa EduMic. En primer lugar, se conecta la placa al ordenador mediante un cable paralelo. A continuación, se conecta el alimentador y se encienden éste y la placa. Para cargar el programa en el micro, se ejecuta el programa EduMic y se selecciona el microcontrolador (Dispositivo Æ PIC18F2550usb). Se abre el fichero HEX y se marcan las opciones Memoria de Programa y Palabra de Configuración, asegurándose de que el conmutador SW18 de la placa está en la posición _____________________________________________________________________ Ingeniería Informática 77 Universidad de Valencia PROGRAMA. Por último, se selecciona la opción Escribir [Edu]. De esta forma, ya tenemos el microcontrolador programado y podemos utilizarlo en nuestro dispositivo. 6.2.2. Creación del fichero INF. Cuando el sistema operativo detecta un nuevo periférico USB, intenta determinar qué driver debe utilizar para comunicarse con el dispositivo y una vez determinado, cargar el driver seleccionado. Esto lo lleva a cabo el Administrador de Dispositivos, que utiliza instaladores de clase y dispositivo y archivos INF para encontrar el driver adecuado para cada dispositivo. El Administrador de Dispositivos además de ser el responsable de instalar, configurar y desinstalar dispositivos, también se encarga de añadir información sobre cada dispositivo en el registro del sistema, el cual contiene información sobre el hardware y el software instalados en el sistema. Los instaladores de clase y dispositivo son DLLs. Windows tiene una serie de instaladores por defecto que el Administrador de Dispositivos utiliza para localizar y cargar drivers para dispositivos pertenecientes a clases soportadas por el sistema operativo (como HID). El archivo INF es un fichero de texto que contiene información que ayuda a Windows a identificar el dispositivo. Este archivo indica al sistema operativo que drivers debe utilizar y que información debe almacenar en el registro. [Axe99] El dispositivo desarrollado no pertenece a una de las clases USB por defecto que soporta el sistema operativo así que tanto el instalador de clase como el archivo INF habrá que crearlos. Sobre el archivo DLL que se encargará de instalar una nueva clase en el Administrador de Dispositivos se hablará en próximo apartado. Cuando se conecta el dispositivo al ordenador, Windows muestra el mensaje Nuevo Hardware Encontrado. Si el periférico nunca ha sido enumerado en el sistema, el sistema operativo necesita localizar un driver para él. Al ser la primera vez que se _____________________________________________________________________ Ingeniería Informática 78 Universidad de Valencia conecta el dispositivo y no ser de una clase genérica, Windows no encontrará un archivo INF que pueda utilizar para asignarle un driver y lanzará el Asistente para Agregar Nuevo Hardware donde se puede indicar la localización del archivo INF necesario para la instalación del periférico. Una vez localizado, se carga el driver indicado, se añade el periférico en el Administrador de Dispositivos y se indica al usuario que la instalación del dispositivo ha finalizado de forma correcta. En el Administrador de Dispositivos se puede ver también la descripción del dispositivo y el fabricante, obtenidos del archivo INF. Además, durante esta operación, se ha copiado el fichero INF (tempusb.inf) en el directorio \windows\inf, el driver (mchpusb.sys) en \windows\system32\drivers y el instalador de clase (tempusbci.dll) en \windows\system32, de forma que la próxima vez que se conecte el dispositivo, el ordenador lo reconocerá sin necesidad de indicar ningún dato. La información en un archivo INF está dividida en secciones. Cada sección puede ser identificada porque su nombre está entre corchetes. Las principales secciones son: • Version: especifica el sistema operativo para el que está destinado el fichero INF. Para dispositivos que utilizan WDM (Windows Driver Model) drivers, el valor puede ser $Windows 98$, $Windows NT$ o $Chicago$, independientemente del sistema operativo que esté instalado en el ordenador. En esta sección se indica también el nombre de la clase de los dispositivos instalados con este fichero así como un identificador de clase que es utilizado por el registro del sistema para identificar a los dispositivos pertenecientes a esta clase. • ClassInstall: en esta sección se indica si se ha de instalar una nueva clase. El Administrador de Dispositivos únicamente procesa la sección si una clase de dispositivo aún no está instalada en el sistema. Aquí será donde indicaremos el icono, el nombre y la descripción de la clase así como el nombre del archivo DLL (tempusbci.dll) que instalará la nueva clase en el Administrador de Dispositivos. _____________________________________________________________________ Ingeniería Informática 79 Universidad de Valencia • Manufacturer: contiene el identificador de vendedor y producto (USB\VID_04D8&PID_0011). Cuando el Administrador de Dispositivo encuentra una coincidencia entre estos valores y los identificadores obtenidos del dispositivo durante la enumeración, sabe que ha encontrado el archivo INF correcto. • DestinationDirs: indica el directorio o directorios donde se copiarán los ficheros. • Strings: define las cadenas referenciadas en las otras secciones. El fichero INF creado (tempusb.inf) puede verse en el apéndice B. 6.2.3. Creación de una nueva clase. El periférico desarrollado no pertenece a ninguna de las clases USB definidas, así que lo que haremos ahora es crear una nueva clase que aparezca en el Administrador de Dispositivos con un icono personalizado. Para esto, ha sido necesario crear una DLL que exporte ese icono. Se necesita para ello el DDK (Driver Development Kit) de Microsoft. Esta herramienta incluye muchos ejemplos y se ha utilizado uno de ellos para crear la DLL. El ejemplo utilizado se llama Toaster y es un ejemplo genérico sencillo con código comentado que puede ser usado para aprender a escribir drivers, filtros, ficheros INF o cómo instalar una clase o un paquete entre otras cosas. Incluye varios directorios que contienen todos estos ficheros, aunque el único interesante para nosotros es el directorio classinstaller. Dentro de este directorio sustituiremos el icono del ejemplo por el que nosotros vayamos a utilizar, en este caso el icono se llama icon.ico, y el fichero tostrcls.def lo sustituiremos por otro llamado tempuspci.def que contendrá el siguiente código: LIBRARY TEMPUSBCI EXPORTS TempUSBClassInstaller _____________________________________________________________________ Ingeniería Informática 80 Universidad de Valencia El resto de ficheros del directorio no hace falta sustituirlos pero si que es necesario realizar algunos cambios en ellos (básicamente es cambiar el nombre de la clase utilizada en el ejemplo por el que utilizaremos nosotros y que es TempUSBClassInstaller). De esta forma, en el fichero sources habrá que poner la línea TARGETNAME=tempusbci, y en classinst.c habrá que sustituir el nombre, quedando de la siguiente forma: DWORD CALLBACK TempUSBClassInstaller( IN DI_FUNCTION InstallFunction, IN HDEVINFO DeviceInfoSet, IN PSP_DEVINFO_DATA DeviceInfoData OPTIONAL ) En la plantilla de recursos classinst.rc se tiene que cambiar por una parte el icono que se utilizará y por otra, en la información de la versión, se incluye información sobre la descripción de la clase, el nombre del fabricante y el nombre del fichero resultante encargado de realizar la instalación de la clase en el Administrador de Dispositivos (archivo DLL). Cuando se han realizado todos estos cambios se procede a crear el archivo DLL que necesitamos. Para ello en la línea de comandos del DDK se ejecuta build –cZ toaster. Con este comando se crearán todos los ficheros .sys, .exe y .dll del proyecto Toaster, incluyendo el archivo DLL necesario para instalar la clase y que se llama tempusbci.dll. De todos los ficheros creados este será el único que nos servirá y permitirá que al conectar el periférico al ordenador, y una vez reconocido y con el driver instalado, en el Administrador de Dispositivos aparezca algo así: _____________________________________________________________________ Ingeniería Informática 81 Universidad de Valencia Figura 6.2: Nueva clase en el Administrador de Dispositivos 6.3. Implementación del software. Para la comunicación entre el periférico y la aplicación se utiliza una API (mpusbapi.dll) que proporciona Microchip y que contiene un conjunto de funciones que permiten que se lleve a cabo esta comunicación. Entre las funciones que contiene se utilizarán únicamente las siguientes: void* _MPUSBOpen(DWORD instance, string pVID_PID, string pEP, DWORD dwDir, DWORD dwReserved) DWORD _MPUSBRead(void* handle, void* pData, DWORD dwLen, DWORD* pLength, DWORD dwMilliseconds) bool _MPUSBClose(void* handle) La primera función permite establecer una tubería pasándole como parámetros el identificador de vendedor y producto (para identificar al dispositivo), el punto final con el que nos queremos comunicar y la dirección de los datos. La siguiente función nos permitirá leer los datos y la última cerrar la tubería. _____________________________________________________________________ Ingeniería Informática 82 Universidad de Valencia El programa consta de un módulo principal que contiene la definición de las funciones que se comunicarán con el periférico (abrir y cerrar la tubería, leer y pasarle los datos al formulario principal) y que al ejecutarse crea y muestra automáticamente el formulario principal. El resto de formularios serán mostrados a petición del código del programa, para lo que previamente tendrán que ser creados. Los formularios pueden cargarse al inicio del programa, cuando éste se carga en memoria, de tal forma que podamos hacer referencia a ellos desde cualquier punto que nos convenga. Si se hace esto, no tenemos que preocuparnos de la creación y liberación de los formularios. Sin embargo, el programa consumirá una cantidad de memoria muy superior a la que emplearía si los formularios se fuesen creando y liberando a medida que fueran necesarios. Otra desventaja de la creación automática es que la aplicación tardará mucho más tiempo en cargarse y mostrarse activa. Cuántos más formularios se tengan que crear, el programa tardará más tiempo en ponerse en funcionamiento. Por estas razones se ha optado por crear dinámicamente los formularios que el usuario va necesitando, de manera que un formulario se crea cuando el usuario lo solicita (interactuando con la interfaz) y cuando lo cierra, este formulario se destruye y se libera la memoria que estaba ocupando. La aplicación está formada por tres formularios: TempUSB, Estadisticas y ProgCaptura. Los principales son los dos primeros, el último únicamente se encarga de comprobar que son correctos los datos introducidos por el usuario para programar una captura y de pasárselos a los otros dos. El formulario principal es TempUSB y es el encargado de abrir y cerrar la tubería y de leer los datos a través de esta utilizando para ello las funciones definidas en el módulo principal. Al crearse el formulario, abre la tubería y pone el timer en funcionamiento: _____________________________________________________________________ Ingeniería Informática 83 Universidad de Valencia private void TempUSB_Load(object sender, EventArgs e) { usbapi.OpenPipe(); timer1.Start(); } y al cerrarse, para el timer y cierra la tubería: private void TempUSB_FormClosed(object sender, FormClosedEventArgs e) { timer1.Stop(); usbapi.ClosePipe(); } El timer es el que marca el momento de la captura de la temperatura. Cada vez que ha transcurrido el intervalo de tiempo especificado se capturan los datos y se muestran en el formulario principal. El valor por defecto del timer es de 1 segundo pero este valor puede ser cambiado en el formulario Estadisticas. Este formulario es el encargado de llevar a cabo las acciones indicadas por el usuario, como crear un fichero con los datos capturados, mostrarlo o crear una gráfica entre otras opciones. Para guardar las temperaturas capturadas y crear las gráficas se utiliza Excel, de forma, que será necesario añadir al proyecto una referencia COM a la librería de objetos de Excel para poder trabajar con el modelo de objetos del mismo. Una vez añadida la referencia, ya se puede empezar a trabajar con Excel. Excel.Application ExcelApp = new Excel.Application(); Excel.Workbook wbook = ExcelApp.Workbooks.Add(Type.Missing); _____________________________________________________________________ Ingeniería Informática 84 Universidad de Valencia 7. Experimentación. Una vez finalizada la implementación, se deben realizar una serie de pruebas para evaluar el correcto funcionamiento tanto del periférico como de la aplicación software. Las pruebas realizadas son: • Instalación del periférico en distintas máquinas. • Medición de la temperatura en distintos ambientes. • Comprobación del correcto funcionamiento de la aplicación software. 7.1. Instalación del periférico. El periférico se ha probado en varias máquinas con distintos sistemas operativos. El objetivo de estas pruebas era comprobar que el periférico era reconocido como un dispositivo USB y que todo el proceso de instalación y comunicación periférico-host era correcto. _____________________________________________________________________ Ingeniería Informática 85 Universidad de Valencia Las máquinas donde se han llevado a cabo las pruebas son: • Sony Vaio con procesador Intel Pentium M a 1 GHz, memoria RAM de 1 GB y sistema operativo Windows XP Profesional. • Compaq con procesador Intel Pentium III a 1 GHz, memoria RAM de 256 MB y sistema operativo Windows XP Home Edition. • HP con procesador Intel Pentium IV a 2 GHz, memoria RAM de 512 MB y sistema operativo Windows 2000 Professional. • Fujitsu-Siemens con procesador AMD Athlon XP2600+ a 2,1 GHz, memoria RAM de 512 MB y sistema operativo Windows XP Home Edition. En todos ellos al conectar el periférico al puerto USB se ha detectado nuevo hardware y se ha mostrado el asistente para agregarlo. Se ha indicado la localización del fichero INF y la instalación del driver ha sido correcta, pudiendo ver en el Administrador de Dispositivos como aparecía el periférico. Se ha vuelto ha repetir el proceso en todos ellos y, la segunda vez que se conectaba, lo reconocía de forma automática sin necesidad de indicar ningún dato. También se ha comprobado que la comunicación del dispositivo con la aplicación software era correcta. Para ello simplemente se ha ejecutado la aplicación y se ha observado que indicaba una temperatura coherente. 7.2. Medición de la temperatura. Para comprobar que la adquisición de los datos por el sensor y su posterior conversión A/D y paso a grados centígrados era correcto se llevaron a cabo mediciones en distintos ambientes y se comparó esta temperatura con la marcada por un termómetro analógico. Las pruebas consistieron en medir la temperatura colocando tanto el termómetro como el periférico en distintos lugares: al sol, a la sombra, cerca de una fuente de _____________________________________________________________________ Ingeniería Informática 86 Universidad de Valencia calor y cerca de una fuente de frío. En todos los casos el valor de la temperatura medida por ambos instrumentos era similar, con una diferencia de ± 1°C como mucho. También se ha podido observar que al acercarlos a una fuente de calor, ambos experimentan el mismo incremento en el valor medido aunque el termómetro lo hace con un pequeño retraso, tardando más en alcanzar el valor. Lo mismo ocurre al acercarlos a una fuente de frío. 7.3. Comprobación del software. Es necesario comprobar que la aplicación software, además de mostrar la temperatura por pantalla, también realiza de forma correcta el resto de funciones que se indicaron en el diseño, teniendo en cuenta y de forma especial, las restricciones que se indicaron. Las pruebas realizadas consisten en: • Comprobar las temperaturas máxima y mínima. • Capturar las temperaturas creando un fichero donde se guarden los datos. • Programar / desprogramar una captura. • Cambiar el intervalo de captura. • Ver los datos capturados y la gráfica. Para comprobar que las temperaturas máxima y mínima mostradas eran correctas, se partió de una temperatura de inicio y se acercó el dispositivo a una fuente de calor para ver como aumentaba la temperatura máxima. Posteriormente se acercó también a una fuente de frío y se vio como variaba la mínima. La captura de las temperaturas en un fichero se realizó de forma correcta, comprobando todos los datos guardados. Para comprobar que las temperaturas máxima y mínima almacenadas en el fichero eran las correspondientes al intervalo de _____________________________________________________________________ Ingeniería Informática 87 Universidad de Valencia tiempo en el que tuvo lugar la captura, se realizó de nuevo lo explicado en el párrafo anterior. Se programó también una captura y se pudo ver que esta comenzó y finalizó a la hora establecida, guardándose además donde se había indicado. Al comenzar una captura programada, si en ese momento se está realizando una manual, esta última para y comienza la programada. Cuando se está realizando una captura programada, se deshabilita la captura manual, sin embargo, cuando se está realizando la captura de forma manual sí que es posible programar o desprogramar una captura así como ver si hay alguna ya programada. También se ha comprobado que es necesario introducir todos los datos en el formulario si se quiere realizar una programación, ya que en caso contrario se muestran mensajes de error. El intervalo de captura marca el tiempo que ha de transcurrir para que se actualice la temperatura. Al realizar una captura (programada o no), se puede comprobar que no es posible cambiar este intervalo, ya que este se deshabilita de forma automática. Por último se comprobó que era posible visualizar datos capturados almacenados en ficheros así como las gráficas correspondientes. Si se intenta abrir un archivo que en ese momento está siendo actualizando con datos, se muestra una pantalla de error. _____________________________________________________________________ Ingeniería Informática 88 Universidad de Valencia 8. Presupuesto. Para realizar una estimación del coste económico del proyecto, se han dividido los gastos asociados al desarrollo del mismo en varios grupos: • Recursos hardware: Hardware necesario para la realización del proyecto pero que no forma parte de él. • Recursos software: Software necesario para llevar a cabo la realización del proyecto pero que no forma parte constituyente de él. • Componentes y fabricación del PCB: Coste de los componentes del circuito impreso y coste de la fabricación del mismo. • Recursos humanos: Mano de obra necesaria para realizar el proyecto. 8.1. Coste de los recursos hardware. El hardware de desarrollo del sistema consta de un ordenador portátil con las siguientes características: • Microprocesador Pentium M a 1 GHz. • Memoria RAM de 1 MB. • Disco duro de 40 GB. • Monitor de 10,6” _____________________________________________________________________ Ingeniería Informática 89 Universidad de Valencia Además es necesario un soldador de montaje superficial para soldar los componentes a la placa y un multímetro para el testeo del PCB. También se utiliza la tarjeta EduMic para programar el microcontrolador. El coste lo podemos ver en la siguiente tabla: CONCEPTO PRECIO PC Pentium M 1 GHz 1.000,00 € Soldador 21,50 € Multímetro 49,15 € Tarjeta EduMic 313,57 € TOTAL 1.384,22 € Tabla 8.1: Presupuesto de los recursos hardware 8.2. Coste de los recursos software. El software utilizado en el desarrollo del proyecto consta del sistema operativo, herramientas CAD para el diseño de PCBs, el compilador de C CCS, DDK (Driver Development Kit) de Microsoft, Visual C# para el desarrollo de la aplicación software, Microsoft Excel y el programa EduMic para programar el microcontrolador. El sistema operativo utilizado es el Windows XP Professional y la herramienta de CAD empleada para el diseño del circuito impreso ha sido el paquete Orcad 9.2. La herramienta DDK para el desarrollo de drivers puede descargarse de forma gratuita desde la página de Microsoft. Para el desarrollo de la aplicación software se ha utilizado el Visual C# Express Edition que es gratuito y se puede descargar también desde la página de Microsoft. Aunque esta versión no dispone de todas las funcionalidades y potencia del Visual C# es suficiente para el desarrollo del proyecto. Además del VC# se ha utilizado también el Excel en el desarrollo de la aplicación ya que utilizamos este programa para almacenar los datos adquiridos y generar las gráficas. _____________________________________________________________________ Ingeniería Informática 90 Universidad de Valencia El programa EduMic que se utiliza junto a la tarjeta EduMic para cargar el programa en el microcontrolador PIC puede descargarse gratuitamente desde su página web. El coste desglosado puede verse en la siguiente tabla: CONCEPTO PRECIO Windows XP Professional 284,05 € Paquete Orcad 9.2 6.000,00 € Compilador CCS v. 3.235 331,86 € Windows Server 2003 SP1DDK 0,00 € Visual C# 2005 Express Edition 0,00 € Microsoft Excel 2002 147,00 € Programa EduMic v. 2.0 0,00 € TOTAL 6.762,91 € Tabla 8.2: Presupuesto de los recursos software 8.3. Coste de los componentes y fabricación del PCB. Al realizar antes de la fabricación del PCB una primera placa de prueba para comprobar el correcto funcionamiento del diseño, el número de componentes utilizados está duplicado. El único elemento del que disponemos sólo una unidad es el microcontrolador PIC18F2550, ya que al utilizar zócalos en ambas placas, podemos emplearlo indistintamente en una u otra. Los costes de fabricación del PCB están compuestos por los costes de creación de los fotolitos y el coste de fabricación del circuito impreso propiamente dicho. Estos costes pueden verse en la siguiente tabla: _____________________________________________________________________ Ingeniería Informática 91 Universidad de Valencia CONCEPTO CANTIDAD PRECIO POR UNIDAD PRECIO Resistencias 4 0,02 € 0,08 € Condensadores cerámicos 4 0,04 € 0,16 € Condensad. electrolíticos 6 0,02 € 0,12 € Cristal 4 MHz 2 0,22 € 0,44 € Conector USB tipo A 2 1,48 € 2,96 € Led rojo 2 0,06 € 0,12 € Regleta hembra 2 0,51 € 1,02 € Microcontr. PIC18F2550 1 7,39 € 7,39 € Switch 2 0,80 € 1,60 € Sensor LM50 2 0,42 € 0,84 € Rollo de estaño 1 7,01 € 7,01 € Cable USB Tipo A - A 1 2,45 € 2,45 € Fotolitos 1 450,00 € 450,00 € PCB 1 10,00 € 10,00 € TOTAL 484,19 € Tabla 8.3: Presupuesto de los componentes y el PCB 8.4. Coste de los recursos humanos. Los recursos humanos en el proyecto corren a cargo del proyectista al que se le aplicará un sueldo de Ingeniero Junior hipotético de 1.500 €/mes. El proyecto se ha dividido en tareas cada una con un coste estimado en horas/hombre. No todas estas tareas necesitan de un ingeniero, algunas pueden ser realizadas por un técnico oficial de 2ª, en cuyo caso el proyectista tomará su papel. El salario hipotético del técnico será de 1.000 €/mes. Teniendo en cuenta que un mes tiene 165 horas hábiles, se obtienen los siguientes salarios por hora: • Ingeniero Junior: 9,09 €/hora • Técnico: 6,06 €/hora _____________________________________________________________________ Ingeniería Informática 92 Universidad de Valencia Las tareas realizadas por el ingeniero son el análisis de requisitos, diseño, implementación y experimentación, mientras que el técnico se encargará únicamente del montaje y testeo de la placa de prueba y del PCB. A continuación pueden verse las horas dedicadas a cada tarea así como el coste resultante. TAREA HORAS COSTE Análisis de requisitos 65 590,85 € Diseño 170 1.545,30 € Implementación 210 1.908,90 € Experimentación 50 454,5 € 495 4.499,55 € TOTAL Tabla 8.4: Presupuesto del coste de tareas del ingeniero TAREA HORAS COSTE Montaje 4 24,24 € Testeo 5 30,30 € 9 54,54 € TOTAL Tabla 8.5: Presupuesto del coste de tareas del técnico PERSONAL HORAS COSTE 495 4.499,55 € 9 54,54 € 504 4.554,09 € Ingeniero Técnico TOTAL Tabla 8.6: Coste total de los recursos humanos 8.5. Coste total del proyecto. Hay que indicar que todos los precios antes mencionados son con IVA incluido, así que una vez vistos todos los gastos derivados de la realización del proyecto, el coste total del proyecto quedaría de la siguiente forma: _____________________________________________________________________ Ingeniería Informática 93 Universidad de Valencia CONCEPTO COSTE Recursos hardware 1.384,22 € Recursos software 6.762,91 € Componentes y fabricación del PCB Recursos humanos 484,19 € 4.554,09 € TOTAL 13.185,41 € Tabla 8.7: Coste total del proyecto _____________________________________________________________________ Ingeniería Informática 94 Universidad de Valencia 9. Conclusiones y trabajo futuro. 9.1. Conclusiones. Después de haber realizado las pruebas y haber examinado los resultados obtenidos, se pueden extraer conclusiones sobre el proyecto. Tanto el periférico como la aplicación software desarrollados satisfacen todos los objetivos marcados inicialmente en el apartado 1.1. así como los requisitos de usuario indicados en el apartado 4.1. El resultado del proyecto ha sido la obtención de un circuito impreso con un microcontrolador PIC que realiza una conversión A/D de los datos adquiridos por un sensor de temperatura a la vez que controla la comunicación con el host y el envío de estos datos a través de un bus USB. Estas temperaturas pueden ser visualizadas mediante una aplicación que permite realizar un tratamiento de los datos. Con la elección de USB como medio de interconexión entre el periférico y el ordenador se consiguen algunos de los requisitos especificados: • Alimentación por el bus. El estándar USB permite la alimentación de dispositivos lentos que consumen un máximo de 2,5 W. _____________________________________________________________________ Ingeniería Informática 95 Universidad de Valencia • Fácil instalación. Cuando el usuario conecta el periférico al ordenador, Windows automáticamente lo detecta y carga el driver apropiado. La primera vez que se conecte, Windows pedirá al usuario que indique la ubicación del driver, pero el resto de veces, la instalación será automática. No es necesario ejecutar ningún programa de instalación ni reiniciar el sistema. • Soportado por varios sistemas operativos. Windows 98 fue el primer sistema operativo Windows en soportar USB y sus sucesores también lo soportan. Aunque este proyecto se ha centrado en PCs con sistema operativo Windows, USB también es soportado por otros ordenadores como iMac o sistemas operativos como Linux. La elección del bus USB y del microcontrolador PIC18F2550 ha influido tanto en el tamaño del periférico como en su coste. USB dispone de conectores muy sencillos, de tamaño reducido y bastante económicos. Por su parte, el microcontrolador dispone de una serie de características como un conversor A/D y, en el módulo USB, regulador, transceiver y resistencias de pull-up internas. Al utilizar estos componentes internos del microcontrolador, disminuye el número de componentes necesarios de la placa y, por lo tanto, el tamaño y coste de la misma. Respecto a la aplicación software, se puede decir que lleva a cabo todas las funciones para las que fue diseñada, presentando una interfaz de usuario intuitiva y fácil de utilizar. Se puede concluir que los ordenadores actuales utilizan una gama muy amplia de componentes. La interconexión de dichos dispositivos cumple un rol trascendental, donde aquellos más simples en su instalación y versátiles en su operación invaden rápidamente el mercado. Un mercado marcado por los dispositivos Plug and Play, siendo el medio más utilizado el estándar USB, el cual provee una interfaz única, práctica y fácil de usar para la gran mayoría de periféricos que puede utilizar el ordenador, además de extender notoriamente la cantidad de dichos dispositivos que se pueden utilizar de forma simultánea. _____________________________________________________________________ Ingeniería Informática 96 Universidad de Valencia Una de las desventajas de USB desde el punto de vista del desarrollador es la complejidad del protocolo aunque, gracias a que su uso está muy extendido, se ha podido comprobar que existen gran cantidad de herramientas que facilitan el desarrollo de periféricos que utilizan éste estándar, pudiendo decir que la única limitación en el diseño de estos dispositivos sería la imaginación de los diseñadores. 9.2. Trabajo futuro. Aunque se han cumplido los objetivos del proyecto, es posible mejorarlo añadiéndole nuevas funcionalidades. Como trabajo futuro se propone: • Añadir nuevos sensores (de humedad, luminosidad,…) a la placa, de forma que se puedan conocer más datos sobre el entorno. • Realizar más estadísticas sobre los datos adquiridos, como el cálculo de la media, gráficas con varias capturas para poder realizar comparativas,… • Desarrollar alguna aplicación de domótica y dependiendo de los valores de los datos adquiridos por los sensores se podrían subir/bajar persianas o encender/apagar alguna luz. También se podría utilizar para controlar los valores ambientales en entornos donde se deben vigilar los valores de temperatura, humedad, luminosidad o cualquier otra variable ambiental, activando alguna alarma cuando los valores de estas variables se salgan de rango. _____________________________________________________________________ Ingeniería Informática 97 Universidad de Valencia _____________________________________________________________________ Ingeniería Informática 98 Universidad de Valencia Parte II Planos y especificaciones 99 100 10. Planos del PCB. 10.1. Esquema eléctrico. _____________________________________________________________________ Ingeniería Informática 101 Universidad de Valencia _____________________________________________________________________ Ingeniería Informática 102 Universidad de Valencia 10.2. Listado de componentes. En la siguiente tabla se muestran los datos de los componentes a los que hace referencia el circuito impreso. REFERENCIA DESCRIPCION R1 Resistencia de 1KΩ R2 Resistencia de 10KΩ C1 Condensador electrolítico de 1 µF C2, C3 Condensadores cerámicos de 27 pF C4 Condensador electrolítico de 47 µF C5 Condensador electrolítico de 10 µF U1 Microcontrolador PIC18F2550 S1 Switch D1 Led Rojo CN1 Conector USB tipo A XT1 Cristal de 4 MHz Q1 Sensor de temperatura LM50 Tabla 10.1: Listado de componentes _____________________________________________________________________ Ingeniería Informática 103 Universidad de Valencia 10.3. Diseño del PCB. Caras Top y Bottom. _____________________________________________________________________ Ingeniería Informática 104 Universidad de Valencia 10.4. Pinout. SEÑAL PIN ~MCLR/Vpp/RE3 1 RA0/AN0 2 RA1/AN1 3 RA2/AN2/Vref-/CVref 4 RA3/AN3/Vref+ 5 RA4/T0CKI/C1OUT/RCV 6 RA5/AN4/~SS/HLVDIN/C2OUT 7 Vss 8 OSC1/CLKI 9 OSC2/CLKO/RA6 10 RC0/T1OSO/T13CKI 11 RC1/T1OSI/CCP2/~UOE 12 RC2/CCP1 13 Vusb 14 RC4/D-/VM 15 RC5/D+/VP 16 RC6/TX/CK 17 RC7/RX/DT/SDO 18 Vss 19 Vdd 20 RB0/AN12/INT0/FLT0/SDI/SDA 21 RB1/AN10/INT1/SCK/SCL 22 RB2/AN8/INT2/VMO 23 RB3/AN9/CCP2/VPO 24 RB4/AN11/KBI0 25 RB5/KBI1/PGM 26 RB6/KBI2/PGC 27 RB7/KBI3/PGD 28 Tabla 10.2: Pinout del microcontrolador PIC18F2550 _____________________________________________________________________ Ingeniería Informática 105 Universidad de Valencia SEÑAL PIN Vcc 1 -Data 2 +Data 3 GND 4 Tabla 10.3: Pinout del conector USB _____________________________________________________________________ Ingeniería Informática 106 Universidad de Valencia 11. Especificaciones. Este apartado se centra en la definición de las exigencias relacionadas con los conceptos económicos y técnicos que afectan al proyecto. Se centrará básicamente en los aspectos técnicos pero también quedarán definidos los asuntos relacionados con la empresa realizadora del proyecto y las subcontratas que proveerán los materiales necesarios para su realización. Todo lo relacionado con la ejecución material del proyecto deberá seguir las normas y condiciones que aquí se describen, incluyendo: • La seguridad del proyecto, para que no sufra daños o se destruya, y las personas que estén en contacto con él, antes y después de su realización. • La descripción de los materiales empleados, tanto por su carácter técnico y calidad como por su coste económico. • La realización de los trabajos que hay que llevar a cabo determinados de acuerdo a las categorías profesionales, así como a tiempos y procedimientos de ejecución. • La calidad a la hora del montaje, con las prescripciones de la ejecución y de la utilización del proyecto, y su control de calidad. • La subcontratación, normas a seguir por el contratista y la contrata. Descripción de procedimientos legales en caso de incumplimiento de alguna de las partes, desacuerdo o contratiempos que pudieran surgir y la forma de relacionarlos. _____________________________________________________________________ Ingeniería Informática 107 Universidad de Valencia 11.1. Condiciones económicas. Para la adquisición de los materiales necesarios para el desarrollo normal del proyecto, deberán observarse siempre los criterios de calidad-precio, siempre y cuando los materiales cumplan los requisitos especificados. En el caso de las subcontratas, la demora en la entrega de las piezas podrá suponer un agravio económico para la subcontrata, por cuanto el contratista se reserva el derecho a aceptar o no las piezas entregadas fuera de plazo. Los fallos que pudieran ser cometidos durante el mecanizado de las piezas, por negligencia o mala interpretación de los planos, no supondrán en ningún momento agravio por parte de la empresa contratista. No serán abonados ni materiales, ni coste-hora extra por los motivos anteriormente citados. 11.2. Especificaciones técnicas. 11.2.1. Condiciones de trabajo del sistema. Está previsto que el sistema realice su trabajo en un entorno controlado. En un entorno incontrolado, el sistema se verá forzado a condiciones extremas de temperatura y humedad. Se supondrá entonces que en dichos entornos la temperatura es un factor importante y habrá que asegurarse de que la temperatura ambiente no se salga del rango entre -40 y 85 °C. En cuanto a las posibles interferencias electromagnéticas, al estar en un entorno controlado, tampoco deberán ser de consideración, pero en el caso de que hubiera alguna, es aconsejable que se proteja el sistema de estas fuentes de ruido alejándolo de dichas fuentes o aislando el sistema mediante algún habitáculo metálico o planos conectados a tierra. _____________________________________________________________________ Ingeniería Informática 108 Universidad de Valencia 11.2.2. Requerimientos de las señales del sistema. USB utiliza un cable de 4 conductores, de los cuales dos de ellos son de alimentación y los otros dos transmiten/reciben una señal de datos, en modo de tensión diferencial. Los conductores de alimentación se etiquetan como Vbus y GND y entregan una tensión continua de 5V y 500mA máximo. La señal de alimentación deberá cumplir las condiciones mostradas en la siguiente tabla. Símbolo Descripción Min. Max. Unidad Vcc Tensión de alimentación 4,75 5,25 V Icc Corriente de alimentación - 500 mA Tabla 11.1: Condiciones de la señal de alimentación Los conductores de transmisión/recepción de datos se etiquetan como D+ y D-. Como hemos mencionado, el parámetro a medir es la tensión diferencial entre los dos hilos. Salidas Diferencial 1 Diferencial 0 Entradas D+ ≥ 2,8 V D+ ≥ 2 V D- ≤ 0,3 V D+ - D- ≥ 0,2 V D- > 2,8 V D- ≥ 2 V D+ ≤ 0,3 V D- - D+ ≥ 0,2 V Tabla 11.2: Márgenes de tensión para los niveles lógicos en USB 1.1 Si D+ y D- son menores de 0,3 V se considera que en el bus hay un cero final (Single-Ended Zero). La señal de reloj con la que se trabaja es de 4 MHz. En caso de utilizar una frecuencia distinta no se garantiza que el sistema funcione correctamente. _____________________________________________________________________ Ingeniería Informática 109 Universidad de Valencia 11.3. Características de los materiales. 11.3.1. Especificaciones de los circuitos integrados. El circuito integrado que se corresponde con el microcontrolador se colocará sobre un zócalo. Esto permite una fácil sustitución en caso de rotura. Si se desea utilizar otros integrados distintos a los especificados, se deberá de tener especial cuidado en dos factores: • Que su rango de alimentación coincida con el especificado. • Que coincida el patillaje. Microcontrolador PIC18F2550 El microcontrolador elegido es el PIC18F2550 en encapsulado DIP de 28 pines de la empresa Microchip. Las características eléctricas de este modelo pueden verse en la siguiente tabla. Tabla 11.3: Características eléctricas del PIC18F2550 _____________________________________________________________________ Ingeniería Informática 110 Universidad de Valencia Sensor de temperatura LM50 El sensor de temperatura utilizado es el LM50 de la empresa National Semiconductor en encapsulado SOT de 3 pines. Este sensor permite medir temperaturas entre -40 y 125 °C utilizando tensión de alimentación positiva. La tensión de salida es linealmente proporcional a la temperatura en grados centígrados por lo que cada 10 mV de tensión de salida equivale a 1°C. Símbolo Descripción Min. Max. Unidad +Vs Tensión de alimentación 4,5 10 V Vout Tensión de salida -1,0 +Vs + 0,6 V Iout Corriente de salida - 10 mA Tabla 11.4: Características eléctricas del sensor LM50 11.3.2. Componentes pasivos y conductores. Resistencias Las resistencias fijadas son de 1 y 10 KΩ y un 10% de tolerancia de tecnología de montaje superficial en formato 1206. Deberán tener un límite de funcionamiento normal entre -40 y 85°C. Para el manejo de resistencias en circuitos impresos existe una normativa que se puede seguir. Condensadores Los condensadores utilizados son dos cerámicos de 27 pF para la señal de reloj y tres electrolíticos de 1, 10 y 47 µF. Deben cumplir las normas descritas para las resistencias y además la siguiente norma: • UNE 20 543 85: “Condensadores fijos utilizados en los equipos electrónicos. Especificaciones generales”. _____________________________________________________________________ Ingeniería Informática 111 Universidad de Valencia Conectores y cableado El conector USB utilizado es de tipo A. En la siguiente figura pueden verse sus dimensiones. Figura 11.1: Dimensiones del conector USB tipo A USB requiere de un cable de 4 conductores: dos encargados de la alimentación y dos cables para envío y recepción de datos. La sección de los conductores de alimentación varía entre 20 y 26 AWG, y la de los cables de datos es 28 AWG. En LS no es obligatorio que los conductores de señal estén trenzados entre sí. En F/H-S esto sí es obligatorio. Estos requerimientos influyen en la distribución espacial de los conductores en el interior del cable USB, así como en el grosor y la longitud máxima de éste. En los dispositivos LS la longitud de un tramo de cable no podrá exceder los 3 metros, y en dispositivos FS no podrá ser mayor de 5 metros. Se podrá hacer uso de alargadores, pero para ello será necesario ubicar un repetidor entre cada tramo. _____________________________________________________________________ Ingeniería Informática 112 Universidad de Valencia Tanto en FS como en LS los cables de alimentación nunca estarán trenzados. Obligatoriamente para ambos, el cable deberá contar con un apantallamiento metálico de aluminio-poliéster y también con un cable trenzado de cobre de sección 28 AWG, para que dote de rigidez al cable final. Además, los cables FS contarán con un segundo apantallamiento, que consistirá en una malla de cobre estañada alrededor de todo el cable. Finalmente, y como última capa, nos encontramos la cubierta exterior de PVC. 11.4. Condiciones de ejecución. 11.4.1. Fabricación del PCB. Para la elaboración del PCB se deberá recurrir a una empresa especializada en la fabricación de PCBs. Esto se debe a la tecnología utilizada que hace necesaria la utilización de maquinaria industrial precisa. Para una fabricación correcta, el fabricante deberá garantizar los parámetros tecnológicos que aparece en la siguiente tabla. PARAMETRO VALOR Diámetro mínimo de taladro 0,5 mm Corona mínima 0,2 mm Margen mínimo de la máscara con el pad de cobre 0,15 mm Anchura mínima del conductor capas externas 0,25 mm Espacio mínimo entre conductores capas externas 0,2 mm Distancia mínima del conductor al borde del circuito impreso 0,3 mm Tabla 11.5: Parámetros requeridos para la fabricación del PCB _____________________________________________________________________ Ingeniería Informática 113 Universidad de Valencia Se requiere el cumplimiento de la normativa que a continuación se detalla: • DIN 40801: “Espesores, taladros y fundamentos de los circuitos impresos”. • DIN 40802: “Materiales base de las pistas”. • UNE 20 620: “Materiales base para circuitos impresos”. • UNE 20 621 partes 4 y 5: “Circuitos impresos. Diseño y utilización de placas impresas”. 11.4.2. Montaje de componentes. Una vez se ha obtenido el circuito impreso, se deben emplazar los componentes. Antes del montaje de los componentes se realizará una verificación de pistas visual y después, una verificación mediante un multímetro de cada pista y desde sus diferentes extremos para comprobar que hay conexión. Para la soldadura y montaje de componentes se deberá de tener en cuenta el estaño y el soldador. Se utilizará un estaño formado por un 60% de estaño y un 40% de plomo, como establece la norma DIN 1707. Se recomienda el uso de hilo de estaño enrollado de 1 mm. de grosor. Respecto al soldador, se utilizará uno de como mínimo 30 W, pero se recomienda de 50 - 60 W. Tendrá que ser de punta fina y que ésta esté limpia. Se recomienda el uso de porta-soldador con una almohadilla humedecida para la limpieza de la punta del soldador de excesos de estaño. Los elementos serán soldados en el siguiente orden: resistencias y condensadores, zócalos, conectores de bus plano y circuitos integrados. _____________________________________________________________________ Ingeniería Informática 114 Universidad de Valencia Parte III Apéndices 115 116 Apéndice A Código del microcontrolador TempUSB.c #include <18F2550.h> #fuses HSPLL,NOWDT,NOPROTECT,NOLVP,NODEBUG,NOUSBDIV,PLL1,CPUDIV3,VREGEN #use delay(clock = 24000000) #define USB_HID_DEVICE FALSE // Deshabilitamos el uso de las directivas HID #define USB_EP1_TX_ENABLE USB_ENABLE_INTERRUPT // Habilitamos EP1 para // transferencias IN de interrupción #define USB_EP1_TX_SIZE 1 // Tamaño del buffer IN del EP1 #include <pic18_usb.h> #include <TempUSB.h> #include <usb.c> // Configuración de USB y descriptores para este dispositivo #define LED PIN_B7 #define LED_ON output_high #define LED_OFF output_low void main(void) { int16 buffer[1] = 0; LED_ON(LED); delay_ms(2000); LED_OFF(LED); usb_init(); // Inicializamos los registros USB usb_wait_for_enumeration(); // Esperamos hasta terminar la enumeración if (usb_enumerated()) { delay_ms(2000); LED_ON(LED); // Si el dispositivo está configurado _____________________________________________________________________ Ingeniería Informática 117 Universidad de Valencia /****************************************************************** * Inicialización de los puertos y del módulo A/D ******************************************************************/ SET_TRIS_A(0xFF); // Puerto A de entrada setup_adc_ports(AN0_TO_AN1 | VSS_VDD); // ADCON1 setup_adc(ADC_CLOCK_DIV_8); // ADCON2.ADCS[0-2] set_adc_channel(1); while (TRUE) { delay_us(60); buffer[0] = read_adc(); // Leemos el resultado de la conversión usb_put_packet(1, buffer, 1, USB_DTS_TOGGLE); // Enviamos 1 byte del EP1 al PC } } } _____________________________________________________________________ Ingeniería Informática 118 Universidad de Valencia TempUSB.h #IFNDEF __USB_DESCRIPTORS__ #DEFINE __USB_DESCRIPTORS__ #include <usb.h> #DEFINE USB_TOTAL_CONFIG_LEN 25 // Configuración + interface + endpoint /****************************************************************** * Array que contiene el descriptor de configuración, de interface y de punto final ******************************************************************/ char const USB_CONFIG_DESC[ ] = { // Descriptor de configuración USB_DESC_CONFIG_LEN, // Tamaño del descriptor USB_DESC_CONFIG_TYPE, // Tipo de descriptor (CONFIGURACION = 0x02) USB_TOTAL_CONFIG_LEN, 0, 1, // Número de interfaces que soporta el dispositivo 0x01, // Identificador de la configuración (si hubiera más de una) 0x00, // Indice del descriptor de cadena para esta configuración 0x80, // Bit 6 = 1 si el dispositivo es self powered, bit 5 = 1 si soporta wakeup remoto, bits 0-4 // reservados y bit 7 = 1 0x32, // 0x32 = 100mA // Descriptor de interface USB_DESC_INTERFACE_LEN, // Tamaño del descriptor USB_DESC_INTERFACE_TYPE, // Tipo de descriptor (INTERFACE = 0x04) 0x00, // Identificador de la interface 0x00, 1, // Número de puntos finales de la interface, sin contar EP0 0xFF, // Código de la clase, FF = definido por el vendedor 0xFF, // Código de la subclase, FF = definido por el vendedor 0xFF, // Código del protocolo, FF = definido por el vendedor 0x00, // Indice del descriptor de cadena para la interface // Descriptor de punto final USB_DESC_ENDPOINT_LEN, // Tamaño del descriptor USB_DESC_ENDPOINT_TYPE, // Tipo de descriptor (ENDPOINT = 0x05) 0x81, // Número de endpoint y dirección (0x81 = EP1 IN) 0x03, // Tipo de transferencia soportada (0 control, 1 isócrona, 2 masiva, 3 interrupción) USB_EP1_TX_SIZE, 0x00, // Tamaño máximo de paquete 0x0A, }; #define USB_NUM_HID_INTERFACES 0 #define USB_MAX_NUM_INTERFACES 1 const char USB_NUM_INTERFACES[USB_NUM_CONFIGURATIONS] = {1}; #if (sizeof(USB_CONFIG_DESC) != USB_TOTAL_CONFIG_LEN) #error USB_TOTAL_CONFIG_LEN not defined correctly #endif _____________________________________________________________________ Ingeniería Informática 119 Universidad de Valencia // Descriptor de dispositivo char const USB_DEVICE_DESC[ ] = { USB_DESC_DEVICE_LEN, // Tamaño del descriptor USB_DESC_DEVICE_TYPE, // Tipo de descriptor (DISPOSITIVO = 0x01) 0x00, 0x01, // Versión USB en bcd (1.0) 0x00, // Código de la clase (si es 0, la interface define la clase) 0x00, // Código de la subclase 0x00, // Código del protocolo USB_MAX_EP0_PACKET_LENGTH, // Tamaño máximo de paquete del EP0 0xD8, 0x04, // Identificador de vendedor (0x04D8 es Microchip) 0x11, 0x00, // Identificador de producto 0x01, 0x00, 0x01, // Indice del descriptor de cadena del fabricante 0x02, // Indice del descriptor de cadena del producto 0x00, // Indice del descriptor de cadena del número de serie USB_NUM_CONFIGURATIONS // Número de configuraciones }; /********************************************************************** * Descriptores de cadena. La cadena 0 es una cadena especial y debe incluirse siempre **********************************************************************/ const char USB_STRING_DESC_OFFSET[ ] = {0, 4, 12}; // Dónde comienza cada cadena #define USB_STRING_DESC_COUNT sizeof(USB_STRING_DESC_OFFSET) char const USB_STRING_DESC[ ] = { // String 0 4, // Tamaño de la cadena USB_DESC_STRING_TYPE, 0x09, 0x04, // Tipo de descriptor (STRING = 0x03) // String 1 --> Fabricante 8, // Tamaño de la cadena USB_DESC_STRING_TYPE, 'A', 0, 'R', 0, 'Z', 0, // String 2 --> Producto 60, // Tamaño de la cadena USB_DESC_STRING_TYPE, 'S', 0, 'e', 0, 'n', 0, 's', 0, 'o', 0, 'r', 0, ' ', 0, 'd', 0, 'e', 0, ' ', 0, 'T', 0, 'e', 0, 'm', 0, _____________________________________________________________________ Ingeniería Informática 120 Universidad de Valencia 'p', 0, 'e', 0, 'r', 0, 'a', 0, 't', 0, 'u', 0, 'r', 0, 'a', 0, ' ', 0, 'T', 0, 'e', 0, 'm', 0, 'p', 0, 'U', 0, 'S', 0, 'B', 0 }; #ENDIF _____________________________________________________________________ Ingeniería Informática 121 Universidad de Valencia _____________________________________________________________________ Ingeniería Informática 122 Universidad de Valencia Apéndice B Fichero .INF [Version] Signature = "$WINDOWS NT$" Class = %ClassName% ClassGuid = {4D36E911-E325-11CE-BFC1-08002BE10318} Provider = %MFGNAME% DriverVer = 05/13/2006, 1.0.0.0 CatalogFile = tempusb.cat [DestinationDirs] DefaultDestDir = 12 TempUSB.ClassCopyFiles = 11 ;-----------------------------------------------------------------------------; Class Install Sections ;-----------------------------------------------------------------------------[ClassInstall32] AddReg = TempUSB.ClassReg CopyFiles = TempUSB.ClassCopyFiles [TempUSB.ClassReg] HKR,,,0,%ClassName% HKR,,Class,,%ClassDesc% HKR,,Icon,,11 HKR,,Installer32,,"tempusbci.dll,TempUSBClassInstaller" [TempUSB.ClassCopyFiles] tempusbci.dll ;-----------------------------------------------------------------------------; Device Install Sections ;-----------------------------------------------------------------------------[Manufacturer] %MFGNAME% = Standard _____________________________________________________________________ Ingeniería Informática 123 Universidad de Valencia [Standard] %DESCRIPTION% = DriverInstall, USB\VID_04D8&PID_0011 [SourceDisksNames] 1 = %INSTDISK%,,,"" [SourceDisksFiles] mchpusb.sys = 1,, tempusbci.dll = 1,, ;-----------------------------------------------------------------------------; Windows 2000/XP Sections ;-----------------------------------------------------------------------------[DriverInstall.NT] CopyFiles = DriverCopyFiles [DriverCopyFiles] mchpusb.sys [DriverInstall.NT.Services] AddService = TempUSB, 2, DriverService [DriverService] DisplayName = %SVCDESC% ServiceType = 1 ; SERVICE_KERNEL_DRIVER StartType = 3 ; SERVICE_DEMAND_START ErrorControl = 1 ; SERVICE_ERROR_NORMAL ServiceBinary = %12%\mchpusb.sys LoadOrderGroup = Extended Base ;-----------------------------------------------------------------------------; String Definitions ;-----------------------------------------------------------------------------[Strings] MFGNAME = "ARZ TempUSB" INSTDISK = "TempUSB Device Driver Disk" DESCRIPTION = "TempUSB" SVCDESC = "TempUSB Device Driver" ClassName = "PIC 18F2550 USB Devices" ClassDesc = "PIC USB Sample Device" _____________________________________________________________________ Ingeniería Informática 124 Universidad de Valencia Apéndice C Código de la aplicación TempUSBAPI.cs // Programa principal. Contiene las funciones que permiten la comunicación con el dispositivo. using System; using System.Collections.Generic; using System.Windows.Forms; using System.Runtime.InteropServices; // Clase para importar DLL using DWORD = System.UInt32; namespace TempUSB { unsafe public class TempUSBAPI { #region Definición de los Strings: VID_PID y EndPoint string vid_pid_norm = "vid_04d8&pid_0011"; string in_pipe = "\\MCHP_EP1"; #endregion #region Funciones importadas de la DLL: mpusbapi.dll [DllImport("mpusbapi.dll")] private static extern DWORD _MPUSBGetDLLVersion(); [DllImport("mpusbapi.dll")] private static extern DWORD _MPUSBGetDeviceCount(string pVID_PID); [DllImport("mpusbapi.dll")] private static extern void* _MPUSBOpen(DWORD instance, string pVID_PID, string pEP, DWORD dwDir, DWORD dwReserved); [DllImport("mpusbapi.dll")] private static extern DWORD _MPUSBRead(void* handle, void* pData, DWORD dwLen, DWORD* pLength, DWORD dwMilliseconds); [DllImport("mpusbapi.dll")] private static extern DWORD _MPUSBWrite(void* handle, void* pData, DWORD dwLen, DWORD* pLength, DWORD dwMilliseconds); _____________________________________________________________________ Ingeniería Informática 125 Universidad de Valencia [DllImport("mpusbapi.dll")] private static extern DWORD _MPUSBReadInt(void* handle, DWORD* pData, DWORD dwLen, DWORD* pLength, DWORD dwMilliseconds); [DllImport("mpusbapi.dll")] private static extern bool _MPUSBClose(void* handle); #endregion void* myInPipe; static void Main() { Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Application.Run(new TempUSB()); } public void OpenPipe() // Permite establecer una tubería { DWORD selection = 0; myInPipe = _MPUSBOpen(selection, vid_pid_norm, in_pipe, 1, 0); } public void ClosePipe() // Cierra la tubería { _MPUSBClose(myInPipe); } // Permite leer datos del dispositivo private void ReceivePacket(byte* ReceiveData, DWORD* ReceiveLength) { uint ReceiveDelay = 1000; DWORD ExpectedReceiveLength = *ReceiveLength; _MPUSBRead(myInPipe, (void*)ReceiveData, ExpectedReceiveLength, ReceiveLength, ReceiveDelay); } public float MostrarTemp() { float result = 0; int valor; // Lee los datos del dispositivo y devuelve la temperatura byte* receive_buf = stackalloc byte[1]; DWORD RecvLength = 1; ReceivePacket(receive_buf, &RecvLength); valor = receive_buf[0]; result = (float)(valor * 500); result = result / 1024; return result; } } } _____________________________________________________________________ Ingeniería Informática 126 Universidad de Valencia TempUSB.cs // Formulario principal. Muestra la temperatura en pantalla y permite el acceso al resto de formularios. using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; namespace TempUSB { public partial class TempUSB : Form { TempUSBAPI usbapi = new TempUSBAPI(); Estadisticas estadist = null; float min; float max; bool ini_valores = true; float min_captura; float max_captura; bool fich_abierto = false; ProgCaptura.datosForm datosProg; // Datos de una captura programada public TempUSB() { InitializeComponent(); } // Al cargarse crea una tubería y pone en marcha el timer private void TempUSB_Load(object sender, EventArgs e) { usbapi.OpenPipe(); timer1.Start(); } // Al cerrarse para el timer y cierra la tubería private void TempUSB_FormClosed(object sender, FormClosedEventArgs e) { timer1.Stop(); usbapi.ClosePipe(); } // Cada vez que transcurre el intervalo de tiempo del timer, captura la temperatura private void timer1_Tick(object sender, EventArgs e) { timer1.Stop(); float temp = usbapi.MostrarTemp(); TempActual.Text = temp.ToString("###.#"); _____________________________________________________________________ Ingeniería Informática 127 Universidad de Valencia if (ini_valores == true) { min = temp; max = temp; ini_valores = false; } if (temp < min) min = temp; if (temp > max) max = temp; if (estadist != null) // El formulario Estadisticas está abierto { estadist.TempMin.Text = min.ToString("###.#"); estadist.TempMax.Text = max.ToString("###.#"); if (estadist.captura_programada == true) { this.datosProg = estadist.datosProg; // Hay una captura programada // La fecha y hora de inicio de la captura programada coinciden con la actual if ((this.datosProg.ini == DateTime.Now) && (fich_abierto == false)) { estadist.wbook = estadist.ExcelApp.Workbooks.Add(Type.Missing); estadist.wbook.SaveAs(this.datosProg.fich, Excel.XlFileFormat.xlWorkbookNormal, Type.Missing, Type.Missing, false, false, Excel.XlSaveAsAccessMode.xlNoChange, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing); ((Excel.Worksheet)estadist.wbook.Sheets[3]).Delete(); ((Excel.Worksheet)estadist.wbook.Sheets[2]).Delete(); ((Excel.Worksheet)estadist.wbook.Sheets[1]).Name = "TempUSB"; estadist.wbook.Save(); estadist.wbook.Close(true, Type.Missing, Type.Missing); estadist.ExcelApp.Quit(); estadist.ini_valores_captura = true; estadist.num_capturas = 0; estadist.finCaptura.Enabled = true; estadist.capturar.Enabled = false; estadist.programarCaptura.Enabled = false; estadist.intervaloCapt.Enabled = false; fich_abierto = true; } // La fecha y hora de fin de captura programada coinciden con la actual if (this.datosProg.fin == DateTime.Now) { estadist.finCaptura_Click(estadist.finCaptura, e); estadist.captura_programada = false; fich_abierto = false; } } _____________________________________________________________________ Ingeniería Informática 128 Universidad de Valencia if (estadist.finCaptura.Enabled == true) // Se guardan los datos en un fichero { if (estadist.programarCaptura.Enabled == false) estadist.fichero = this.datosProg.fich; estadist.wbook = estadist.ExcelApp.Workbooks.Open(estadist.fichero, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing); Excel.Worksheet wsheet = (Excel.Worksheet)estadist.wbook.ActiveSheet; if (estadist.ini_valores_captura == true) { wsheet.Cells[6, 1] = "Tiempo (seg)"; wsheet.Cells[6, 3] = "Temperatura (°C)"; wsheet.Cells[2, 6] = "Mínima"; min_captura = temp; wsheet.Cells[2, 7] = min_captura; wsheet.Cells[3, 6] = "Máxima"; max_captura = temp; wsheet.Cells[3, 7] = max_captura; wsheet.Cells[1, 1] = "Fecha"; wsheet.Cells[2, 1] = "Inicio Captura"; wsheet.Cells[3, 1] = "Fin Captura"; wsheet.Cells[4, 1] = "Número Capturas"; DateTime date = DateTime.Now; wsheet.Cells[1, 3] = date.ToLongDateString(); wsheet.Cells[2, 3] = date.ToLongTimeString(); estadist.ini_valores_captura = false; } if (temp < min_captura) { min_captura = temp; wsheet.Cells[2, 7] = min_captura; } if (temp > max_captura) { max_captura = temp; wsheet.Cells[3, 7] = max_captura; } int tiempo = (timer1.Interval * estadist.num_capturas) / 1000; wsheet.Cells[estadist.num_capturas + 7, 1] = tiempo; wsheet.Cells[estadist.num_capturas + 7, 3] = temp; estadist.num_capturas++; estadist.wbook.Save(); estadist.wbook.Close(true, Type.Missing, Type.Missing); estadist.ExcelApp.Quit(); } timer1.Interval = estadist.intervalo_capt; } _____________________________________________________________________ Ingeniería Informática 129 Universidad de Valencia timer1.Enabled = true; } // Al pinchar sobre el icono se abre el formulario Estadisticas private void pictureBox1_Click(object sender, EventArgs e) { estadist = new Estadisticas(); estadist.Show(); // Lo deshabilitamos para que solo pueda haber una instancia de la ventana pictureBox1.Enabled = false; } } } _____________________________________________________________________ Ingeniería Informática 130 Universidad de Valencia Estadisticas.cs // Formulario de estadísticas. Muestra las temperaturas máxima y mínima y permite acceder al resto de // funciones. using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using System.Reflection; namespace TempUSB { public partial class Estadisticas : Form { public Excel.Application ExcelApp = new Excel.Application(); public Excel.Workbook wbook = null; public string fichero; public int num_capturas; public bool ini_valores_captura; public int intervalo_capt = 1000; public bool captura_programada = false; public ProgCaptura.datosForm datosProg; // Datos de una captura programada public Estadisticas() { InitializeComponent(); } // Al cargarse, pone en funcionamiento el timer y muestra la fecha y la hora private void Estadisticas_Load(object sender, EventArgs e) { timer1.Start(); DateTime date = DateTime.Now; fecha.Text = date.ToShortDateString(); hora.Text = date.ToLongTimeString(); } // Al cerrarse, para el timer y habilita el icono de acceso a este formulario desde el formulario // principal private void Estadisticas_FormClosed(object sender, FormClosedEventArgs e) { timer1.Stop(); FormCollection nbforms = Application.OpenForms; nbforms["TempUSB"].Controls["pictureBox1"].Enabled = true; } _____________________________________________________________________ Ingeniería Informática 131 Universidad de Valencia private void timer1_Tick(object sender, EventArgs e) { timer1.Stop(); DateTime date = DateTime.Now; hora.Text = date.ToLongTimeString(); timer1.Enabled = true; } // Al pinchar sobre el botón Capturar, comienza la captura de los datos private void capturar_Click(object sender, EventArgs e) { SaveFileDialog saveFileDialog1 = new SaveFileDialog(); saveFileDialog1.Title = "Guarda Como"; saveFileDialog1.Filter = "Archivos de Microsoft Excel|*.xls"; saveFileDialog1.FilterIndex = 1; DialogResult dRes = saveFileDialog1.ShowDialog(); if (dRes == DialogResult.OK) { fichero = saveFileDialog1.FileName; // Se crea un fichero Excel con el nombre indicado wbook = ExcelApp.Workbooks.Add(Type.Missing); wbook.SaveAs(fichero, Excel.XlFileFormat.xlWorkbookNormal, Type.Missing, Type.Missing, false, false, Excel.XlSaveAsAccessMode.xlNoChange, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing); ((Excel.Worksheet)wbook.Sheets[3]).Delete(); ((Excel.Worksheet)wbook.Sheets[2]).Delete(); ((Excel.Worksheet)wbook.Sheets[1]).Name = "TempUSB"; wbook.Save(); wbook.Close(true, Type.Missing, Type.Missing); ExcelApp.Quit(); ini_valores_captura = true; num_capturas = 0; finCaptura.Enabled = true; capturar.Enabled = false; intervaloCapt.Enabled = false; } else if (dRes == DialogResult.Cancel) saveFileDialog1.Dispose(); } // Se pulsa el botón de fin de captura public void finCaptura_Click(object sender, EventArgs e) { DateTime date = DateTime.Now; if ((captura_programada == true) && (programarCaptura.Enabled == false)) fichero = datosProg.fich; _____________________________________________________________________ Ingeniería Informática 132 Universidad de Valencia wbook = ExcelApp.Workbooks.Open(fichero, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing); Excel.Worksheet wsheet = (Excel.Worksheet)wbook.ActiveSheet; wsheet.Cells[3, 3] = date.ToLongTimeString(); wsheet.Cells[4, 3] = num_capturas; if (programarCaptura.Enabled == false) programarCaptura.Enabled = true; intervaloCapt.Enabled = true; capturar.Enabled = true; finCaptura.Enabled = false; // Generación de la gráfica int fila = num_capturas + 6; string rng = "C7:C" + fila.ToString(); Excel.Range rango = wsheet.get_Range(rng, Type.Missing); rango.NumberFormat = "00.0"; wsheet.get_Range("G2:G3", Type.Missing).NumberFormat = "00.0"; Excel.Chart graf = (Excel.Chart)wbook.Charts.Add(Type.Missing, Type.Missing, Type.Missing, Type.Missing); graf.Name = "TempUSB Grafica"; graf.SetSourceData(rango, Excel.XlRowCol.xlColumns); graf.ChartType = Excel.XlChartType.xlLineMarkers; graf.HasLegend = false; graf.HasTitle = false; Excel.Series serie = (Excel.Series)graf.SeriesCollection(1); serie.XValues = wsheet.get_Range("A7", "A" + fila.ToString()); Excel.Axis ejeX; ejeX = (Excel.Axis)graf.Axes(Excel.XlAxisType.xlCategory, Excel.XlAxisGroup.xlPrimary); ejeX.HasTitle = true; ejeX.AxisTitle.Text = "Tiempo (mseg)"; Excel.Axis ejeY; ejeY = (Excel.Axis)graf.Axes(Excel.XlAxisType.xlValue, Excel.XlAxisGroup.xlPrimary); ejeY.HasTitle = true; ejeY.AxisTitle.Text = "Temperatura (°C)"; graf.SizeWithWindow = true; wbook.Save(); wbook.Close(true, Type.Missing, Type.Missing); ExcelApp.Quit(); fichero = null; } _____________________________________________________________________ Ingeniería Informática 133 Universidad de Valencia // Al pulsar el botón Ver Gráfica, abre Excel y muestra la gráfica correspondiente al fichero // indicado private void verGrafica_Click(object sender, EventArgs e) { OpenFileDialog openFileDialog1 = new OpenFileDialog(); openFileDialog1.Title = "Abrir"; openFileDialog1.Filter = "Archivos de Microsoft Excel|*.xls"; openFileDialog1.FilterIndex = 1; if (openFileDialog1.ShowDialog() == DialogResult.OK) { string fichero_graf = openFileDialog1.FileName; if (fichero_graf == fichero) MessageBox.Show("El fichero está siendo capturado", "TempUSB Error"); else { Excel.Workbook wbook_graf = ExcelApp.Workbooks.Open(fichero_graf, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing); ExcelApp.Visible = true; } } } // Al pulsar el botón Ver Datos, abre Excel y muestra los datos correspondiente al fichero // indicado private void verDatos_Click(object sender, EventArgs e) { OpenFileDialog openFDlog = new OpenFileDialog(); openFDlog.Title = "Abrir"; openFDlog.Filter = "Archivos de Microsoft Excel|*.xls"; openFDlog.FilterIndex = 1; if (openFDlog.ShowDialog() == DialogResult.OK) { string fich = openFDlog.FileName; if (fich == fichero) MessageBox.Show("El fichero está siendo capturado", "TempUSB Error"); else { Excel.Workbook wbk = ExcelApp.Workbooks.Open(fich, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing); Excel.Worksheet wsht = (Excel.Worksheet)wbk.Worksheets[1]; wsht.Activate(); ExcelApp.Visible = true; } } } _____________________________________________________________________ Ingeniería Informática 134 Universidad de Valencia // Abre el formulario para programar una captura private void programarCaptura_Click(object sender, EventArgs e) { ProgCaptura progCapt = new ProgCaptura(); progCapt.captura_programada = this.captura_programada; if (this.captura_programada == true) progCapt.datosProg = this.datosProg; if (progCapt.ShowDialog() == DialogResult.OK) this.datosProg = progCapt.datosProg; this.captura_programada = progCapt.captura_programada; progCapt.Dispose(); } // Permite cambiar el intervalo de captura (por defecto es 1 seg) private void intervaloCapt_SelectedIndexChanged(object sender, EventArgs e) { switch (intervaloCapt.Text) { case "1 seg": intervalo_capt = 1000; break; case "3 seg": intervalo_capt = 3000; break; case "30 seg": intervalo_capt = 30000; break; case "1 min": intervalo_capt = 60000; break; case "5 min": intervalo_capt = 300000; break; case "10 min": intervalo_capt = 600000; break; default: break; } } } } _____________________________________________________________________ Ingeniería Informática 135 Universidad de Valencia ProgCaptura.cs // Permite programar una captura introduciendo el día y la hora en que se quiere realizar, así // como el nombre del fichero donde se guardarán los datos capturados. // Si ya hay una captura programada muestra los datos de dicha captura, permitiendo también su // deshabilitación. using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; namespace TempUSB { public partial class ProgCaptura : Form { public struct datosForm // Almacena los datos introducidos por el usuario { public string fich; // Nombre del fichero public DateTime ini; // Fecha y hora de inicio de captura public DateTime fin; // Fecha y hora de fin de captura } public datosForm datosProg; public Boolean captura_programada; // Indica si está programada una captura public ProgCaptura() { InitializeComponent(); } // Al cargar la ventana, se inicializan los campos del formulario. // Dependiendo de si hay una captura programada o no, se inicializarán de forma distinta. private void ProgCaptura_Load(object sender, EventArgs e) { iniProg.CustomFormat = "dd:MM:yyyy HH:mm:ss"; finProg.CustomFormat = "dd:MM:yyyy HH:mm:ss"; // Si hay una captura programada se muestran los datos de dicha captura. // Si no la hay, el campo del nombre del fichero aparece vacío y los otros dos campos // muestran la fecha y hora actuales. if (this.captura_programada == true) { fichProg.Text = this.datosProg.fich; iniProg.Value = this.datosProg.ini; finProg.Value = this.datosProg.fin; aceptar.Enabled = false; deshabilitar.Enabled = true; } else { fichProg.Text = ""; iniProg.Value = DateTime.Now; _____________________________________________________________________ Ingeniería Informática 136 Universidad de Valencia finProg.Value = DateTime.Now; aceptar.Enabled = true; deshabilitar.Enabled = false; } } // Al pulsar el botón Examinar, se abre un cuadro de diálogo donde poder elegir el // directorio y el nombre del fichero donde se quieren guardar los datos a capturar. // Una vez seleccionado, cuando se cierre el cuadro de diálogo, se mostrará el // nombre completo en el formulario. private void examinar_Click(object sender, EventArgs e) { SaveFileDialog saveFD = new SaveFileDialog(); saveFD.Title = "Guardar Como"; saveFD.Filter = "Archivos de Microsoft Excel|*.xls"; saveFD.FilterIndex = 1; if (saveFD.ShowDialog() == DialogResult.OK) fichProg.Text = saveFD.FileName; saveFD.Dispose(); } // Al pulsar el botón Aceptar, si se han introducido valores correctos en los campos, // se guardan los datos en la estructura private void aceptar_Click(object sender, EventArgs e) { // Variables que indican si el valor de los campos es correcto bool fichProg_OK = true; bool iniProg_OK = true; bool finProg_OK = true; // Si el nombre del fichero esta vacío, se muestra una ventana de error if (fichProg.Text == "") { MessageBox.Show("El nombre del fichero está vacío", "TempUSB Error"); fichProg_OK = false; } // Si la fecha de inicio de captura es anterior a la actual, se muestra // una ventana de error if (iniProg.Value <= DateTime.Now) { MessageBox.Show("La fecha de inicio de captura es inválida. Debe ser posterior a la actual.", "TempUSB Error"); iniProg_OK = false; } _____________________________________________________________________ Ingeniería Informática 137 Universidad de Valencia // Si la fecha de fin de captura es anterior a la de inicio, se muestra // una ventana de error if (iniProg.Value >= finProg.Value) { MessageBox.Show("La fecha de fin de captura es inválida. Debe ser posterior a la de inicio.", "TempUSB Error"); finProg_OK = false; } // Si todo está correcto se almacenan los datos if ((fichProg_OK == true) && (iniProg_OK == true) && (finProg_OK == true)) { this.datosProg.fich = fichProg.Text; this.datosProg.ini = iniProg.Value; this.datosProg.fin = finProg.Value; this.captura_programada = true; this.DialogResult = DialogResult.OK; this.Close(); } } // Se deshabilita una captura programada private void deshabilitar_Click(object sender, EventArgs e) { this.captura_programada = false; fichProg.Text = ""; iniProg.Value = DateTime.Now; finProg.Value = DateTime.Now; aceptar.Enabled = true; deshabilitar.Enabled = false; } } } _____________________________________________________________________ Ingeniería Informática 138 Universidad de Valencia Apéndice D Manual de usuario de TempUSB D.1. Instalación del dispositivo. Al conectar el dispositivo TempUSB por primera vez, aparecerá el asistente para la instalación de nuevo hardware, que lo primero que hace es preguntar si se quiere conectar a Windows Update. Se marca la opción No y se pincha sobre Siguiente. En la siguiente pantalla se marcará la opción de "Instalar desde una lista o ubicación específica". Una vez hecho, se pincha sobre Siguiente para pasar a la próxima pantalla, donde se marca la opción de "Buscar el controlador más adecuado en estas ubicaciones". Se pincha sobre "Incluir esta ubicación en la búsqueda" y a continuación sobre Examinar, entonces se selecciona la carpeta TempUSB_Driver, y se le da a Aceptar y a Siguiente. En ese momento, comenzarán a copiarse los archivos necesarios en el ordenador. Una vez se termine de copiar, aparecerá una pantalla indicando que la instalación del driver está terminada. El led del dispositivo estará encendido, lo que indica que está listo para ser usado. Si todo ha ido bien, en el Administrador de Dispositivos debe aparecer algo así: _____________________________________________________________________ Ingeniería Informática 139 Universidad de Valencia El resto de veces que se conecte el dispositivo al ordenador, este será reconocido de forma automática con lo que no será necesario indicar ningún tipo de información. D.2. Instalación de la aplicación. Antes de indicar cómo instalar el software que permite la comunicación con el dispositivo y mostrar la temperatura en pantalla, se indicarán una serie de requisitos que debe cumplir el sistema para poder ejecutar la aplicación. Estos requisitos son: • Sistema operativo Windows 2000 o XP. • Microsoft Excel 2002. Para instalar la aplicación hay que ejecutar el programa instalar.exe que lo primero que hará será preguntar el idioma que se quiere utilizar durante la instalación. Una vez seleccionado el idioma, el siguiente paso es indicar la carpeta dónde se quiere que se instale el programa. Por defecto, la instalación se realiza en \Archivos de Programa\TempUSB. Si se quiere cambiar la ubicación, se hace clic en Examinar y una vez indicada la nueva carpeta, se pincha en Aceptar. El siguiente paso será indicar dónde se desea que se creen los accesos directos del programa en el Menú Inicio. Al igual que antes, si se quiere cambiar de carpeta, será necesario pinchar en Examinar. Por último, se pregunta si se desea crear un icono de acceso directo en el escritorio y, a continuación, empieza la instalación del programa. Una vez se han terminado de copiar los archivos, el asistente da la opción de instalar .NET Framework 2.0. Si ya se _____________________________________________________________________ Ingeniería Informática 140 Universidad de Valencia tiene instalado, se recomienda desactivar la opción, pero si no se tiene, es necesario instalarlo para poder ejecutar la aplicación. D.3. Utilización de la aplicación. La aplicación TempUSB tiene una ventana principal que muestra la temperatura y la actualiza por defecto cada segundo. Si se desea acceder a la ventana de estadísticas que muestra más datos y opciones, es necesario pinchar en el icono de la esquina inferior derecha. Al pinchar sobre el icono aparecerá la ventana TempUSB Estadísticas: _____________________________________________________________________ Ingeniería Informática 141 Universidad de Valencia En esta ventana se indican la fecha, la hora y las temperaturas máxima y mínima capturadas desde que el programa está en funcionamiento. El intervalo de tiempo que ha de transcurrir para realizar la captura de la temperatura es por defecto de 1 segundo pero se puede cambiar seleccionando entre los posibles valores indicados en la lista desplegable. Si se desea crear un fichero con los datos capturados sólo es necesario pinchar en el botón Capturar Temperatura e indicar la ubicación y el nombre del fichero donde se quieren guardar. Hecho esto, se creará el fichero con los datos, indicando además, las temperaturas máxima y mínima de ese intervalo de captura, la fecha y las horas de inicio y fin de la captura. Para finalizar la captura hay que pinchar sobre el botón Parar Captura. Si lo que se quiere es programar una captura para un día y una hora de comienzo y fin determinados habrá que pinchar el botón Programar Captura y aparecerá la siguiente ventana. _____________________________________________________________________ Ingeniería Informática 142 Universidad de Valencia Para indicar la ubicación y el nombre del fichero donde se guardarán los datos hay que pulsar el botón Examinar y seleccionar la carpeta deseada. Una vez introducidos todos los datos del formulario se pulsa el botón Aceptar y la programación ya estará realizada. En caso de no rellenar alguno de los campos o hacerlo de forma incorrecta, se mostrará una pantalla de error (como la mostrada a continuación) indicando el problema. Si ya existe una captura programada, al pulsar Programar Captura (en la ventana TempUSB Estadísticas) se pueden ver los datos y si se desea se puede deshabilitar la captura pulsando el botón Deshabilitar Captura. Hay que tener en cuenta que al almacenar los datos en un fichero, el intervalo de captura de dichos datos será el que estaba seleccionado antes de comenzar la captura y este no podrá ser modificado mientras esta dure. _____________________________________________________________________ Ingeniería Informática 143 Universidad de Valencia Para ver los datos almacenados en un fichero o las gráficas correspondientes a esos datos sólo habrá que pulsar sobre Ver Datos o Ver Gráfica e indicar el nombre del fichero y estos se mostrarán. _____________________________________________________________________ Ingeniería Informática 144 Universidad de Valencia Bibliografía [Aje00] A. Domingo Ajenjo. Dirección y Gestión de Proyectos. RA-MA, 1ª edición, 2000. [App] Características de FireWire. Disponible en Internet: http://www.apple.com/la/firewire/. [Axe99] Jan Axelson. USB complete. Lakeview Research, 1ª edición, 1999. [Bol06] J. Antonio Boluda. Notas de la asignatura “Periféricos”. Ingeniería Informática. Universidad de Valencia, 2005-2006. [CCS] Características del compilador de C CCS. Disponible en Internet: http://www.ccsinfo.com. [CWD02] [DDK] G. Martín, C.W. Dawson. El Proyecto Fin de Carrera en Ingeniería Informática. Una guía para el estudiante. Prentice-Hall, 1ª edición, 2002. Windows Driver Development Kit (DDK). Disponible en Internet: http://www.microsoft.com/whdc/devtools/ddk/default.mspx [Dev] Artículos, cursos y foro sobre programación en Visual C#. Disponible en internet: http://www.developer.com/net/csharp/. [Edu] Tarjeta EduMic. Disponible en Internet: http://tapec.uv.es/edumic/. [Far] Distribuidor de productos electrónicos Farnell InOne. Disponible en Internet: http://es.farnell.com. [MBP01] R.J. Martínez, J.A. Boluda, J.J. Pérez. Estructura de computadores y periféricos. RA-MA, 1ª edición, 2001. [Mic] Características de Microsoft Visual Basic, Visual C++ y Visual C#. Disponible en Internet: http://www.microsoft.com. _____________________________________________________________________ Ingeniería Informática 145 Universidad de Valencia [MPL] Entorno de desarrollo MPLAB de Microchip. Disponible en Internet: http://www.microchip.com. [Nat] Datasheet del sensor de temperatura LM50. Disponible en Internet: http://www.national.com. [Per05] J.J. Pérez. Notas de la asignatura “Sistemas Basados en Microprocesador”. Ingeniería Informática. Universidad de Valencia, 2004-2005. [PIC] Datasheet del microcontrolador PIC18F2550. Disponible en Internet: http://ww1.microchip.com/downloads/en/DeviceDoc/39632c.pdf [Usb] USB Implementers Forum, Inc. Disponible en Internet: en Internet: http://www.usb.org [USB11] Especificación de USB 1.1. http://www.usb.org/developers/docs/. Disponible Nota: Las referencias electrónicas han sido revisadas con fecha 2 - Septiembre - 2006. _____________________________________________________________________ Ingeniería Informática 146 Universidad de Valencia