Hola muchachos, yo también me uno a su dolor porque he intentado también diferentes formas de transmisión del pic al computador por usb (modo bulk, interrupción, intenté el modo isochronous pero no me funcionó, en clase cdc y nada, claro que utilizando siempre un solo endppoint out-in) sin lograr resultados de velocidad, la recepción de datos en el compu la hago con labview 8.5 y el envió desde labview al pic es muy buena, pero en todas los modos de transmisión del pic a labview siempre ahi una demora ahi fastidiosa. probé el envio de una señal senoidal de 5v/1hz utilizando el adc del pic y luego la envio en modo bulk a la cpu y la visualización en labview y me la muestra muy distorsionada, nooo 1hz. Ahora estoy teniendo problema con la clase cdc, en la misma forma del pic hacia la cpu si se demoraba en bulk, en cdc peor!! no se q estoy haciendo mal, este es el codigo q estoy utilizando pero sin adc , solo lo que ahi en el puerto d que me lo envie a la cpu y si le envio un byte desde la cpu me lo muestre por el pto b:
# include<18f4550.h>
# use delay (clock=48Mhz)
#fuses HSPLL,NOWDT,NOPROTECT,NOLVP,NODEBUG,USBDIV,VREGEN,CPUDIV1,PLL5
#include<usb_cdc.h>
#include<usb.h>
#include <pic18_usb.h>
#include <usb_desc_cdc.h>
#include <usb.c>
#byte port_d=0xF83
#byte port_b=0xF81
char dato=0;
void main (void){
char data;
enable_interrupts(global);
usb_cdc_init();
usb_init();
output_b(0X00);
set_tris_b (0x80);
set_tris_d(0XFF);
output_b(0x01);// ENERGY ON
enable_interrupts(INT_EXT);
EXT_INT_EDGE(L_TO_H);
if(usb_enumerated())
{ output_b(0X02);}
else
{usb_wait_for_enumeration();
output_b(0X02);
}
while (TRUE)
{ usb_task();
if (usb_cdc_kbhit())
{port_b=usb_cdc_getc(); }
dato=port_d;
if (usb_cdc_putready())
{usb_cdc_putc(dato);}
}
}
lo que le envio desde la cpu al pic si me lo muestra rápido pero lo q le envio desde el pic si toma demasiado tiempo,,, no se q hacer por favor ayuda si esta mal algo en el codigo... gracias.