Este es el programa Basic, de lo más simple (generado por EasyHid y completado despues). Uso el PIC18F2455 y controlo un ventilador por PWM y un led que cambia de estado en las comunicaciones. El montaje final es para un amigo que quiere hacerle modding al PC y controlar 5 ventiladores y no se que más.
Codigo:
DEFINE OSC 48
"DEFINE LOADER_USED 1
USBBufferSizeMax con 8 " maximum buffer size
USBBufferSizeTX con 8 " input
USBBufferSizeRX con 8 " output
" the USB buffer...
USBBuffer Var Byte[USBBufferSizeMax]
USBBufferCount Var Byte
velocidad var byte
x var word
TRISB = 0
LED1 var PORTB.7 " ponemos un Led entre PB7 y masa
high led1 "enciende y apaga led para ir viendo los pasos
pause 1000 " del programa
low led1
HPWM 1,50,2000 " comprobar que el control del ventilador funciona
pause 1000
" ************************************************************
" * 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...
velocidad=127
USBBuffer[2]=127
HPWM 1,127,2000 " ponemos PWM a 50% (127)
ProgramStart:
for x = 0 to 1000 " bucle con una pausa total de 1 segundo
pauseus 1000 " para ver cambiar el estado del led.
USBService " Se hace así para llamar a USBService cada
next x " 1 mseg.
toggle led1 " cambia estado del led ON/OFF
gosub DoUSBIn " leemos datos
velocidad=USBBuffer[2] " la velocidad se recibe en el tercer byte (0, 1, 2...)
HPWM 1, velocidad, 2000 " actualizamos velocidad del ventilador.
goto ProgramStart
" ************************************************************
" * receive data from the USB bus *
" ************************************************************
DoUSBIn:
USBBufferCount = USBBufferSizeRX " RX buffer size
USBService " keep connection alive
USBIn 1, USBBuffer, USBBufferCount, DoUSBIn " read data, if available
return
***********************
Apuntes: 1) Es solo una prueba pero ya me funciona. 
2) Un dato curioso que no se si es solo en delphi. Se supone que tenemos un array de x bytes para la comunicacion, pues bien, en la parte basic (PIC) perfecto, pero en delphi el array tiene que ser un byte mayor (x+1). Esto se debe a que el primer byte debe ser 0 para no se que rollo de las comunicaciones, y luego ya van los datos.
En el ejemplo de arriba tengo en USBBuffer[2] el dato de la velocidad para el ventilador pero en el PC (delphi) estará en USBBuffer[3].
Ale, me voy a la cama que ya me lo he currado hoy.
Holas:
Pues yo tambien me uno al grupo....! 
Ya me funciono el USB... claro que no e la gran cosa pero antes no me reconocia ni el dispositivo... 
Ahora hice un pequeño ejemplo que encienda un led bicolor, es justamente el del GTP USB LITE que tengo, la aplicacion la hice con PBP y Visual Basic...!
micodigo para el pic es este:
Codigo:
DEFINE OSC 48
USBBufferSizeMax con 8 " maximum buffer size
USBBufferSizeTX con 8 " input
USBBufferSizeRX con 8 " output
" the USB buffer...
USBBuffer Var Byte[USBBufferSizeMax]
USBBufferCount Var Byte
dato var byte
" ************************************************************
" * main program loop - remember, you must keep the USB *
" * connection alive with a call to USBService every couple *
" * of milliseconds or so... *
" ************************************************************
PORTB = 0
TRISB = 0
usbinit " initialise USB...
ProgramStart:
gosub DoUSBIn
PORTB = USBBuffer[7]
goto ProgramStart
PD: Estoy utilizando el EasyHID