You are on page 1of 110

INSTITUTO POLITECNICO NACIONAL

UNIDAD PROFESIONAL INTERDISCIPLINARIA EN INGENIERA


Y TECNOLOGAS AVANZADAS

Reporte Global de Servicio Social

Prestador
Salas Albarrn Oscar

Carrera
Ingeniera Mecatrnica

No. De Boleta
2005640114

Nombre del programa


Estudio y desarrollo de aplicaciones basadas instrumentacin virtual con LabVIEW

Responsable de Servicio Social


Ing. ngel Preteln Ricardez


ndice
1. Introduccin............................................................................................................................ 1
2. Objetivo .................................................................................................................................. 3
3. Qu es la instrumentacin virtual? [3].................................................................................. 4
3.1 Elementos de un Instrumento Virtual................................................................................... 4
4. Introduccin a LabVIEW [4], [5] ........................................................................................... 6
4.1 Creacin y ejecucin de un instrumento virtual en LabVIEW [6], [7], [8] ........................ 10
4.2 Creacin de SubVIs [9] ..................................................................................................... 12
5. Protocolo USB...................................................................................................................... 14
5.1 Versiones del protocolo [13] .............................................................................................. 15
5.2 Tipos de transferencia [12] ................................................................................................ 17
5.3 Enumeracin [14]............................................................................................................... 18
5.4 El foro de implementadores USB ...................................................................................... 18
6. Familia de microcontroladores PIC18FXX5X....................................................................... 19
6.1 El controlador USB [14] .................................................................................................... 19
6.2 Microcontrolador PIC18F4550 ........................................................................................... 20
7. Bibliotecas dll [16] ............................................................................................................... 22
7.1 Estructura de una DLL de 32 bits [16] ............................................................................... 22
7.2 LabVIEW y las bibliotecas de enlace dinmico [17]........................................................ 23
8. Programacin del PIC18F4550 ............................................................................................ 30
8.1 Firmware ............................................................................................................................ 30
8.2 Unidad de Control .............................................................................................................. 40
9. Programacin del Instrumento Virtual (VI) ........................................................................... 43
9.1 OpenUSB........................................................................................................................... 44
9.2 WriteUSB ........................................................................................................................... 57
9.3 ReadUSB ........................................................................................................................... 62
9.4 Close USB ......................................................................................................................... 67
9.5 Ejemplo de uso ................................................................................................................. 72
10. Trabajo futuro ................................................................................................................... 74
11. Referencias ...................................................................................................................... 75
12. ANEXO A. Terminologa USB [22] ................................................................................... 77
13. ANEXO B. Uso del PIC C Compiler ................................................................................. 78

I
14. ANEXO C. Instalacin del MCHPFSUSB Framework v2.3 .............................................. 86
15. ANEXO D. Cdigo en lenguaje C utilizado en el PIC ....................................................... 91
16. ANEXO E. Diagramas elctricos ...................................................................................... 99
15.1 Lista de Materiales........................................................................................................ 100
17. ANEXO F. Instalacin de la tarjeta de adquisicin ......................................................... 101

II
1. Introduccin

Durante los ltimos aos, los desarrollos tecnolgicos han tenido un gran avance, poniendo
a disposicin de los consumidores equipos de cmputo con grandes capacidades de
procesamiento, as como una gran capacidad de almacenaje de informacin y, por supuesto,
velocidades de transferencia de datos cada vez ms altas.

Desde el punto de vista de la ingeniera, las mediciones y el anlisis de datos son


actividades de suma importancia, sin embargo existe una limitacin al momento de efectuar
cualquier medicin: las caractersticas del instrumento de medicin, las cuales limitan el tipo y
caractersticas de las magnitudes fsicas o datos que se desean medir.

De manera paralela al ya mencionado desarrollo de los equipos de cmputo, se busc la


manera de integrar las altas capacidades de procesamiento y almacenaje con las actividades
propias de la ingeniera, surgiendo de esta forma la Instrumentacin Virtual. Esta nueva forma
de realizar mediciones, ha terminado con la rigidez de los equipos de medicin en los cuales
era necesario conformarse con las caractersticas presentes de fbrica, para dar lugar a
instrumentos al gusto del usuario. Una caracterstica sobresaliente de esta nueva generacin de
instrumentos es que son capaces de evolucionar de acuerdo a las necesidades de medicin del
usuario con poco o nulo desembolso econmico; Siendo la mayor inversin la hecha para
adquirir las herramientas de desarrollo de los instrumentos virtuales. Lo que es ms, los
instrumentos virtuales son capaces de almacenar y analizar los datos dentro de s mismos [1].

Una de las herramientas para el desarrollo de estos instrumentos virtuales, es LabVIEW, el


cual es un software desarrollado por National Instruments.

En el presente documento se muestra el desarrollo de un instrumento virtual capaz de


realizar la adquisicin y envo de datos entre una PC y un microcontrolador, a travs del puerto
USB, el cual se realiz dentro del programa de servicio social titulado Estudio y desarrollo de
aplicaciones basadas instrumentacin virtual con LabVIEW.

Se decidi realizar el proyecto utilizando el puerto USB, por sus grandes prestaciones y
cualidades, algunas de las cuales se pueden observar en las siguientes tablas.

Tabla No. 1. Configuracin de diferentes tipos de protocolos de transmisin de datos [2].


BUS Configuracin1 Notas
Ethernet / LXI Bueno Configuracin de la IP y subred
Bsqueda en el bus por el
GPIB Mejor
instrumento
Necesidad de apagar el equipo
PCI Mejor
(PC) para detectar el instrumento

1
La evaluacin se refiere a la facilidad con la que se configura el dispositivo para su uso con el BUS
seleccionado.

1
Necesidad de apagar el equipo
PCI Express Mejor
(PC) para detectar el instrumento
Autodeteccin y autoconfiguracin
USB La mejor
del instrumento

Tabla No. 2.Comparacin del ancho de banda para distintos protocolos[2].


Ancho de banda
BUS Distribucin
ideal (MB/s)
1.8 (488.1)
GPIB Compartido
8 (HS488)
USB 60 (Hi-Speed USB) Compartido
12.5 (Fast)
Ethernet / LXI Compartido
125 (Gigabit)
PCI 132 Compartido
250 (x1) Dedicado por dispositivo y
PCI Express
4000 (x16) direccin

Como puede apreciarse, las caractersticas del protocolo USB, lo hacen un excelente
candidato para efectuar la comunicacin y transmisin de datos de un instrumento virtual, que
es el objeto del presente proyecto. Para ello, se presenta en primer lugar el objetivo del
proyecto, para enseguida mostrar una breve introduccin al software LabVIEW, al puerto USB
y a las bibliotecas de enlace dinmico, las cuales son la parte central del proyecto. Una vez
introducidos estos conceptos, se documenta la realizacin del instrumento virtual, as como la
programacin del firmware del microcontrolador y el programa a ejecutar por parte del mismo.
Finalmente, se pueden encontrar los anexos del proyecto, que contienen informacin
importante sobre el uso de las herramientas utilizadas, as como cdigos y diagramas
referentes al mismo.

2
2. Objetivo

El objetivo que se persigue con el programa de Servicio Social titulado Estudio y desarrollo
de aplicaciones basadas instrumentacin virtual con LabVIEW es Estudiar y desarrollar
aplicaciones basadas en instrumentacin virtual y que tengan una relacin directa con las
carreras cursadas en la UPIITA del IPN para poder sentar las bases de una lnea de
investigacin.

En el caso del presente proyecto, se realiz un estudio del software LabVIEW de National
Instruments como una herramienta para el desarrollo de instrumentos virtuales, para
posteriormente desarrollar un instrumento capaz de realizar una comunicacin de tipo
bidireccional entre una computadora y un microcontrolador (PIC). Dicha comunicacin se
realizar empleando el puerto USB y la informacin se controlar a travs de LabVIEW.

3
3. Queslainstrumentacinvirtual?[3]

El concepto de instrumentacin virtual nace a partir del uso del computador personal (PC)
como "instrumento" de medicin de magnitudes o seales tales como temperatura, presin,
caudal, etc.

Es decir, el PC comienza a ser utilizado para realizar mediciones de fenmenos fsicos


