TODOPIC

Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: proyecto2009utu en 10 de Enero de 2011, 17:59:05

Título: USB CDC para PIC18F4550 en CCS
Publicado por: proyecto2009utu en 10 de Enero de 2011, 17:59:05
Buenas comunidad, desde hace dias ya estoy intentando levantar una comunicacion USB CDC sin exito....
He encontrado algunos ejemplos en la web pero tampoco pude hacer andar ninguno, lo que me desconcierta mas  :?

Yo recien empiezo a trabajar con CCS, y mis experiencas anteriores fueron con MikroC con el cual logre estableer una comunicacion HID mediante el USB

Por ahora lo unico que quiero hacer es establecer la comunicacion CDC y ver que funciona.

Tengo algunas dudas con el driver, no se si lo debo crear o es el mismo siempre???

Y mi gran duda es el error que me da en mis programas al compilar, me dice que no esta definido #device PIC18F4550, en el 18f4550.h
No entiendo porque este error, y como lo corrigo?

Luego seguire colocando otras dudas en este hilo, pero la verdad esto me tiene muy trancado  :5]

Desde ya mil gracias
Título: Re: USB CDC para PIC18F4550 en CCS
Publicado por: rodrigo_control2009 en 16 de Enero de 2011, 16:13:21
Amigo  busca un tema llamado el  usb desencadenado http://picmania.garcia-cuervo.net/usb_0_desencadenado.php , allí encontraras todo  sobre  el  usb   cdc, bulk, hid   está  todo  muy  fácil de entender.  Yo  los he probado  y hecho aplicaciones sencillas  con el usb_cdc   con el 18f4550 en win 7  64 bit  y en general  todo  funciona muy bien, solo asegurate q  el  archvo  inf  incluya  los  SO de 64 bit  o 32 bit segun en  cual estes  trabajando
Título: Re: USB CDC para PIC18F4550 en CCS
Publicado por: rodrigo_control2009 en 16 de Enero de 2011, 16:37:46
Como  mencione mas arriba  en general   no he  tenisdo problemas con el usb_cdc 
Habia hecho algunas pruebas  y  todo funcionaba  bien, luego quice enviar  datos desde el pc a un pic el cual a su vez lo enviaba a otro pic   y  finalmente el 1er pic lo enviaba al PC. Bueno la cosa  no funciono y  el  primer pic no entraba en la rutina de interrupcion. Luego de algunas pruebas nada mejoro, asi q decidi hacer lo mas basico  hacer el eco desde el 1er pic, y para sopresa  el eco enviado al pc  es  cualquier cosa menos el caracter  enviado por el pc.
Al enviar el caracter desde el pc el pic lo recibe ya q se enciende un led como bandera, pero retorna al pc cualquier cosa.
Estoy usando  e CCS 4.104  en win 7 64 bit. El pc reconoce bien el pic y le asigna un puerto com.


este es el Cod.

#include <18F4550.h>
#fuses HSPLL,NOWDT,NOPROTECT,NOLVP,NODEBUG,USBDIV,PLL5,CPUDIV1,VREGEN
#use delay(clock=48000000)
#include <usb_cdc_HomeScada.h>
//#define USB_CON_SENSE_PIN PIN_B2
char recepcion;

void main(){
delay_ms(300);
usb_cdc_init();               //esta  en  usb_cdc   y  configura  los  baudios, bit paridad etc
usb_init();                   // esta en pic18_usb llama  a usb_init_cs() q a su vez  llama a usb_task()
while(!usb_cdc_connected()) {}
usb_task();                  //está en pic18_usb
 if (usb_enumerated()) printf(usb_cdc_putc, " TEST ECO USB:\r\n");
                              //Atencion de  eco  USB_CDC
do{
 usb_task();                 //está en pic18_usb
 if (usb_enumerated())     {
  if(usb_cdc_kbhit())             {
  if ((recepcion=usb_cdc_getc()) != 0x00)  {
   usb_cdc_putc(recepcion);recepcion=0x00;
   output_high(pin_c0);         //enciende led para  monitorea si entra en rutina de rx  y  tx
   delay_ms(10);
   output_low(pin_c0);
                                           }
                                 }

                            }
 } while(true);
         }
Título: Re: USB CDC para PIC18F4550 en CCS
Publicado por: rodrigo_control2009 en 17 de Enero de 2011, 13:25:49
Seguí haciendo  pruebas y  la falla  se mantenía por el  lado de la recepción usb_cdc del pic.   Todo lo que el PIC recibía y  retransmitia al pc o al módulo  serie  salia  mal.
Así que decidí, compilar en  otra versión anterior el mismo código, y  esto resolvió el problema 
Con la  versión  4.104 de CCS me genera un .hex  que  tiene falla en la  recepción  usb_cdc
Con la  versión  4.023  de CCS   no  produce problemas .

Este es el cod de prueba usado en las dos versiones


