TODOPIC

Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: nexus148 en 19 de Noviembre de 2009, 06:58:40

Título: Comunicacion USB con cdc en windows 7
Publicado por: nexus148 en 19 de Noviembre de 2009, 06:58:40
Hola.

Utilizo el pic18f4550 con compilador CSS. Para comunicarme con usb en modo cdc, me pide el driver de css, el problema que "windows 7" no lo reconoce. ¿Hay alguna solucion?

Un saludo
Título: Re: Comunicacion USB con cdc en windows 7
Publicado por: migsantiago en 19 de Noviembre de 2009, 13:33:46
Qué raro, voy a checarlo en mi win7 y te aviso.

He usado el driver en modo bulk generado con el Enumerador de Palitroquez en win7 y no ha fallado.  :huh:
Título: Re: Comunicacion USB con cdc en windows 7
Publicado por: Slalen en 19 de Noviembre de 2009, 14:02:42
El problema es que windows vista no soporta la comunicación cdc, si windows 7 es igual, me da que tienes que hacer un usb completo.

Por eso sacaron el winusb, para que resultase más fácil hacer programas con el usb
Título: Re: Comunicacion USB con cdc en windows 7
Publicado por: darck_khronos en 19 de Noviembre de 2009, 21:22:19
que es el CDC por que yo comunique mi Pic 4550 con usb pero en modo Com y no tengo ningumproblema con el Seven De FResa
Título: Re: Comunicacion USB con cdc en windows 7
Publicado por: Suky en 19 de Noviembre de 2009, 21:44:02
que es el CDC por que yo comunique mi Pic 4550 con usb pero en modo Com y no tengo ningumproblema con el Seven De FResa
Una de las 4 clases de comunicación que se puede establecer con USB (USB CDC o USB communications device class), en si emula el puerto serial, osea que al conectar el dispositivo USB se genera un puerto serial con el cual se establece comunicación.-

Saludos!
Título: Re: Comunicacion USB con cdc en windows 7
Publicado por: darck_khronos en 19 de Noviembre de 2009, 21:48:49
mmm si es asi ya se cual es el problema en la carpeta de CCs drives extisiten
cdc_NTXPVista.inf
cdc_NTXP.inf

asi que solo has una copia del archivo
cdc_NTXPVista.inf
a el escritorio actualiza y manda la ruta directamente al escritorio y santo remedio, eso mismo pasaba con vista
Título: Re: Comunicacion USB con cdc en windows 7
Publicado por: migsantiago en 19 de Noviembre de 2009, 21:51:11
CDC significa Communications Device Class, una clase de dispositivo USB, otras clases USB son la HID, Mass Storage, Audio, etc.

El ejemplo de CCS para COM virtual con CDC funciona perfectamente en Windows 7.