representados en seales de corriente (Ej. 4-20mA) y/o voltaje (Ej. (0-5Vdc). Sin embargo, el
concepto de "instrumentacin virtual" va ms all de la simple medicin de corriente o voltaje,
sino que tambin involucra el procesamiento, anlisis, almacenamiento, distribucin y
despliegue de los datos e informacin relacionados con la medicin de una o varias seales
especficas. Es decir, el instrumento virtual no se conforma con la adquisicin de la seal, sino
que tambin involucra la interfaz hombre-mquina, las funciones de anlisis y procesamiento de
seales, las rutinas de almacenamiento de datos y la comunicacin con otros equipos.

Veamos un ejemplo; el osciloscopio tradicional tiene una funcionalidad ya predefinida desde


la fbrica donde lo disean, producen y ensamblan. Esto implica que la funcionalidad de este
tipo de instrumento es definida por el fabricante del equipo, y no por el usuario mismo. El
trmino "virtual" nace precisamente a partir del hecho de que cuando se utiliza el PC como
"instrumento" es el usuario mismo quin, a travs del software, define su funcionalidad y
"apariencia" y por ello decimos que "virtualizamos" el instrumento, ya que su funcionalidad
puede ser definida una y otra vez por el usuario y no por el fabricante.

El instrumento virtual es definido entonces como una capa de software y hardware que se le
agrega a un PC en tal forma que permite a los usuarios interactuar con la computadora como si
estuviesen utilizando su propio instrumento electrnico "hecho a la medida".

3.1ElementosdeunInstrumentoVirtual
Para construir un instrumento virtual, se requiere un PC, una tarjeta de adquisicin de datos
con acondicionamiento de seales (PCMCIA, ISA, XT, PCI, etc.) y el software apropiado, estos
tres son los elementos clave en la conformacin de un instrumento virtual, teniendo un chasis
de acondicionamiento de seales como elemento opcional.

Se dice que el "acondicionamiento de seales" es opcional, porque dependiendo de cada


seal y/o aplicacin, se puede o no requerir amplificacin, atenuacin, filtraje, aislamiento, etc.
de cada seal. Si la seal est en el rango de los +/- 5Vdc y no se requiere de aislamiento o
filtraje, la misma puede ser conectada directamente a la tarjeta de adquisicin de datos.

En el instrumento virtual, el software es la clave del sistema, a diferencia del instrumento


tradicional, donde la clave es el hardware. Con el sistema indicado anteriormente, podramos
construir un osciloscopio "personalizado", con la interfaz grfica que uno desee, agregndole
inclusive ms funcionalidad que cualquier instrumento comercial. Sin embargo, este mismo
sistema puede tambin ser utilizado en la medicin de temperatura, o en el control de arranque
y paro de un motor. Es all donde radica uno de los principales beneficios del instrumento
4
virtual, su flexibilidad. Este instrumento virtual no slo permitira visualizar la onda, sino que a la
vez permite graficar su espectro de potencia en forma simultnea. Podra hacer algo as con
un instrumento convencional?

Para finalizar, la siguiente tabla nos indica algunas de las principales diferencias entre el
instrumento convencional o tradicional, y el instrumento virtual:

Tabla No. 3. Tabla comparativa instrumento virtual vs tradicional [3].


InstrumentoTradicional InstrumentoVirtual
Definidoporelfabricante Definidoporelusuario
Funcionalidad especfica, con Funcionalidad ilimitada, orientado a
conectividadlimitada. aplicaciones,conectividadamplia.
Elhardwareeslaclave. Elsoftwareeslaclave

Altocosto/funcin Bajo costo/funcin, variedad de


funciones,reusable.
Arquitectura"cerrada" Arquitectura"abierta".
Lenta incorporacin de nuevas Rpida incorporacin de nuevas
tecnologa. tecnologas,graciasalaplataformaPC.
Bajaseconomasdeescala,altocostode Altaseconomasdeescala,bajoscostos
mantenimiento. demantenimiento.

La flexibilidad, el bajo costo de mantenimiento, la reusabilidad, la personalizacin de cada


instrumento, la rpida incorporacin de nuevas tecnologas, el bajo costo por funcin, el bajo
costo por canal, etc. son algunos de los muchos beneficios que ofrece la instrumentacin
virtual.

La instrumentacin virtual puede tambin ser implementada en equipos mviles (laptops),


equipos distribuidos en campo (RS-485), equipos a distancia (conectados va radio, Internet,
etc.), o equipos industriales (NEMA 4X, etc.). Existe una tarjeta de adquisicin de datos para
casi cualquier bus o canal de comunicacin en PC (ISA, PCI, USB, serial RS-232/485, paralelo
EPP, PCMCIA, CompactPCI, PCI, etc.), y existe un driver para casi cualquier sistema operativo
(WIN 3.1/95/NT, DOS, Unix, MAC OS, etc.), lo cual permite extender el uso de la
instrumentacin virtual a un mayor nmero de aplicaciones.

5
4. IntroduccinaLabVIEW[4],[5]

LabVIEW, acrnimo de Laboratory Virtual Instrument Engineering Workbench, es un


lenguaje de programacin grfico que emplea iconos en lugar de lneas de texto para la
creacin de aplicaciones, el cual ha sido desarrollado por National Instruments. A
comparacin de los programas basados en texto, donde las instrucciones determinan la
ejecucin del programa, en LabVIEW el flujo de datos determina la ejecucin del programa.

Los programas desarrollados en LabVIEW son llamados Instrumentos Virtuales (o VIs por
sus siglas en ingls). Su apariencia y operacin puede emular el comportamiento de un
instrumento fsico como un osciloscopio o un multmetro.

Un VI consta de tres componentes:

+ Panel Frontal: Sirve como interfaz con el usuario


+ Diagrama de Bloques: Contiene el cdigo grfico que define la funcionalidad del VI.
+ Paleta de conectores e iconos: Identifica la interfaz del VI y permite utilizarlo y conectarlo
a otros VIs

Panel Frontal
Es la interfaz del usuario con el instrumento virtual. La siguiente figura muestra un ejemplo
de este panel:

Figura 1. Aspecto del panel Frontal de LabVIEW.

6
Se puede apreciar el aspecto del panel frontal, junto con la paleta de controles, que sirve
para colocar los elementos que el usuario podr manipular desde el panel frontal. Este panel
puede contener dos tipos de iconos: Controles, como perillas, botones, interruptores, que
permiten al usuario introducir informacin al programa e indicadores, tales como LEDs,
grficas, barras, que permiten mostrar informacin al usuario del VI.

La paleta de controles

Figura 2. Paleta de controles.

Permite agregar al panel frontal los diferentes controles, indicadores o elementos decorativos
necesarios para la realizacin y personalizacin del instrumento virtual. Aparece nicamente en
el panel frontal.

Para abrirla, basta con dar clic en el men View y posteriormente seleccionar la opcin
Controls Palette.

Diagrama de Bloques
Una vez que el usuario ha terminado de construir el panel frontal, se aade el cdigo
necesario para el correcto funcionamiento a travs de este panel. El cul tiene el aspecto
mostrado en la siguiente figura:

7
Figura 3. Aspecto del diagrama de bloques de LabVIEW.

En la figura anterior tambin puede verse la paleta de funciones, mediante la cual se pueden
aadir diferentes funciones, desde matemticas hasta de procesamiento de seales al
instrumento virtual (VI). Para ello, se conectan los controles por medio de cables, utilizando la
herramienta carrete.

Paleta de funciones

Figura 4. Paleta de funciones.

Sirve para agregar las funciones o cdigo al programa, el cual determinar el funcionamiento
del instrumento virtual. Esta paleta nicamente aparece al trabajar en el diagrama de bloques.
8
Para abrir la paleta de funciones basta con dar clic en el men View, y seleccionar la opcin
Functions Palette.

Paleta de herramientas

Figura 5. Paleta de herramientas.

Aparece tanto en el diagrama de bloques como en el panel frontal. Contiene las


herramientas necesarias para realizar el cableado de los elementos (iconos), as como para
seleccionarlos, agregar texto o cambiar los colores de los mismos.

Para abrirla se da clic en el men View y se selecciona la opcin Tools Palette.

Los comandos de la paleta de herramientas son los siguientes:

Herramienta de operacin. Nos permite modificar los valores o seleccionar texto de un


control.

Herramienta de posicionamiento y redimensin. Nos permite seleccionar los objetos


arrastrarlos a una posicin deseada y modificar sus dimensiones.

Herramienta de etiquetado. Permite editar textos y crear etiquetas libres. La


herramienta de etiquetado se convierte en cursor al crear etiquetas libres.

Herramienta de cableado. Enlaza los objetos del panel, mediante cableado.

Herramienta de men. Despliega el men rpido de opciones de cada objeto.

Herramienta de desplazamiento. Mueve la pantalla del panel en el que se encuentra


trabajando.

Herramienta de punto de paro. Establece un punto de paro de ejecucin para nuestro


programa.
9
Herramienta de prueba. Muestra el flujo de nuestro programa.

Herramienta para copia de color. Coloca el color seleccionado en la pantalla en la


paleta de color actual.

Herramienta para colorear. Permite cambiar el color de los elementos presentes


tanto en el panel frontal, como en el diagrama de bloques, as como el color de fondo.

4.1CreacinyejecucindeuninstrumentovirtualenLabVIEW[6],[7],[8]
Para la creacin de los instrumentos virtuales en el entorno grfico de programacin ofrecido
por LabVIEW, se requiere la colocacin de los elementos que permitirn la entrada y la salida
de datos, entendidos estos como todos aquellos elementos que nos permitirn ingresar valores
a nuestro instrumentos, as como los que nos permitirn visualizar el resultado de cualquier
operacin.

Para ello, se emplea la paleta de controles dentro del panel frontal y se colocan los que se
estimen necesarios. Cada vez que se coloca un nuevo objeto en el panel frontal, se coloca
tambin y de forma automtica una nueva terminal en el diagrama de bloques. Cada bloque
colocado tanto en el diagrama de bloques como en el panel frontal proporciona informacin
sobre el tipo de dato que maneja a travs de su color, pudiendo ser naranja, verde, azul o algn
otro.

Una vez que se han colocado todos los controles e indicadores necesarios en el panel
frontal, puede procederse a realizar la programacin del instrumento desde el diagrama de
bloques utilizando la paleta de funciones. Esta paleta nos permitir colocar funciones de
diferentes tipos, pudiendo ser matemticas, booleanas, arreglo o estructuras conocidas en
lenguajes de programacin basados en texto como las sentencias for, while, etc. LabVIEW
permite incluso el uso de funciones basadas en lenguaje C y cdigo de MATLAB. Cabe
mencionar que es posible diferenciar por su aspecto los controles de los indicadores. Los
controles tienen una flecha en el lado derecho y tienen un borde grueso. Por otro lado, los
indicadores tienen una flecha en el lado izquierdo y un borde fino.

Despus de que se han colocado las funciones adecuadas en el diagrama de bloques, se


unen stas con los controles e indicadores previamente colocados haciendo uso de la
herramienta de cableado. Es recomendable que al momento de realizar el cableado, se tome en
cuenta el color de las terminales, de modo que se unan terminales del mismo tipo, por ejemplo,
terminales naranjas (de tipo doble) con terminales naranjas. Existen ciertas reglas lgicas al
momento de efectuar el cableado: Cada cable debe tener una (pero solo una) fuente (o control),
y cada cable puede tener varios destinos (o indicadores).

10
En las siguientes imgenes se muestra un ejemplo de instrumento virtual, en el cual se
toman datos de A y B y se pasan los valores a una funcin de adicin y una funcin de resta.
Los resultados de dichas operaciones se muestran en los indicadores apropiados.

Figura 6.Panel Frontal para realizar la suma y resta de A y B.

Figura 7. Diagrama de bloques para realizar la suma y resta de A y B.

Cuando ya se ha terminado de realizar el cableado de los diversos componentes del


instrumento virtual, podemos ejecutarlo, para ello se utiliza la barra de herramientas de estado,
presente tanto en el panel frontal como en el diagrama de bloques y de la cual a continuacin
se explicaran sus principales componentes.

Botn de ejecucin (Run)

Botn de ejecucin continua (Continuous Run)

Cancelacin de ejecucin (Abort Execution)

Botn de pausa

Botn de ejecucin resaltada (disponible solo en el diagrama de bloques)

11
El resto de los botones de esta barra sirve para alinear, distribuir y dar tamao a los
elementos colocados, as como configurar el tipo y tamao de fuente de las etiquetas utilizadas
tanto en el panel frontal como en el diagrama de bloques, lo cual nos permitir dar un mejor
aspecto al instrumento.

Para comprobar el funcionamiento del VI bastar con oprimir el botn de ejecucin, en caso
de que exista algn error, se mostrar una ventana con una pequea descripcin del mismo la
cual permitir corregirlo.

En LabVIEW se sigue un modelo de flujo de datos al momento de ejecutar los VIs. Un


nodo o funcin del diagrama de bloques se ejecuta cuando todas sus entradas estn
disponibles. Cuando se completa la ejecucin en dicho nodo, suministra datos a sus terminales
de salida, los cuales estarn disponibles en la entrada correspondiente si la hubiera.

4.2CreacindeSubVIs[9]
LabVIEW es un programa muy verstil que nos permite crear instrumentos virtuales que
puedan ser llamados desde otros instrumentos, los cuales son llamados subVIs. A estos
subVIs es posible definirles la configuracin de sus terminales y crearles un icono
personalizado, para ello basta con hacer doble click sobre el icono ubicado en la parte superior
derecha del panel frontal, para poder ver el editor de iconos.

Figura 8. Ventana del Editor de conos

En esta ventana, podemos cambiar el aspecto del icono que distinguir a los subVIs
creados. Pueden realizarse creaciones propias o importar imgenes desde cualquier archivo de
imagen.
12
Para editar las terminales del subVI, es necesario dar click con el botn derecho del mouse y
seleccionar la opcin Show connector con ello el icono se transformar en un patrn, llamado
Connector Pane, como el mostrado a continuacin:

En el caso de que la configuracin del conector no satisfaga los requerimientos del VI, es
posible cambiarla, para ello se da un click derecho sobre el patrn mostrado y del men
mostrado se selecciona la opcin Patterns.

Figura 9. Patrones disponibles para el conector del subVI

Cabe destacar que el nmero de terminales necesarias, corresponde al nmero total de


controles e indicadores presentes en el subVI. Para finalizar la construccin del subVI, se
conectan los controles y los indicadores al patrn de terminales seleccionado a travs de la
herramienta de cableado.

Lo mostrado en esta Introduccin a LabVIEW son nicamente los conceptos bsicos que
se estiman necesarios para la realizacin del presente proyecto, sin embargo se recomienda
consultar la ayuda y ejemplos proporcionados con el software para poder profundizar en el
manejo del mismo.

13
5. ProtocoloUSB

El Bus Serial Universal (USB, por sus siglas en ingls) fue desarrollado y estandarizado por
un grupo de siete empresas dedicadas a la manufactura de computadoras y perifricos (IBM,
Intel, Northern, Telecom, Compaq, Microsoft, Digital Equipment y Nec) en 1995 [10]. La idea era
tomar todo lo relacionado al puerto y protocolo serial para mejorarlo con la tecnologa del siglo
XXI; buscando crear una tecnologa que permitiera una actividad de bus de baja y alta
velocidad de transmisin de datos, proporcionando un protocolo robusto, configuracin
automtica de dispositivos y un bus serial al que fuera sencillo conectarse [11].

El USB es un bus punto a punto: dado que el lugar de partida es el host (PC o hub), el
destino es un perifrico u otro hub. No hay ms que un nico host (PC) en una arquitectura
USB. Cada host soporta solo un bus, cada conector en el bus representa un puerto USB por lo
tanto sobre el bus puede haber varios conectores, pero solo existe una ruta y solo un dispositivo
puede transmitir informacin a un tiempo.

Los perifricos comparten un mismo bus. El protocolo se basa en el llamado paso de testigo
(token). La computadora (o host) proporciona el testigo al perifrico seleccionado y
seguidamente, ste le devuelve el testigo en su respuesta.

El desarrollo del protocolo USB representa un gran aumento en las velocidades de


transmisin de datos, as como la instalacin de los dispositivos en caliente, es decir, con este
protocolo no se requiere de reiniciar los equipos cada vez que se conecta un dispositivo, lo cual
lo hace ms prctico y sencillo de utilizar comparado con los protocolos de conexiones de tipo
serial (DB-9) o paralelo (DB-25), por lo que en la actualidad estos puertos ya no se encuentran
presentes en equipos de computo modernos.

A continuacin se describen los aspectos esenciales de este protocolo.

A nivel elctrico, el cable USB transfiere la seal y la alimentacin sobre 4 hilos. En las
normas que regulan la versin 1.1 y 2.0 se distinguen dos tipos de conectores [12]:

Tipo A, de forma rectangular es usado en dispositivos que no requieren demasiado ancho


de banda (como teclado, mouse, memorias USB, entre otros.).

Tipo B, poseen una forma cuadrada y se utilizan principalmente para dispositivos de alta
velocidad (como discos duros externos, quemadores externos, entre otros).

Conector Tipo B Conector Tipo A

14
La distribucin de los cables en los conectores es de la siguiente forma [19]:

Tabla No. 4. Distribucin de los pines en los conectores USB


No. De Pin Nombre Descripcin
Fuente de alimentacin
1 VBUS
+5Vdc mx 100mA
2 D- Data-
3 D+ Data+
4 GND Conexin a tierra (Ground)

El cable VBUS puede proporcionar una tensin nominal de 5 V de corriente directa para
suministrarla al dispositivo, sin embargo depender de ste ltimo el consumo, pudiendo ser
auto-alimentado (self powered) en caso de que el consumo de energa lo realice a travs del
puerto o con alimentacin propia (como en el caso de la mayora de las impresoras), omitiendo
el uso de la alimentacin proporcionada por el puerto.

A nivel de seal: Los cables utilizados en la transmisin de los datos (D+ y D-) constituyen un
par trenzado con una impedancia caracterstica de 90 a fin de reducir las interferencias y el
ruido. Se debe vigilar que la extensin de los cables transmisores de datos no supere los 5 m.

Las direcciones de los diferentes dispositivos conectados a travs de un host y diversos


hubs estn cifradas en 7 bits, por lo que 128 dispositivos (27) pueden estar conectados
simultneamente a un puerto de este tipo. En realidad, es recomendable reducir esta cantidad a
127 porque la direccin 0 es una direccin reservada.

Por otra parte, es posible conectar hasta 5 concentradores o hubs, por lo que, tomando en
cuenta la longitud mxima de 5 metros del cable entre dos dispositivos, es posible crear una
cadena de transmisin de datos de hasta 25 metros de longitud.

5.1Versionesdelprotocolo[13]
Desde el surgimiento del USB en el ao de 1995, se han desarrollado diferentes versiones
del protocolo, las cuales se muestran a continuacin.

- USB 1.0/1.1: Ofrece 2 modos de comunicacin; de baja velocidad diseado para


perifricos directos (teclados, mouse, etc) a una velocidad de 1.5 Mbps y la segunda,
de alta velocidad, diseada para otros tipos de perifricos (cmaras web, cmaras
digitales, etc) a una velocidad de 12Mbps. Los dispositivos fabricados con apego a
este protocolo portan el siguiente logotipo:

15
- USB 2.0: Se mejoro desde el protocolo anterior en su interfaz con respecto a la
transferencia de datos, ya que llego a la cifra de 480Mbps, y fue diseada para grandes
transferencia de datos hacia los dispositivos (discos duros, pendrives, etc.) Su logotipo
es el siguiente

La compatibilidad entre USB 1.0, 1.1 y 2.0 est garantizada. Sin embargo, el uso de
un dispositivo USB 2.0 en un puerto USB de baja velocidad (1.0 1.1) limitar la
velocidad a un mximo de 12 Mbps. Adems, es probable que el sistema operativo
muestre un mensaje que indique que la velocidad ser restringida.

- WUSB (Wireless USB): Es una extensin del USB 2.0 con las capacidades de una
transferencia inalmbrica, con una velocidad de 480Mbps al estar a menos de 3 metros
de distancia y de 100 Mbps al estar a menos de 100 metros. Su logotipo es el siguiente.

- USB On-The-Go: Siendo una mejora de la interfaz USB, permite elegir el estado de
cada puerto USB, y es posible transferir los datos desde un puerto USB actuando como
servidor hasta otro sin la necesidad de un ordenador, y tambin es posible cambiar en
cualquier momento el perfil de servidor a dispositivo o viceversa. Su logotipo es el
siguiente

- USB 3.0: Aun en fase de prueba. Los desarrolladores de este protocolo prevn innovar
al incluir la fibra ptica, lo cual elevara hasta 4.8 Gbps la tasa de transferencia, y de
manera inalmbrica en forma de Wireless USB se planea lograr una transferencia de
hasta 1 Gbps.

16
5.2Tiposdetransferencia[12]
El enlace virtual (pipe) puede ser de cuatro tipos:

- Control: Modo utilizado para realizar configuraciones; existe siempre sobre el Punto
Terminal 0 (EndPoint 0). Todos los dispositivos USB deben soportar este tipo de
transferencia. Los datos de control sirven para configurar el perifrico en el momento de
conectarse al USB. Algunos drivers especficos pueden utilizar este enlace para transmitir
su propia informacin de control.

Este enlace no tiene prdida de datos, puesto que los dispositivos de deteccin de
recuperacin de errores estn activos a nivel USB.

- Bulk (Masiva): Este modo se utiliza para la transmisin de importantes cantidades de


informacin. Como el tipo control, este enlace no tiene prdida de datos. Este tipo de
transferencia es til cuando la razn de transferencia no es crtica como por ejemplo, el
envo de un archivo a imprimir o la recepcin de datos desde un escner.

En estas aplicaciones, la transferencia es rpida, pero puede espera si fuera necesario.


Solo los dispositivos de media y alta velocidad utilizan este tipo de transferencia.

- Interrupt (Por interrupcin): modo utilizado para transmisiones de pequeos paquetes,


rpidos, orientados a percepciones humanas, como puede ser el ratn.

Este tipo de transferencia es para dispositivos que deben recibir atencin


peridicamente y que no requieren de alta velocidad en la transmisin de datos. El tiempo
de respuesta puede ser inferior al valor especificado por la interfaz.

- Isochronous o Flujo en tiempo real: modo utilizado para la transmisin de audio o video
comprimido. Este tipo de transmisin funciona en tiempo real. Este es el modo de mayor
prioridad.

La transmisin de la voz es un ejemplo de esta aplicacin. Si sta no se transmite


correctamente, pueden llegar a orse parsitos (glich) y la aplicacin puede no procesar de
forma correcta la informacin.

17
5.3Enumeracin[14]
Antes de cualquier aplicacin se pueda comunicar con un dispositivo a travs del puerto
USB, el host necesita aprender sobre el dispositivo para comunicarse de la forma adecuada.
Para poder llevar a cabo estas tareas se requiere de un intercambio de informacin entre el
dispositivo y el host. Este proceso incluye la asignacin de una direccin al dispositivo, leer los
descriptores del dispositivo, asignar y ejecutar el driver adecuado y seleccionar la configuracin
adecuada que especifique los requerimientos de energa del dispositivo, los endpoints y
algunas otras caractersticas.

Para que se ejecute la enumeracin, cuando el host detecta que se ha conectado un nuevo
dispositivo enva informacin solicitando la informacin antes mencionada, el dispositivo
entonces enva la respuesta a los requerimientos solicitados para establecer la comunicacin.
Acto seguido se establecen las tuberas (pipes) para poder dar el canal adecuado a la
informacin, en este momento el dispositivo se encuentra listo para efectuar la trasmisin de
datos.

Desde la perspectiva del usuario, la enumeracin es un proceso completamente invisible y


automtico excepto tal vez por la aparicin de mensajes que anuncien la deteccin de un nuevo
dispositivo y cuando la configuracin ha sido exitosa. En algunas ocasiones durante el primer
uso, el usuario debe seleccionar el driver o especificar la ubicacin donde el host debe localizar
los archivos.

5.4ElforodeimplementadoresUSB
Uno de los datos que debe conocer el host para poder enumerar correctamente a los
dispositivos es el fabricante del dispositivo y el tipo o modelo de dispositivo conectado. Todos
los dispositivos con conexin va puerto USB cuentan con estos nmeros, que se denominan
Vendor ID (VID), y Product ID (PID), ambos son nmeros hexadecimales, el primero de ellos
define el fabricante del dispositivo y el segundo es exclusivo del modelo de dispositivo. Esto
quiere decir que, por ejemplo, una cmara fabricada por cierta marca tendr un determinado
Product ID, mientras que una impresora fabricada por la misma compaa tendr un Product ID
distinto, aunque ambos dispositivos tendrn el mismo Vendor ID.
Los nmeros que identifican a cada productor (VID) son asignados por el foro de
implementadores USB (USB-IF2), a los productores que forman parte de este foro, o a cualquier
persona que cubra los costos administrativos establecidos. Cada productor que cuenta con su
VID puede asignar a los dispositivos que produce un nico PID.
El objetivo de asignar los VID y PID es poder listar todos los nmeros de identificacin de los
dispositivos en un archivo para que los sistemas operativos puedan identificar y enumerar
adecuadamente los diversos dispositivos que se conecten en el host que ejecuta dicho sistema
operativo.

2
Puede consultarse su pgina web en http://www.usb.org

18
6. FamiliademicrocontroladoresPIC18FXX5X

Cuando se desarrolla una aplicacin capaz de transmitir datos va puerto USB, debe
considerarse la presencia de un controlador USB, dicho controlador debe detectar y responder
a las peticiones realizadas por el puerto, adems de proporcionar datos por el bus y recibirlos.
Un microcontrolador o un circuito integrado de aplicacin especfica (ASIC, por sus siglas en
ingls) cumplen perfectamente con este cometido.

En el mercado existen una gran variedad de chips capaces de realizar estas acciones. Las
diferencias principales estriban en la cantidad de lneas de cdigo necesarias para crear el
firmware del dispositivo. El firmware, se refiere a la informacin contenida en el dispositivo que
permite responder a las peticiones de informacin del host referente al VID, PID, velocidad,
versin del protocolo, etc. Adems de esto, debe considerarse la posibilidad de que el chip
contenga una unidad de procesamiento (CPU) o por el contrario, que si se desea tener acceso
a una unidad de este tipo, sta tenga que conectarse de forma externa al chip.

6.1ElcontroladorUSB[14]

Un controlador USB tpico contiene un transmisorreceptor USB, una interfaz serial, buffers,
registros de configuracin, estado y control para la comunicacin.

El transceptor

Proporciona una interfaz en hardware entre el conector USB del dispositivo y el circuito que
controla la comunicacin USB. El transceptor se encuentra tpicamente en el chip, pero algunos
controladores permiten la conexin hacia un transceptor externo.

Interfaz Serial

Los circuitos que enlazan el transceptor y el host, forman una unidad llamada interfaz serial.
Esta interfaz serial es la encargada de manejar las transacciones de envo y recepcin de
datos, sin interpretarlos o utilizarlos, solamente enva cualquier dato disponible y almacena
cualquier dato entrante en las localidades disponibles.

Buffers

Los controladores USB utilizan los buffers para almacenar los datos conforme se van
recibiendo y para almacenar de igual manera los datos que se encuentran listos para ser

19
enviados. Para retener los datos a transmitir o recibidos, la mayora de los buffers cuentan con
una estructura de tipo FIFO (Primero en entrar, primero en salir)

Informacin de configuracin, estado y control

Los chips controladores de USB, tienen registros que son utilizados para almacenar
informacin referente al tipo de endpoint utilizados, el numero de bytes a recibir, el numero de
bytes a enviar, el estado del dispositivo y en general, cualquier informacin sobre cmo se
deber de utilizar la interfaz para la transmisin y recepcin de datos. Debido a las diferencias
de configuracin entre chips o familias de chips, el firmware para el controlador debe ser creado
especficamente para cada uno de ellos, ya sea para chip o bien para una familia de stos.

Reloj

Las comunicaciones USB requieren de una fuente de tiempos, tpicamente esta fuente es un
cristal oscilador, aunque en los dispositivos de baja velocidad puede utilizarse un resonador
cermico.

Componentes Adicionales

Adems de los componentes de la interfaz USB antes descritos, muchos dispositivos


incluyen una unidad de procesamiento, memoria de programa y de datos, interfaces de entrada
y salida as como caractersticas adicionales, por ejemplo temporizadores, contadores, etc.

6.2MicrocontroladorPIC18F4550
Todas las caractersticas previamente descritas podemos encontrarlas en una familia de
chips, se trata de la familia de microcontroladores PIC18FXX5X de Microchip Technology, la
cual incorpora un controlador USB capaz de trabajar a baja y alta velocidad. Para el desarrollo
del presente proyecto, se selecciono el microcontrolador PIC18F4550, cuyas caractersticas
principales se enlistan a continuacin:

- Memoria Flash programable de 32 Kbytes.


- 2048 bytes de memoria RAM
- 256 bytes de memoria EEPROM para datos
- 35 pines de entrada/salida programables distribuidos en cinco puertos (A,B,C,D,E)
- Convertidor Analgico-Digital de 10 bits.

20
La siguiente figura muestra la disposicin de las terminales del microcontrolador.

Figura 10. Disposicin de pines del microcontrolador PIC18F4550 [15].

Para la comunicacin va USB los pines a utilizar sern el 23 (D-) y el 24 (D+).

21
7. Bibliotecasdll[16]

Una dll o biblioteca de enlace dinmico (Dynamic Linking Library), es un archivo que
contiene funciones y/o recursos (mapas de bits, definiciones de fuentes, etc.) que pueden ser
llamados desde cualquier aplicacin Windows, de hecho, se puede considerar que Windows
est construido sobre una gran cantidad de DLLs. La mayora de bibliotecas de enlace
dinmico se guardan en archivos que tienen extensin DLL, pero tambin pueden ser
guardados en archivos con extensiones EXE (ejecutable), DRV (controlador de dispositivo) y
FON (fuente de Windows).
La diferencia entre las bibliotecas de enlace dinmico con extensin DLL y el resto, es que
las primeras se cargan porque el programa que las ha de utilizar lo pide a Windows y las
dems, en cambio, se cargan porque estn referenciadas en archivos de inicializacin de
Windows. Estas referencias pueden ser creadas por el propio Windows o por el programa de
instalacin de alguna aplicacin.
Tabla No. 5. Caractersticas de las dll.
Ventajas Inconvenientes
Una funcin definida dentro de una Tienen que estar presentes en la
DLL est disponible para cualquier carpeta del sistema antes de ser
aplicacin Windows. utilizadas
Se reduce el tamao de las El tiempo de acceso a la DLL por
aplicaciones que utilizan la DLL por la parte de la aplicacin que la usa es
reutilizacin de su cdigo. ms lento.
Mejora en el tiempo de compilacin
y/o carga de la aplicacin (debido al
menor tamao del cdigo)
Ahorro de espacio en disco.
Las DLLs son independientes de la
aplicacin

7.1EstructuradeunaDLLde32bits[16]
Una DLL se puede dividir, bsicamente, en tres partes:
Archivo de cabecera: Contendr todas las declaraciones y/o definiciones (de variables,
funciones, etc.) que use la DLL.
Punto de entrada y salida: Es la funcin principal de la DLL, y es la que se encarga de
cargar la DLL (cuando se vaya a usar) y descargarla de la memoria (cuando se deje de
usar). Dicha funcin se llama DllEntryPoint.
Funciones: Son las funciones que contiene la DLL y que fueron declaradas por el
programador de la misma.

22
Es importante conocer lo anterior debido a que LabVIEW nos permite hacer uso de estas
bibliotecas dinmicas como se muestra a continuacin:

7.2LabVIEWylasbibliotecasdeenlacedinmico[17]
LabVIEW dentro de sus funciones, contiene un nodo para llamar a las bibliotecas de
enlace dinmico (dlls). Se accede a l desde la paleta de Funciones/Conectivity/Libraries &
Executables/Call Library Function Node

Figura 11. Ubicacin del Call Library Function Node en la paleta de funciones.

Call Library Function Node

Figura 12. Terminales del Call Library Function Node.

Permite realizar el llamado de una funcin contenida dentro de una dll de manera directa. El
Call Library Function Node, soporta un amplio nmero de tipos de informacin y convenciones
de llamado, adems, es expandible y muestra los tipos de informacin para las entradas y
salidas conectadas.

23
Descripcin de las terminales del Call Library Node [18]
path in: Identifica la ruta de la DLL que se desea llamar. Es necesario colocar una marca en
la ruta especificada sobre el diagrama en el Call Library Function dialog box para esta
entrada y que aparezca en el subpanel conector.
Error in: Describe las condiciones del error que ocurren antes del VI o la funcin que se est
ejecutando, el valor por defecto es sin error. Si un error ocurre antes de este VI o antes de
que se ejecute la funcin, el VI pasa el valor de error in a error out.
Param 1n: son ejemplos de parmetros de entrada para la funcin de la biblioteca.
Path out: regresa la ruta de la DLL. Se debe colocar una marca en la ruta especificada.
Error out: contiene informacin del error. Si la entrada error in indica que un error ocurri
antes de que el VI o la funcin se ejecuten, error out contendr la misma informacin del
error.
Return value: es un ejemplo del valor regresado por la funcin de la biblioteca.
Param 1..n output: son ejemplos de los parmetros de salida de la funcin de la librera.

Cuadro de dialogo del Call Library Function


Para configurar la funcin que llamaremos de la DLL, se utiliza el Call Library Function dialog
box, para ello, es necesario colocar un Call Library Function Node y a continuacin presionar
doble click sobre l. Usar este cuadro de dialogo permite especificar la librera, la funcin, los
parmetros, el valor regresado por la funcin, y la convencin de llamado de la funcin o librera
compartida. Una vez que se introducen los valores requeridos y se presiona el botn OK del
cuadro de dialogo, LabVIEW actualiza el objeto en el diagrama de bloques. El objeto refleja la
configuracin realizada, mostrando el nmero de terminales indicados, y la configuracin de las
terminales.
En la siguiente figura se muestra el cuadro de dialogo y se explicar cmo funcionan sus
elementos.

24
Figura 13. Cuadro de dialogo del Call Library Function Node (Pestaa Function).

Pestaa Function: Esta pestaa nos sirve para configurar la funcin que ser llamada por el
Call Library Function Node, contiene lo siguientes componentes:

-Library name or path: Especifica el nombre de la librera o ruta para la funcin que se est
llamando. Es posible introducir slo el nombre de la librera si sta se encuentra en la
direccin de bsqueda del sistema, en caso contrario, ser necesario introducir la ruta o
direccin completa de la ubicacin de la librera.
-Specify path on diagram: Al activarlo, permite ingresar el nombre o la direccin de la
librera desde el panel frontal a travs de un control.
-Function name: Especifica el nombre de la funcin que se est llamando.
-Thread: Controla si se ejecuta sobre la interfaz de usuario o si es re-operado. El valor por
defecto es Run in UI Thread.
*Run in UI Thread: Controla si el objeto se ejecuta en la interfaz de usuario.
*Run in any thread: Controla si el objeto es re-operado. Para utilizar esta funcin es
necesario asegura que pueda hacer varas funciones simultneamente.
-Calling convention: Especificar la convencin de llamado para la funcin, es decir, la forma
en que ser tratado el cdigo. El valor por defecto es C.
* stdcall (WINAPI)-Controla si el objeto usa el formato de llamado estndar de Windows.
*C-Controla si el objeto usa la convencin de llamado de tipo __cdecl.
- Function prototype: Muestra el prototipo, o estructura, en C para la funcin.

Pestaa Parameters: En esta pestaa se configura los parmetros con los que se llamar a
la funcin a travs del Call Library Function Node. Es posible configurar la lista de parmetros
25
utilizando los botones que aparecen del lado derecho. Return type es un parmetro requerido
que no se puede borrar.

Figura 14. Cuadro de dialogo del Call Library Function Node (pestaa Parameters).

Botones
Add a parameter: Agrega un parmetro debajo del parmetro seleccionado de la lista
de parmetros.
Delete the selected parameter: Elimina el parmetro seleccionado de la lista de
parmetros.
Move the selected parameter up one: Mueve el parmetro seleccionado un nivel arriba
en la lista de parmetros, lo cual modifica el orden de los parmetros en el Function
prototype.
Move the selected parameter down one: Mueve el parmetro seleccionado un nivel
abajo en la lista de parmetros, lo cual modifica el orden de los parmetros en el
Function prototype.

- Current parameter: Permite configurar el funcionamiento del parmetro seleccionado.


*Name: Especifica el nombre del parmetro.
*Type: Especifica el tipo de informacin del parmetro, pudiendo ser de tipo numrico,
arreglo, cadena de caracteres, waveform, digital waveform, datos de tipo digital,
controles ActiveX, etc. Cada tipo de dato mostrar diferentes propiedades que
pueden ser modificadas, como la longitud, precisin, tamaos mximo y mnimo, etc.

26
Pestaa Callbacks: Se usa la ficha Callbacks para especificar la funcin a llamar en un
tiempo predefinido. Las funciones permiten inicializaciones, actualizaciones, y/o limpieza de la
informacin para la DLL o librera compartida a partir del Call Library Function Node que se est
configurando.

Figura 15. Cuadro de dialogo del Call Library Function Node (pestaa Callbacks).

Esta pestaa contiene los siguientes componentes:


Reserve (Reservado): Especifica la funcin a llamar y reserva tiempo para cada nodo y
espacio de informacin especfica de re-operacin del VI.
Unreserve (Sin Reservar): Especifica la funcin a llamar sin reservar tiempo para cada
nodo de espacio de informacin especfica de re-operacin del VI. Se usa esta llamada
para guardar o analizar la informacin y llevar a cabo operaciones de limpieza.
Abort (Abortar): Especifica la funcin a llamar si se desea abortar un VI mientras el
llamado a una DLL se encuentra en progreso. Si el Call Library Function Node se
encuentra ejecutndose en el hilo UI, el proceso de abortar no es llamado. Se usa la
llamada de abortar para guardar o analizar la informacin y llevar a cabo operaciones de
limpieza.
Prototype for these procedures: Despliega el prototipo C para el proceso de llamada
definido por el usuario. Cada funcin pasa por un parmetro de un puntero de datos
especficos (InstanceDataPtr). Este parmetro permite inicializar y acceder a la
informacin para cada instancia del Call Library Function Node que puede ser pasado a
cualquier llamada de funcin de nodos.

27
Pestaa Error Checking: Se usa para especificar el nivel de revisin en el error para el Call
Library Function Node.

Figura 16. Cuadro de dialogo del Call Library Function Node (pestaa Error Checking).

Esta pestaa contiene los siguientes componentes:


Nivel de Revisin del Error (Error Checking Level): Contiene las siguientes opciones.
+ Maximo (Maximum): Habilita el mximo nivel de revisin de error para la llamada. Si
habilita el nivel mximo de revisin de error la llamada regresara un error si la
convencin de llamada que selecciono en la ficha de funcin no coincide con la
convencin de llamada que est usted llamando en la librera compartida o la DLL. El
nivel mximo de revisin de error tambin regresa una advertencia si la funcin ha sido
llamada en la librera compartida o la DLL escribe ms all del espacio reservado para
la cadena o parmetro de arreglos.
Esta opcin reduce la velocidad de ejecucin del programa a la vez que incrementa
la memoria utilizada por la llamada. Por tanto, se recomienda seleccionar esta opcin
solo cuando se est corrigiendo la configuracin del Call Library Function Node.
+ Predeterminado (Default): Habilita el nivel de revisin de error predeterminado para el
Call Library Function Node. El nivel predeterminado permite a LabVIEW recuperarse
de excepciones que ocurren mientras se ejecuta la llamada a la librera compartida o a
la DLL.
+ Deshabilitado (Disabled): Deshabilita la revisin de errores para el Call Library Function
Node. Deshabilitando la revisin de errores para mejorar la velocidad de ejecucin. De
cualquier forma algunos errores pueden ocasionar paros irregulares de LabVIEW.
Antes de deshabilitar la revisin de error, asegrese de que la funcin a la que se hace
referencia no tenga excepciones.

28
En resumen, se puede considerar al Call Library Function Node como las salidas y entradas
de una funcin, de las cuales es posible usar solo una o ambas terminales. En el caso de que
no se desee que el nodo genere un valor de retorno (return value), la primera terminal quedar
sin conectarse. Cada par de terminales corresponden a un parmetro en la lista de parmetros
de la funcin en orden descendente. Se pasa o introduce un valor a la funcin al conectar en las
terminales del lado izquierdo cualquier control o constante y se lee el valor del parmetro
despus de la funcin llamada, al conectar desde la terminal derecha del nodo.

Figura 17. Entradas y salidas del Call Library Function Node.

29
8. ProgramacindelPIC18F4550

Como se ha mencionado previamente, se selecciono el microcontrolador PIC18F4550 para


el desarrollo del proyecto. Para su programacin, se emple el software PIC C Compiler, en el
Anexo B se muestra una breve explicacin del uso del mismo. Los cdigos generados pueden
localizarse en el Anexo D, en esta seccin nicamente se explican algunos aspectos relevantes
relacionados con los cdigos utilizados.
En primer lugar, es necesario mencionar que se requiere de dos cdigos. Uno de ellos, ser
utilizado como el firmware, por lo que habr de guardarse con extensin *.h al momento de
crearse. Este archivo contiene los descriptores del controlador USB, lo que permitir al host
establecer la comunicacin. El cdigo concentra los elementos requeridos por la norma USB
2.0.
El segundo archivo requerido es el correspondiente a la unidad de procesamiento, y
contendr todas las rutinas o actividades que deber realizar el microcontrolador. Este cdigo
se guardar con extensin *.c.
Ambos archivos se agregaran a un proyecto en el software PIC C Compiler para generar el
archivo hexadecimal (*.hex) que se grabar en el microcontrolador3.

8.1Firmware
Se conoce con este nombre a todas aquellas instrucciones que forman parte del dispositivo y
que le permiten establecer la comunicacin con otro equipo, en este caso con el host. En el
caso del microcontrolador a utilizar en el presente proyecto, el firmware se encuentra en el
archivo que ha sido nombrado descriptores.h.
Para la construccin de este cdigo, se tomo como base el archivo usb_desc_scope.h, que
se instala junto con el software PIC C Compiler y se encuentra localizado en la ruta C:\Program
Files\PICC\Drivers. Dicho cdigo es un ejemplo de la configuracin de los descriptores
necesarios para efectuar una transmisin de informacin de forma masiva (bulk).
Para poder utilizar el archivo usb_desc_scope.h, es necesario conocer la funcin de cada
una de las lneas de cdigo que lo componen, lo que permitir posteriormente modificarlas.
En las siguientes pginas, se presentan fragmentos de cdigo del archivo descriptores.h, y
en seguida de los mismos la tabla correspondiente al descriptor mencionado, la cual ha sido
tomada del Captulo 9 de las especificaciones USB 2.04. La finalidad de presentar estas tablas
es dar una gua al lector sobre los valores que pueden ser modificados en el archivo de
descriptores dependiendo del tipo de dispositivo a desarrollar.

3
En el Anexo D se encuentra una gua para el uso del software y la creacin de proyectos en el mismo.
4
Las especificaciones USB 2.0 pueden consultarse en el foro de implementadores USB (USB-IF) en su
pgina web http://www.usb.org.

30
21: //Descripcindelaconfiguracin
22: charconstUSB_CONFIG_DESC[]={
23: USB_DESC_CONFIG_LEN,//longituddeldescriptor
24: USB_DESC_CONFIG_TYPE,//constanteparaCONFIGURATION(0x02)
25: USB_TOTAL_CONFIG_LEN,0,
26: //Tamaodedatosqueregresaestconfiguracin
27: 1,
28: //Nmerodeinterfacessoportadasporeldispositivo
29: 0x01,
30: //Identificadordeestaconfiguracin
31: 0x00,
32: //ndicedelacadenaquedescribeestaconfiguracin
33: 0xC0,
34: //bit6=1:autoalimentado(selfpowered)
35: //bit5=1:activacinremota
36: //bits04:reservados
37: //bit7=1
38: 0x32,
39: //energamximarequeridaporelpuerto
40: //(maximummilliamperes/2)(0x32=100mA)

Tabla No. 6. Descriptor estndar para la configuracin del dispositivo (Tabla 9-10 Norma USB 2.0)
Offset Campo Tamao Valor Descripcin
0 bLength 1 Nmero Tamao de este descriptor en bytes.
1 bDescriptorType 1 Constante Tipo de descriptor, de configuracin.
2 wTotalLength 2 Nmero Longitud total de los datos regresados
por la configuracin, incluyendo la
longitud de todos los descriptores
(configuracin, interfaz,endpoint, etc.)
4 bNumInterfaces 1 Nmero Nmero de interfaces que soporta
sta configuracin.
5 bConfigurationValue 1 Nmero Valor con el que se seleccionar esta
configuracin.
6 iConfiguration 1 ndice ndice de la cadena de caracteres del
descriptor para esta configuracin.
7 bmAttributes 1 Bitmap Configuracin:

D7: Reservado (poner a 1)


D6: Auto-Alimentacin
D5: Activacin Remota
D4...0: Reservados (poner a 0)

El bit D7 est reservado y debe sr


puesto a 1 por razones histricas.

Una configuracin del dispositivo que


emplee corriente del bus y de una
31
fuente separada, reportar un valor
diferente de cero para bMaxPower,
para indicar la cantidad requerida de
energa del bus al seleccionar D6 con
el valor de uno.

Si la configuracin del dispositivo


soporta activacin remota D5 debe ser
puesto a uno.
8 bMaxPower 1 mA Consumo mximo de corriente del bus
por parte del dispositivo USB para
esta configuracin cuando el
dispositivo se encuentra en su mayor
demanda de corriente. Se expresa en
unidades de 2mA (ej. 50=100mA)

NOTA: La configuracin del dispositivo


reporta si es alimentado por el bus o
auto auto-alimentado.

El status del dispositivo reporta si el


dispositivo se encuentra actualmente
auto-alimentado. Si un dispositivo se
desconecta de su fuente de
alimentacin externa, se actualiza el
status del dispositivo para indicar que
se ha perdido la auto-alimentacin.

Los dispositivos no incrementan el


flujo de corriente del bus ms all de
lo indicado en esta configuracin al
perder su fuente de alimentacin
externa.

Si el dispositivo puede continuar


operando al ser desconectado de la
alimentacin externa, lo har. Si el
dispositivo no puede seguir operando,
las operaciones que no pueda seguir
soportando sern errneas. El
software del sistema USB puede
determinar la causa de la falla
checando el status y observando la
perdida de la fuente de alimentacin
externa.

32
42: //Descripcindelainterfaz
43: USB_DESC_INTERFACE_LEN,//longituddeldescriptor
44: USB_DESC_INTERFACE_TYPE,//constanteparaINTERFACE(0x04)
45: 0x00,//Nmeroquedefineestainterfaz
46: 0x00,//Seleccinalternativadeinterfaz
47: 2,//Numerodeendpoints
48: 0xFF,//Cdigodeclase
49: 0xFF,//Cdigodesubclase
50: 0xFF,//Cdigodeprotocolo
51: 0x00,//ndicedelacadenaque
52: //describeestaconfiguracin

Tabla No. 7. Descriptor estndar para la interfaz del dispositivo (Tabla 9-12 Norma USB 2.0)
Offset Campo Tamao Valor Descripcin
0 bLength 1 Nmero Tamao de este descriptor en bytes.
1 bDescriptorType 1 Constante Tipo de descriptor, de interfaz
2 bInterfaceNumber 1 Nmero Nmero de esta interfaz.
3 bAlternateSettings 1 Nmero Valor para seleccionar esta
descripcin alternativa de la interfaz
identificada en el campo previo.
4 bNumEndpoints 1 Nmero Nmero de endpoits usados por esta
interfaz, excluyendo el endpoint cero.
Si este valor es cero, la interfaz
utilizar la tubera de control
predeterminada (Default Control Pipe)
5 bInterfaceClass 1 Clase Cdigo de clase asignado por el foro
de implementadores USB (USB IF).

El valor cero se encuentra reservado


para futura estandarizacin.

Si en este campo se selecciona FFH la


clase de la interfaz es determinada por
el fabricante.

Cualquier otro valor se encuentra


reservado para uso del IF USB.
6 bInterfaceSubClass 1 SubClase Cdigo de subclase, asignado por el
USB IF. Este cdigo depende del valor
asignado en el campo anterior.

Si el campo bInterfaceClass es puesto


a cero, este campo tambin debe ser
puesto a cero.

Si el valor de bInterfaceClass, no es
FFH, debern usarse los valores
33
asignados por el USB IF.
7 bInterfaceProtocol 1 Protocolo Cdigo de protocolo asignado por el
USB IF. Este cdigo depende de los
valores asignados en los dos campos
previos.

Si este campo se pone a cero, el


dispositivo no utiliza ninguna
especificacin de protocolo en esta
interfaz.

Si este campo se coloca con un valor


de FFH, el dispositivo emplea una
especificacin de protocolo hecha por
el fabricante para esta interfaz.
8 iInterface 1 ndice ndice de la cadena de caracteres que
describe esta interfaz.

54: //Descripcindeendpointdeentrada
55: USB_DESC_ENDPOINT_LEN,
56: //longituddeldescriptor
57: USB_DESC_ENDPOINT_TYPE,
58: //constanteparaENDPOINT(0x05)
59: 0x81,
60: //NmeroydireccindelEndpoint(0x81=EP1IN)
61: 0x02,
62: //Tipodetransferencia
63: //0:control,1:iso,2:masiva,3:interrupciones
64: USB_EP1_TX_SIZE,0x00,
65: //Tamaomximodepaquetesoportado
66: 0x01,
67: //intervalodepollingenms
68: //sloparatransferenciaconinterrupciones

Tabla No. 8. Descriptor estndar para el endpoint (Tabla 9-13 Norma USB 2.0)
Offset Campo Tamao Valor Descripcin
0 bLength 1 Nmero Tamao del descriptor en bytes.
1 bDescriptorType 1 Constante Tipo de descriptor, de endpoint.
2 bEndpointAdress 1 Endpoint Direccin del endpoint en el
dispositivo USB descrito. Las
34
direcciones se encuentran codificadas
como sigue:

Bit 30: Nmero de endpoint


Bit 64: Reservado, poner a cero
Bit 7: Direccin, este bit es ignorado si
se trata de endpoints de control, la
direcciones son:
0: Endpoint de salida
1: Endpoint de entrada
3 bmAttributes 1 Bitmap Este campo describe los atributos del
endpoint cuando se configura
utilizando bConfigurationValue.

Bits 10: Tipo de transferencia


00=Control
01=Sncrona
10=Masiva
11=Por interrupciones

Si no se selecciona la transferencia
sncrona, los bits 52 estn
reservados y deben ser puestos a
cero, si la transferencia es sncrona se
definen como se muestra:

Bits 32: Tipo de sincronizacin


00:Sin sincronizacin
01:Asncrona
10:Adaptativa
11=Sncrona

Bits 54: Tipo de uso


00:Endpoint de datos
01:EP de retroalimentacin
10:EP de retroalimentacin de
datos implcitos
11:Reservado

El resto de los bits se encuentran


reservados y deben ser puestos a
cero.
4 wMaxPacketSize 2 Nmero Tamao mximo del paquete de datos
que este endpoint es capaz de enviar
o recibir cuando se selecciona esta
configuracin.

Para endpoints sncronos, este valor


es utilizado para reservar tiempo en el
bus de acuerdo a la programacin,

35
para cada dato del microframe. El
puerto (tubera o pipe) puede utilizar
menos ancho de banda que el
reservado.

Para todos los tipos de enpoint, los


bits 10..0 especifican el tamao
mximo del paquete en bytes.

Para los endpoints de alta velocidad


sncronos y por interrupciones:

Bits 12..11 especifican el numero de


transacciones adicionales por
microframe:
00 = Ninguna (1 transaccin por
microframe)
01 = 1 adicional (2 transacciones
por microframe)
10 = 2 adicionales (3 transacciones
por microframe)
11 = Reservados
Los bits 15..13 estn reservados y
deben ser puestos a cero.
6 bInterval 1 Nmero Intervalo para efectuar el polling del
endpoint en las transferencias de
datos. Se expresa en frames o
microframes dependiendo de la
velocidad de operacin del dispositivo.
Para endpoints de dispositivos de alta
velocidad sincrnicos, este valor debe
estar en el rango de 1 a 16. El valor
bInterval, es usado como exponencial
para el valor 2bInterval-1, por ejemplo, un
valor bInterval de 4, significa un
periodo de 8 (24-1).

Para endpoints de dispositivos de baja


velocidad con transmisin por
interrupciones, el valor debe estar en
el rango 1-255.

Para endpoints de dispositivos de alta


velocidad, el valor bInterval, es usado
como exponencial para el valor
2bInterval-1, por ejemplo, un bInterval de
4, significa un periodo de 8 (24-1). Este
valor debe estar entre 1 y 16.

36
98: //Descriptoresdeldispositivo
99: charconstUSB_DEVICE_DESC[]={
100: USB_DESC_DEVICE_LEN,//Longituddelreporte
101: 0x01,//Constantedetipodedescriptor,dispositivo(0x01)
102: 0x10,0x01,//VersindeUSB(1.1)
103: 0x00,//Cdigodeclase
104: 0x00,//Cdigodesubclase
105: 0x00,//Cdigodeprotocolo
106: USB_MAX_EP0_PACKET_LENGTH,
107: //Tamaomximodepaqueteparaendpoint0.
108: //(BajaVelocidadespecifica8)
109: 0xd8,0x04,//vendorid(0x04D8Microchip)
110: 0x0b,0x00,//productid(0x000bPIC18Family)
111: 0x01,0x00,//Nmerodeversindeldispositivo
112: 0x01,//Indicedecadenadelproductor
113: 0x02,//Indicedecadenadelproducto
114: 0x00,//Indicedecadenadelnumerodeserie
115: USB_NUM_CONFIGURATIONS//Numerodeposiblesconfiguraciones

Tabla No. 9. Descriptor estndar para el dispositivo (Tabla 9-8 Norma USB 2.0)
Offset Campo Tamao Valor Descripcin
0 bLength 1 Nmero Tamao de este descriptor en bytes
1 bDescriptorType 1 Constante Tipo de descriptor, de dispositivo
2 bcdUSB 2 BCD Nmero de versin del protocolo USB
en Binario Codificado Decimal. Este
nmero identifica la versin con la que
cumplen el dispositivo y sus
descriptores.
4 bDeviceClass 1 Clase Cdigo de clase, asignado por el USB
IF.

Si este campo es puesto a cero, cada


interfaz dentro de la configuracin
especificar su propia informacin de
clase y las distintas interfaces
operaran de manera independiente. Si
este campo tiene un valor entre 1 y
FEH, el dispositivo soporta diferentes
especificaciones de clase en distintas
interfaces, las cuales no operaran de
forma independiente. Este valor
identifica la definicin de clase
utilizada para las interfaces agregadas.

Si este campo tiene un valor de FFH,


37
la clase del dispositivo es especificada
por el fabricante.
5 bDeviceSubClass 1 Subclase Cdigo de subclase, asignado por el
USB IF.

Estos cdigos dependen del valor


asignado al campo bDeviceClass. Si
dicho campo es puesto a cero, este
campo tambin debe ser cero. Si el
campo bDeviceClass no tiene el valor
FFH, cualquier valor para este campo,
deber ser asignado por el USB IF.
6 bDeviceProtocol 1 Protocolo Cdigo de protocolo asignado por el
USB IF.

Estos cdigos dependen de los


valores de bDeviceClass y
bDeviceSubClass. Si el dispositivo
soporta protocolos de clase especfica
este cdigo identificar el protocolo a
utilizar de acuerdo a la clase del
dispositivo.

Al poner este campo a cero, el


dispositivo no utilizar protocolos
especficos de clase.

Si este campo tiene valor de FFH, el


dispositivo utilizar protocolos
especificados por el fabricante.
7 bMaxPacketSize0 1 Nmero Tamao mximo del paquete de datos
para el endpoint cero (los valores
validos son 8, 16, 32 y 64)
8 idVendor 2 ID Identificador del fabricante, asignada
por el USB IF.
10 idProduct 2 ID Identificador del producto, asignada
por el fabricante
12 bcdDevice 2 BCD Nmero de versin del dispositivo en
formato Binario Codificado Decimal
14 iManufacturer 1 ndice ndice de la cadena de caracteres que
describe al fabricante del dispositivo.
15 iProduct 1 ndice ndice de la cadena de caracteres que
describe al producto
16 iSerialNumber 1 ndice ndice de la cadena de caracteres que
describe el nmero de serie del
dispositivo
17 bNumConfigurations 1 Nmero Nmero de posibles configuraciones
del dispositivo.

38
123: charconstUSB_STRING_DESC[]={
124: //string0
125: 4,//Longituddelacadena
126: USB_DESC_STRING_TYPE,//Tipodedescriptor:String
127: 0x0a,0x08,//DefinicindeMicrosoftparaidiomaespaoldeMxico
128: //string1
129: 8,//Longituddelacadena
130: USB_DESC_STRING_TYPE,//Tipodedescriptor:String
131: 'U',0,
132: 'S',0,
133: 'B',0,
134: //string2
135: 24,//Longituddelacadena
136: USB_DESC_STRING_TYPE,//Tipodedescriptor:String
137: 'D',0,
138: 'A',0,
139: 'Q',0,
140: '_',0,
141: 'L',0,
142: 'a',0,
143: 'b',0,
144: 'V',0,
145: 'I',0,
146: 'E',0,
147: 'W',0
148: };

Estas ltimas lneas permiten configurar los nombres que aparecern en el host al momento
de instalar el dispositivo en el host, como se muestra en la siguiente figura.

Figura 18. Cadena de caracteres mostrada al instalar el dispositivo.

Para realizar la configuracin del string o cadena de caracteres, se debe considerar lo


mostrado en la siguiente tabla.

39
Tabla No. 10. Descripcin de la cadena de caracteres (Tabla 9-15 Norma USB 2.0)
Offset Campo Tamao Valor Descripcin
0 bLength 1 N+2 Tamao de este descriptor en bytes
1 bDescriptorType 1 Constante Tipo de descriptor, cadena de
caracteres
2 wLANGID[0] 2 Nmero Cdigo de lenguaje 0

N wLANGID[x] 2 Nmero Cdigo de lenguaje x

En esta tabla a partir de la posicin 2, se debe utilizar el cdigo de lenguaje o LANGID


(Language Identifier) establecido por el foro de implementadores USB (USB-IF), dicho cdigo
puede consultarse en el listado publicado por el USB-IF en la pgina web
http://www.usb.org/developers/docs/USB_LANGIDs.pdf.
Para calcular los nmeros que se debern colocar en las lneas 129 y 135, se cuenta el
nmero de letras y de ceros que contiene la cadena de caracteres y al nmero resultante se
suma el valor de dos correspondientes a la suma de uno del inicio y uno final de la cadena. Por
ejemplo, para la cadena 1, cuyo contenido es USB, la cuenta ser de tres, uno por cada letra,
ms los tres ceros, mas uno del inicio y uno del final, dando como resultado una longitud de 8.

8.2UnidaddeControl
El cdigo desarrollado para la unidad de control, permitir efectuar las operaciones de
lectura y escritura de datos desde y hacia el PIC. El archivo que contiene dichas operaciones se
nombr LectoEscr.c, del cual se explica a continuacin la forma de configurar el reloj, lo cual se
localiza en las siguientes lneas de cdigo:

15: //Configuracindelreloj
16: #FUSESHSPLL
17: #FUSESPLL5
18: #FUSESUSBDIV
19: #FUSESCPUDIV1

Para el correcto funcionamiento del mdulo USB del PIC, es necesario contar con una seal
de reloj con una frecuencia de 48MHz, sin embargo, el cristal a utilizar es de 20MHz por lo que
debern configurarse los distintos divisores de frecuencia con los que cuenta el
microcontrolador.
La palabra de configuracin HSPLL, sirve para indicar que se trabaja con un cristal de alta
velocidad (mayor de 4 MHz). Con PLL5, indicamos que la frecuencia de entrada deber ser
dividida entre 5, obteniendo una frecuencia de 4MHz, la cul es requerida por el
microcontrolador para obtener una nueva frecuencia de 96MHz, esta nueva frecuencia pasa por
40
otro bloque interno del PIC, el cual la divide entre dos, obteniendo los 48MHz necesarios para el
USB. Finalmente se utiliza USBDIV, para seleccionar la seal proveniente de los bloques
anteriores.
La configuracin anterior nicamente afecta al reloj para el uso del USB, an es necesario
configurar el reloj que utilizar la unidad de control para la ejecucin de las instrucciones del
programa, para ello se utiliza CPUDIV1, lo cual divide la seal de 96MHz entre dos, dando una
seal de 48MHz, que ser la que se utilizar tambin para la ejecucin del programa.
Es importante mencionar que el valor de CPUDIV1 es de cero para efectuar la divisin entre
dos, sin embargo el compilador utilizado nombra las variables CPUDIV1, CPUDIV2, CPUDIV3 y
CPUDIV4, las cuales corresponden a los valores de cero, uno, dos y tres respectivamente.
En la Tabla No. 11 se muestran diferentes configuraciones de los divisores de frecuencia
para el cristal utilizado, adems se presenta resaltada la configuracin seleccionada. Despus
de la tabla, se puede observar una imagen mostrando la configuracin del reloj seleccionada,
resaltando con una lnea en color rojo el camino seguido por la seal de reloj.

Tabla No. 11. Configuracin del reloj para el microcontrolador [15].


Frecuencia del Divisin PLL Modo de reloj Divisin de reloj Frecuencia de
oscilador de para e reloj para el
entrada Microcontrolador
20 MHz 5 (100) HS, EC, ECIO Ninguna (00) 20 MHz
2 (01) 10 MHz
3 (10) 6.67 MHz
4 (11) 5 MHz
HSPLL, ECPLL, 2 (00) 48 MHz
ECPIO 3 (01) 32 MHz
4 (10) 24 MHz
6 (11) 16 MHz

41
Figura 19. Configuracin de los divisores para obtener una seal de 48MHz a partir de un cristal de 20MHz.

En lo que respecta al resto del cdigo, se encuentra ampliamente comentado en el anexo


correspondiente.

42
9. ProgramacindelInstrumentoVirtual(VI)

Para poder implementar la comunicacin de la PC al PIC y viceversa, utilizando LabVIEW y


el puerto USB, se crearon subVIs, que permitieran realizar las acciones necesarias para
establecer la comunicacin. La realizacin de estos VIs est basada en el uso del Call Library
Function Node y una biblioteca de enlace dinmico (dll). La dll para efectuar la comunicacin se
obtiene del sitio web de Microchip, descargando e instalando el paquete MCHPFSUSB
Framework v2.35, para mayor informacin sobre la instalacin de este paquete, consultar el
anexo correspondiente.
Dicha dll contiene las siguientes funciones para el manejo del puerto USB:
MPUSBGetDeviceCount
MPUSBOpen
MPUSBRead
MPUSBWrite
MPUSBReadInt
MPUSBClose
MPUSBGetDeviceDescriptor
MPUSBGetConfigurationDescriptor
MPUSBGetStringDescriptor
MPUSBSetConfiguration
Para llevar a cabo la comunicacin deseada, se requiere realizar la apertura del puerto USB
para establecer el pipe, as como el envo y recepcin de informacin de forma masiva desde el
host hacia el dispositivo y viceversa, adems, es necesario efectuar el cierre del pipe y del
puerto al momento de terminar la comunicacin. Para efectuar estas operaciones nicamente
son necesarias las funciones MPUSBGetDeviceCount, MPUSBOpen, MPUSBRead,
MPUSBWrite, MPUSBClose, las cuales se configurarn dentro de los subVIs creados a travs
del Call Library Function Node.
En el desarrollo del proyecto, se crearon cuatro subVIs, los cuales llevan por nombre
OpenUSB.vi, WriteUSB.vi, ReadUSB.vi y CloseUSB.vi, para cada uno de ellos se cre un cono
que permita identificarlo y usarlo posteriormente en otro instrumento virtual. La forma en que se
configur cada uno de estos SubVIs se muestra en las siguientes pginas.

5
Para descargarlo, dirigirse a la siguiente URL:
http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&nodeId=2651&param=en534494

43
9.1OpenUSB

Figura 20. cono del SubVI

Este SubVI consiste en una secuencia que permite monitorear la presencia de un dispositivo
USB determinado, de acuerdo a sus valores de VID y PID. Su construccin (panel frontal y
diagrama de bloques) se muestra en las siguientes figuras:

Figura 21. Panel frontal del SubVI OpenUSB.

44
Figura 22. Diagrama de bloques del SubVI OpenUSB.

45
El diagrama de bloques est formado por una secuencia de tres frames, a continuacin se
explican los parmetros necesarios dentro de cada uno de los mismos.
Primer frame:

Figura 23. Primer frame del diagrama de bloques del SubVI OpenUSB.

Permite localizar al dispositivo USB con el Product ID y Vendor ID sealados, en este caso,
el VID 04d8 corresponde a Microchip, mientras que el PID 000b corresponde a la familia
PIC18.
Dentro del bloque Call Library Function Node, se hace referencia a la funcin
MPUSBGetDeviceCount. Esta funcin, regresa el nmero de dispositivos que concuerdan con
el PID y VID especificado. La estructura de la funcin es la siguiente:
DWORD MPUSBGetDeviceCount (PCHAR pVID_PID)
Donde, DWORD, representa un nmero entero sin signo de 32 bits y PCHAR, un apuntador
a una cadena de caracteres.
Los parmetros del Call Library Function Node, se configuran como se muestra a
continuacin:

46
Figura 24. Configuracin de la funcin MPUSBGetDeviceCount dentro del Call Library Function Node

La ruta o path, corresponde al directorio de instalacin del paquete MCHPFSUSB


Framework v2.3 de Microchip , la cual comnmente es la que se muestra en la imagen. En la
opcin Function name, se selecciona MPUSBGetDeviceCount, que es la funcin a utilizar.
Posteriormente, se selecciona la pestaa Parameters y se configura como se muestra a
continuacin:

47
Figura 25. Configuracin de los parmetros de la funcin MPUSBGetDeviceCount.

En esta pestaa, se agregan los parmetros con el botn . El nombre para este
parmetro ser vid_pid_norm y deber ser tratado como una constante, los valores relativos al
tipo de dato y formato, pueden consultarse en la imagen.
Una vez configurada la funcin, se realizan las conexiones con los elementos
correspondientes al frame. El funcionamiento es el siguiente: El frame ejecutar el ciclo while
hasta que el dispositivo buscado, cuyos datos de PID y VID se encuentran en la cadena de
caracteres, sea encontrado, utilizando para ello la funcin USBGetDeviceCount de la biblioteca
dll, la cual regresa el nmero de dispositivos encontrados con el VID y PID especificados, este
valor se compara y si es diferente de cero, se detiene el ciclo while y se ejecuta el siguiente
frame. En caso de que no se encuentre ningn dispositivo, el ciclo se ejecuta de manera infinita.

48
Segundo frame:

Figura 26. Segundo frame del diagrama de bloques del SubVI OpenUSB.

En este frame se configura y abre el puerto, estableciendo un pipe, o tubera, para poder
efectuar la comunicacin desde la PC al PIC volviendo a hacer uso del Call Library Function
Node y la funcin MPUSBOpen de la librera dll. La estructura de la funcin es:

DWORD MPUSBOPEN (DWORD selection, PCHAR pVID_PID_norm, PCHAR end_point,


DWORD dir, DWORD res);

La funcin se configura en el VI como se muestra a continuacin:

49
Figura 27. Configuracin de la funcin MPUSBOpen dentro del Call Library Function Node.

Una vez seleccionada la ruta de la librera y la funcin a utilizar (MPUSBOpen), se


configuran los parmetros como se muestra a continuacin:
La primera vez que abramos la pestaa Parameters, encontraremos que ya incluye un
parmetro llamado return type.

50
Figura 28. Configuracin de los parmetros de la funcin MPUSBOpen.

Al parmetro return type ser necesario cambiarle el nombre por handle y configurarlo como
se muestra en la siguiente figura:

Figura 29. Configuracin del parmetro handle de la funcin MPUSBOpen.

51
Una vez configurado este parmetro, se procede a agregar los parmetros restantes como
se muestra en las siguientes imgenes:

Figura 30. Configuracin del parmetro selection de la funcin MPUSBOpen.

Figura 31. Configuracin del parmetro vid_pid_norm de la funcin MPUSBOpen.

52
Figura 32. Configuracin del parmetro end_point de la funcin MPUSBOpen.

Figura 33. Configuracin del parmetro dir de la funcin MPUSBOpen.

53
Figura 34. Configuracin del parmetro res de la funcin MPUSBOpen.

Una vez configurada la funcin de la biblioteca, se realizan las conexiones mostradas,


cableando a cada una de los terminales los elementos siguientes:
selection: El valor para este parmetro es una constante de tipo numrico de valor cero.
Dicho valor corresponde a la numeracin que asigna la funcin USBGetDeviceCount a
cada uno de los dispositivos, siendo el valor cero el asignado al primer dispositivo con el
VID y PID especificado.
vid_pid_norm: Corresponden a los valores de VID y PID del dispositivo que se desea
manejar, debe ser un dato de tipo cadena de caracteres (string) y debe tener el formato
vid_xxxx&pid_yyyy, donde xxxx representa el valor de VID, mientras que yyyy representa
el valor de PID, ambos en nmero hexadecimal.
end_point: Consiste en una cadena de caracteres, string, conteniendo el nmero del
endpoint que se desea abrir. El formato que debe tener es \\MCHP_EPz, donde z
representa el nmero mencionado, en este caso, se trata del endpoint 1.
dir: Establece la direccin de la comunicacin y por tanto el tipo de pipe que se abrir, ya
sea inpipe u outpipe. Un valor de cero corresponde a la direccin host al dispositivo,
mientras que un valor de uno, sirve para establecer la direccin del dispositivo al host.
res: Este parmetro se encuentra reservado para futuras actualizaciones de la librera dll.
OutPipe (handle): Este valor es el valor que devuelve la funcin invocada a travs del
handle, el cual servir para establecer el pipe, o tubera por el cual se llevar a cabo la
transmisin de los datos. El OutPipe se emplea para realizar la comunicacin desde el host
hacia el dispositivo.
54
Tercer frame:

Figura 35. Tercer frame del diagrama de bloques del SubVI OpenUSB.

En este frame se realiza la configuracin y apertura del puerto para poder efectuar la
comunicacin desde el PIC a la PC, haciendo uso del Call Library Function Node y la funcin
MPUSBOpen de la librera dll. La estructura de la funcin es la misma que el frame anterior:

DWORD MPUSBOPEN (DWORD selection, PCHAR pVID_PID_norm, PCHAR end_point,


DWORD dir, DWORD res);

La configuracin de la funcin en este frame, es similar a la realizada en el frame anterior,


nicamente cambiando el valor del parmetro dwdir por 1, adems, es necesario cambiar el
nombre de la variable de retorno de la funcin por InPipe, esto para poder hacer uso de este
valor ms adelante al momento de efectuar la lectura de datos desde el PIC.

55
Figura 36. Configuracin de los parmetros de la funcin MPUSBOpen.

56
9.2WriteUSB

Figura 37. cono del SubVI.

Este VI permite realizar la escritura de datos desde el host (PC) hacia el dispositivo (PIC). A
continuacin se presentan el panel frontal y el diagrama de bloques que componen este SubVI.

Figura 38. Panel Frontal del SubVI WriteUSB.

57
Figura 39. Diagrama de bloques del SubVI WriteUSB.

Para el funcionamiento de este VI, se hace uso de la funcin MPUSBWrite, cuya estructura y
configuracin dentro del Call Library Function Node se muestran enseguida.

DWORD MPUSBWrite (HANDLE OutPipe, PVOID SendData, DWORD SendLenght,


PDWORD DataLenght, DWORD SendDelay);

58
Figura 40. Configuracin de la funcin MPUSBWrite dentro del Call Library Function Node.

Figura 41. Configuracin del parmetro OutPipe de la funcin MPUSBWrite.

59
Figura 42. Configuracin del parmetro SendData de la funcin MPUSBWrite.

Figura 43. Configuracin del parmetro SendLength de la funcin MPUSBWrite.

60
Figura 44. Configuracin del parmetro DataLength de la funcin MPUSBWrite.

Figura 45. Configuracin del parmetro SendDelay de la funcin MPUSBWrite.

61
9.3ReadUSB

Figura 46. cono del SubVI.

Este VI permite llevar a cabo la lectura de los datos enviados por el dispositivo (PIC). Su
construccin, panel frontal y diagrama de bloques, se muestran a continuacin.

Figura 47. Panel Frontal del SubVI ReadUSB.

62
Figura 48. Diagrama de Bloques del SubVI ReadUSB.

Para este VI se utiliza la funcin MPUSBRead, su estructura y la configuracin de sus


parmetros en el Call Library Function Node, se presenta a continuacin:

DWORD MPUSBRead (HANDLE InPipe, PVOID ReceiveData, DWORD


ExpectedReceiveLenght, PDWORD ReceiveLenght, DWORD ReceiveDelay)

63
Figura 49. Configuracin de la funcin MPUSBRead dentro del Call Library Function Node.

Figura 50. Configuracin del parmetro InPipe de la funcin MPUSBRead.

64
Figura 51. Configuracin del parmetro ReceiveData de la funcin MPUSBRead.

Figura 52. Configuracin del parmetro ExpectedReceiveLength de la funcin MPUSBRead.

65
Figura 53. Configuracin del parmetro ReceiveLength de la funcin MPUSBRead.

Figura 54. Configuracin del parmetro ReceiveDelay de la funcin MPUSBRead.

66
9.4CloseUSB

Figura 55. cono del SubVI.

Este subVI permitir llevar a cabo el cierre del puerto USB, concretamente de los pipes
establecidos al abrirlo. A continuacin se presentan el panel frontal y el diagrama a bloques.

Figura 56. Panel Frontal del SubVI CloseUSB.

67
Figura 57. Diagrama de Bloques del SubVI CloseUSB.

El diagrama de bloques, se encuentra formado por una secuencia de tres frames, los cuales
se describen a continuacin.

Primer Frame:

Figura 58. Primer frame del SubVI CloseUSB.

Este frame se encarga de poner la salida de datos a nivel bajo, enviando una cadena de
ceros. La configuracin del Call Library Function Node, es idntica a la utilizada en el subVI
llamado WriteUSB, solamente se agrega la cadena de caracteres en lugar de los controles.
68
Segundo Frame:

Figura 59. Segundo frame del SubVI Close USB.

Se encarga de cerrar el pipe de salida, para ello se emplea la funcin MPUSBClose, cuya
estructura y configuracin se muestran en seguida.
DWORD MPUSBClose (Handle OutPipe)

Figura 60. Configuracin de la funcin MPUSBClose dentro del Call Library Function Node.

69
Figura 61. Configuracin de los parmetros de la funcin MPUSBClose.

Tercer Frame:

Figura 62. Tercer frame del SubVI CloseUSB.

70
En este frame se lleva a cabo el cierre del pipe de entrada, utilizando la misma funcin que el
frame anterior, pero cambiando el nombre del parmetro.

Figura 63. Configuracin de los parmetros dentro de la funcin MPUSBClose.

Los dems elementos presentes en este frame, corresponden a la lgica necesaria para
mostrar apagado el LED indicador del estado del dispositivo USB.

71
9.5Ejemplodeuso
En las siguientes imgenes se muestra una forma de conectar los SubVIs anteriores a fin de
poder efectuar las operaciones de lectura y escritura.

Figura 64. Panel Frontal del ejemplo de uso de los SubVIs desarrollados.

72
Diagrama de bloques:

Figura 65. Diagrama de Bloques del ejemplo de uso de los SubVIs desarrollados.

Con este instrumento virtual, es posible llevar a cabo la lectura y escritura de datos desde y
hacia la tarjeta de adquisicin basada en el PIC18F4550.

73
10. Trabajofuturo

Una vez lograda la comunicacin entre la PC y el PIC a travs del puerto USB, se propone la
utilizacin de todas las caractersticas que ofrece el microcontrolador, como son el convertidor
analgico-digital, el modulo comparador, y el mdulo PWM. Dichas caractersticas permitiran la
conexin de sensores con salidas analgicas a la tarjeta de adquisicin y de sta a la PC a
travs del puerto USB, con la finalidad de analizar la informacin en LabVIEW. Otra
aplicacin, relacionada con el mdulo PWM, es el control de motores, a travs de modulacin
por ancho de pulso (PWM), la cual puede ser manejada desde LabVIEW enviando el valor de
los ciclos de trabajo por el puerto USB a la tarjeta de adquisicin y sta conectada a un driver
para motor como pudiera ser el circuito integrado L293.

Por otro lado, el desarrollo de este proyecto se enfoc al uso del protocolo USB de forma
general, tomando las especificaciones de la norma USB 2.0, sin embargo, puede realizarse ms
adelante una transmisin de datos utilizando las especificaciones USB Test and Measurement
Class, las cuales permitirn utilizar la herramienta VISA de National Instruments.

En general, con la tarjeta generada con este proyecto, pueden llevarse a cabo las rutinas
que se ejecutan en cualquier microcontrolador, con la ventaja de realizar la programacin en el
entorno grfico de LabVIEW, en lugar de ensamblador, basic o C. Tambin se elimina el tener
que usar un programador que permita llevar la rutina escrita a la memoria del microcontrolador y
finalmente, es posible aprovechar todas las funciones y herramientas de LabVIEW para
efectuar el anlisis de los datos obtenidos, poniendo en prctica, de esta forma, los principios
de la instrumentacin virtual.

74
11. Referencias

[1] LabVIEW based Advanced Instrumentation Systems


S. Sumathi, P. Surekha
Springer Berlin Heidelberg
2007

[2] Comparacin de Buses de Instrumentos para Pruebas Automatizadas: PCI, PCI


Express, PXI, PXI Express, GPIB,USB, y Ethernet/LXI
M. en C. Carlos Martnez
Simposios Tcnicos NI, 2007
URL: ftp://ftp.ni.com/pub/branches/latam/Comparacion%20de%20Buses%20de%20Instrumentos.pdf

[3] Qu es la instrumentacin virtual?


National Instruments Latinoamrica
URL: http://digital.ni.com/worldwide/latam.nsf/web/all/01E4BFF8EC93532086256B6000669953

[4] Introduction to LabVIEW


Chapter 1, LabVIEW Fundamentals
National Instruments
Agosto, 2007

[5] LabVIEW Enviroment


Chapter 3, LabVIEW Fundamentals
National Instruments
Agosto, 2007

[6] Building the Front Panel


Chapter 4, LabVIEW Fundamentals
National Instruments
Agosto, 2007

[7] Bulding the Block Diagram


Chapter 5, LabVIEW Fundamentals
National Instruments
Agosto, 2007

[8] Running and Debugging VIs


Chapter 6, LabVIEW Fundamentals
National Instruments
Agosto, 2007

[9] Creating VIs and SubVIs


Chapter 7, LabVIEW Fundamentals
National Instruments
Agosto, 2007

[10] Universal Serial Bus


Wikipedia, la enciclopedia libre
URL: http://es.wikipedia.org/wiki/Bus_de_Serie_Universal
75
[11] USB Design by Example
John Hyde
1st Edition
Intel Press

[12] Universal Serial Bus System Architecture


Don Anderson
Addison Wesley

[13] El bus USB, Caractersticas Generales


URL: http://usuarios.lycos.es/kurganz/caracteristicas.html

[14] USB Complete. Everything you need to develop custom USB peripherals
Jack Axelson
Third Edition
Lakeview Research

[15] PIC18F2455/2550/4455/4550 Data Sheet


Microchip Technology Inc.
2007

[16] What is a DLL?


Microsoft Corporation
URL: support.microsoft.com/kb/815065

[17] Using External Code in LabVIEW


National Instruments
Julio 2000
Part. Number: 370109A-01

[18] LabVIEW 8.2 Help


National Instruments
Agosto 2006
Part. Number: 371361B-01

[19] Universal Serial Bus Specification. Revision 2.0


USB Implementors Forum
Abril 27, 2000

[20] C Compiler Reference Manual Version 4


Custom Computer Services Inc.
Agosto, 2007

[21] USB Application Design Center


http://www.microchip.com

[22] Protocolo USB (Universal Serial Bus)


Autor: Eric Lpez Perez
En URL: http:// www.i-micro.com/pdf/articulos/usb.pdf

76
12. ANEXOA.TerminologaUSB[22]

- Host: Dispositivo maestro que inicia la comunicacin.

- Hub: Dispositivo que contiene uno o ms conectores o conexiones internas hacia otros
dispositivos USB, el cual habilita la comunicacin entre el host y diversos dispositivos.
Cada conector representa un puerto USB.

- Dispositivo compuesto: Es aquel dispositivo con mltiples interfaces independientes.


Cada una tiene una direccin sobre el bus pero cada interface puede tener un diferente
driver en el host.

- Driver: Se trata de un programa que habilita las instrucciones necesarias para poderse
comunicar con el dispositivo. Cada dispositivo sobre el bus debe tener un driver, algunos
perifricos utilizan los drivers que proporciona el sistema operativo Windows.

- Puntos terminales (Endpoints): Es una localidad especfica dentro del dispositivo. El


endpoint es un buffer que almacena mltiples bytes, tpicamente es un bloque de la
memoria de datos o un registro dentro del microcontrolador. Todos los dispositivos
deben soportar el punto terminal 0. Este punto terminal es el que recibe todo el control y
las peticiones de estado durante la enumeracin.

- Tuberas (Pipes): Es un enlace virtual entre el host (la PC) y el dispositivo USB, este
enlace configura los parmetros asociados con el ancho de banda y el tipo de
transferencia a utilizar (Control, Bulk, Isocrona o Interrupt); direccin del flujo de datos y
el mximo y/o mnimo tamao de los paquetes/buffers.

Cada enlace est caracterizado por su banda de paso (Token), su tipo de servicio, el
nmero de punto terminal (End Point) y el tamao de los paquetes.

Estos enlaces se definen y crean durante la inicializacin del USB. Siempre existe un
enlace virtual 0 que permite tener acceso a la informacin de configuracin del perifrico
USB (estado, control e informacin).

La norma USB define 2 tipos de enlaces virtuales (pipe); stream y message.

Stream Pipes: Se trata de un flujo sin formato USB definido, esto significa que se
puede enviar cualquier tipo de dato. Este tipo de pipe soporta las transferencias bulk,
isochronous, e interrupt. Adems tanto el host como el dispositivo USB pueden fungir
como controladores del proceso.

Message Pipes: este tipo de enlace virtual si tiene un formato USB definido y solo
puede soportar la transferencia Control.

77
13. ANEXOB.UsodelPICCCompiler

El compilador utilizado para el desarrollo del proyecto, se llama PIC C Compiler, el cual es
desarrollado por la empresa Custom Computer Services Inc. En la pgina web de dicha
empresa (www.ccsinfo.com), puede descargarse una versin de prueba o comprarse la versin
ms actual del software.

Este compilador presenta diversas caractersticas, entre las cuales podemos destacar la
inclusin de operadores de lenguaje C estndar, libreras para acceder a registros especficos
del PIC, adems de ser un ambiente integrado de desarrollo (IDE). En este anexo se explica la
forma de construir un nuevo proyecto para la realizacin del programa a grabar en el PIC.

Una vez instalado el compilador en el escritorio aparecer, si seleccionamos dicha opcin


durante la instalacin, el siguiente icono:

Figura 66. cono del compilador mostrado en el escritorio.

En el caso de que no hayamos seleccionado la instalacin de un icono de acceso directo en


el escritorio, podemos acceder al compilador desde el men inicio>Todos los programas>PIC C
> PIC C Compiler. Una vez hecho esto, se abrir la ventana del compilador, que es como se
muestra en la siguiente figura.

78
Figura 67. Aspecto de la ventana del compilador PIC C Compiler.

79
Para iniciar, se debe crear el archivo fuente, que contendr el cdigo a grabar, para ello es

necesario dirigirse al men archivo, a travs del icono , seleccionar el submen nuevo
(New) y posteriormente seleccionar archivo fuente (Source File).

Figura 68. Procedimiento para crear un nuevo archivo fuente.

Una vez hecho esto, se abrir el siguiente cuadro de dialogo que nos pedir seleccionar la
ubicacin y el nombre del archivo.

80
Figura 69. Cuadro de dialogo para especificar la ubicacin del archivo fuente a crear.

Una vez realizado este procedimiento, aparece una nueva hoja de trabajo, con el nombre del
archivo, como ejemplo, se muestra la siguiente figura, donde el nombre del archivo
seleccionado es USB.c.

Figura 70. Ejemplo del nombre del archivo fuente creado.

81
En este momento podemos comenzar a editar el cdigo fuente del programa a grabar en el
PIC. Una vez que se ha capturado el cdigo necesario, es necesario crear un nuevo proyecto
para poder compilarlo y generar el archivo hexadecimal (*.hex) necesario para cargar el
programa.

Para la creacin de un proyecto se selecciona el men Project, y en la cinta de opciones, se


elige la opcin Crear (Create).

Figura 71. Procedimiento para la creacin de un nuevo proyecto.

Al hacer click en esta opcin, aparecer el siguiente cuadro de dialogo, pidiendo que se
indique el archivo con el cdigo fuente que se desea grabar en el PIC, en nuestro ejemplo,
seleccionaremos el archivo USB.c que es archivo previamente creado.

Figura 72. Seleccin del archivo fuente para el proyecto a crear.

82
Una vez seleccionado el archivo fuente, aparece el siguiente cuadro de dialogo que nos
permitir elegir el tipo o modelo de PIC que deseamos programar. Por defecto, el programa
nombra el proyecto con el mismo nombre del archivo fuente, solo que con extensin *.pjt, la
ubicacin donde es guardado es la misma de donde se selecciono el archivo fuente, aunque
ambas opciones pueden ser modificadas al hacer click en el botn marcado con tres puntos
mostrado.

Figura 73. Especificacin del PIC a usar y la ubicacin y nombre del proyecto a crear.

Toda vez que se ha creado el proyecto, es necesario asegurarse que estamos trabajando en
el proyecto que se quiere, para ello se posiciona el cursor sobre la pestaa proyecto (Project)
ubicada en el lado izquierdo de la ventana del programa y se agrega el proyecto haciendo click
en el signo +.

83
Figura 74. Procedimiento para agregar un proyecto al compilador.

Esto abrir un nuevo cuadro de dialogo del cual se seleccionar el proyecto con el cual se
quiere trabajar. En caso de que dentro de la pestaa Projects se encuentre un proyecto distinto
al que deseamos trabajar, bastara con seleccionarlo y dar click en el botn con el signo menos
para eliminar el proyecto de la pestaa. S la pestaa Project no se encuentre disponible en el
lado izquierdo de la ventana, se deber activar desde el men View, seleccionando la opcin
mostrada.

Figura 75. Procedimiento para hacer visible la pestaa Project.

Una vez que se ha terminado de editar el cdigo, de crear el proyecto y agregarlo a la lista
de proyectos, es posible compilarlo, para ello se selecciona el men Compile y se elige la
opcin Compile.

Figura 76. Procedimiento para compilar el proyecto creado.

Al dar click en este botn, aparece el siguiente cuadro que muestra el progreso de la
compilacin, al final del cual aparecer la barra de estado que nos indicar si el cdigo se ha

84
compilado de manera exitosa o si por el contrario existen errores y advertencias, las cuales se
indicaran por el nmero de la lnea de cdigo donde existe dicho error.

Figura 77. Pantalla de estado de la compilacin.

85
14. ANEXOC.InstalacindelMCHPFSUSBFrameworkv2.3

El framework proporcionado por Microchip, incluye entre otros elementos la biblioteca de


enlace dinmico (dll) necesaria para comunicar la PC con el PIC va USB y LabVIEW as
como el driver necesario para la instalacin del dispositivo (PIC).

Al momento de la realizacin de este proyecto, la versin ms actual del framework es la 2.3,


la cual trabaja adecuadamente con los sistemas operativos Windows XP y Windows Vista,
sin embargo, es conveniente ingresar al sitio web de Microchip en busca de cualquier
actualizacin.

Antes de llevar a cabo la instalacin, es necesario descargar el software (framework), para


ello, se accede a la pgina web de Microchip, www.microchip.com, y en la opcin Wired
Connectivity seleccionar USB, esto nos llevar al USB Application Design Center (Centro de
Desarrollo de Aplicaciones USB), donde seleccionaremos la opcin Software & Tools y dentro
de la pgina web buscamos la versin ms reciente, la cual descargaremos a nuestra PC.

Una vez descargado el paquete de instalacin del framework procedemos a instalarlo, para
ello ejecutamos el instalador previamente descargado.

Figura 78. cono del instalador del framework.

Una vez hecho lo anterior, se mostrar un cuadro de dialogo pidiendo que aceptemos o
rechacemos los trminos de la licencia.

86
Figura 79. Acuerdo de licencia del framework de Microchip.

Una vez aceptados los trminos de la licencia, se mostrar la pantalla de bienvenida

Figura 80. Pantalla de bienvenida del instalador del framework de Microchip.

87
La siguiente ventana nos permitir cambiar la ubicacin donde se instalar el framework, es
importante recordar dicha ubicacin, ya que ser utilizada posteriormente.

Figura 81. Cuadro de dialogo para seleccionar el directorio de instalacin del framework de Microchip.

A continuacin podemos elegir la realizacin de copias de seguridad de los archivos que


sean reemplazados durante el proceso de instalacin, as como su ubicacin.

Figura 82. Cuadro de dialogo que permite la creacin de copias de seguridad al momento de la instalacin.
88
Al seleccionar siguiente (Next), veremos una pantalla de confirmacin.

Figura 83. Cuadro de dialogo para comenzar la instalacin del framework de Microchip.

La siguiente pantalla que veremos nos mostrar el proceso de instalacin.

Figura 84. Cuadro de dialogo mostrando el proceso de la instalacin del framework de Microchip .

89
Finalmente, la ltima pantalla nos permitir abrir archivos relacionados con la instalacin.

Figura 85. Cuadro de dialogo de confirmacin de la instalacin del framework de Microchip.

Una vez realizado este procedimiento, contamos con la biblioteca de enlace dinmico (dll)
para poder realizar el instrumento virtual. En caso de cambiar la ubicacin de instalacin por
defecto, ser necesario recordarla, pues posteriormente se utilizar al momento de instalar el
driver del dispositivo.

90
15. ANEXOD.CdigoenlenguajeCutilizadoenelPIC

1: ///////////////////////////////////////////////////////////////////////////
2: ////Descriptores.h////
3: ////////
4: ////Enestearchivoseconfiguranloselementosdescriptoresdel////
5: ////PIC,comosonelVIDyelPIDparaelcorrectofuncionamiento////
6: ////deldispositivo.Ademsseconfigurelnombreconelqueel////
7: ////dispositivoserreconocidoporlaPC.////
8: ////////
9: ////Estaconfiguracinsebasaenlosparametrosindicados////
10: ////enlanormaUSB2.0////
11: ////////
12: /////////////////////////////////////////////////////////////////////////
13: #IFNDEF__USB_DESCRIPTORS__
14: #DEFINE__USB_DESCRIPTORS__
15:
16: #include<usb.h>//SeincluyelalibreraconlasdirectivasUSB
17:
18: #DEFINEUSB_TOTAL_CONFIG_LEN32
19: //Longitud=config+interface+class+endpoint
20:
21: //Descripcindelaconfiguracin
22: charconstUSB_CONFIG_DESC[]={
23: USB_DESC_CONFIG_LEN,//longituddeldescriptor
24: USB_DESC_CONFIG_TYPE,//constanteparaCONFIGURATION(0x02)
25: USB_TOTAL_CONFIG_LEN,0,
26: //Tamaodedatosqueregresaestconfiguracin
27: 1,
28: //Nmerodeinterfacessoportadasporeldispositivo
29: 0x01,
30: //Identificadordeestaconfiguracin
31: 0x00,
32: //ndicedelacadenaquedescribeestaconfiguracin
33: 0xC0,
34: //bit6=1:autoalimentado(selfpowered)
35: //bit5=1:activacinremota
36: //bits04:reservados
37: //bit7=1
38: 0x32,
39: //energamximarequeridaporelpuerto
40: //(maximummilliamperes/2)(0x32=100mA)
41:
42: //Descripcindelainterfaz
43: USB_DESC_INTERFACE_LEN,//longituddeldescriptor

91
44: USB_DESC_INTERFACE_TYPE,//constanteparaINTERFACE(0x04)
45: 0x00,//Nmeroquedefineestainterfaz
46: 0x00,//Seleccinalternativadeinterfaz
47: 2,//Numerodeendpoints
48: 0xFF,//Cdigodeclase
49: 0xFF,//Cdigodesubclase
50: 0xFF,//Cdigodeprotocolo
51: 0x00,//ndicedelacadenaque
52: //describeestaconfiguracin
53:
54: //Descripcindeendpointdeentrada
55: USB_DESC_ENDPOINT_LEN,
56: //longituddeldescriptor
57: USB_DESC_ENDPOINT_TYPE,
58: //constanteparaENDPOINT(0x05)
59: 0x81,
60: //NmeroydireccindelEndpoint(0x81=EP1IN)
61: 0x02,
62: //Tipodetransferencia
63: //0:control,1:iso,2:masiva,3:interrupciones
64: USB_EP1_TX_SIZE,0x00,
65: //Tamaomximodepaquetesoportado
66: 0x01,
67: //intervalodepollingenms
68: //sloparatransferenciaconinterrupciones
69:
70: //Descripcindeendpointdesalida
71: USB_DESC_ENDPOINT_LEN,
72: //longituddeldescriptor
73: USB_DESC_ENDPOINT_TYPE,
74: //constanteparaENDPOINT(0x05)
75: 0x01,
76: //NmeroydireccindelEndpoint(0x01=EP1OUT)
77: 0x02,
78: //Tipodetransferencia
79: //0iscontrol,1isiso,2isbulk,3isinterrupt
80: USB_EP1_RX_SIZE,0x00,
81: //Tamaomximodepaquetesoportado
82: 0x01,
83: //intervalodepollingenms
84: //sloparatransferenciaconinterrupciones
85: };
86:
87:
88: #defineUSB_NUM_HID_INTERFACES0
89:
90: #defineUSB_MAX_NUM_INTERFACES1
91:
92
92: constcharUSB_NUM_INTERFACES[USB_NUM_CONFIGURATIONS]={1};
93:
94: #if(sizeof(USB_CONFIG_DESC)!=USB_TOTAL_CONFIG_LEN)
95: #errorUSB_TOTAL_CONFIG_LENnotdefinedcorrectly
96: #endif
97:
98: //Descriptoresdeldispositivo
99: charconstUSB_DEVICE_DESC[]={
100: USB_DESC_DEVICE_LEN,//Longituddelreporte
101: 0x01,//Constantedeldispositivo(0x01)
102: 0x10,0x01,//VersindeUSB(1.1)
103: 0x00,//Cdigodeclase
104: 0x00,//Cdigodesubclase
105: 0x00,//Cdigodeprotocolo
106: USB_MAX_EP0_PACKET_LENGTH,
107: //Tamaomximodepaqueteparaendpointt0.
108: //(BajaVelocidadespecifica8)
109: 0xd8,0x04,//vendorid(0x04D8Microchip)
110: 0x0b,0x00,//productid(0x000bPIC18Family)
111: 0x01,0x00,//Nmerodeversindeldispositivo
112: 0x01,//Indicedecadenadelproductor
113: 0x02,//Indicedecadenadelproducto
114: 0x00,//Indicedecadenadelnumerodeserie
115: USB_NUM_CONFIGURATIONS//Numerodeposiblesconfiguraciones
116: };
117:
118: constcharUSB_STRING_DESC_OFFSET[]={0,4,12};
119: //Ubicacindeliniciodelascadenas
120:
121: #defineUSB_STRING_DESC_COUNTsizeof(USB_STRING_DESC_OFFSET)
122:
123: charconstUSB_STRING_DESC[]={
124: //string0
125: 4,//Longituddelacadena
126: USB_DESC_STRING_TYPE,//Tipodedescriptor:String
127: 0x0a,0x08,//DefinicindeMicrosoftparaidiomainglesdeEUA
128: //string1
129: 8,//Longituddelacadena
130: USB_DESC_STRING_TYPE,//Tipodedescriptor:String
131: 'U',0,
132: 'S',0,
133: 'B',0,
134: //string2
135: 24,//Longituddelacadena
136: USB_DESC_STRING_TYPE,//Tipodedescriptor:String
137: 'D',0,
138: 'A',0,
139: 'Q',0,
93
140: '_',0,
141: 'L',0,
142: 'a',0,
143: 'b',0,
144: 'V',0,
145: 'I',0,
146: 'E',0,
147: 'W',0
148: };
149: #ENDIF

Unidaddeprocesamiento
Este cdigo lleva por ttulo LectoEscr.c y contiene todas las actividades y configuraciones
necesarias para llevar a cabo la comunicacin.

1: /////////////////////////////////////////////////////////////////////////
2: ////LectoEscr.c////
3: ////////
4: ////Estearchivocontienelasrutinasyconfiguracinnecesaria////
5: ////paraelfuncionamientodelPIC,conestecdigoseleenlos////
6: ////valoresdelasentradasdelmicrocontroladoryseenvan,////
7: ////tambinserecibenlosdatosenviadosporlaPCysecolocan////
8: ////enlassalidas.////
9: ////Estaconfiguracinsebasaenlosparametrosindicados////
10: ////enlanormaUSB2.0////
11: ////////
12: ////////////////////////////////////////////////////////////////////////
13:
14: #include<18F4550.h>//LibreriaconlasinstruccionesdelPIC
15: //Configuracindelreloj
16: #FUSESHSPLL
17: #FUSESPLL5
18: #FUSESUSBDIV
19: #FUSESCPUDIV1
20: #FUSESNOWDT,NOPROTECT,NOLVP,NODEBUG,VREGEN
21: //Findeconfiguracindelosfuses
22:
23: #usedelay(clock=48000000)//Definimoslafrecuenciadeloscilador
24:
25: #defineUSB_HID_DEVICEFALSE
26: //deshabilitamoselusodelasdirectivasHID
94
27: #defineUSB_EP1_TX_ENABLEUSB_ENABLE_BULK
28: //HabilitamosEP1(EndPoint1)deentradaparatransferenciasmasivas(bulk)
29: #defineUSB_EP1_RX_ENABLEUSB_ENABLE_BULK
30: //HabilitamosEP1(EndPoint1)desalidaparatransferenciasmasivas(bulk)
31: #defineUSB_EP1_TX_SIZE8
32: //Tamaodelbufferparaelendpointdetransferencias
33: #defineUSB_EP1_RX_SIZE8
34: //Tamaodelbufferparaelendpointderecepcin
35:
36: #include<pic18_usb.h>
37: //DriverparalafamiliaMicrochipPIC18Fxx5x
38: #include<Descriptores.h>
39: //ConfiguracindelUSBylosdescriptoresparaestedispositivo
40: #include<usb.c>
41: //LibreriaconlasinstruccionesparaelmanejodelpuertoUSB
42:
43: #defineLEDVPIN_C0//Sedefinenlospinesqueseocuparn
44: #defineLEDRPIN_C1//losLED'sindicadores
45: #defineEnciendeoutput_high//ascomolasinstrucciones
46: #defineApagaoutput_low//paraencenderlosyapagarlos
47:
48: //Sedefinenvariablesparacadaunadelasposiciones
49: //delavariablerecbuf,lacualesunarreglode8elementos
50: #defineB0recbuf[0]
51: #defineB1recbuf[1]
52: #defineB2recbuf[2]
53: #defineB3recbuf[3]
54: #defineB4recbuf[4]
55: #defineB5recbuf[5]
56: #defineB6recbuf[6]
57: #defineB7recbuf[7]
58:
59: //SedefineunnombreparacadaunodelospinesdelpuertoB
60: #defineBIT0PIN_B0
61: #defineBIT1PIN_B1
62: #defineBIT2PIN_B2
63: #defineBIT3PIN_B3
64: #defineBIT4PIN_B4
65: #defineBIT5PIN_B5
66: #defineBIT6PIN_B6
67: #defineBIT7PIN_B7
68:
69: //Rutinaprincipal
70: voidmain(void){
71:
72: int1recbuf[8];//Sedeclaranlasvariablesdondeseran
73: int1envia[8];//almacenadoslosdatosaenviaryrecibir
74: //ambassernde8bits
95
75:
76: Apaga(LEDV);//encendemosledrojohastaquese
77: Enciende(LEDR);//enumereeldispositivo
78:
79: usb_init();//seinicializaelpuertoUSB
80: usb_task();//sehabilitaelperiferico
81: usb_wait_for_enumeration();
82: //laejecucindelcdigosedetieneenestepuntohastaque
83: //eldispositivohayasidoenumeradoporelhost,unavez
84: //queestoocurraelprogramacontinuasuejecucin
85:
86: while(TRUE)//Estarutinaserefectuadaincondicionalmente
87: {
88: if(usb_enumerated())//sieldispositivohasidoenumerado
89: Apaga(LEDR);//seapagaelLEDindicadorrojoyse
90: Enciende(LEDV);//enciendeelLEDverde
91: {
92: while(true){/*Unavezencendidoslosindicadoresseejecuta
93: esteciclodemaneraincondicional
94: ParalacomunicacindesdeelPICalaPC(host):
95: Dependiendodelestadodelasentradas(10)sealmacenasu
96: valorenlavariableenva,lacualesunarreglode8bits
97: */
98: if(input(PIN_D0))
99: {envia[0]=1;}
100: else
101: {envia[0]=0;}
102: if(input(PIN_D1))
103: {envia[1]=1;}
104: else
105: {envia[1]=0;}
106: if(input(PIN_D2))
107: {envia[2]=1;}
108: else
109: {envia[2]=0;}
110: if(input(PIN_D3))
111: {envia[3]=1;}
112: else
113: {envia[3]=0;}
114: if(input(PIN_D4))
115: {envia[4]=1;}
116: else
117: {envia[4]=0;}
118: if(input(PIN_D5))
119: {envia[5]=1;}
120: else
121: {envia[5]=0;}
122: if(input(PIN_D6))
96
123: {envia[6]=1;}
124: else
125: {envia[6]=0;}
126: if(input(PIN_D7))
127: {envia[7]=1;}
128: else
129: {envia[7]=0;}
130:
131: usb_put_packet(1,envia,8,USB_DTS_TOGGLE);
132: /*Seenvialavariable"envia",lacualtieneuntamaode
133: 8bits,porelendpoint1*/
134:
135: //ParaefectuarlacomunicacindesdelaPC(host)alPIC
136: if(usb_kbhit(1)){
137: //sielendpointdeentradacontienedatosprovenientesdelhostel
138: //programacontinuasuejecucin,delocontrariosaltaestaseccin
139: usb_get_packet(1,recbuf,8);
140: /*Serecibelainformacinysealmacenaenlavariablerecbuf
141: queesdetipoarreglo,cadaunadelasposicionescorresponde
142: acadaunodelosbitsdelpuertoB*/
143: if(B0==1)
144: Enciende(BIT0);
145: else
146: Apaga(BIT0);
147:
148: if(B1==1)
149: Enciende(BIT1);
150: else
151: Apaga(BIT1);
152:
153: if(B2==1)
154: {Enciende(BIT2);}
155: else
156: {Apaga(BIT2);}
157:
158: if(B3==1)
159: {Enciende(BIT3);}
160: else
161: {Apaga(BIT3);}
162:
163: if(B4==1)
164: {Enciende(BIT4);}
165: else
166: {Apaga(BIT4);}
167:
168: if(B5==1)
169: {Enciende(BIT5);}
170: else
97
171: {Apaga(BIT5);}
172:
173: if(B6==1)
174: {Enciende(BIT6);}
175: else
176: {Apaga(BIT6);}
177:
178: if(B7==1)
179: {Enciende(BIT7);}
180: else
181: {Apaga(BIT7);}
182: }
183: }
184: }
185: }
186: }//Findelprograma

98
16. ANEXOE.Diagramaselctricos

Para llevar a cabo las operaciones requeridas, se utiliz el circuito mostrado a continuacin:

Figura 86. Diagrama elctrico de la tarjeta de adquisicin de datos.

99
15.1ListadeMateriales
Receptculo USB tipo B para circuito impreso
C1: Capacitor 100nF
C2 y C3: Capacitores de 22pF
CN1, CN2, CN3, CN4, CN5 y CN6: Conectores chicos de tres tornillos
D1: LED Verde
D2: LED Rojo
IC1: Microcontrolador PIC18F4550
R1: Resistencia de 1k
R2 y R3: Resistencias de 330
RP1: 8 Resistencias de 1k
X1: Cristal de cuarzo de 20MHz

100
17. ANEXOF.Instalacindelatarjetadeadquisicin

Para instalar la tarjeta de adquisicin de datos, es necesario conectarla con un cable USB a
la PC, una vez realizado esto, es necesario especificar la ubicacin del driver necesario para
poder utilizarla, este proceso solo se realiza la primera vez que se conecta el dispositivo. A
continuacin se presenta el proceso de instalacin necesario para los sistemas operativos
Windows XP y Windows Vista .

Windows Vista
Una vez conectada la tarjeta, aparecer el siguiente cuadro de dialogo, del cual debe
seleccionarse la opcin recomendada: Buscar e instalar el software del controlador. Ntese
que el nombre del dispositivo es el que nosotros asignamos al momento de realizar el programa
en lenguaje C para el PIC.

Figura 87. Cuadro de dialogo mostrado al conectar el dispositivo por primera vez.

Al hacer click en la opcin sealada, aparecer el siguiente globo en pantalla

Figura 88. Notificacin de instalacin de dispositivo.

Es conveniente dar click en el globo para ver el estado de la instalacin, despus de algunos
segundos, veremos el siguiente cuadro de dialogo y seleccionamos el botn mostrado.

101
Figura 89. Cuadro de dialogo mostrado durante la instalacin del dispositivo.

Del nuevo cuadro de dialogo mostrado, seleccionaremos la opcin avanzada Buscar


software de controlador en el equipo

Figura 90. Cuadro de dialogo para realizar la bsqueda del controlador del dispositivo.

102
Hecho esto, daremos click en el botn Examinar del cuadro de dialogo mostrado

Figura 91. Cuadro de dialogo donde se especifica la ubicacin del controlador del dispositivo.

Se mostrar el cuadro de dialogo que permitir seleccionar la ubicacin del driver, para ello,
seleccionaremos la carpeta mostrada en la imagen, que se encuentra dentro de la carpeta
Microchip Solutions, que es donde se instala por defecto el framework proporcionado por
Microchip. Una vez seleccionada la carpeta, daremos click en el botn Aceptar.

103
Figura 92. Ubicacin del controlador del dispositivo.

El siguiente cuadro de dialogo nos pedir la confirmacin de la ubicacin del driver.

104
Figura 93. Cuadro de dialogo mostrando la ubicacin del controlador del sispositivo.

Finalmente, las siguientes ventanas muestran el proceso de instalacin del driver y la


confirmacin de que ste ha sido instalado correctamente.

Figura 94. Pantalla mostrando el proceso de instalacin del dispositivo.

105
Figura 95. Notificacin de instalacin de dispositivo en Windows Vista.

Figura 96. Notificacin de instalacin correcta del dispositivo en Windows Vista.

En este momento se cuenta con el driver necesario para poder trabajar con el dispositivo
desde LabVIEW.

106
Windows XP

En este sistema operativo, aparece el siguiente globo al conectar el dispositivo por primera
vez, despus de ello es necesario elegir la ubicacin del driver necesario, la cual es la misma
que la mostrada anteriormente para el caso de Windows Vista .

Figura 97. Globo de informacin mostrado en Windows XP al conectar la tarjeta.

La versin 2.3 del framework proporcionado por Microchip, que es la utilizada en este
proyecto, es compatible completamente con ambas versiones del sistema operativo Windows.

107

You might also like