#include <18F4550.h>
#fuses HSPLL,NOWDT,NOPROTECT,NOLVP,NODEBUG,USBDIV,PLL5,CPUDIV1,VREGEN
#use delay(clock=48000000)
#use rs232(baud=9600, xmit=pin_c6, rcv=pin_c7, bits=8, parity=N)
#include <usb_cdc_HomeScada.h>

//#define USB_CON_SENSE_PIN PIN_B2

char s;

void main(){
char c=0x00;
delay_ms(300);
usb_cdc_init();                         //esta  en  usb_cdc   y  configura  los  baudios, bit paridad etc
usb_init();                             // esta en pic18_usb llama  a usb_init_cs() q a su vez  llama a usb_task()
while(!usb_cdc_connected()) {}

enable_interrupts(global);
enable_interrupts(int_rda);


do{
 usb_task();                             //está en pic18_usb
 if (usb_enumerated())     {

 c=usb_cdc_getc();                     
 usb_cdc_putc(c);
 putc(c);
 c=0x00;                               // lo retransmite por rs232 y hace eco usb
                           }
 } while(true);
         }

#int_rda
void serie_isr(){
if (kbhit()){
   output_high(pin_c0);         //enciende led para  monitorea q entro en rutina de rx
   s=getc();
   putc(s);
   delay_ms(1);
   output_low(pin_c0);
   usb_task();                 //está en pic18_usb
 if (usb_enumerated()){ if (s != 0x00) usb_cdc_putc(s); s=0x00;}
}}
Título: Re: USB CDC para PIC18F4550 en CCS
Publicado por: proyecto2009utu en 20 de Enero de 2011, 18:04:28
Interesante que con una version mas nueva te de problemas...
Yo estoy usando la version 4.104 actualemente (en sistemas operativos de 32 bit), voy a ver si me paso a la 4.023, como tu dices...

Cual es la aplicacion que estas utilizando para comprobar tus programas???

Actualmente estoy con problemas para instalar el driver, ya que inicializo el USB pero no logro instalar el driver para que el sistema operativo reconozca al dispositivo
Tu como lo haces?

Desde ya muchas gracias

Título: Re: USB CDC para PIC18F4550 en CCS
Publicado por: rodrigo_control2009 en 20 de Enero de 2011, 21:31:41
Hola, ya  descubrí  mi  problema.  Los archivos usb_desc_cdc.h q usaba los habia  creado con una  versión menos reciente de PICC. Así que  modifique el archivo usb_desc_cdc. de la versión 4.104 y  todo  funciona  bien, también lo probe  con la versión 4.114 y  compila  bien. Probe mi tarjeta en  win 7 64 bit  y   se asigna puerto com. Hice las  pruebas de eco  y  responde  muy  bien.

Prueba este  código  solo  hace  el eco  emulando un puerto com  con USB_CDC

eco_usb_cdc.c

 
#include <18F4550.h>
#fuses HSPLL,NOWDT,NOPROTECT,NOLVP,NODEBUG,USBDIV,PLL5,CPUDIV1,VREGEN  //  uso un cristal de 20MHz
#use delay(clock=48000000)
#include <usb_cdc.h>


#define USB_CON_SENSE_PIN PIN_B2  //  puede  ser  aunq deshabilitado  tb  me  funcionó para este  ejemplo en otros  casos  si  es necesario

char s;
char c=0x00;
void main(){

delay_ms(300);
usb_cdc_init();                         //esta  en  usb_cdc   y  configura  los  baudios, bit paridad etc
usb_init();                             // esta en pic18_usb llama  a usb_init_cs() q a su vez  llama a usb_task()
while(!usb_cdc_connected()) {}



do{
 usb_task();
//c=0x00;                         
 if (usb_enumerated())     {
 c=usb_cdc_getc();                     
 usb_cdc_putc(c);
 }
 }                     
 while(true);
         }


Te  adjunto el  archivo usb_desc_cdc.h
Nota: no  uso el VID y PID  de microchip, solo  por antojo jejeje, así q  puedes  usar el q quieras para fines didácticos, no así  para  fines  comerciales.
Verifica que en tu archivo usb_cdc.h  este  esta línea,

