Problema con comunicación USB pic-PC

Buenas a todos.

Os comento:

Estoy intentado comunicarme via USB desde mi pic (18f4550) a mi pc.

Utilizo C18 y he programado mi pic con un ejemplo de microchip basado en CDC.
He comprobado que todas las conexiones esten bien, es decir que D+ y D- esten bien conectadas.
Utilizo un cristal de 20 MHz.
He instalado el driver en el pc.
...

El problema que tengo es que cuando conecto mi pic al pc, este no reconoce el dispositivo.

He desmontado mi circuito y lo he vuelto a montar, he programado de nuevo el pic....

No se me ocurre que más hacer, ni tampoco porque no me lo reconoce.

¿Alguien me puede ayudar?
 
Mi codigo...
es un programa bastante largo..si lo pongo todo va a ser un caos
Es un ejemplo de microchip, por lo tanto debería ir

estos son los fuses:
#pragma config PLLDIV = 5 // (20 MHz crystal on PICDEM FS USB board)
#pragma config CPUDIV = OSC1_PLL2
#pragma config USBDIV = 2 // Clock source from 96MHz PLL/2
#pragma config FOSC = HSPLL_HS
#pragma config FCMEN = OFF
#pragma config IESO = OFF
#pragma config PWRT = OFF
#pragma config BOR = ON
#pragma config BORV = 3
#pragma config VREGEN = ON //USB Voltage Regulator
#pragma config WDT = OFF
#pragma config WDTPS = 32768
#pragma config MCLRE = ON
#pragma config LPT1OSC = OFF
#pragma config PBADEN = OFF
// #pragma config CCP2MX = ON
#pragma config STVREN = ON
#pragma config LVP = OFF
// #pragma config ICPRT = OFF // Dedicated In-Circuit Debug/Programming
#pragma config XINST = OFF // Extended Instruction Set
#pragma config CP0 = OFF
#pragma config CP1 = OFF
// #pragma config CP2 = OFF
// #pragma config CP3 = OFF
#pragma config CPB = OFF
// #pragma config CPD = OFF
#pragma config WRT0 = OFF
#pragma config WRT1 = OFF
// #pragma config WRT2 = OFF
// #pragma config WRT3 = OFF
#pragma config WRTB = OFF // Boot Block Write Protection
#pragma config WRTC = OFF
// #pragma config WRTD = OFF
#pragma config EBTR0 = OFF
#pragma config EBTR1 = OFF
// #pragma config EBTR2 = OFF
// #pragma config EBTR3 = OFF
#pragma config EBTRB = OFF


main:
void main (void){

InitializeSystem();

while(1)
{
#if defined(USB_INTERRUPT)
if(USB_BUS_SENSE && (USBGetDeviceState() == DETACHED_STATE))
{
USBDeviceAttach();
}
#endif

#if defined(USB_POLLING)
// Check bus status and service USB interrupts.
USBDeviceTasks();
#endif

ProcessIO();
}//end while
}//end main


¿Subo alguna función más?
 
Sospecho que tienes un problema de configuracion

Yo tengo un codigo trajando con CCS y uso estos fuses (compilador CCS):

#FUSES NOWDT //No Watch Dog Timer
#FUSES XTPLL //Crystal/Resonator with PLL enabled
#FUSES NOPROTECT //Code not protected from reading
#FUSES NODEBUG //No Debug mode for ICD
#FUSES NOLVP //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
#FUSES NOMCLR //Master Clear pin used for I/O
#FUSES PLL1 //No PLL PreScaler
#FUSES USBDIV //USB clock source comes from PLL divide by 2
#FUSES CPUDIV1 //No System Clock Postscaler
#FUSES NOPBADEN
#FUSES VREGEN

Uso un cristal a 4Mhz. SI usas uno a 20Mhz unicamente deberia cambiar el valor del preescaler y XTPLL por HSPLL.

Prueba a usar los fuses que te envio en mi ejemplo (sus equivalentes). Cuando monte mi circuito tampoco funcionaba y me daba ese mismo problema, el asistente del IDE de CCS me puso todos los fuses por omision en el codigo, fui eliminado los que no sospeche "que no tenian sentido" y funciono.

No se como estes montando tu circuito, pero si has usado soldadura en el proceso, limpia perfectamente tu placa con algun solvente apropiado para eliminar residuos de pasta para soldar, no tienes idea que tanto afecta tener esos residuos.

Comentame

Saludos
 
Mi codigo...
es un programa bastante largo..si lo pongo todo va a ser un caos

Disculpa por mezclarme pero para eso están las etiquetas
PHP:
 o [code] en forma de '#', de ese modo tenemos los códigos mejor ordenados o también puedes usar el botón 'Ir a avanzado' donde puedes adjuntar archivos.

Ahora sobre tu pregunta, supongo que estás usando los ejemplos de 'Microchip Application Libraries', cual de los ejemplos estás usando? o como es que has echo el resto de configuraciones?, el driver?.

Sobre los fuses, estos son los más importantes:
[CODE]#pragma config PLLDIV 
#pragma config CPUDIV 
#pragma config USBDIV 
#pragma config FOSC   
#pragma config FCMEN  
#pragma config IESO   
#pragma config PWRT   
#pragma config BOR    
#pragma config BORV   
#pragma config VREGEN 
#pragma config WDT    
#pragma config WDTPS  
#pragma config MCLRE  
#pragma config LPT1OSC
#pragma config PBADEN [/code]

Un saludo
 
Atrás
Arriba