Autor Tema: PIC 18F2550 y el USB dando por ####  (Leído 4757 veces)

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

Desconectado Zardoz

  • PIC10
  • *
  • Mensajes: 18
    • ZardoZ the Technomage
PIC 18F2550 y el USB dando por ####
« en: 14 de Junio de 2012, 12:22:11 »
Hola. He estado tratando de hacer que funcione el USB de un pic 18f2550 en modo de dispositivo de comunicaciones (CDC) con CCS.
Primero probé  usando/modificado el ejemplo que viene de CDC con CCS con resultados no buenos, luego probe a compilar el ejemplo del USB desencadenado, CDC USB de Red Pic con similares resultados.
Finalmente acabe por ponerle directamente el HEX de CDC de RedPic (para descartar que fuese algo del compilador) y sigo en la mismas. Se que el HEX es para el 18f4550, pero según entiendo debería de funcionar en el 18F2550 ya que técnicamente el 4550 es el mismo pero con más patas y algún dispositivo más pero que el ejemplo de RedPic no usa.

Lo que ocurre es que el S.O. lo reconoce pero no termina de configurarse adecuadamente. En windows aparece el puerto COM con un símbolo de admiración indicando que no pita y en Linux, el dmesg, me informa que se trata de un dispositivo CDC pero falla al tratar de obtener la configuración de baudrate, etc... Ademas para más inri, en windows solo lo reconoce bien cuando lo enchufo la primera vez, luego ya nada.

Ya he probado en ordenadores distintos y hace lo mismo. En windows uso los drivers de microchip del USB Framework (http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&nodeId=2680&dDocName=en547784), y si, con el ejemplo que viene el CCS ya probe a cambiar el PID y  el VID para que fuesen el del microchip y no el del CCS ya que el Windows me chilla que el driver que viene con el CCS es de 32 bits y yo tengo el Windows 7 de 64 bits.

