Autor Tema: PIC18F4550 y el uso del USB  (Leído 21038 veces)

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

Desconectado MLO__

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4581
Re: PIC18F4550 y el uso del USB
« Respuesta #15 en: 24 de Junio de 2008, 12:49:38 »
Hola.

El driver para el cdc es un archivo .inf en el cual esta descrito que clase se va a usar para comunicar, al instalar el driver (que se debe hacer antes de conectar el dispositivo) se genera un archivo .inf que va a dar a la carpeta WINDOWS/inf -en mi caso asigna el nombre de oem42.inf-, pero hay muchos mas asi que ese no es el modo mas seguro de saberlo!!!!!. Lo que debe coincidir entre el driver y el firmware del micro es el PID y el VID ya que se no ser asi no reconocera el dispositivo. Si no esta instalado el driver, no reconocera el dispositivo tampoco.

Si usas CCS el driver esta en la carpeta Driver  :lol:, escoges el driver segun tu sistema operativo, para instalarlo le das click derecho y escoges la opcion de instalar. Antes de instalar, revisa que el PID y el VID del driver sean los mismos del firmware del pic.

Saludos
El papel lo aguanta todo

Desconectado analog

  • PIC10
  • *
  • Mensajes: 27
Re: PIC18F4550 y el uso del USB
« Respuesta #16 en: 24 de Junio de 2008, 13:19:18 »
Si no tiene el driver instalado te tiene que aparecer el mensaje "nuevo hardware encontrado" para poder instalarlo.

No me aparece ese mensaje de "nuevo hardware encontardo" en ningún ordenador de los que no me funcionan el USB... ¿dónde encuentro el driver del cdc? en la página de Microchip no lo encuentro.
Disculpad tantas dudas.

Gracias a todos.

Desconectado MLO__

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4581
Re: PIC18F4550 y el uso del USB
« Respuesta #17 en: 24 de Junio de 2008, 18:23:15 »
Hola.

Si el PC no te da el mensaje de "Nuevo Hardware Encontrado", algo anda mal en la conexion fisica o en los puertos, me parece muy extrano, ya que cuando uno conecta al puerto USB y en el PIC esta el firmware para CDC, inmediatamente sale el globito de aviso de nuevo hard.

El driver esta en la carpeta Drivers del CCS.

Saludos
El papel lo aguanta todo

Desconectado analog

  • PIC10
  • *
  • Mensajes: 27
Re: PIC18F4550 y el uso del USB
« Respuesta #18 en: 25 de Junio de 2008, 04:22:16 »
Hola.

Si el PC no te da el mensaje de "Nuevo Hardware Encontrado", algo anda mal en la conexion fisica o en los puertos, me parece muy extrano, ya que cuando uno conecta al puerto USB y en el PIC esta el firmware para CDC, inmediatamente sale el globito de aviso de nuevo hard.

El driver esta en la carpeta Drivers del CCS.

Saludos

Buenos días MLO__!  Ayer no pude contestarte.
Pues aún más extraño, puesto que el mismo circuito impreso con el mismo cable, usb, etc sólo funciona en un ordenador y en los demás no, y pienso que ese ordenador tiene algo instalado porque era de un chico que empezó este proyecto que yo estoy continuando... ¿me entiendes?

Voy a mirar eso del driver ;)

Saludos!

Desconectado analog

  • PIC10
  • *
  • Mensajes: 27
Re: PIC18F4550 y el uso del USB
« Respuesta #19 en: 25 de Junio de 2008, 04:47:34 »
Buenas de nuevo,
Tengo estos tres archivos .inf : cdc9xpt1.inf , cdc9xpt2.inf y cdc_ntxp.inf

Dudo que sea algo de esto puesto que este circuito lo utilizan en otra parte de España y allí no son electrónicos por lo que no tienen instalado el CCS, enchufan el USB y mediante una aplicación LabVIEW recogen datos en una hoja de excel.

Ais, debe ser una tontería pero no doy con ella.

Saludos.

Desconectado Slalen

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1079
    • Página web personal de Guillermo Herrero González
Re: PIC18F4550 y el uso del USB
« Respuesta #20 en: 25 de Junio de 2008, 09:16:58 »
abre cualquier archivo inf y busca el pid y el vid y cambialos por los datos que tengas en tu placa y ya tendrias tus drivers

Desconectado MLO__

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4581
Re: PIC18F4550 y el uso del USB
« Respuesta #21 en: 25 de Junio de 2008, 10:52:33 »
Hola.

Habria que revisar el vi en labview, ya que puede ser CDC la comunicacion o puede ser HID Custom, igual en los dos casos necesitas que el VID y el PID del firmaware del pic sea el mismo que del driver.

