You are on page 1of 5

Tutorial del puerto USB con Visual C++ USB En un principio se tena la interfaz serial y paralelo, para la transferencia

de datos a distintos dispositivos, pero era necesario agrupar todos los conectores creando uno ms sencillo. USB (Universal Serial Bus) con una velocidad de 12Mb/seg., USB 2.0 que se utiliza con mayor frecuencia en la actualidad es la evolucin del USB 1.0, con velocidades en este momento de hasta 480 Mb/seg. USB es una nueva arquitectura de bus o un nuevo tipo de bus desarrollado por un grupo de siete empresas (Compaq, Digital Equipment Corp, IBM PC Co., Intel, Microsoft, NEC y Northern Telecom) que forma parte de los avances plugand-play y permite instalar perifricos sin tener que abrir tu mquina para instalarle hardware, es decir, basta con que tu conectes dicho perifrico en la parte posterior de tu computador y listo. Esta nueva forma de transmitir informacin puede ser encontrada en varios dispositivos tales como teclados, mouses, scanner, impresoras, mdems, placas de sonido, cmaras, etc). Para utilizar el puerto USB de la computadora, se utilizara microcontroladores de la familia de los 18, debido a que esta familia posee internamente un modulo del manejo del USB, dejando a la familia de los 16 a la historia. El circuito bsico de la comunicacin USB se presenta a continuacin.

Figura 1: Circuito bsico para la comunicacin USB

A continuacin se presenta un ejemplo de un programa para encender del puerto B del microprocesador un led durante un segundo y la suma de dos nmeros de 8 bits enteros, utilizando la comunicacin USB con un programa en el ambiente de Visual C++. Y el cdigo principal para la manipulacin del puerto USB en el PIC utilizando CCS C Compiler es el siguiente: #include <18F4550.h> #fuses HSPLL,NOWDT,NOPROTECT,NOLVP,NODEBUG,USBDIV,PLL3,CPUDIV1,V REGEN #use delay(clock=20000000) #define USB_HID_DEVICE FALSE //deshabilitamos el uso de las directivas HID #define USB_EP1_TX_ENABLE USB_ENABLE_BULK //turn on EP1(EndPoint1) for IN bulk/interrupt transfers #define USB_EP1_RX_ENABLE USB_ENABLE_BULK //turn on EP1(EndPoint1) for OUT bulk/interrupt transfers #define USB_EP1_TX_SIZE 1 //size to allocate for the tx endpoint 1 buffer #define USB_EP1_RX_SIZE 3 //size to allocate for the rx endpoint 1 buffer #include <pic18_usb.h> //Microchip PIC18Fxx5x Hardware layer for CCS's PIC USB driver #include <PicUSB.h> //Configuracin del USB y los descriptores para este dispositivo #include <usb.c> //handles usb setup tokens and get descriptor reports #define modo recibe[0] #define param1 recibe[1] #define param2 recibe[2] #define resultado envia[0] void main(void) { int8 recibe[3]; //declaramos variables int8 envia[1]; set_tris_b(0x00); //configuracion del puerto B usb_init(); //inicializamos el USB usb_task(); //habilita periferico usb e interrupciones usb_wait_for_enumeration(); //esperamos hasta que el PicUSB sea configurado por el host output_b(0x00);//inicializamos el puerto B for(;;){ if(usb_enumerated()) //si el PicUSB est configurado { if (usb_kbhit(1)) //si el endpoint de salida contiene datos del host { usb_get_packet(1, recibe, 3); //adquirimos los datos enviados de la computadora al PIC if (modo == 0) // Modo enviar datos {

resultado = param1+param2; //suma de los dos nmeros enviados por Visual C++ usb_put_packet(1, envia, 1, USB_DTS_TOGGLE); //enva la suma a Visual C++ } if (modo == 1) // Modo_recibir { if (param1 == 1) output_b(0x01);//enviamos un pulso en alto al led delay_ms(1000);//retardo de 1 segundo output_b(0x00);//quitamos el pulso en alto al led } }//fin usb kbhint }//fin de la configuracion del usb }//fin del for infinito }//fin del main Ahora se realiza un proyecto en Visual C++ MFC AppWizard (exe) llamado usbprueba, mostrado en la Figura 2, con este programa se podr transferir datos al microprocesador para prender o apagar un led, o recibir el resultado de la suma de dos nmeros almacenados de cajas de texto en el programa. Para la aplicacin utilizaremos de tipo Dialog Based , dos botones , uno para recibir y el otro para enviar, tres cajas de texto de tipo int, dos para almacenar cantidades que sern sumados por el microprocesador. Como se presenta en la Figura 3.

Figura 2: Seleccin del tipo de proyecto en Visual C++

Figura 3: Ventana principal del programa de ejemplo Realizado lo anterior de dispone a agregar los siguientes archivos que son las libreras para la manipulacin del puerto USB al microcontrolador: usb2550.h USB.h USB.cpp usb2550.dll usb2550.lib

Todos estos archivos deben estar presentes en la carpeta de le proyecto del programa que se est realizando. Los archivos con extensin h y cpp deben ser incluidos en el espacio de trabajo del programa. Y el archivo lib debe ser incluida en el proyecto mostrado en la Figura.

Figura 4: Insercin de la librera usb2550.lib en el ejemplo En el cdigo fuente principal, es decir usbpruebaDlg.cpp, se deben agregar los siguientes includes: #include "USB.h" #include "usb2550.h"

Como tambin declarar la siguiente variable global para la utilizar en las funciones que manipulan el puerto USB. USB myUSB; Para enviar las dos cantidades al microprocesador para que este se encargue de sumarlos se coloca el siguiente cdigo en el botn de recibir. UpdateData(true); myUSB.SumaPIC(valor1,valor2); suma=myUSB.ResultadoPIC(); UpdateData(false); Y para enviar instrucciones al microprocesador se colocara el siguiente cdigo en el botn de enviar. BYTE SendData[2]; SendData[0]=1; //el modo SendData[1]=1; //parametro 1 myUSB.SendPacket(SendData,2); Finalmente al conectar el microcontrolador con el puerto USB a la computadora se debe instalar el driver que dar el acceso a la transferencia de datos, mostrado en la figura 5.

Figura 5: iconos de la carpeta del driver para el USB En la imagen 6 se muestra el resultado final de este ejemplo que se describi anteriormente.

Figura 5: Fotografa del micro procesador en su funcionamiento

You might also like