Autor Tema: Con dolor de cabeza, pero satisfecho (USBCDC PIC24)  (Leído 9150 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado alperez

  • PIC18
  • ****
  • Mensajes: 255
Con dolor de cabeza, pero satisfecho (USBCDC PIC24)
« en: 03 de Noviembre de 2012, 08:59:42 »
Pues simplemente quería darles las gracias por aportar algo de información para poder configurar el USB CDC en el pic24fj256gb106 con XC16.
Me ha costado una barbaridad debido a mi ignorancia, han sido dos dias rompiendome la cabeza y buscando en este y otros foros en los que sé que muchos participais, pero lo he conseguido.

Por ahora sólo he conseguido que enumere, pero creo que ya es algo.
Sé que con CCS hubiera sido mucho más fácil, pero sin pena no hay gloria ¿no?

De nuevo gracias

Desconectado musttork

  • PIC10
  • *
  • Mensajes: 37
Re: Con dolor de cabeza, pero satisfecho (USBCDC PIC24)
« Respuesta #1 en: 05 de Junio de 2013, 16:44:03 »
Ola socio, no se como ha ido tu proyecto. Estoy yo con el mismo micro y me esta costando sudor y sangre conectarle por USB al PC. no habras echo algo asi? de conectarle via USB?

Desconectado alperez

  • PIC18
  • ****
  • Mensajes: 255
Re: Con dolor de cabeza, pero satisfecho (USBCDC PIC24)
« Respuesta #2 en: 05 de Junio de 2013, 17:02:52 »
Pues sí compañero. Con problemas pero funcionó

Qué necesitas

Desconectado musttork

  • PIC10
  • *
  • Mensajes: 37
Re: Con dolor de cabeza, pero satisfecho (USBCDC PIC24)
« Respuesta #3 en: 05 de Junio de 2013, 17:51:30 »
Pues para empezar no se si tengo un problema de hadware o de software...no se si todas las conexiones y componentes los tengo bien situados y de los valores correctos, cosa que he revisado varias veces y no veo fallos, y en el software no se si me falta algun archivo, sobra alguno o tengo mal la configuracion del PIC.

Podrias facilitarme tu esquema basico aunque sea? para poder ver la conexion de los pines basicos.

Desconectado alperez

  • PIC18
  • ****
  • Mensajes: 255
Re: Con dolor de cabeza, pero satisfecho (USBCDC PIC24)
« Respuesta #4 en: 05 de Junio de 2013, 19:03:18 »
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.
Código: [Seleccionar]
// 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

Código: [Seleccionar]
   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:

Código: [Seleccionar]
   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.

Código: [Seleccionar]
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


esquema
PCB

Desconectado musttork

  • PIC10
  • *
  • Mensajes: 37
Re: Con dolor de cabeza, pero satisfecho (USBCDC PIC24)
« Respuesta #5 en: 05 de Junio de 2013, 19:18:40 »
Ostras muchisimas gracias por toda la información, ahora es tarde y mañana trabajo temprano pero en cuanto llegue a casa me pongo con ello para revisarlo todo de nuevo.

Te dejo por aqui mi esquema y pcb por si ves algo raro, el codigo no puedo dejartelo por que ocupa mucho, tendria que mandartelo a un correo.

Un saludo amigo y graicas por todo d verdad!

Desconectado alperez

  • PIC18
  • ****
  • Mensajes: 255
Re: Con dolor de cabeza, pero satisfecho (USBCDC PIC24)
« Respuesta #6 en: 06 de Junio de 2013, 14:39:16 »
Veo que tienes VBus a Vin...
Página 210 del datasheet:

Citar
In Host mode, as well as Host mode in On-the-Go
operation, the USB 2.0 specification requires that the
Host application supply power on VBUS. Since the
microcontroller is running below VBUS and is not able to
source sufficient current, a separate power supply must
be provided.

Si vas a usarlo como Host/OTG no te podré ayudar porque no tengo ni idea, si tu intención es usarlo como por ejemplo CDC no estoy seguro de si tienes que desconectarlo, si es así y la pusiste por error prueba a cortar la pista con un cutter.


Desconectado musttork

  • PIC10
  • *
  • Mensajes: 37
Re: Con dolor de cabeza, pero satisfecho (USBCDC PIC24)
« Respuesta #7 en: 06 de Junio de 2013, 15:24:01 »
nO no como host no, es un device. Te explico el proyecto para que entiendas lo que estoy planeando.

He echo la placa que te he comentado para conectarla al ordenador, y a través de los timmer del pic poder contar segundos, lo que necesito es aprovechar una entrada de un reloj super preciso (un oscilador externo atómico que tenemos en la universidad) para calibrar los cronómetros, contar tiempo de forma muy precisa para saber si un cronometro esta con deriva o los calcula de forma precisa. contaré pequeños tiempos asta tiempos muy extensos de incluso 24 horas.

para meter el tiempo que quiero medir, se hará a través de un programa sencillo en visual basic a través del usb.

Conecte el Vbus a 5v por que al leer el data sheet del PIC vi que VUSB HABIA que conectarlo a 3.3v y Vbus a 5v.:

VBUS 34 44 54 P — USB Voltage, Host mode (5V).
VUSB 35 45 55 P — USB Voltage (3.3V)


Pero si me explicas bien lo de VBUS...igual me he equivocado por que si que parece que pone host mode. quiere decir que 3.3v seria para device, y 5v para host????

saludos amigo

Desconectado alperez

  • PIC18
  • ****
  • Mensajes: 255
Re: Con dolor de cabeza, pero satisfecho (USBCDC PIC24)
« Respuesta #8 en: 06 de Junio de 2013, 15:56:37 »
Te comento que yo no he usado el OTG ni el Host mode, pero entiendo que es una tensíon "suplementaria" para alimentar el usb. Yo en mi esquema lo pongo a 3v3 y funciona, pero recuerdo que se me desconectaba y volvia a conectar, no se si entonces está del todo bien.

Si vas a hacer una aplicacion en VB utilizaras la clase serialport y la clase CDC en el pic. Si windows te dice que no reconoce el dispositivo puede ser por que no tengas bien configurado ni el driver ni el PID ni el VID.

Desconectado musttork

  • PIC10
  • *
  • Mensajes: 37
Re: Con dolor de cabeza, pero satisfecho (USBCDC PIC24)
« Respuesta #9 en: 06 de Junio de 2013, 16:27:10 »
Revisando de nuevo tu esquema para ver en que me he podido equivocar en el hardware y revisando los valores d elos condensadores, he visto que tu tambien utilizas un convertidor DC/DC, en el que le metes los 5v del usb y saca otros 5v.
Con que fin utiizas este convertidor y no directamente los del USB? no es la primera vez que lo veo y me entra la curiosidad y duda.

Saludos

Desconectado planeta9999

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3520
    • Pinballsp
Re: Con dolor de cabeza, pero satisfecho (USBCDC PIC24)
« Respuesta #10 en: 06 de Junio de 2013, 17:09:46 »

No es necesario meter ningún estabilizador o conversor DC/DC desde el pin de 5v del conector USB, basta con poner un diodo schottky.
Además, metiendo un estabilizador, necesitarías a su entrada, 7 voltios para un 7805, y 6.2 voltios para un LM1117, o no funcionarán correctamente.

Yo en mis circuitos, cuando necesito alimentar el PIC desde los 5v del puerto USB, meto un diodo schottky desde el pin de 5v del conector USB a la entrada de un regulador LM1117 de 3.3v.  Si el circuito puede estar alimentado tanto desde el puerto USB, como desde una fuente externa, conecto ambas tensiones a través de sendos diodos schottky, a la entrada del regulador. En mi caso siempre necesito los 3.3v, porque solo trabajo con PIC32.


Quedaría algo así, con alimentación desde USB o fuente externa:




« Última modificación: 06 de Junio de 2013, 17:20:09 por planeta9999 »

Desconectado musttork

  • PIC10
  • *
  • Mensajes: 37
Re: Con dolor de cabeza, pero satisfecho (USBCDC PIC24)
« Respuesta #11 en: 06 de Junio de 2013, 17:59:16 »
Lo que he estado mirando el datasheet del LM1117 es que saca una corriente de 800mA, no es demasiada corriente para alimentar el PIC? o es la corriente maxima que puede dar? yo he utilizado un regulador LM7803, que saca 200mA, cual crees que es mejor?


Desconectado alperez

  • PIC18
  • ****
  • Mensajes: 255
Re: Con dolor de cabeza, pero satisfecho (USBCDC PIC24)
« Respuesta #12 en: 06 de Junio de 2013, 18:05:03 »
Revisando de nuevo tu esquema para ver en que me he podido equivocar en el hardware y revisando los valores d elos condensadores, he visto que tu tambien utilizas un convertidor DC/DC, en el que le metes los 5v del usb y saca otros 5v.
Con que fin utiizas este convertidor y no directamente los del USB? no es la primera vez que lo veo y me entra la curiosidad y duda.

Saludos

No entran 5v, la alimentación de salida del 78l05 es SOLO para el max487 (aunque ponga max481), lo que pasa es que esos pines (GND y Vin) están ocultos porque el que dibujó la libreria lo hizo así. El 1117 es para el PIC y no utilizo la tensión USB para nada, mas que nada porque alimenta un bus RS485 que debe alimentarse a mayor tension que los 5v USB para que no caiga la tensión por la distancia.

Desconectado alperez

  • PIC18
  • ****
  • Mensajes: 255
Re: Con dolor de cabeza, pero satisfecho (USBCDC PIC24)
« Respuesta #13 en: 06 de Junio de 2013, 18:10:51 »
Lo que he estado mirando el datasheet del LM1117 es que saca una corriente de 800mA, no es demasiada corriente para alimentar el PIC? o es la corriente maxima que puede dar? yo he utilizado un regulador LM7803, que saca 200mA, cual crees que es mejor?



800mA es la intensidad máxima, cuidado con esto por que no es lo mismo que la máxima que puede soportar bajo ciertas condiciones.
Mira en la pag 311 del datasheet del pic porque como le des mucha "caña" lo vas a tener justito

Desconectado musttork

  • PIC10
  • *
  • Mensajes: 37
Re: Con dolor de cabeza, pero satisfecho (USBCDC PIC24)
« Respuesta #14 en: 06 de Junio de 2013, 18:13:55 »
Entonces me aconsejas el LM1117?

Me paso una cosa que no os he contado, tenia la huella del regulador dada la vuelta ya que no habia el mismo modelo de regulador que el mio, entonces durante unas cuantas veces hasta que me di cuenta estuve alimentando al pic en vez de con 3.3V con 4.2, 4.3 Voltios.

Creeis que fue suficiente para joderle? deberia de sustituirle por uno nuevo?

Un saludo chicos, no sabeis la ayuda que me estais prestando...os estare siempre agradecidos, si consigo terminar el proeycto os envio unos bombones jejejeje =)  :mrgreen: