Professional Documents
Culture Documents
Prestador
Salas Albarrn Oscar
Carrera
Ingeniera Mecatrnica
No. De Boleta
2005640114
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.
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.
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
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.
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.
Para finalizar, la siguiente tabla nos indica algunas de las principales diferencias entre el
instrumento convencional o tradicional, y el instrumento virtual:
5
4. IntroduccinaLabVIEW[4],[5]
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.
Panel Frontal
Es la interfaz del usuario con el instrumento virtual. La siguiente figura muestra un ejemplo
de este panel:
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
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
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
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.
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.
Botn de pausa
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.
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.
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.
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.
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 B, poseen una forma cuadrada y se utilizan principalmente para dispositivos de alta
velocidad (como discos duros externos, quemadores externos, entre otros).
14
La distribucin de los cables en los conectores es de la siguiente forma [19]:
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.
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.
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.
- 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.
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.
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)
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
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:
20
La siguiente figura muestra la disposicin de las terminales del microcontrolador.
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.
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.
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.
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).
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).
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.
29
8. ProgramacindelPIC18F4550
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:
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).
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.
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:
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:
35
para cada dato del microframe. El
puerto (tubera o pipe) puede utilizar
menos ancho de banda que el
reservado.
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.
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.
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
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.
41
Figura 19. Configuracin de los divisores para obtener una seal de 48MHz a partir de un cristal de 20MHz.
42
9. ProgramacindelInstrumentoVirtual(VI)
5
Para descargarlo, dirigirse a la siguiente URL:
http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&nodeId=2651¶m=en534494
43
9.1OpenUSB
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:
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
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:
49
Figura 27. Configuracin de la funcin MPUSBOpen dentro del Call Library Function Node.
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:
51
Una vez configurado este parmetro, se procede a agregar los parmetros restantes como
se muestra en las siguientes imgenes:
52
Figura 32. Configuracin del parmetro end_point de la funcin MPUSBOpen.
53
Figura 34. Configuracin del parmetro res de la funcin MPUSBOpen.
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:
55
Figura 36. Configuracin de los parmetros de la funcin MPUSBOpen.
56
9.2WriteUSB
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.
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.
58
Figura 40. Configuracin de la funcin MPUSBWrite dentro del Call Library Function Node.
59
Figura 42. Configuracin del parmetro SendData de la funcin MPUSBWrite.
60
Figura 44. Configuracin del parmetro DataLength de la funcin MPUSBWrite.
61
9.3ReadUSB
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.
62
Figura 48. Diagrama de Bloques del SubVI ReadUSB.
63
Figura 49. Configuracin de la funcin MPUSBRead dentro del Call Library Function Node.
64
Figura 51. Configuracin del parmetro ReceiveData de la funcin MPUSBRead.
65
Figura 53. Configuracin del parmetro ReceiveLength de la funcin MPUSBRead.
66
9.4CloseUSB
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.
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:
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:
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:
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.
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
[14] USB Complete. Everything you need to develop custom USB peripherals
Jack Axelson
Third Edition
Lakeview Research
76
12. ANEXOA.TerminologaUSB[22]
- 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.
- 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.
- 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).
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.
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).
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.
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.
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.
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.
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.
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.
85
14. ANEXOC.InstalacindelMCHPFSUSBFrameworkv2.3
Una vez descargado el paquete de instalacin del framework procedemos a instalarlo, para
ello ejecutamos el instalador previamente descargado.
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.
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.
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.
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.
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:
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.
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.
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.
104
Figura 93. Cuadro de dialogo mostrando la ubicacin del controlador del sispositivo.
105
Figura 95. Notificacin de instalacin de 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 .
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