También comprobé la continuidad de las conexiones entre el conector USB B y el micro. La placa que tengo montada es la del proyecto Pinguino, pero sin las resistencias de protección en cada pata y con un resistencia de protección entre RA4 y el jumper/switch a masa (http://www.hackinglab.org/pinguino/image/pinguino_sans_bridge.jpg). Hasta donde yo se, creo que no esta invertido D+ y D- (Si, ya he estado mirando en el foro casos similares).

Yo a lo que concluyo es que o algo pasa con el circuito o algo le pasa al micro, pq si no va ni con el HEX de Red Pic como debería de ir....
Esquema real:
http://imageshack.us/photo/my-images/256/20120614165248.jpg/
Fotos de la placa:
http://imageshack.us/photo/my-images/194/20120614165103.jpg/
http://imageshack.us/photo/my-images/854/20120614165047.jpg/
http://imageshack.us/photo/my-images/827/20120614165144.jpg/
http://imageshack.us/photo/my-images/841/20120614165128.jpg/

PD: El grabador con que meto los hex al micro es el WinPic800 usando un GTP-USB
PPD: Si, el cuarzo es de 20Mhz y los fuses que uso para configurarlo son :
Código: [Seleccionar]
#FUSES HSPLL   
#FUSES NOWDT 
#FUSES NOLVP   
#FUSES USBDIV   
#FUSES PLL5     
#FUSES CPUDIV1
#FUSES VREGEN 
#FUSES MCLR
« Última modificación: 14 de Junio de 2012, 12:24:59 por Zardoz »

Desconectado darck_khronos

  • PIC18
  • ****
  • Mensajes: 493
Re: PIC 18F2550 y el USB dando por ####
« Respuesta #1 en: 14 de Junio de 2012, 12:27:41 »
no has intentado primero simularlo en proteus? te paso el driver que yo utilizo

Desconectado darck_khronos

  • PIC18
  • ****
  • Mensajes: 493
Re: PIC 18F2550 y el USB dando por ####
« Respuesta #2 en: 14 de Junio de 2012, 12:28:16 »
no has intentado primero simularlo en proteus? te paso el driver que yo utilizo

este es mi cofigo del cdcd

Código: [Seleccionar]
#include <18f2550.h>
#fuses HSPLL,NOWDT,NOBROWNOUT,NOPROTECT,NOLVP,NODEBUG,USBDIV,PLL5,CPUDIV1,VREGEN,MCLR,NOPBADEN,WRTB
#use delay(clock=48000000) //FREC OSC
#include <usb_cdc.h>
void main()
{ char u;
  usb_cdc_init();
  usb_init();
  while(!usb_cdc_connected()) {}
  for(;;)
   {
     usb_task();
     if(input(PIN_C1)==0)
       {
       u=input_B();
       printf(usb_cdc_putc, "%c",u);
       delay_ms(500);
       }
     }
}


« Última modificación: 14 de Junio de 2012, 12:30:45 por darck_khronos »

Desconectado Zardoz

  • PIC10
  • *
  • Mensajes: 18
    • ZardoZ the Technomage
Re: PIC 18F2550 y el USB dando por ####
« Respuesta #3 en: 14 de Junio de 2012, 13:48:37 »
No tengo el proteus, pero es que ni va el HEX de RedPic y ese tiene que funcionar si o si.

Desconectado darck_khronos

  • PIC18
  • ****
  • Mensajes: 493
Re: PIC 18F2550 y el USB dando por ####
« Respuesta #4 en: 14 de Junio de 2012, 14:02:49 »
No tengo el proteus, pero es que ni va el HEX de RedPic y ese tiene que funcionar si o si.

Necesitas el proteus por que puede que tengas mal una conexion y no te has dado cuenta

Desconectado Zardoz

  • PIC10
  • *
  • Mensajes: 18
    • ZardoZ the Technomage
Re: PIC 18F2550 y el USB dando por ####
« Respuesta #5 en: 14 de Junio de 2012, 19:16:30 »
Bien, he probado con tu código, y me he dado cuenta de un fallo que tenia yo en el descriptor, ya que tenia de PID 0x000B, cuando el del driver de microchip espera un PID 0x000A . Lo he arreglado y sigue en las mismas. Carga el driver de microchip y tengo un puerto COM creado pero que indica que esta algo mal y no sigue.

De hecho, usando unos leds, he podido ver que el micro no sale del bucle
Código: [Seleccionar]
while(!usb_cdc_connected()) {}.
Adjunto los ficheros de código a ver si veis algo raro.

Por cierto... alguna idea de por que se me corrompe el texto de descripción del dispositivo ?


Ademas me he fijado de que cuando lo desconecto y lo vuelvo a conectar al mismo conector USB del ordenador, deja de reconocer el dispositivo y aparece como dispositivo desconocido. Si lo vuelvo a conectar a otro conector, entonces si es reconocido.

Desconectado Zardoz

  • PIC10
  • *
  • Mensajes: 18
    • ZardoZ the Technomage
Re: PIC 18F2550 y el USB dando por ####
« Respuesta #6 en: 15 de Junio de 2012, 09:11:57 »
Ya esta funcionando (al menos en Linux). Estoy recibiendo "Hola mundo" sin parar por el puerto COM virtual. Y que era... pues los malditos condensadores de desacoplo!. Resulta que en el condensador de desacoplo de la alimentación, esta detrás del regulador, pero antes del switch para seleccionar alimentación por USB o externa, con lo cual si usas la alimentación por USB (como yo) el condensador no esta conectado al micro. Además el condensador de Vusb era de 0,2 uF y no de 470 nF que todo el mundo usa. Todo esto me lleva a pensar como demonios les funciona la placa a los del proyecto Pinguino teniendo eso dos fallos. Lo único que se me ocurre es que ellos lo alimente externamente siempre y no usen la alimentación del USB y de ahí que les tire la placa.

Código: [Seleccionar]
[   83.828194] usb 4-2: new full-speed USB device number 2 using ohci_hcd
[   84.040845] cdc_acm 4-2:1.0: This device cannot do calls on its own. It is not a modem.
[   84.040919] cdc_acm 4-2:1.0: ttyACM0: USB ACM device
[   84.044186] usbcore: registered new interface driver cdc_acm
[   84.044192] cdc_acm: USB Abstract Control Model driver for USB modems and ISDN adapters
[   84.050301] usbcore: registered new interface driver usbserial
[   84.050339] USB Serial support registered for generic
[   84.050397] usbcore: registered new interface driver usbserial_generic
[   84.050403] usbserial: USB Serial Driver core
[   84.060869] USB Serial support registered for FTDI USB Serial Device
[   84.061340] usbcore: registered new interface driver ftdi_sio
[   84.061346] ftdi_sio: v1.6.0:USB FTDI Serial Converters Driver 
luis@luis-sobremesa-lin:~$ cat /dev/ttyACM0
Hola mundo
Hola mundo
Hola mundo
...

Desconectado darck_khronos

  • PIC18
  • ****
  • Mensajes: 493
Re: PIC 18F2550 y el USB dando por ####
« Respuesta #7 en: 15 de Junio de 2012, 11:43:52 »
Ya esta funcionando (al menos en Linux). Estoy recibiendo "Hola mundo" sin parar por el puerto COM virtual. Y que era... pues los malditos condensadores de desacoplo!. Resulta que en el condensador de desacoplo de la alimentación, esta detrás del regulador, pero antes del switch para seleccionar alimentación por USB o externa, con lo cual si usas la alimentación por USB (como yo) el condensador no esta conectado al micro. Además el condensador de Vusb era de 0,2 uF y no de 470 nF que todo el mundo usa. Todo esto me lleva a pensar como demonios les funciona la placa a los del proyecto Pinguino teniendo eso dos fallos. Lo único que se me ocurre es que ellos lo alimente externamente siempre y no usen la alimentación del USB y de ahí que les tire la placa.

Código: [Seleccionar]
[   83.828194] usb 4-2: new full-speed USB device number 2 using ohci_hcd
[   84.040845] cdc_acm 4-2:1.0: This device cannot do calls on its own. It is not a modem.
[   84.040919] cdc_acm 4-2:1.0: ttyACM0: USB ACM device
[   84.044186] usbcore: registered new interface driver cdc_acm
[   84.044192] cdc_acm: USB Abstract Control Model driver for USB modems and ISDN adapters
[   84.050301] usbcore: registered new interface driver usbserial
[   84.050339] USB Serial support registered for generic
[   84.050397] usbcore: registered new interface driver usbserial_generic
[   84.050403] usbserial: USB Serial Driver core
[   84.060869] USB Serial support registered for FTDI USB Serial Device
[   84.061340] usbcore: registered new interface driver ftdi_sio
[   84.061346] ftdi_sio: v1.6.0:USB FTDI Serial Converters Driver 
luis@luis-sobremesa-lin:~$ cat /dev/ttyACM0
Hola mundo
Hola mundo
Hola mundo
...

Por esas razones es mejor que tengas como o con que simular tu circuito


 

anything