#include <usb_desc_cdc.h>   //USB Configuration and Device descriptors for this UBS device

 para que pueda llamar al archivo usb_desc_cdc.h q t adjunto y este  a su vez llame al .inf q tb adjunto  el cual a su vez  llama al driver standard de windows. (no olvides  hacer un respaldo de tus drivers originales si coincide el  nombre o cambia el nombre al q t envio, sin olvidar  cambiar el nombre en la línea antes citada.
modifica  el arch .txt  a  .inf
Título: Re: USB CDC para PIC18F4550 en CCS
Publicado por: proyecto2009utu en 21 de Enero de 2011, 13:03:53
Anda bien... ni siquiera me pide para instalar el driver y me genera un com virtual...

No se que aplicacion utilizar para probarlo

Ya que con el hyperterminal me recibe los datos pero no me devuelve nada  :(

Gracias
Título: Re: USB CDC para PIC18F4550 en CCS
Publicado por: PalitroqueZ en 21 de Enero de 2011, 13:23:10
proyecto2009ut

al usar CDC, no necesitas driver, porque el windows ya lo trae, pero si necesitas informarle al windows como será la configuración del dispositivo que trabajará como puerto serial virtual y es allí donde debes buscar un archivo con extensión .inf

el que yo he usado es el que proporciona microchip en su MCHPFSUSB Framework  http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&nodeId=2680&dDocName=en537044

buscas en la carpeta drivers y cdc y allí deben estar unos 4 o 5 archivos que son los que necesitan,

pero eso si, debes usar el mismo VID y PID para que puedan integrarse correctamente al sistema.




bueno debo corregir mi post anterior, en realidad si necesita un driver, los archivos que te mencioné son estos:

(http://img708.imageshack.us/img708/4310/drivercdcmicrochip.jpg)


al buscar el inf, el inf copia los .sys a la carpeta del sistema

Título: Re: USB CDC para PIC18F4550 en CCS
Publicado por: rodrigo_control2009 en 21 de Enero de 2011, 22:14:17
Cuando preguntas   q aplicación uso, t refieres  al  software ??
Con cualquier  visor de puerto  serie  deberías  ver  lo  q envias por el  puerto  com y  lo q recibes  por  el.
Yo hago las pruebas con el Docklihgt 1.6 y  el  monitor de puerto serie  q está en tools del compilador  ccs.
Y el hardaware  es una tarjeta en la que tengo un 18f4550 conectado  al usb, y  su  puerto  serie  a un modulo xbee, admas de una memoria i2c, y otras  cosas.
Creo q  si usas win de 32 bit, puedes simular la  comunicaión usb_cdc  en proteus, asi  no necitaras de una tarjeta  fisica o si ya  dispones de una o  en un proto, mucho mejor.
Y  como  bien dice  Palitroquez  el usb_cdc  no necesita driver pq  windows  ya  lo  tiene, pues  lo  único q uno hace  es  indicarle  cual driver usar, con el archivo .inf
Proyecto2009ut, sube  los códigos q usas, así mas  puden  verlos  y  te  podrán dar buenas  sugerencias.
Título: Re: USB CDC para PIC18F4550 en CCS
Publicado por: proyecto2009utu en 22 de Enero de 2011, 15:43:04
Buenas, gracias por su interes...
Si te preguntaba por la aplicacion, yo estaba usando el putty y el hyperterminal, y los dos me hacen lo mismo, me envian lo que escribo pero no recibo nada.... es raro  :?, pero igual yo estoy trancado en un paso anterior ya que la pc no me reconoce el dispositivo  :5]

Lo que estoy intentando realizar es un osciloscopio digital, que se comunique por usb. Ahora bien estoy teniendo ciertos polemas con el PIC...

El codigo que tengo hasta al momento es solo una pequeña parte de lo que quiero hacer...

Código: [Seleccionar]
#include <18f4550.h>
#fuses   HSPLL,NOWDT,NOPROTECT,NOLVP,NODEBUG,USBDIV,PLL12,CPUDIV1,VREGEN,NOPBADEN       
#use delay(clock=48000000)     
#include <pic18_usb.h> //Microchip PIC18Fxx5x Hardware layer for CCS's PIC USB driver
#include "usb_desc_cdc.h"      // Descriptores del dispositivo USB.     
#include "usb_cdc.h"           // Descripción de funciones del USB.
short estado_usb;      // boolean global, se debe declarar antes de llamar a usb_cdc.h
#define USB_CON_SENSE_PIN PIN_E3
#define  PORTB = busdata   // Defino el puerto B como la entrada de datos
                                       
// Declaracion de funciones

static void adqrap(void); // Defino adquisicion rapida                                                                   
static void adqlen(void); // Defino adquisicion lenta                                               
static void lectur(void); // Funcion Lectura                               
static void escrit(void); // Funcion Esctritura
         
// Declaracion de variables   

int8  var1;
char  var;

void main() {
       
set_tris_b (0xff);     
set_tris_a (00010000);                 

   usb_cdc_init();
   usb_init();                                           
   while(!usb_cdc_connected()) {}                       
   // espera a detectar una transmisión de la PC (Set_Line_Coding)
   do{
      usb_task();
      if (usb_enumerated()){
      usb_cdc_putc(var);
         if(usb_cdc_kbhit()){ //en espera de nuevo(s) caracter(es) en el buffer
            if(usb_cdc_getc()=='x'){ //¿lo que llegó fué el caracter x?
               printf(usb_cdc_putc, "Probando comunicacion\n\r");                   
               //si, entonces envía una cadena hacia el PC
             }                                   
            if(usb_cdc_getc()=='a'){ //¿lo que llegó fué el caracter a?
               printf(usb_cdc_putc, "Proximamente datos osciloscopio\n\r");
               //si, entonces envía una cadena hacia el PC               
             }                                                 
         }                               
        }
       }while (TRUE); // bucle eterno
}             


Ahora bien, lo que quiero hacer y no se como  es cargar los datos del PuertoB en alguna de las variables y enviarlo por el USB, como puedo cargar una variable con el valor del puerto?

Gracias

PD: No se si me entienden el codigo, la parte de los caracteres y printf es solo para probar la comunicacion  :oops:
Título: Re: USB CDC para PIC18F4550 en CCS
Publicado por: jhozate en 22 de Enero de 2011, 19:32:57
para leer el puerto define la variable y lees con
Código: [Seleccionar]
variable=input_b();
Título: Re: USB CDC para PIC18F4550 en CCS
Publicado por: rodrigo_control2009 en 22 de Enero de 2011, 20:34:17
La aplicación funciona, uno de  los  problemas es q al inicio del  buble  mandas  el valor de var y ésta  está  vacio asi q solo mandas  0x00 o caratcter nulo, además como  está  al  inicio del bucle infinito,  saturas  el terminal, ya q no hay nada q controle su envio.
Por otro lado no puedes ver el valor del  PORTB:
1.- No lo lees
2.- No lo  guardas en ninguna variable (si asi lo deseas).
3.- En ningun momento envias el valor del PORTB al PC
4.- Declaras  varias  funciones, pero no las  usas

Como  te  mencionan con input_b()  puedes leer  el  PORTB

#include <18f4550.h>
//#fuses HSPLL,NOWDT,NOPROTECT,NOLVP,NODEBUG,USBDIV,PLL5,CPUDIV1,VREGEN  //  YO USO CRISTAL DE 20MHz 20/5=4MHz, TU USAS UNO DE 48 MHz YA 1 USAS PLL12 48/12=4MHz
#fuses   HSPLL,NOWDT,NOPROTECT,NOLVP,NODEBUG,USBDIV,PLL12,CPUDIV1,VREGEN,NOPBADEN       
#use delay(clock=48000000)     

//#include <pic18_usb.h>           //Microchip PIC18Fxx5x Hardware layer for CCS's PIC USB driver
//#include "usb_desc_cdc.h"        // Descriptores del dispositivo USB.   

//  usb_cdc.h  ya  incluye los  arch antes citados, reviza usb_cdc.h
 
#include "usb_cdc.h"           // Descripción de funciones del USB.

//short estado_usb;      // boolean global, se debe declarar antes de llamar a usb_cdc.h

//#define USB_CON_SENSE_PIN PIN_B2
#define USB_CON_SENSE_PIN PIN_E3
//#define  PORTB = busdata  // Defino el puerto B como la entrada de datos

//#byte PORTB =0x81  //  defino  portb  reg  0x81  del 18f4550
                                       
// Declaracion de funciones

static void adqrap(void); // Defino adquisicion rapida                                                                   
static void adqlen(void); // Defino adquisicion lenta                                               
static void lectur(void); // Funcion Lectura                               
static void escrit(void); // Funcion Esctritura
         
// Declaracion de variables   

int8  var1;
char  var;

void main() {
       
//set_tris_b (0xff);     
//set_tris_a (00010000);                 
   delay_ms(300);
   usb_cdc_init();
   usb_init();                                           
   while(!usb_cdc_connected()) {}                       
   // espera a detectar una transmisión de la PC (Set_Line_Coding)
   do{
      usb_task();
      if (usb_enumerated()){
      var1=input_b();
      var=input_b();
          //usb_cdc_putc(var1);
         //usb_cdc_putc(var);
         if(usb_cdc_kbhit()){ //en espera de nuevo(s) caracter(es) en el buffer
            if(usb_cdc_getc()=='x'){ //¿lo que llegó fué el caracter x?
               printf(usb_cdc_putc, "Probando comunicacion\n\r");                   
               //si, entonces envía una cadena hacia el PC
             }                                   
            if(usb_cdc_getc()=='a'){ //¿lo que llegó fué el caracter a?
               printf(usb_cdc_putc, "Proximamente datos osciloscopio\n\r");
               //si, entonces envía una cadena hacia el PC               
             }
             if(usb_cdc_getc()=='b'){ //¿lo que llegó fué el caracter b?  // aca  t  muestra  el valor de PORTB
               printf(usb_cdc_putc, "PORTB= %c\n\r",var);
               printf(usb_cdc_putc, "PORTB= %u\n\r",var1);}
         }                               
        }
       }while (TRUE); // bucle eterno
}

Hice las pruebas con dos  soft  y  con ambos  funciona igual ve las imagenes


Título: Re: USB CDC para PIC18F4550 en CCS
Publicado por: proyecto2009utu en 24 de Enero de 2011, 15:32:16
Muchas gracias por sus respuestas y por su gran ayuda!
A mi tambien me a funcionado perfectamente....  :-/
pero tengo un problema extraño... les cuento un poco:

Yo trabajo con dos maquinas una con win7 y otra con winxp (los dos de 32bits) pero con win7 me anda y no en xp, que sigue sin reconocerme el driver...

Es extraño esto no???

En win7 le puse que me buscara el driver en una carpeta raiz y que incluyera todas las sub carpetas (y ahi encontro alguno, pero no se exactamente cual es) en xp no me deja hacer esto  :?

Igualmente si no estoy equivocado los archivos que preciso de driver son siempre los mismos verdad???
el mchpcdc.cat y el mchpcdc.inf que son propiedad de microchip

en las imagenes muestro un poco lo que me aprece

Por favor digame si estoy muy equivocado, porque esto es lo que me esta desconcertando un poco  :shock:

Muchisimas gracias!
Espero este hilo le pueda servir a mucha mas gente
Título: Re: USB CDC para PIC18F4550 en CCS
Publicado por: jhozate en 24 de Enero de 2011, 18:20:41
yo copié esos dos archivos en la carpeta "projects" de ccs y asi me los encuentra
Título: Re: USB CDC para PIC18F4550 en CCS
Publicado por: proyecto2009utu en 25 de Enero de 2011, 07:22:41
Pero luego le pones la ubicacion especifica que te lo busque en la carpeta "projects" no jhozate?

Igual creo que se supone que se puede poner en cualquier carpeta, siempre y cuando uno le especifique donde esta el driver para el controlador, no?
Título: Re: USB CDC para PIC18F4550 en CCS
Publicado por: jhozate en 25 de Enero de 2011, 12:39:52
si claro, le pongo la direccion hacia "projects", solo asi me los reconocio el windows 7 de resto en cualquier otro lado que los pusiera no los encontraba.

Edit: Efectivamente, algo falla. En mi windows 7 funciona OK, pero en XP no me reconoce el driver, me toco usar el de CCS y ese si lo encuentra
Título: Re: USB CDC para PIC18F4550 en CCS
Publicado por: proyecto2009utu en 29 de Enero de 2011, 13:13:24
Gracias, en win7 me esta andando y si en winxp le tengo que colocar el driver de CCS, y anda....

Pero solamente me anda en la simulacion en proteus (cuando lo bajo al pic no me anda en ninguno de los dos  :()

Otra cosa que me esta pasando es que en win7 la simulacion del puerto USB a veces anda y a veces no...

Pienso que lo me puede estar pasando es que ya tengo un dispositivo instalado con un VID y un PID, y no me deja instalar otro con los mismos numeros
puede ser esto cierto????

Porque exactamente el mismo programa que me anda en proteus no anda en el PIC  :shock:

Les paso una imagen de lo que me muestra... me parece muy estraño que tanto el VID como el PID sean 0000
Debe ser porque no tiene ningun controlador instalado ¿?

Gracias por su ayuda!
Título: Re: USB CDC para PIC18F4550 en CCS
Publicado por: jhozate en 29 de Enero de 2011, 13:25:54
yo no he probado la simulacion de proteus, pero si no estoy mal en una de sus carpetas(proteus) hay un driver que hay que instalar.
El dispositivo parece como si ya estuviese instalado, descarga este (http://www.nirsoft.net/utils/usbdeview.zip) soft, si estas en Windows 7, ejecutalo como administrador, elige el dispositivo desconocido dale click derecho y luego Unistall, ahi ya puedes hacer el proceso de cero. Asegurate que el VID y PID sean los mismo en el archivo descriptor y en el driver, ademas de conectarlo en el mismo puerto
Título: Re: USB CDC para PIC18F4550 en CCS
Publicado por: proyecto2009utu en 31 de Enero de 2011, 14:13:04
Lo de instalar los USB drivers (de proteus) lo probe, pero a veces anda y a veces no... no se porque  :o

Y con el soft ese, no me muestra el dispositivo desconocido, por lo tanto no lo puedo borrar.... me parece que eso es algo que pone el windows cuiando no tiene ningun controlador

Lo que me extraña es que en la simulacion me funcione perfectamente y en el harware real no me reconozca el dispositivo

Estoy usando el driver de C:\Archivos de programa\PICC\Drivers

Les agradezco su ayuda

Título: Re: USB CDC para PIC18F4550 en CCS
Publicado por: proyecto2009utu en 13 de Mayo de 2011, 10:49:45
Bueno despues de estar mucho tiempo trancado con esto  :5]
Encontre cual era el problema! Lo que menos pensaba que podia ser, el cristal de 48MHz (compre 5 y nunguno anda)  :oops:

Pero bueno cambie por cristal de 20MHz y funciono perfecto  :lol:
Gracias por toda su ayuda que me a ayudado a despejar algunas dudas

Ya estoy en la recta final de mi proyecto asi que pronto subire los archivos para que vayan viendo mi trabajo

Saludos
Título: Re: USB CDC para PIC18F4550 en CCS
Publicado por: PalitroqueZ en 15 de Mayo de 2011, 20:51:43
Bueno despues de estar mucho tiempo trancado con esto  :5]
Encontre cual era el problema! Lo que menos pensaba que podia ser, el cristal de 48MHz (compre 5 y nunguno anda)  :oops:

Pero bueno cambie por cristal de 20MHz y funciono perfecto  :lol:
Gracias por toda su ayuda que me a ayudado a despejar algunas dudas

Ya estoy en la recta final de mi proyecto asi que pronto subire los archivos para que vayan viendo mi trabajo

Saludos

el pic trabaja con cristales hasta 20MHz, para meterle 48MHz, entonces debes meterle un oscilador que genere los 48MHz
Título: Re: USB CDC para PIC18F4550 en CCS
Publicado por: marito en 26 de Diciembre de 2011, 20:00:26
Hola a todos!!!

He logrado conectar mi PIC18F4550 a la PC con windows 7, me lo ha detectado como puerto COM. Lo que no sé es como enviar datos desde el PIC con CCS, estoy usando la sentencia

Código: [Seleccionar]
printf(usb_cdc_putc, " TEST ");
Pero no se si es correcta. Para recibir en la PC uso el terminal 1.6 que usaba con mi PIC16F876A vía serie. Hay algún soft que me permita recibir los datos por USB CDC?

Muchas gracias!

Saludos.
Título: Re: USB CDC para PIC18F4550 en CCS
Publicado por: Suky en 26 de Diciembre de 2011, 21:54:30
Hola a todos!!!

He logrado conectar mi PIC18F4550 a la PC con windows 7, me lo ha detectado como puerto COM. Lo que no sé es como enviar datos desde el PIC con CCS, estoy usando la sentencia

Código: [Seleccionar]
printf(usb_cdc_putc, " TEST ");
Pero no se si es correcta.

Según el ejemplo ex_usb_serial es correcto, lo implementa de la misma manera.

Para recibir en la PC uso el terminal 1.6 que usaba con mi PIC16F876A vía serie. Hay algún soft que me permita recibir los datos por USB CDC?

Cualquier programa que pueda recibir datos de forma serial, solo hay que seleccionar bien el puerto y su configuración emulada.


Saludos!
Título: Re: USB CDC para PIC18F4550 en CCS
Publicado por: marito en 27 de Diciembre de 2011, 08:41:58
Suky gracias por tu respuesta!

Con respecto a la configuración emulada, eso lo tengo que ver en dentro de las propiedades del controlador del dispositivo dentro de la PC con Windows7 que tengo, no? Porque en el PIC no creo tener echa ninguna configuración.

Saludos
Título: Re: USB CDC para PIC18F4550 en CCS
Publicado por: Suky en 27 de Diciembre de 2011, 11:18:41
Suky gracias por tu respuesta!

Con respecto a la configuración emulada, eso lo tengo que ver en dentro de las propiedades del controlador del dispositivo dentro de la PC con Windows7 que tengo, no? Porque en el PIC no creo tener echa ninguna configuración.

Saludos

Exacto, propiedades del driver  ;-)
Título: Re: USB CDC para PIC18F4550 en CCS
Publicado por: marito en 27 de Diciembre de 2011, 12:06:37
Suky tenés el link de algún soft para recibir los datos que funcione en Windows7 64 bits???

Te debo un asado!!!


Abrazo
Título: Re: USB CDC para PIC18F4550 en CCS
Publicado por: Suky en 27 de Diciembre de 2011, 12:45:28
CCS tiene el Siow (Dentro del IDE el acceso directo, sino dentro de Archivos de Programa/PICC), no se si funcionará en 64-bits. Sino ejecútalo en modo compatibilidad  :tongue:
Título: Re: USB CDC para PIC18F4550 en CCS
Publicado por: marito en 27 de Diciembre de 2011, 20:19:14
Estuve probando enviar una cadena de caracteres a la PC y verlos en el SIOW, pero hasta ahora no lo puedo conseguir. El código que tengo en el PIC es el que sigue:



Código: [Seleccionar]
#include <18F4550.h>

#fuses HSPLL,MCLR,NOWDT,NOPROTECT,NOLVP,NODEBUG,USBDIV,PLL5,CPUDIV1,VREGEN,NOPBADEN
#use delay(clock=48000000)

#include <usb_cdc.h>
#include "usb_desc_cdc.h"
#include <usb.c>           //handles usb setup tokens and get descriptor reports

#define LOADER_SIZE                 (0x0FFF)
#define LOADER_START                (0)
#define LOADER_END                  (LOADER_SIZE)
#define APPLICATION_START           (LOADER_SIZE+1)
#define APPLICATION_END             (getenv("PROGRAM_MEMORY")-1)
#define APPLICATION_ISR             (APPLICATION_START+8)

#build(reset=APPLICATION_START, interrupt=APPLICATION_ISR)

#org 0,LOADER_END AUTO=0 void bootloader(void) {}


void main(){
   usb_cdc_init();
   usb_init_cs();   
   
while(true){
     usb_task();
     if(usb_cdc_connected()){
     
if (usb_enumerated()){
                printf(usb_cdc_putc, "Hola");
                delay_ms(500);     
          }
      }
}
}


En el SIOW tengo configurado el COM5 que me enumera la PC, con 9600-8-N-1.  Cuando le doy conectar se encienden en verde RTS y DTR, pero no me llega ningún caracter.

Ejecute el SIOW en modo compatible con Windows XP y tampoco funcionó.

Alguien tiene alguna sugerencia de cual puede ser mi error?

Gracias!

P.D. las primeras líneas de código las uso para proteger de escritura el bootloader USB que tengo cargado
Título: Re: USB CDC para PIC18F4550 en CCS
Publicado por: cristiancrm en 18 de Marzo de 2012, 11:23:30
Hola a todos.
Estoy tratando de usar el mismo código en mi PIC, y en Proteus se me presenta el problema que describieron un unos mensajes. Cuando ejecuto la simulación, el VIP&PID me llega con 0000 0000 respectivamente, y cuando busco el .inf, me dice que no puede instalar el dispositivo. Lo extraño es que con el HEX original de uno de los proyectos compartidos funciona de maravillas, me reconoce el dispositivo y aparecen los datos referentes a éste. Pero cuando compilo con mi CCS (v4.104 y v4.128), ocurre lo que les mencioné; Windows lo detecta como dispositivo desconocido.

Aclaro que estoy usando un Crystal de 20Mhz con el PLL5. El código es exactamente igual, salvo por esta diferencia; que cuando compilo, no funciona.

Alguien tendrá alguna sugerencia?

De antemano, muchísimas gracias!
Cristian.
Título: Re: USB CDC para PIC18F4550 en CCS
Publicado por: MLO__ en 18 de Marzo de 2012, 16:50:23
Hola.

Si actualizaste el compilador lo mas seguro es que se te sobre-escribiera el archivo donde estan definidos el PID y el VID .. debes volver a cambiarlo.

Saludos
Título: Re: USB CDC para PIC18F4550 en CCS
Publicado por: marito en 19 de Marzo de 2012, 08:35:04
Hola a todos!

cristiancrm yo estuve trabajando un poco con USB CDC y el problema que comentas lo solucioné utilizando los drivers de una versión anterior del compilador. Utilicé los drivers de la versión 4.023 y funcionó correctamente.

Lo que hice es sobreescribir la carpeta Drivers.

Probá con esa opción y comentá los resultados!

Título: Re: USB CDC para PIC18F4550 en CCS
Publicado por: cristiancrm en 19 de Marzo de 2012, 08:47:08
Hola, Marito!

Muchas gracias, voy a probar eso ahora y te comento a la brevedad.
Sinceramente ya me había dado por vencido y migré a C18 :). Vi que tiene muchos ejemplos y en teoría los drivers están actualizados. De todos modos aún estoy investigando.