http://img17.imageshack.us/img17/5548/instaladook.png
(http://img17.imageshack.us/img17/5548/instaladook.th.png) (http://img17.imageshack.us/img17/5548/instaladook.png)

http://img94.imageshack.us/img94/899/admindispr.png
(http://img94.imageshack.us/img94/899/admindispr.th.png) (http://img94.imageshack.us/img94/899/admindispr.png)

http://img697.imageshack.us/img697/3217/pantallae.png
(http://img697.imageshack.us/img697/3217/pantallae.th.png) (http://img697.imageshack.us/img697/3217/pantallae.png)

Se me ocurre que hiciste mal algo de esto:

+ No has cambiado el VID y PID del archivo de instalación .INF
+ No has instalado el driver desde el Administrador de Dispositivos. Windows no lo instala automáticamente.
+ Lo conectaste a un USB 1.1 (poco probable)

Ah y para usar la hyperterminal en Win7 y teniendo WinXP checa esto (http://electrolinks.blogspot.com/2009/05/nuevo-windows-7-release-candidate.html) casi al final viene la guía.
Título: Re: Comunicacion USB con cdc en windows 7
Publicado por: nexus148 en 20 de Noviembre de 2009, 04:41:24
Al final faltaba modificar el fichero "usb_desc_cdc.h", creo que es lo que se refiere migsantiago
con  el VID y PID.
Por si sirve de ayuda a otros, hay que modificar dicho fichero de la siguiente forma:

Hacia el final, buscar la cabecera "start device descriptors" y modificar las lineas

0x61,0x04, //vendor id (0x04D8 is Microchip, or is it 0x0461 ??) ==8,9
0x33,0x00, //product id ==10,11

por estas

0xD8,0x04, //vendor id (0x04D8 is Microchip, or is it 0x0461 ??) ==8,9
0x0A,0x00, //product id ==10,11


darck_khronos, en mi carpeta de ...\PICC\drivers tengo los siguientes ficheros:
cdc_NTXP.inf
cdc9Xpt1.inf
cdc9Xpt2.inf
ninguno como el tuyo "cdc_NTXPVista.inf", probablemente sea por la versión del compilador, yo tengo la 4.023.

Gracias a todos por la ayuda.
Título: Re: Comunicacion USB con cdc en windows 7
Publicado por: migsantiago en 20 de Noviembre de 2009, 13:02:52
Ah OK, qué bueno que ya quedó.

Los archivos de descriptor usb_desc_cdc.h y el instalador del driver .inf deben coincidir en PID y VID. Puedes poner cualquier PID o VID, pero lo recomendable es que uses el VID de Microchip 0x04D8 porque es gratuito.  ;-)
Título: Re: Comunicacion USB con cdc en windows 7
Publicado por: nexus148 en 21 de Noviembre de 2009, 06:05:25
Hola migsantiago

Aprovecho este post, para preguntarte una cosa mas.
Estoy leyendo tu blog, muy interesante por cierto, para comunicar el 18f4550 con usb al PC:
http://www.migsantiago.com/index.php?option=com_content&view=article&id=9&Itemid=10

Como explicas, he utilizado la utilidad de Pedro Palitroquez, para generar el ".inf" y el ".h", con mis datos, para modo "bulk" y "cdc".
Acto seguido, copio el archivo ".inf" bulk en la carpeta "USB OTG - MCHPUSB - Generic Driver Demo" para el modo "bulk" y copio el archivo ".inf" cdc en la carpeta "USB Device - CDC - Serial Emulator" para el modo "cdc". Utilizo los ultimos drivers de microchip, versión 2.6.
Compilo y programo el pic para modo "bulk" con su correspondiente fichero ".h" generado con la utilidad, mencionada anteriormente y conecto el pic al PC.
Me encuentra nuevo hardware, le indico la carpeta correspondiente al modo "Bulk" y ya puedo comunicar con un programma hecho en vc++.

Ahora voy a compilar el pic con un programa en modo "cdc" con su correspondiente fichero ".h" generado con la utilidad, mencionada anteriormente y conecto el pic al PC. en teoria ahora tendria que encontrar nuevo hardware y yo tendria que indicarle la direccion con los drivers cdc, pero no ocurre, me aparece conectado como en modo "bulk" igual que antes.

El la imagen adgunta puedes ver lo que me aparece en el administrador de dispositivos.


¿Que estoy haciendo mal?

Un saludo
Título: Re: Comunicacion USB con cdc en windows 7
Publicado por: migsantiago en 21 de Noviembre de 2009, 11:04:40
Hola, en tal proyecto usé el código del excelente ejemplo de J1M en el que él usó un driver especial, no el que traen los ejemplos de MPLAB o CCS.

Me parece que ese driver encasilla el VID y PID original en modo bulk y si se cambia la clase usb a CDC o HID el driver los sigue viendo como bulk... de esto no estoy muy seguro.

Te recomiendo que uses un PID para modo bulk y otro PID para los otros modos.
Título: Re: Comunicacion USB con cdc en windows 7
Publicado por: nexus148 en 21 de Noviembre de 2009, 16:17:23
Vaya tonteria, no lo habia pensado.
Simplemente el CDC le he puesto como A y el Bulk como B y ahora, cuando programo el pic con el CDC, me sale el com3 y cuando lo programma con el Bulk, sale el driver usb.
Ahora voy a probar a comunicar en modo HID. A lo mejor te molesto otra vez.

Un saludo y gracias otra vez.
Título: Re: Comunicacion USB con cdc en windows 7
Publicado por: nachogb85 en 19 de Enero de 2010, 10:08:49
El problema es que windows vista no soporta la comunicación cdc, si windows 7 es igual, me da que tienes que hacer un usb completo.

Por eso sacaron el winusb, para que resultase más fácil hacer programas con el usb


Hola,

¿es eso cierto de que Windows Vista no soporta comunicacion CDC?

Estoy probando a comunicar un PIC18F2550 con windows vista utilizando el enumerador de Palitroquez y no me deja instalar los drivers cuando direcciono a la carpeta donde se encuentra el archivo .inf

Gracias
Título: Re: Comunicacion USB con cdc en windows 7
Publicado por: Slalen en 19 de Enero de 2010, 10:57:03
buenas nacho,

yo tuve el mismo problema. Conecté un dispositivo cdc que me funcionaba en xp al vista y no me dejó.

Buscando en google leí que el vista no soporta el cdc
Título: Re: Comunicacion USB con cdc en windows 7
Publicado por: J1M en 19 de Enero de 2010, 11:37:48
Slalen, el problema no es del sistema operativo, sino de los drivers. No hay problema ninguno ni en Vista, ni en 7; ya sea 32 o 64bits. El driver que lleva la última versión de CCS funciona sin problemas.

Un saludo!
Título: Re: Comunicacion USB con cdc en windows 7
Publicado por: Slalen en 19 de Enero de 2010, 13:42:17
Ok, gracias por la aclaración XD

Lo probaré cuando me llegue ordenador nuevo  :mrgreen:
Título: Re: Comunicacion USB con cdc en windows 7
Publicado por: nachogb85 en 19 de Enero de 2010, 13:59:52
Hola Jaime,

primero darte las gracias por lo que he aprendido con PICUSB.
Lo que quiero es aprender a conectar por comunicacion CDC un pic18F2550 con vista 32, pero el problema lo tengo al instalar los driver, como trabajo con vista32, uso el programa de Palitroquez, introduzco los archivos correspondientes: usb_desc_scope.h, usb_desc_cdc.h(generado con el programa), usb_cdc.h en la carpeta del ejemplo ex_usb_serial2, con sus "includes" correspondientes.
Y tambien introduzco los archivos mchpcdc.cat y mchpcdc.inf(generado con el programa).
Compilo con CCS version 4.093, que incluye el driver cdc_NTXPVista.inf en C:\Program Files\PICC\Drivers, y programo el PIC.
Pero al conectar el PIC al PC salta una instalacion directa del driver que instala uno que no corresponde, entonces actualizo el driver manualmente.

Pruebo con ambos drivers, pero nada, con el generado por el programita de Palitroquez me reponde directamente que en la carpeta determinada no existe ningun controlador compatible con dicho dispositivo.
Y con el cdc_NTXPVista.inf me deja llegar a instalarlo, pero al final me dice que windows encontro un problema al instalar el software de controlador de dispositivo al intentar instalar el "USB to RS232".

He leido en el foro de CCS, que existe conflicto entre cdc_NTXP.inf y cdc_NTXPVista.inf y que mueva este ultimo a otra ubicacion a donde apuntar durante la instalacion del driver, pero entonces tambien directamente me dice que que en la carpeta determinada no existe ningun controlador compatible con dicho dispositivo.

Puede que la primera vez que aparecio el instalador automatico no seleccione bien la instalacion y se haya instalado ese driver por defecto (un tal C:\Windows\System32\Drivers\klfltdev.sys  del antivirus Karpesky) ahora soy incapaza de desinstalardo ni con el USBdeview se como hacerlo, asi que no se por donde seguir.

Asi que estoy un poco perdido, y no se que mas cosas puedo probar, si tiene alguna idea me seria de gran ayuda.
Título: Re: Comunicacion USB con cdc en windows 7
Publicado por: J1M en 19 de Enero de 2010, 15:19:01
Hola Nacho,

Te pego íntegro el contenido del .inf que utilizo para mis proyectos:
Código: [Seleccionar]
[Version]
Signature="$Windows NT$"
Class=Ports
ClassGuid={4D36E978-E325-11CE-BFC1-08002BE10318}
Provider=%PRVDR%
LayoutFile=layout.inf
DriverVer=01/01/2010,6.0.2600.1

[Manufacturer]
%MFGNAME%=VirComDevice,NT,NTamd64

[DestinationDirs]
DefaultDestDir = 12

[VirComDevice.NT]
%DESCRIPTION%=DriverInstall,USB\VID_0461&PID_0001
;%DESCRIPTION%=DriverInstall,USB\VID_04D8&PID_0001

[VirComDevice.NTamd64]
%DESCRIPTION%=DriverInstall,USB\VID_0461&PID_0001
;%DESCRIPTION%=DriverInstall,USB\VID_04D8&PID_0001

[DriverInstall.NT]
Include=mdmcpq.inf
CopyFiles=FakeModemCopyFileSection
AddReg=DriverInstall.NT.AddReg

[DriverInstall.NT.AddReg]
HKR,,DevLoader,,*ntkern
HKR,,NTMPDriver,,usbser.sys
HKR,,EnumPropPages32,,"MsPorts.dll,SerialPortPropPageProvider"

[DriverInstall.NT.Services]
AddService=usbser, 0x00000002, DriverServiceInst

[DriverServiceInst]
DisplayName=%SERVICE%
ServiceType = 1 ; SERVICE_KERNEL_DRIVER
StartType = 3 ; SERVICE_DEMAND_START
ErrorControl = 1 ; SERVICE_ERROR_NORMAL
ServiceBinary= %12%\usbser.sys
LoadOrderGroup = Base

[Strings]
PRVDR       = "www.microingenia.com"
MFGNAME     = "Microingenia Electronics"
DESCRIPTION = "MiEUSBCDC"
SERVICE     = "MiEUSBCDC driver"

Posiblemente no te deja desinstalar pq se te ha quedado en el registro la clase (classguid) un poco tonta, búscala y eliminala a mano. Puedes probar también a simplemente actualizar tu driver con este, o a cambiar el último número de la clase del driver que te pongo para que sea distinta a la que tú utilizas. Fíjate en que el VID y el PID sean los que tú utilizas.

Un saludo.
Título: Re: Comunicacion USB con cdc en windows 7
Publicado por: nachogb85 en 19 de Enero de 2010, 19:50:37
Muchas gracias, probare mejor actualizar el driver porque tocar el registro me da demasiao miedo, jeje.

Y otra cosilla, cuando dices "...Fíjate en que el VID y el PID sean los que tú utilizas...."  te refieres a los que tengo definidos en usb_cdc.h, no?


un saludo
Título: Re: Comunicacion USB con cdc en windows 7
Publicado por: J1M en 19 de Enero de 2010, 19:54:31
Exacto! :)
Título: Re: Comunicacion USB con cdc en windows 7
Publicado por: nachogb85 en 19 de Enero de 2010, 21:48:59

Mil gracias otra vez Jaime, me ha costado, pero ya me va con un portatil que tengo con XP, el vista me ha gritado un par de veces, asi que mejor lo intento mañana que ya es tarde,

un saludo
Título: Re: Comunicacion USB con cdc en windows 7
Publicado por: PalitroqueZ en 19 de Enero de 2010, 23:18:44
vaya, me perdí éste hilo :D

Citar
primero darte las gracias por lo que he aprendido con PICUSB.
Lo que quiero es aprender a conectar por comunicacion CDC un pic18F2550 con vista 32, pero el problema lo tengo al instalar los driver, como trabajo con vista32, uso el programa de Palitroquez, introduzco los archivos correspondientes: usb_desc_scope.h, usb_desc_cdc.h(generado con el programa), usb_cdc.h en la carpeta del ejemplo ex_usb_serial2, con sus "includes" correspondientes.
Y tambien introduzco los archivos mchpcdc.cat y mchpcdc.inf(generado con el programa).
Compilo con CCS version 4.093, que incluye el driver cdc_NTXPVista.inf en C:\Program Files\PICC\Drivers, y programo el PIC.
Pero al conectar el PIC al PC salta una instalacion directa del driver que instala uno que no corresponde, entonces actualizo el driver manualmente.

Pruebo con ambos drivers, pero nada, con el generado por el programita de Palitroquez me reponde directamente que en la carpeta determinada no existe ningun controlador compatible con dicho dispositivo.
Y con el cdc_NTXPVista.inf me deja llegar a instalarlo, pero al final me dice que windows encontro un problema al instalar el software de controlador de dispositivo al intentar instalar el "USB to RS232".

He leido en el foro de CCS, que existe conflicto entre cdc_NTXP.inf y cdc_NTXPVista.inf y que mueva este ultimo a otra ubicacion a donde apuntar durante la instalacion del driver, pero entonces tambien directamente me dice que que en la carpeta determinada no existe ningun controlador compatible con dicho dispositivo.

Puede que la primera vez que aparecio el instalador automatico no seleccione bien la instalacion y se haya instalado ese driver por defecto (un tal C:\Windows\System32\Drivers\klfltdev.sys  del antivirus Karpesky) ahora soy incapaza de desinstalardo ni con el USBdeview se como hacerlo, asi que no se por donde seguir.

un comentario del programita generador inf, yo me baso en los inf que proporciona microchip, no he probado con los inf del ccs.

nacho del resto de lo que comentas, puede ser debido a lo que dice Jaime, que al instalar un driver (asi sea una instalación incompleta) quedan rastros en el registro, por lo que al volver a intentar con otro driver, se "mezclan" y puede ocurrir un error de reconocimiento, el S.O. no sabe que inf leer, porque ya tiene uno copiado y registrado en sus sistema con las mismas características.

en mi caso, (que me ha sucedido) yo utilizo un programita llamado USBDeview (http://www.nirsoft.net/utils/usb_devices_view.html) que hace la remoción del inf de forma muy fácil (comprobado).



Título: Re: Comunicacion USB con cdc en windows 7
Publicado por: Geo en 20 de Enero de 2010, 02:40:24
Ahora mismo estoy teniendo problemas con CDC + Windows 7, usando CCS 4.069. Al enviar los caracteres al PIC éste no me los reconoce correctamente, he probado varios ejemplos, incluyendo el de lectura/escritura de la EEPROM, recibo correctamente lo que el PIC me envía, pero nunca consigo que el PIC me reconozca correctamente el caracter que estoy enviando, de hecho, al parecer siempre recibe lo mismo no importa lo que yo teclee. Por ahora estoy probando con este código:

Código: C
  1. // Ciclo principal
  2.    do {
  3.       // operaciones de la biblioteca USB
  4.       usb_task();
  5.    
  6.       // Si el dispositivo se encuentra enumerado por
  7.       // el sistema operativo
  8.       if ( usb_enumerated() ) {
  9.          // Si hay datos en el búfer
  10.          if ( usb_cdc_kbhit() ) {
  11.             // Lee el dato en el búfer
  12.             c = usb_cdc_getc();
  13.            
  14.             // Ejecuta acción de acuerdo
  15.             // al valor leído
  16.             switch( c ) {
  17.                // Apaga los LEDs
  18.                case '1':
  19.                   printf( usb_cdc_putc, "Apagando leds...\n" );
  20.                   activa_leds( 0, 0 );
  21.                   break;
  22.                // Enciende el led 0
  23.                case '2':
  24.                   printf( usb_cdc_putc, "Prendiendo LED_0...\n" );
  25.                   activa_leds( 1, 0 );
  26.                   break;
  27.                // Enciende el led 1
  28.                case '3':
  29.                   printf( usb_cdc_putc, "Prendiendo LED_1...\n" );
  30.                   activa_leds( 0, 1 );
  31.                   break;
  32.                // Código desconocido, envía el mensaje
  33.                // y parpadea los leds un par de ocasiones.
  34.                default:
  35.                   printf( usb_cdc_putc, "Codigo desconocido\n" );
  36.             }
  37.          }
  38.       }
  39.    } while (TRUE);
  40. }
No importa lo que teclee, siempre recibo el mensaje "Codigo desconocido". Como terminal, estoy usando PuTTY, MATLAB y minicom (linux), todos con los mismos resultados.

Cualquier comentario, bienvenido :).
Título: Re: Comunicacion USB con cdc en windows 7
Publicado por: Geo en 20 de Enero de 2010, 04:29:22
Hice pruebas con la versión 4.104, tampoco funcionaba hasta que actualicé el archivo de descriptores con el que se incluye en esta versión (no recuerdo a qué versión corresponde el que estaba utilizando), ya funciona :).
Título: Re: Comunicacion USB con cdc en windows 7
Publicado por: migsantiago en 20 de Enero de 2010, 18:23:59
Qué bien que ya funcionó Geo.

