manual usb

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

Upload: pancho-xavier

Post on 14-Jun-2015

3.592 views

Category:

Documents


6 download

TRANSCRIPT

UNIVERSIDAD POLITECNICA SALESIANA

SISTEMAS MICROPROCESADOS I

UNIVERSIDAD POLITÉCNICA SALESIANAINGENIERIA 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 ZapataFrancisco 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 ZapataFrancisco 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 ZapataFrancisco 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 ZapataFrancisco 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 ZapataFrancisco 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 ZapataFrancisco 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 ZapataFrancisco 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 ZapataFrancisco 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 ZapataFrancisco 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 ZapataFrancisco Jurado 10

UNIVERSIDAD POLITECNICA SALESIANA

SISTEMAS MICROPROCESADOS I

Diagrama Esquemático:

Cristian ZapataFrancisco 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 sizeUSBBufferSizeTX con 16 ' input USBBufferSizeRX con 16 ' outputpulsosvuelta con 1' the USB buffer...USBBuffer Var Byte[USBBufferSizeMax] USBBufferCount Var Byte i var wordrevol var wordrpm var wordJ VAR BYTEALPHA VAR BYTEFPulso var bit' aliasZero var portb.0 ' cruce por cero frecuenciaTach var portb.1 ' pulso velocidadout var portc.2int0ie var intcon.4int0if var intcon.1int1ie var intcon3.3int1if var intcon3.0tmr0ie var intcon.5tmr0if 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 ZapataFrancisco Jurado 12

UNIVERSIDAD POLITECNICA SALESIANA

SISTEMAS MICROPROCESADOS I

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

ProgramStart: USBbUFFER[0]=PORTA gosub DoUSBOut gosub DoUSBIngoto 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: returnend

Cristian ZapataFrancisco Jurado 13

UNIVERSIDAD POLITECNICA SALESIANA

SISTEMAS MICROPROCESADOS I

Circuito armado en el Protoboard

Programa en LabView

Cristian ZapataFrancisco 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 ZapataFrancisco Jurado 15