Saludos.
El papel lo aguanta todo

Desconectado analog

  • PIC10
  • *
  • Mensajes: 27
Re: PIC18F4550 y el uso del USB
« Respuesta #22 en: 25 de Junio de 2008, 10:55:34 »
abre cualquier archivo inf y busca el pid y el vid y cambialos por los datos que tengas en tu placa y ya tendrias tus drivers

¿Dónde encuentro el pid y el vid del micro? sigo pensando que no es nada de la placa puesto que en otro lugar la conexión usb es correcta y allí no tienen nada de electrónica, cero.
:(

MLIO__ eso que dices del labview es una alternativa, voy a echarle un vistazo y os cuento.

Saludos!!

Desconectado analog

  • PIC10
  • *
  • Mensajes: 27
Re: PIC18F4550 y el uso del USB
« Respuesta #23 en: 25 de Junio de 2008, 10:58:25 »
Ah y utilizo el 18F2455.

Saludos!

Desconectado MLO__

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4581
Re: PIC18F4550 y el uso del USB
« Respuesta #24 en: 25 de Junio de 2008, 11:21:33 »
Hola.

Para Microchip el PID es D8 y el VID lo escoges tu. Un ejemplo es colocar D8 10 en el descriptor de inicio del dispositivo. Ese mismo numero debe ir en el .inf, al tener el mismo numero PID y VID el PC escoge el driver .inf y lo instala, en este caso, como un COM virtual.

Saludos
El papel lo aguanta todo

Desconectado analog

  • PIC10
  • *
  • Mensajes: 27
Re: PIC18F4550 y el uso del USB
« Respuesta #25 en: 02 de Julio de 2008, 08:19:19 »
Hola de nuevo!!

Estuve mirando eso que me comentábais del VID y el PID y no utilizamos nada de eso, os voy a pasar el código y así miráis que es lo que puede hacer que el dispositivo funcione sólo en determinados ordenadores, al menos en uno me detecta perfectamente el USB y me genera un puerto COM.
Os comento un poco, el display muestra "USB failed" cuando el ordenador no detecta el usb y tampoco me pide instalar nada, simplemente, no hay conexión, pero en el PC que sí me lo detecta, en el display aparece "USB OK" y al momento aparece en el ordenador el nuevo puerto COM conectado.  :shock:
Y como este proyecto lo comenzó otra persona que ya no se encuentra aquí me es imposible pedirle ayuda.

Bueno, muchas gracias por vuestro tiempo y la ayuda que prestáis, estoy aprendiendo mucho ;)

Un saludo.

------

Aquí va el código:

#include <18F2455.h>   
#use delay(clock=24000000)   

#fuses HSPLL, PLL2, USBDIV, CPUDIV3,VREGEN, NOWDT, NOPROTECT, NOPUT, NOBROWNOUT, NOLVP

#byte port_c=7                   
#byte port_d=8                   

#include <stdlib.h>
#include <usb_cdc.h>      
#include <lcd.c>      
#define usb_con PIN_B3

void mensajeinicio(void);

void main(void)

{
   int i=0;
   int usb=0;
   float r=0,aux=0,res=0;

   lcd_init();
   usb_init();

   /////Configuracion del convertidor An-Dig/////

   setup_port_a(AN0 | VSS_VREF);     //Se configura el convertidor an-dig.
   setup_adc(ADC_CLOCK_DIV_8);      //Tiempo de captura del convertidor

   mensajeinicio();

do{

     i=0;
     r=res=0;

   //////Secuencia de habilitacion del USB//////

      if(!input(usb_con))  usb=0;
      if(input(usb_con) && usb==0)

      {
        i=0;
        do{
            lcd_putc("\f Estableciendo\n    Conexion");
            usb=usb_enumerated();
            delay_ms(500);
            i+=1;
            }while(usb==false && i<=10);

         if(i>10)
                      {
                        usb=0;
                        lcd_putc("\fUSB Failed");
                        delay_ms(1000);
                        lcd_putc("\f");
                      }
                      else
                      {
                        usb=1;
                        lcd_putc("\fUSB OK");
                        delay_ms(1000);
                        lcd_putc("\f");
                      }
      }

      /////Toma de Datos/////

      for(i=0;i<100;i++)
      {
      set_adc_channel(0);  //Seleccionar el canal 0
      delay_us(20);        //Retardo para obtener datos fiables
      r+=read_adc();        //Guardar datos
      }

      i++;
      r/=i;

      aux=1.3716*r;
      res=aux+299.83;

      /////Visualizacion/////

      if(r>=1012)
      {lcd_putc("\f:Fuera de Rango:\n");
       if(usb==1) usb_cdc_putc("<FDR>\r\n");
      }
      else
      {
      printf(lcd_putc,"\fR:  %4.3f Ohm\n",res);
      //printf(lcd_putc,"\f  %4.0f \n",r);
      if(usb==1) printf(usb_cdc_putc,"%2.3f\r\n",res); //USB
      }
      delay_ms(2000);
}while(true);

}

