You are on page 1of 15

UNIVERSIDAD POLITECNICA SALESIANA

SISTEMAS MICROPROCESADOS I

UNIVERSIDAD POLITÉCNICA SALESIANA


INGENIERIA ELECTRÓNICA EN TELECOMUNICACIONES

SISTEMAS MICROPROCESADOS I

Tema: Desarrollo Comunicación USB PC-PIC-PC con LabView.

Fecha de Realización: 2009 / 12 / 28 /


año mes día

Realizado por:

Alumnos: Cristian Zapata


Francisco Jurado

Periodo Lectivo: 2009- 2010

Cristian Zapata
Francisco Jurado 1
UNIVERSIDAD POLITECNICA SALESIANA
SISTEMAS MICROPROCESADOS I

Desarrollo del programa en LabView


• Creamos un Nuevo Proyecto en LabView

Ventana de presentación de Inicio de LabView.

• Comunicación USB con LabView.


Para realizar la comunicación USN mediante LabView se necesita crear un archivo dll (Dynamic Link
Library), para lo cual se deben seguir las instrucciones que se indican en los tutoriales de la pagina de la
National Instruments http://www.ni.com, en este tutorial para mayor facilidad en su desarrollo se adjunta
el archivo FASE.dll y un ejecutable desarrollado en Visual Basic llamado Register the DLL, estos
archivos los guardamos en la misma carpeta donde se localiza nuestro proyecto.Como primer paso
debemos ejecutar el archivo ejecutable llamado Register the DLL, el cual nos servirá para poder
registrar esta librería en Windows, luego de ejecutar exitosamente este archivo procedemos a realizar
los siguientes pasos para la creación de nuestro programa.

1. En la Ventana de Block Diagram en el menú Functions, accedemos al submenú Connectivity


seleccionamos ActiveX y escogemos Automation Open.

A este objeto creamos una constante en la entrada Automation Refnum, damos click derecho sobre la
constante creada y seleccionamos Select ActiveX Class y en Browse buscamos nuestro archivo dll el

Cristian Zapata
Francisco Jurado 2
UNIVERSIDAD POLITECNICA SALESIANA
SISTEMAS MICROPROCESADOS I

cual lo debemos situar en la misma carpeta en la que se va a grabar este programa en LabView.

2. En el menú Functions, accedemos al submenú Programming seleccionamos Aplication Control y


escogemos la opción de Invoke Node esta función la unimos a la salida Automation Refnum del objeto
Automation Open, automáticamente el objeto Invoke Node cambiara de nombre a _Class3 que se
refiere a los parámetros de nuestro archivo dll, damos click derecho sobre el icono Invoke Node y en el
menú que aparece seleccionamos Select Method y en el cuadro de dialogo que aparece escogemos
ConnectToHID, y en el icono aparece una opción llamada pHostWin a esta entrada creamos una
constante y dejamos por defecto el cero.

3. En el menú Functions, de la ventana de Diagram Block escogemos el icono Exec Control y


seleccionamos While Loop y lo creamos es aconsejable que sea grande para poder colocar los demás
items necesarios.

4. Dentro del lazo While Loop ingresamos el icono de Invoke Node y lo unimos al primer Invoke Node
creado luego le damos un click y en el menú que nos aparece seleccionamos la opción readhid y en el
icono aparecerán dos niveles readhid y Buffer, ingresamos al menú Functions en el submenú

Cristian Zapata
Francisco Jurado 3
UNIVERSIDAD POLITECNICA SALESIANA
SISTEMAS MICROPROCESADOS I

Programming seleccionamos Array y escogemos la opción Initialize Array, a esta función en la entrada
element creamos una constante de valor cero, la entrada dimension size 0 creamos una constante con
el valor de 20, y la salida initialized array la unimos a la entrada de Buffer del segundo Invoke Node
creado

5. Ingresamos al menú Functions al submenú Programming seleccionamos la opción Structures y


escogemos Case Structure.

6. Unimos la salida readhid de la segunda función Invoke Node creada al símbolo del Case Structure
que sirve para seleccionar el case que puede ser TRUE o FALSE.

