Autor Tema: Comunicacion USB con cdc en windows 7  (Leído 37836 veces)

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

Desconectado franzrilke77

  • PIC10
  • *
  • Mensajes: 1
Re: Comunicacion USB con cdc en windows 7
« Respuesta #30 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"


Desconectado krlosjcc

  • PIC10
  • *
  • Mensajes: 2
Re: Comunicacion USB con cdc en windows 7
« Respuesta #31 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

Desconectado Geo

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 922
    • Mexchip
Re: Comunicacion USB con cdc en windows 7
« Respuesta #32 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.
La imaginación es el límite.
Visita mi blog, en inglés o en español :).
Mini curso de introducción a VHDL en MEXCHIP :-/

Desconectado migsantiago

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8257
    • Sitio de MigSantiago
Re: Comunicacion USB con cdc en windows 7
« Respuesta #33 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.

Desconectado mydogshadow

  • PIC10
  • *
  • Mensajes: 1
Re: Comunicacion USB con cdc en windows 7
« Respuesta #34 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.

Desconectado marito

  • PIC16
  • ***
  • Mensajes: 217
Re: Comunicacion USB con cdc en windows 7
« Respuesta #35 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


 

anything