Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                

Usb Hid

Descargar como pptx, pdf o txt
Descargar como pptx, pdf o txt
Está en la página 1de 19

USB HID

Para

utilizar el modo de trabajo HID es necesario actualizar nuestro compilador a una versin ms reciente, en nuestro caso esa versin es la 4.114. carpeta, contiene dos archivos:

La

Ideutilsupd pcwhdupd

Primero

ejecutamos el archivo pcwhdupd, recordando que si trabajamos en un sistema Vista, 7 u 8 debemos hacerlo como modo administrador. Ahora ejecutamos el otro archivo y listo, tendremos nuestro compilador instalado.

Funciones y Libreras del HID


Para

este modo de trabajo tenemos que escoger cual de los 2 pics vamos a manejar, pueden ser el 4550 o el 2550. La palabra e configuracin ser la misma que en el CDC

Funciones y Libreras del HID


La

frecuencia de reloj tambien ser de 48 MHz, agregamos la siguiente librera: <pic18_usb.h> la cual contiene todos los registros y arquitectura de los pics de la familia 18 para poder manejar los drivers de usb internos que cada computadora trae.

#include

Funciones y Libreras del HID


#include

<Descriptor_easyHID.h> Esta librera contiene toda la informacin acerca del envo y recepcin de datos as como tambin el tamao de los buffers de envo y rececpcin y los VID y PID para los pics, que en nuestro caso no modificaremos ya nada de esa librera.

Funciones y Libreras del HID


#define

USB_CONFIG_HID_TX_SIZE 32 #define USB_CONFIG_HID_RX_SIZE 32 dos lneas crean unas macros para definir dentro de mi programa principal el tamao de la palabra que se va a enviar y recibir. Cada dato enviado no puede exceder este tamao, en este caso son 32 bits a enviar y recibir

Estas

Funciones y Libreras del HID


usb_init();

Inicia el USB usb_task(); Habilita las interrupciones por USB USB_debug(); Muestra el estado de la conexin USB

Flujo Principal

Al igual que la comunicacin CDC, este modo de trabajo necesita un bucle principal donde recibe y enva informacin: if (usb_kbhit(1)) { usb_get_packet(1, recibe, USB_CONFIG_HID_RX_SIZE); }

El

bucle anterior, est diseado para poder recibir una instruccin a traves del bus USB por medio de la interrupcion kbhit y guardarlo en una buffer denominado EndPoint1. Una vez almacenado lo sacamos utilizando la instruccin usb_get_packet y lo guardamos en la variable recibe indicando el buffer por el cual vamos a sacar el dato, que en este caso es un arreglo creado anteriormente por la variable recibe.

Ejemplo
Crear

un programa HID que permita encender y apagar 4 leds por medio de una interfaz en Visual C#

Programa Ejemplo
#include

<18F2550.h>

#fuses

NOMCLR,HSPLL,NOWDT,NOPROTECT,NOL VP,NODEBUG,USBDIV,PLL5,CPUDIV1,VREG EN,NOPBADEN delay(clock=48000000)

#use

#include

<pic18_usb.h> #include <Descriptor_easyHID.h> #include <usb.c>


#define

LED_GREEN PIN_C6 #define LED_RED PIN_C7

#define

USB_CONFIG_HID_TX_SIZE 32 #define USB_CONFIG_HID_RX_SIZE 32 0x01 0x02 0x03 0x04

#define

LED_1 #define LED_2 #define LED_3 #define LED_4

#define

LED_ON output_high #define LED_OFF output_low #use standard_io(b) #use standard_io(c)

void {

USB_debug()

LED_ON(LED_RED); LED_OFF(LED_GREEN); usb_wait_for_enumeration(); LED_ON(LED_GREEN); LED_OFF(LED_RED);

void {

main(void)

int8 int8

recibe[USB_EP1_RX_SIZE]; envia[USB_EP1_TX_SIZE];

output_b(0x00);

usb_init(); usb_task(); USB_debug();

while (TRUE) { if(usb_enumerated()) { if (usb_kbhit(1)) { usb_get_packet(1, recibe, USB_CONFIG_HID_RX_SIZE); switch(recibe[1]) { . case LED_1: output_toggle(PIN_B7); break; case LED_2: output_toggle(PIN_B6); break; case LED_3: output_toggle(PIN_B5); break; case LED_4: output_toggle(PIN_B4); break; } } } } }

También podría gustarte