7. Dentro del case TRUE de la estructura ingresada del menú Funtions accedemos al submenú
Connectivity seleccionamos ActiveX y escogemos Variant To Data, ingresamos al menú Functions al

Cristian Zapata
Francisco Jurado 4
UNIVERSIDAD POLITECNICA SALESIANA
SISTEMAS MICROPROCESADOS I

submenú Programming seleccionamos Array y escogemos la opción Array Constant dentro de este
ingresamos una constante de valor cero y unimos a la entrada type de la función Variant To Data, de la
salida Buffer de la segunda función Invoke Node unimos a la entrada variant de la función Variant To
Data.

8. En el menú Functions en el submenú Programming seleccionamos Array y escogemos Index Array


aumentamos a 3 las entradas de index, nos situamos en la entrada n-dimension array y la unimos a la
salida data de la función Variant To Data, y a las entradas de index colocamos constantes de valor 1, 2
y 3 para cada entrada.

9. Ingresamos al menú Functions al submenú Programming seleccionamos Boolean y escogemos la


opción Number To Boolean Array la entrada de esta función la unimos a la primera salida de la función
Index Array, la salida de la función Number To Boolean Array la unimos a la entrada de un arreglo de
ocho Indicadores que representaran los Leds a ser encendidos por el dipswitch del protoboard.

Cristian Zapata
Francisco Jurado 5
UNIVERSIDAD POLITECNICA SALESIANA
SISTEMAS MICROPROCESADOS I

10. Continuando dentro del case TRUE ahora creamos nuevamente otra función Invoke Node de la
misma forma que las anteriores y la unimos a la segunda función Invoke Node.

11. Le damos un click a la tercera función Invoke Node creada y en el menú que aparece
seleccionamos la opción writehid y automáticamente al icono se añaden dos opciones.

12. Ingresamos al menú Functions y en el submenú Programming seleccionamos Array y escogemos


las opciones Replace Array Subset e Initialize Array, a la función Initialize Array a las entradas element
y dimension size les creamos dos constantes de valores 0 y 17 respectivamente, la salida de la función
Initialize Array la unimos a la entrada n-dimension array de la función Replace Array Subset a esta
función a la entrada index creamos una constante de valor 1 y salida la unimos a la entrada Buffer de la
tercera función Invoke Node. Adicionalmente agregamos del menú Functions del submenú
Programming seleccionamos Timing y escogemos Wait (ms) al cual le agregamos una constante de
valor 1.

Cristian Zapata
Francisco Jurado 6
UNIVERSIDAD POLITECNICA SALESIANA
SISTEMAS MICROPROCESADOS I

13. En la Ventana Front Panel ingresamos al menú Controls en el submenú Modern seleccionamos
Boolean y escogemos ocho controles que representaran un dipswitch quedando nuestro panel Frontal
de la siguiente forma.

14. Retornamos a la Ventana Block Diagram y colocamos fuera del Case Structure pero dentro del
While Loop nuestros ocho controles que representan interruptores, del menú Functions del submenú
Programming seleccionamos Array y escogemos Build Array y lo extendemos hasta que tenga 8
entradas a las cuales unimos los interruptores, ingresamos nuevamente al submenú Programming,
seleccionamos Boolean donde escogemos la opción Boolean Array To Number unimos la salida de la
función Build Array a la entrada de la función Boolean Array To Number y la salida de esta a la entrada
new element/subarray de la función Replace Array Subset que se encuentra dentro del case TRUE del
Case Structure.

Cristian Zapata
Francisco Jurado 7
UNIVERSIDAD POLITECNICA SALESIANA
SISTEMAS MICROPROCESADOS I

15. Ahora la primera salida de la segunda función Invoke Node llamada _Class3 la unimos al Case
Structure.

16. Ingresamos al menú Functions al submenú Programming seleccionamos Application Control


escogemos Close Reference y el icono lo colocamos fuera del While Loop y la entrada la unimos a la
conexión realizada en el paso anterior.

17. Como se observa en la gráfica anterior al realizar la conexión esta queda con un cuadro de color
blanco en el borde del Case Structure por lo que nos colocamos en case FALSE y realizamos la
conexión que se muestra a continuación y el cuadro de color blanco cambia y toma el color de la
conexión.

