Desarrollo de una estación meteorológica USB

Anuncio
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
Descargar