amigos como estan, tengo un problema con el picusb, estoy usando un 18f4550 y quiero recibir datos seriales de otro dispositivo y enviarlos por usb al computador utilizando este pic, pero no se que pasa que cuando corro la aplicacion del computador este se bloquea y toca reiniciar, creo q es un error del pic ya que en algun momento este pareciera que se queda bloqueado o algo parecido y deja de trabajar, asi que ni idea que hacer, debe ser que no puede tener funcionando el uart y el usb al tiempo o algo parecido..
alguien le ha pasado esto????? la verdad que no tengo la menor idea del problema
saluds y gracias al que me pueda ayudar
aqui esta el codigo q estoy usando, lo del uart estaba por interrupcion pero se lo quite para poner esto:
#include <18F4550.h>
#fuses HSPLL,NOWDT,NOPROTECT,NOLVP,NODEBUG,USBDIV,PLL6,CPUDIV1,VREGEN
#use delay(clock=48000000)
#use rs232(baud=115200,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=8)
#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 240 //size to allocate for the tx endpoint 1 buffer
#define USB_EP1_RX_SIZE 1 //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> //Configuración del USB y los descriptores para este dispositivo
#include <usb.c> //handles usb setup tokens and get descriptor reports
#define LEDV PIN_B6
#define LED_ON output_high
#define LED_OFF output_low
int contadorusb = 0;
int8 envia[240];
int8 recibe[1];
int i = 0;
int bandera = 0;
void main(void) {
for( i = 0; i <=239; i++ )
{
envia = 0;
}
i = 0;
LED_OFF(LEDV); //encendemos led rojo
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
LED_ON(LEDV); //encendemos led verde
while (TRUE)
{
if(usb_enumerated())
{
if( bandera == 0X00 )
{
envia[contadorusb] = getc();
if( contadorusb < 239 )
{
contadorusb++;
}
else
{
setup_uart(FALSE);
contadorusb = 0;
bandera = 0XFF;// se pueden enviar datos por usb
}
}
if( bandera == 0XFF )
{
usb_put_packet(1, envia, 240, USB_DTS_TOGGLE);
bandera = 0X00;
contadormuerto = 0;
setup_uart(TRUE);
}
}
}
}