Hace tiempo que lo hice y trateré de darte algo de información, Dejé el USB para comunicarlo por TCP/IP, por las molestias de los drivers
He visto que tienes un post sobre el tema y lo primero que te recomendaría es que pongas en alto los pines que puedas y midas la tension a ver si todavía funciona el microcontrolador.
Te paso un esquema muy básico del primer prototipo que hice, esto es lo mínimo que se puede hacer para que funcione.
Puedes ignorar el max487 y el 78l05.
Te aconsejo que compruebes si hay algun cortocircuito, estos encapsulados son dificiles de soldar con un pitch tan bajo, yo tuve que modificar la huella porque me quedaban demasiado pegados los pads
Recuerda que tienes que configurar el driver para XP (es para el SO que yo probé, no sé si para otros funciona) y el PID y VID deben coincidir.
En la ayuda del Stack está todo lo necesario, para marearte, pero es una ayuda.
Si te dice que no reconoce el dispositivo, puedes ver con algun programa como Everest cuales dispositivos hay y comprobar si enumera, cual es el PID y el VID
Es muy importante el condensador del core, según el datasheet puede ser de tántalo o cerámico, yo lo puse de tántalo.
Estos son mis fuses, yo usé un xtal de 4Mhz.
// CONFIG3
#pragma config WPFP = WPFP511 // Write Protection Flash Page Segment Boundary (Highest Page (same as page 170))
#pragma config WPDIS = WPDIS // Segment Write Protection Disable bit (Segmented code protection disabled)
#pragma config WPCFG = WPCFGDIS // Configuration Word Code Page Protection Select bit (Last page(at the top of program memory) and Flash configuration words are not protected)
#pragma config WPEND = WPENDMEM // Segment Write Protection End Page Select bit (Write Protect from WPFP to the last page of memory)
// CONFIG2
#pragma config POSCMOD = XT // Primary Oscillator Select (XS oscillator mode selected)
#pragma config DISUVREG = ON // Internal USB 3.3V Regulator Disable bit (Regulator is enabled)
#pragma config IOL1WAY = ON // IOLOCK One-Way Set Enable bit (Write RP Registers Once)
#pragma config OSCIOFNC = OFF // Primary Oscillator Output Function (OSCO functions as CLKO (FOSC/2))
#pragma config FCKSM = CSDCMD // Clock Switching and Monitor (Both Clock Switching and Fail-safe Clock Monitor are disabled)
#pragma config FNOSC = PRIPLL // Oscillator Select (Primary oscillator (XT, HS, EC) with PLL module (XTPLL,HSPLL, ECPLL))
#pragma config PLL_96MHZ = ON // 96MHz PLL Disable (Enabled)
#pragma config PLLDIV = NODIV // USB 96 MHz PLL Prescaler Select bits (Oscillator input used directly (4MHz input))
#pragma config IESO = OFF // Internal External Switch Over Mode (IESO mode (Two-speed start-up)disabled)
// CONFIG1
#pragma config WDTPS = PS32768 // Watchdog Timer Postscaler (1:32,768)
#pragma config FWPSA = PR128 // WDT Prescaler (Prescaler ratio of 1:128)
#pragma config WINDIS = OFF // Watchdog Timer Window (Standard Watchdog Timer enabled,(Windowed-mode is disabled))
#pragma config FWDTEN = OFF // Watchdog Timer Enable (Watchdog Timer is disabled)
#pragma config ICS = PGx1 // Comm Channel Select (Emulator functions are shared with PGEC1/PGED1)
#pragma config GWRP = OFF // General Code Segment Write Protect (Writes to program memory are allowed)
#pragma config GCP = OFF // General Code Segment Code Protect (Code protection is disabled)
#pragma config JTAGEN = ON // JTAG Port Enable (JTAG port is enabled)
Estos bits de los registros los tengo en el main, antes del while claro
CLKDIVbits.CPDIV = 0b0; // Configuro la CPU a la maxima velocidad 32Mhz
CLKDIVbits.DOZEN = 0b0; // Podemos configurar el clock ratio de la cpu, no de los perifericos. Lo dejamos a 32Mhz
CLKDIVbits.ROI = 0b0; // Las interrupciones no tienen efecto sobre el bit DOZE
CLKDIVbits.DOZE = 0b0; // seleccion de ratio del clock de la CPU
si vas a usar la clase CDC, tambien antes del el while:
CDCSetBaudRate(9600);
CDCSetCharacterFormat(NUM_STOP_BITS_1);
CDCSetDataSize(8);
CDCSetParity(PARITY_NONE);
USBCBInitEP();
USBDeviceInit(); //usb_device.c. Initializes USB module SFRs and firmware
//variables to known states.
Esto tiene que ir en el while principal. Si tienes un programa demasiado grande tienes que llamarla de vez en cuando. Ese tiempo está en la ayuda del stack, ahora no lo recuerdo.
USBDeviceTasks();
Yo tuve un problema y es que se me desconectaba y volvia a conectar, no sé si por esto o por el pin sense.
Espero que te sirva de ayuda y si necesitas algo en lo que te pueda ayudar... ya sabes
Un saludo
esquemaPCB