Te aviso en cuanto tenga algún dato.

Muchas gracias!!
Cristian.
Título: Re: USB CDC para PIC18F4550 en CCS
Publicado por: cristiancrm en 19 de Marzo de 2012, 08:58:00
Heey!! Excelente!!! Ahora sí funciona!!!  :-/.
Ahora quiero ver por qué motivo no funciona con los drivers de la última versión.

Muchas gracias!! :)
Título: Re: USB CDC para PIC18F4550 en CCS
Publicado por: marito en 19 de Marzo de 2012, 09:00:20
Yo no logré encontrar porque no funcionan los drivers nuevos, si encontrás el motivo publicá!!!

Estás usando windows7 64 bits?
Título: Re: USB CDC para PIC18F4550 en CCS
Publicado por: cristiancrm en 19 de Marzo de 2012, 09:05:52
Quizás algún parámetro estamos omitiendo en el Stack USB de la versión nueva, voy a comparar los drivers para ver en donde está la diferencia. Si encuentro el motivo estaré publicando la razón, pero es cuestión de analizar el Stack.

Para la simulación estoy usando Proteus en Windows XP, porque no tiene soporte para la emulación del driver USB en windows 7. De todos modos no creo que haya problemas para conectarlo físicamente al USB con Windows 7. Ya pedí mi PIC18F2550 para hacer pruebas reales, si encuentro algo raro estaré reportando.