Como comentario extra yo usé la hyperterminal de winxp copiada en win7. Estaba probando unas conexiones con puertos virtuales seriales y con sockets y me daba muchos problemas, no comunicaba y se trababa.

Ahora veo porqué no agregaron la hyperterminal a win7  :(
Título: Re: Comunicacion USB con cdc en windows 7
Publicado por: nachogb85 en 21 de Enero de 2010, 13:44:32

Gracias Jaime y Palitroquez, parece que funciona en Vista32, yo de verdad que hay veces que pienso que no se que haria con el proyecto fin de carrera sin gente como vosotros,

Un saludo
Título: Re: Comunicacion USB con cdc en windows 7
Publicado por: skylogic en 11 de Febrero de 2010, 01:37:09

 Bueno para comentarles que he estado realizando varias pruebas con el USB CDC del CCS PICC,  y efectivamente en la version  4.104 ya esta superado el error "10" que andaba molestando en windows vista, mas no he podido hechar a andar el CDC con el Windows 7 a 64 bits.. pues al instalar el .inf  (98XPVista) al final me arroja que no es un driver apropiado para Windows 7 x64. :(

  Alguien que me puede dar alguna pista de como superar este problema, alguien tiene un driver actualizado para x64 bits ? , al principio pense que era un problema de firma digital, o el de aislar al *.INF en una carpeta e inclusive revise los parametros del vendedor.

 Saludos, amigos.. :)
Título: Re: Comunicacion USB con cdc en windows 7
Publicado por: J1M en 11 de Febrero de 2010, 05:19:56
En este mismo post.

http://www.todopic.com.ar/foros/index.php?topic=28448.msg241475#msg241475

Título: Re: Comunicacion USB con cdc en windows 7
Publicado por: skylogic en 11 de Febrero de 2010, 12:12:52
Gracias, ya encontre la solución:
(OLI)  modifications to USB CDC driver for 64 bit compatibility
http://www.ccsinfo.com/forum/viewtopic.php?t=41272

Esta especificada para una AMDx64, mas la probe con una CORE 2 DUO x64 Windows 7 y funciona muy bien,  ahora el *.inf quedo de la sgte forma:
"cdc_NTXPVista.inf"
Código: DOS
  1. ; Windows 2000, XP and Vista setup File for CCS CDC demo
  2. ; see examples ex_usb_serial.c and ex_usb_serial2.c
  3.  
  4. [Version]
  5. Signature="$Windows NT$"
  6. Class=Ports
  7. ClassGuid={4D36E978-E325-11CE-BFC1-08002BE10318}
  8. Provider=%CCS%
  9. LayoutFile=layout.inf
  10.  
  11. [Manufacturer]
  12. %ProviderName%=DeviceList, NTx86, NTamd64
  13.  
  14. [CCS]
  15. %CCS_CDC%=Reader, USB\VID_0461&PID_0033
  16.  
  17. [Reader_Install.NTx86]
  18. ;Windows2000
  19.  
  20. [DeviceList.NTamd64]
  21. %CCS_CDC%=Reader, USB\VID_0461&PID_0033
  22.  
  23.  
  24. [DestinationDirs]
  25. DefaultDestDir=12
  26. Reader.NT.Copy=12
  27.  
  28. [Reader.NT]
  29. Include=mdmcpq.inf
  30. CopyFiles=Reader.NT.Copy
  31. AddReg=Reader.NT.AddReg
  32.  
  33. [Reader.NT.Copy]
  34. usbser.sys
  35.  
  36. [Reader.NT.AddReg]
  37. HKR,,DevLoader,,*ntkern
  38. HKR,,NTMPDriver,,usbser.sys
  39. HKR,,EnumPropPages32,,"MsPorts.dll,SerialPortPropPageProvider"
  40.  
  41. [Reader.NT.Services]
  42. AddService = usbser, 0x00000002, Service_Inst
  43.  
  44. [Service_Inst]
  45. DisplayName = %Serial.SvcDesc%
  46. ServiceType = 1 ; SERVICE_KERNEL_DRIVER
  47. StartType = 3 ; SERVICE_DEMAND_START
  48. ErrorControl = 1 ; SERVICE_ERROR_NORMAL
  49. ServiceBinary = %12%\usbser.sys
  50. LoadOrderGroup = Base
  51.  
  52. [Strings]
  53. CCS = "Custom Computer Services, Inc."
  54. CCS_CDC = "USB to UART"
  55. CCS_CDCBOOT = "CCS CDC Bootloader"
  56. Serial.SvcDesc = "USB Serial emulation driver"
Título: Re: Comunicacion USB con cdc en windows 7
Publicado por: rofa en 07 de Marzo de 2010, 17:28:05
Hola, me parece que ustedes me van a poder ayudar. Les comento yo tengo una interfase USB-DMX la cual ya tiene los drivers y firmeware y todo. y anda perfectamente en xp, pero no anda en vista ni en seven, yo quisiera saber si se pueden modificar los drivers para que funcione en 7, si alguien sabe algo le agradeceria mucho a ver si me puede ayudar ya que no se mucho de programacion. Muchas gracias.
Título: Re: Comunicacion USB con cdc en windows 7
Publicado por: franzrilke77 en 12 de Julio de 2010, 23:00:29
Una pregunta realize mis pruebas con el Programa de Palitroquez sobre usb, y me genera el mchpusb y el usb_desc_scope.h com es y corre erfecto pero al porbar con el CDC me genera el mchpcdc.inf y el usb_desc_cdc.h pero no deberia generarme tambien el mchpcdc.cat?. Pero sin ese mchpcdc.cat mi driver se instala sin error. Estoy usANDO EL CCS4.104 pero  al correr mi programa,adaptado de los que encontre en el compilador, lo mestro al final.

Al grabarlo y probarlo con el hiperterminal que lo pude conseguir en la red, ya que sso windows7 y no tiene; resulta que esperaria que aparecas el mensaje de "Hello World" o que al teclear ua letra me reciviera la misma que teclee..pero siempre sale un solo caracter "'!" , a pesar de teclear cualquier letra. Estoy usando un crisal de 20Mhz.....y como vi en el
delay coloco 48Mhz.

puede alguien responder que estoy haciendo mal y como uno consigue el mchpcdc.cat .

Gracias
Código: [Seleccionar]
#include <18F2550.h>
#device adc=8 //Usa resolución de 8 bits
#FUSES HSPLL                    //High Speed Crystal/Resonator with PLL enabled
#FUSES NOWDT                    //No Watch Dog Timer
#FUSES NOPROTECT                //Code not protected from reading
#FUSES NOLVP                    //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
#FUSES NODEBUG                  //No Debug mode for ICD
#FUSES USBDIV                   //USB clock source comes from PLL divide by 2
#FUSES PLL5                   //Divide By 5(20MHz oscillator input)
#FUSES CPUDIV1                  //System Clock by 1
#FUSES VREGEN                   //USB voltage regulator enabled
#FUSES NOPBADEN         //PORTB pins are configured as digital I/O on RESET

#use delay(clock=48000000)
//#use delay(clock=20000000)
#use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=8)
#include "usb_cdc.h"


#use delay(clock=48000000)


/////////////////////////////////////////////////////////////////////////////
//
// Configure the demonstration I/O
//
/////////////////////////////////////////////////////////////////////////////
 #define LED1 PIN_B7
 #define LED2 PIN_B6
 #define LED3 PIN_B5
#DEFINE BUTTON PIN_A4
#define LED_ON output_low
#define LED_OFF output_high

/////////////////////////////////////////////////////////////////////////////
//
// usb_debug_task()
//
// When called periodically, displays debugging information over serial
// to display enumeration and connection states.  Also lights LED1 based upon
// enumeration and status.
//
/////////////////////////////////////////////////////////////////////////////
 void usb_debug_task(void) {
   static int8 last_connected;
    static int8 last_enumerated;
  int8 new_connected;
    int8 new_enumerated;
   static int8 last_cdc;
    int8 new_cdc;

    new_connected=usb_attached();
    new_enumerated=usb_enumerated();
    new_cdc=usb_cdc_connected();

   if (new_enumerated)
       LED_ON(LED1);
    else
     LED_OFF(LED1);

   if (new_cdc)
      LED_ON(LED2);
   else
      LED_OFF(LED2);

   if (usb_cdc_carrier.dte_present)
      LED_ON(LED3);
 else
      LED_OFF(LED3);

   if (new_connected && !last_connected)
      printf("USB connected, waiting for enumaration...\r\n\n");
   if (!new_connected && last_connected)
      printf("USB disconnected, waiting for connection...\r\n\n");
   if (new_enumerated && !last_enumerated)
      printf("USB enumerated by PC/HOST\r\n\n");
    if (!new_enumerated && last_enumerated)
      printf("USB unenumerated by PC/HOST, waiting for enumeration...\r\n\n");
    if (new_cdc && !last_cdc) {
      printf("Serial program initiated on USB<->UART COM Port\r\n\n");
       printf(usb_cdc_putc, "\r\n\nCCS CDC (Virtual RS232) Example\r\n\n");
    }

   last_connected=new_connected;
   last_enumerated=new_enumerated;
   last_cdc=new_cdc;
 }


void main(void)
{
   char c;

   LED_OFF(LED1);
   LED_OFF(LED2);
   LED_OFF(LED3);

 
   usb_init_cs();



   while (TRUE)
   {
      usb_task();
      usb_debug_task();

      if (usb_cdc_kbhit())
      {
         c=usb_cdc_getc();
         if (c=='\n') {usb_cdc_putc('\r'); usb_cdc_putc('\n');}
         else if (c=='\r') {usb_cdc_putc('\r'); usb_cdc_putc('\n');}
         else if (c=='!') {printf(usb_cdc_putc,"HELLO-WORLD-HELLO-WORLD-HELLO-WORLD-HELLO-WORLD-HELLO-WORLD-HELLO-WORLD-HELLO-WORLD-HELLO-WORLD-DONE");}
         else {usb_cdc_putc(c);}
      }

   }
}

Al grabarlo y probarlo con el hiperterminal que lo pude conseguir en la red, ya que sso windows7 y no tiene; resulta que esperaria que aparecas el mensaje de "Hello World" o que al teclear ua letra me reciviera la misma que teclee..pero siempre sale un solo caracter "'a"

Título: Re: Comunicacion USB con cdc en windows 7
Publicado por: krlosjcc en 28 de Septiembre de 2010, 23:26:09
Hola, en tal proyecto usé el código del excelente ejemplo de J1M en el que él usó un driver especial, no el que traen los ejemplos de MPLAB o CCS.

Me parece que ese driver encasilla el VID y PID original en modo bulk y si se cambia la clase usb a CDC o HID el driver los sigue viendo como bulk... de esto no estoy muy seguro.

Te recomiendo que uses un PID para modo bulk y otro PID para los otros modos.

hola

estoy tratando de conectar un PIC18F4550 a mi laptop que corre windows 7 de 64bits y me baso en el ejemplo que pusiste en tu pagina

http://www.migsantiago.com/index.php?option=com_content&view=article&id=9&Itemid=10

hice unas pequeñas modificaciones en el código como muestro a continuación:

#include <18F4550.h> por #include <18F2550.h>

PLL5 por PLL1; esto por que utilizo un cristal de 20Mhz

ahora hay unos conceptos basicos que no comprendo como modo bulk etc

Preguntas:

1___ A la hora de utilizar el enumerador de palitroquez debo hacer algunas modificaciones a la configuración predeterminada? esto para que se comunique el pic con mi compu?

2___ En el diagrama mostrado en la pagina, en el conector USB para que es la conección de Vdd, es decir yo alimento el PIC con otra fuente, entonces para que debo usar ese voltaje?

_____________________

la version del compilador de ccs que utilizo es la 4.084

hasta el momento lo que pasa cuando conecto el pic a la compu es... NADA  :? windows no reconoce ningun dispositivo ...

tal vez si alguien me puede proporcionar una guia mas detallada sobre que hacer para conectar el pic a mi compu por USB, esta es la primera vez que lo intento y no he tenido nada de exito.

gracias
Título: Re: Comunicacion USB con cdc en windows 7
Publicado por: Geo en 08 de Noviembre de 2010, 21:59:20
PLL5 por PLL1; esto por que utilizo un cristal de 20Mhz
Si usas un cristal de 20 MHz y el divisor PLL entonces PLL5 es lo correcto.
Título: Re: Comunicacion USB con cdc en windows 7
Publicado por: migsantiago en 09 de Noviembre de 2010, 11:48:04
hice unas pequeñas modificaciones en el código como muestro a continuación:

#include <18F4550.h> por #include <18F2550.h>

PLL5 por PLL1; esto por que utilizo un cristal de 20Mhz

ahora hay unos conceptos basicos que no comprendo como modo bulk etc

Preguntas:

1___ A la hora de utilizar el enumerador de palitroquez debo hacer algunas modificaciones a la configuración predeterminada? esto para que se comunique el pic con mi compu?

2___ En el diagrama mostrado en la pagina, en el conector USB para que es la conección de Vdd, es decir yo alimento el PIC con otra fuente, entonces para que debo usar ese voltaje?

_____________________

la version del compilador de ccs que utilizo es la 4.084

El cambio de include y del PLL es correcto.

1_ No debes cambiar nada para la prueba.
2_ Si no usarás los 5V del puerto USB, deja VBUS desconectado. No desconectes GND.

Si usas Win7, en la página puse cómo actualizar la DLL para hacerlo funcionar.
Título: Re: Comunicacion USB con cdc en windows 7
Publicado por: mydogshadow en 22 de Febrero de 2011, 00:33:41
hola amigo J1M te cuento que he logrado comunicar mi pic con  mi pc con windows 7 en realidad eso no me dio problema alguno. El poroble está en que ya determine que no puedo utilizar interrupciones ni externas ni del timer0 xq al dispararse se cuelga la cumunicacion con la pc y el programa no avnaza mas del punto en que se quedo. Es mas aunq la interrupcion por timer no este activada al desbordar el timer el pic se cuelga lo he intentado muchas veces y solo logre determinar que el problema es con las interrupciones.
este es mi codigo uso un 18f4550:

#include <18F4550.h>
#device adc=10
#FUSES HS,HSPLL,NOWDT,NOPROTECT,NOLVP,USBDIV,NODEBUG,PLL5,CPUDIV1,VREGEN,NOBROWNOUT
#USE DELAY (clock=48000000)
#include <usb_cdc.h> //Siempre va antes del include usb_desc_cdc.h
#include <usb_desc_cdc.h>
#DEFINE pull_1  pin_a2
#DEFINE pull_2  pin_a3
#BYTE INTCON= 0xff2
#bit TMR0IF = INTCON.2
#byte UCON = 0xF6D
#bit USBEN = UCON.3
#byte UCFG = 0xF6F
#bit USBTRANS = UCFG.3
float  v_a,v_b;
int16  v_1,v_2,tiempo;
float tiempo_2,tiempo_3,cont,cont1;



void main()
 {
  usb_cdc_init();
  usb_init(); //inicializamos el USB

  output_high(PIN_B3);
  output_low(PIN_B4); //se enciende el led rojo

  while (!usb_cdc_connected())
  { }//Se queda aquí mientras usb no esté conectado correctamente
//printf(usb_cdc_putc,"Usb correctamente conectado\r\n");

usb_task();
  if(usb_enumerated()){
   delay_ms(100);
  //printf(usb_cdc_putc,"listo....\r\n");
   output_high(PIN_B4);
  output_low(PIN_B3);
 
// CONFIGURACION
/////////////////////////////////////////////
enable_interrupts(INT_RDA);
   setup_adc_ports(AN0_TO_AN1);     // A0 y A1 como analogicas.
   setup_adc(ADC_CLOCK_INTERNAL);
   

 //ext_int_edge(L_TO_H);
 setup_timer_0(RTCC_INTERNAL|RTCC_DIV_256);
 set_timer0(0);
 enable_interrupts(INT_TIMER0);       //Habilita interrupción timer0
 
  enable_interrupts(global); 
  cont=0;
  cont1=0;
 
   while(1)
 {

 
 set_adc_channel(0);      //Adquisision del Sensor de entrada.
   delay_us(20);
   v_1= read_adc();
   v_a=5.0*v_1/1024.0;
   tiempo=get_timer0();
   tiempo_2=tiempo*(1.0/20000000.0)*256.0;
   tiempo_3=tiempo_2+cont1;
   set_adc_channel(1);      //Adquisision del Sensor de salida.
   delay_us(20);
   v_2 = read_adc();
   v_b=5.0*v_2/1024.0;
   
   if(cont==17){
   set_timer0(0);
   cont=0;
   cont1=cont1+0.1;
   };
   cont=cont+1;
   
   printf(usb_cdc_putc," %01.4f\r\n",v_a);
   printf(usb_cdc_putc," %01.4f\r\n",v_b);
   printf(usb_cdc_putc,"%01.4f\r\n",tiempo_3);
   
   
 }
  }}

lo que ves que hice con el timer fue para evitar su desborde pero con la interrupcion externa no pude y me toco eliminarla me podrias ayudar desde ya muchas gracias.
Título: Re: Comunicacion USB con cdc en windows 7
Publicado por: marito en 09 de Enero de 2012, 16:14:23
Hola a todos!

Estoy desesperado intentado comunicar mi pic18f4550 con mi PC con windows7 64 bits.

Hasta el momento, he usado el enumerador de Palitroquez, genere el .INF y el .h.

Guarde ambos archivos en la carpeta del proyecto junto con el .CAT de Microchip y el archivo USB_CDC. Cargue el programa en el PIC. La PC me detecta el pic como un puerto serie, pero no recibo ninguno de los datos que me envía el PIC.

En la misma subrutina del programa de comunicación,agregue unas lineas para hacer parpadear un LED, pero tampoco funciona. El led parpadea si saco del programa las lineas relacionadas con la comunicación USB CDC.

Lo raro es que me detecta el PIC conectado a un puerto serie virtual, pero no ejecuta el programa cargado en el PIC.

A alguien le ha ocurrido algo parecido? Alguna sugerencia?

Gracias!
Saludos