void mensajeinicio()

{
   lcd_putc("CONDUCTIVIMETRO\n");
   lcd_putc(" PARA LIQUIDOS\n");
   delay_ms(1500);
   lcd_putc("\f");
}

Desconectado MLO__

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4581
Re: PIC18F4550 y el uso del USB
« Respuesta #26 en: 02 de Julio de 2008, 11:51:38 »
Hola.

Veo que usas el modo CDC para comunicarte, por lo que si necesitas el PID y el VID!!!!!!.

Segun veo, estas utilizando el pin_b3 para probar la conexion, el error debe estar por alli.

Saludos
El papel lo aguanta todo

Desconectado Slalen

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1079
    • Página web personal de Guillermo Herrero González
Re: PIC18F4550 y el uso del USB
« Respuesta #27 en: 02 de Julio de 2008, 12:02:45 »
Pasa te por aqui http://www.todopic.com.ar/foros/index.php?topic=15208.0 PalitroqueZ hizo lo mismo que tu, en ese mismo lenguaje.

Suerte!!!

Desconectado analog

  • PIC10
  • *
  • Mensajes: 27
Re: PIC18F4550 y el uso del USB
« Respuesta #28 en: 02 de Julio de 2008, 12:26:31 »
Hola.

Veo que usas el modo CDC para comunicarte, por lo que si necesitas el PID y el VID!!!!!!.

Segun veo, estas utilizando el pin_b3 para probar la conexion, el error debe estar por alli.

Saludos

Eso es cosa del driver y nosotros no utilizamos nada sobre driver :?

Argggg, me tiro de los pelossss.

Un saludo! ;)

Desconectado MLO__

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4581
Re: PIC18F4550 y el uso del USB
« Respuesta #29 en: 02 de Julio de 2008, 13:39:33 »
Hola.

Ok. Revisa en el archivo usb_desc_cdc.h, que en el descriptor USB_DEVICE_DESC este la siguiente configuracion
Código: C
  1. &#160;  const char USB_DEVICE_DESC[USB_DESC_DEVICE_LEN] ={
  2. &#160; &#160; &#160; //starts of with device configuration. only one possible
  3. &#160; &#160; &#160; &#160;  USB_DESC_DEVICE_LEN, //the length of this report&#160;  ==0
  4. &#160; &#160; &#160; &#160;  0x01, //the constant DEVICE (DEVICE 0x01)&#160; ==1
  5. &#160; &#160; &#160; &#160;  0x10,0x01, //usb version in bcd&#160; ==2,3
  6. &#160; &#160; &#160; &#160;  0x02, //class code. 0x02=Communication Device Class ==4
  7. &#160; &#160; &#160; &#160;  0x00, //subclass code ==5
  8. &#160; &#160; &#160; &#160;  0x00, //protocol code ==6
  9. &#160; &#160; &#160; &#160;  USB_MAX_EP0_PACKET_LENGTH, //max packet size for endpoint 0. (SLOW SPEED SPECIFIES 8) ==7
  10. &#160; &#160; &#160; &#160;  0xD8,0x04, //vendor id ==8,9 ESTE ES EL PID Y EL VID DEL DISPOSITIVO
  11. &#160; &#160; &#160; &#160;  0x0a,0x00, //product id&#160;  ==10,11
  12. &#160; &#160; &#160; &#160;  0x00,0x01, //device release number&#160; ==12,13
  13. &#160; &#160; &#160; &#160;  0x01, //index of string description of manufacturer. therefore we point to string_1 array (see below)&#160; ==14
  14. &#160; &#160; &#160; &#160;  0x02, //index of string descriptor of the product&#160; ==15
  15. &#160; &#160; &#160; &#160;  0x00, //index of string descriptor of serial number&#160; ==16
  16. &#160; &#160; &#160; &#160;  USB_NUM_CONFIGURATIONS&#160; //number of possible configurations&#160; ==17
  17. &#160;  };

Ahora en el driver debe estar tambien estos numeros:

Código: C
  1. [DeviceList]
  2. %DESCRIPTION%=DriverInstall, USB\VID_04D8&PID_000A

Te adjunto el driver que yo utilizo. Puedes modificar el PID con los numero que tu quieras, pero deben coincidir en los dos archivos, tanto en el .in como en el .h.

Saludos.
El papel lo aguanta todo


 

anything