Saludos!
Cristian.
Título: Re: USB CDC para PIC18F4550 en CCS
Publicado por: jukinch en 19 de Marzo de 2012, 09:07:45
Hola:
Y esto de el PID y el VID que citó MLO__ ya lo revisaron?
         Saludos.
          Jukinch
Hola.

Si actualizaste el compilador lo mas seguro es que se te sobre-escribiera el archivo donde estan definidos el PID y el VID .. debes volver a cambiarlo.

Saludos
Título: Re: USB CDC para PIC18F4550 en CCS
Publicado por: cristiancrm en 19 de Marzo de 2012, 09:10:42
Hola, Jukinch.

Sí, fue una de las primeras modificaciones que hice cuando comprendí la configuración del Stack. Hice de todo con esos dos valores y nunca funcionó.
Por lo que pude ver, la versión nueva tiene otra forma de configurar esos valores, pero por más que lo cambie siempre llegan con 0000 al SistemaOperativo.

Saludos.
Título: Re: USB CDC para PIC18F4550 en CCS
Publicado por: MLO__ en 19 de Marzo de 2012, 11:17:53
Hola.

Pues a mi no me ha dado problema el CDC en Win7 de 64 bits.


El problema es la simulacion ... en ese caso se debe usar una version anterior ... porque los drivers del ISIS no funcionan  :(

(http://img141.imageshack.us/img141/2/controladores.png)

Saludos
Título: Re: USB CDC para PIC18F4550 en CCS
Publicado por: cristiancrm en 19 de Marzo de 2012, 11:29:51
Hola!

AAhh, entonces por ahí viene el problema.
Bueno, yo aún no pude probar en mi PIC, ya que todavía lo estoy esperando, por eso me guié más que nada en la simulación en ISIS.
Entonces con la versión nueva debería funcionar bien también.
Esta tarde estoy recibiendo mi PIC, pruebo y luego les aviso.

Saludos y gracias!
Título: Re: USB CDC para PIC18F4550 en CCS
Publicado por: marito en 19 de Marzo de 2012, 11:37:02
Yo he probado la comunicación PIC-PC USB con el PIC18F4550. No logré que funcionará hasta que no utilicé los drivers de versiones anteriores, como mencioné en post anteriores.

Trabajó con una notebook con W7 64 bits
Título: Re: USB CDC para PIC18F4550 en CCS
Publicado por: Level_24 en 06 de Agosto de 2013, 14:33:46
Hola, ya  descubrí  mi  problema.  Los archivos usb_desc_cdc.h q usaba los habia  creado con una  versión menos reciente de PICC. Así que  modifique el archivo usb_desc_cdc. de la versión 4.104 y  todo  funciona  bien, también lo probe  con la versión 4.114 y  compila  bien. Probe mi tarjeta en  win 7 64 bit  y   se asigna puerto com. Hice las  pruebas de eco  y  responde  muy  bien.

Prueba este  código  solo  hace  el eco  emulando un puerto com  con USB_CDC

eco_usb_cdc.c

 
#include <18F4550.h>
#fuses HSPLL,NOWDT,NOPROTECT,NOLVP,NODEBUG,USBDIV,PLL5,CPUDIV1,VREGEN  //  uso un cristal de 20MHz
#use delay(clock=48000000)
#include <usb_cdc.h>


#define USB_CON_SENSE_PIN PIN_B2  //  puede  ser  aunq deshabilitado  tb  me  funcionó para este  ejemplo en otros  casos  si  es necesario

char s;
char c=0x00;
void main(){

delay_ms(300);
usb_cdc_init();                         //esta  en  usb_cdc   y  configura  los  baudios, bit paridad etc
usb_init();                             // esta en pic18_usb llama  a usb_init_cs() q a su vez  llama a usb_task()
while(!usb_cdc_connected()) {}



do{
 usb_task();
//c=0x00;                         
 if (usb_enumerated())     {
 c=usb_cdc_getc();                     
 usb_cdc_putc(c);
 }
 }                     
 while(true);
         }


Te  adjunto el  archivo usb_desc_cdc.h
Nota: no  uso el VID y PID  de microchip, solo  por antojo jejeje, así q  puedes  usar el q quieras para fines didácticos, no así  para  fines  comerciales.
Verifica que en tu archivo usb_cdc.h  este  esta línea,

#include <usb_desc_cdc.h>   //USB Configuration and Device descriptors for this UBS device

 para que pueda llamar al archivo usb_desc_cdc.h q t adjunto y este  a su vez llame al .inf q tb adjunto  el cual a su vez  llama al driver standard de windows. (no olvides  hacer un respaldo de tus drivers originales si coincide el  nombre o cambia el nombre al q t envio, sin olvidar  cambiar el nombre en la línea antes citada.
modifica  el arch .txt  a  .inf


Muchas gracias rodrigo_control2009   ((:-)) me sacaste de un gran problema ya que habia probado de todo y el pic me devolvia caracteres extraños en la prueba de echo. Muchas gracias sobre todo por tus archivos ya que no sabia bien como modificar el usb_desc_cdc.h y .inf, con los que publicaste realice mis pruebas y funcionaron.

Como info general sobre mi proyecto, para los que andan haciendo pruebas, compile con los archivos que rodrigo_control2009 amablemente publico en el CCS PCWHD 4.093 y funciono de maravilla pero en win7 de 32 bits, en 64 bits ya no funciono bien el driver .inf, cosa que deben tener en cuenta.

Saludos y gracias a todos por sus aportes.   :-)
Título: Re: USB CDC para PIC18F4550 en CCS
Publicado por: rodrigo_control2009 en 06 de Agosto de 2013, 16:39:34
Hola y por  si  te interesa  probar  en modo bulk, aca un pequeño  ejemplo usando LabView 2012.
La aplicación  enciende/apaga un led y  recibe un byte de una señal digitalizada.

https://mega.co.nz/#!J5Z3DACB!Dt6lA2T4okgpqH31hJithxfXl6A7iFX9eiGFUvw3d1M