Cristian Zapata
Francisco Jurado 8
UNIVERSIDAD POLITECNICA SALESIANA
SISTEMAS MICROPROCESADOS I

18. Una vez realizado los pasos anteriores en la Ventana Front Panel podemos decorar a nuestro
programa con las diferentes herramientas que presenta LabView para mejorar su presentación
quedando nuestro Programa y su presentación para el usuario de la siguiente forma:

Panel frontal:

Cristian Zapata
Francisco Jurado 9
UNIVERSIDAD POLITECNICA SALESIANA
SISTEMAS MICROPROCESADOS I

Programa:

Nota.- El Interfaz fue desarrollado en LabView (Versión 8.5)

• Realizamos la programación para el PIC18F2550, armamos el circuito siguiendo el esquema


que se muestra a continuación obteniendo así la comunicación PIC-PC-PIC con la Interfaz
desarrollada en LabView.
Elementos Utilizados:
– PIC 18F2550
– Cable USB
– Resistencias 330 Ω
– Diodos Led's
– Dipswitch

Cristian Zapata
Francisco Jurado
10
UNIVERSIDAD POLITECNICA SALESIANA
SISTEMAS MICROPROCESADOS I

Diagrama Esquemático:

Cristian Zapata
Francisco Jurado
11
UNIVERSIDAD POLITECNICA SALESIANA
SISTEMAS MICROPROCESADOS I

Código para el PIC18F2550 realizado en Microcode

DEFINE OSC 48
DEFINE LOADER_USED 1

USBBufferSizeMax con 16 ' maximum buffer size


USBBufferSizeTX con 16 ' input
USBBufferSizeRX con 16 ' output
pulsosvuelta con 1
' the USB buffer...
USBBuffer Var Byte[USBBufferSizeMax]
USBBufferCount Var Byte
i var word
revol var word
rpm var word
J VAR BYTE
ALPHA VAR BYTE
FPulso var bit
' alias
Zero var portb.0 ' cruce por cero frecuencia
Tach var portb.1 ' pulso velocidad
out var portc.2
int0ie var intcon.4
int0if var intcon.1
int1ie var intcon3.3
int1if var intcon3.0
tmr0ie var intcon.5
tmr0if var intcon.2

' ************************************************************
' * main program loop - remember, you must keep the USB *
' * connection alive with a call to USBService every couple *
' * of milliseconds or so... *
' ************************************************************

usbinit ' initialise USB...


TRISA=%00111111
trisc.2=0

Cristian Zapata
Francisco Jurado
12
UNIVERSIDAD POLITECNICA SALESIANA
SISTEMAS MICROPROCESADOS I

trisc.7=0
trisb=%00000000
portc=0
portb=0
adcon1=$0F
CMCON=7
CVRCON=0
rcon.7=0

ProgramStart:
USBbUFFER[0]=PORTA
gosub DoUSBOut
gosub DoUSBIn
goto ProgramStart

' ************************************************************
' * receive data from the USB bus *
' ************************************************************

DoUSBIn:
USBBufferCount = USBBufferSizeRX ' RX buffer size
USBService ' keep connection alive
USBIn 1, USBBuffer, USBBufferCount, EndDoUSBIn ' read data, if available
PORTB=USBBUFFER[0]
enddousbin:
return

' ************************************************************
' * wait for USB interface to attach *
' ************************************************************
DoUSBOut:
USBBufferCount = USBBufferSizeTX ' TX buffer size
USBService ' keep connection alive
USBOut 1, USBBuffer, USBBufferCount, fDoUSBOut ' if bus available, transmit data
fdousbout:
return
end

Cristian Zapata
Francisco Jurado
13
UNIVERSIDAD POLITECNICA SALESIANA
SISTEMAS MICROPROCESADOS I

Circuito armado en el Protoboard

Programa en LabView

Cristian Zapata
Francisco Jurado
14
UNIVERSIDAD POLITECNICA SALESIANA
SISTEMAS MICROPROCESADOS I

Bibliografía

– Ayuda de Microcode
– Apuntes de la Materia Sistemas Microprocesados I, Ing. Luis Oñate
– http://www.ni.com/

Cristian Zapata
Francisco Jurado
15