Autor Tema: Recibir string por USB usb_gets y usb_get_packet  (Leído 5520 veces)

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

Desconectado proyecto2009utu

  • PIC12
  • **
  • Mensajes: 62
Recibir string por USB usb_gets y usb_get_packet
« en: 20 de Mayo de 2011, 18:27:30 »
Buenas comunidad.
Estoy tratando de rebir bytes desde la PC al PIC (OUT) y que el PIC le responda con lo que le llega (IN)
Bueno bien, el tema es que quiero que estos bytes sean una cadena... o sea varios bytes. Por lo que lei la funcion gets() en serial me permite hacer eso, recibir una cantidad de caracteres y guardarlos en una variable del tipo char, y todos estos caracteres se reciben hasta que yo mande ACII13 (enter) y eso indica que ya mande todos los caracteres que le quiero guardar en la variable, es verdad????

Bueno eso es en rs232, pero como hago con el USB???? yo pense que la funcion usb_gets() hacia algo parecido pero no me anda.

Les paso el codigo en el cual estoy trabajando:

Código: [Seleccionar]
#include "prueba2.h"  // Libreria con FUSES y pic utilizado PIC18F4550
#include "usb_cdc.h"  // Libreria para la comunicacion USB
#include "stdlib.h"   // Libreria para manejo de strings                       

#use fast_io(B)       // Puerto a utulizar
     
char string[8];      //Variable de 8 bytes
int  caracter;       //Variable para tomar caracter

void main()                                                   
{             
   setup_adc_ports(NO_ANALOGS|VSS_VDD);
   setup_adc(ADC_CLOCK_DIV_2);
   setup_psp(PSP_DISABLED);
   setup_spi(SPI_SS_DISABLED);
   setup_wdt(WDT_OFF);
   setup_timer_0(RTCC_INTERNAL);
   setup_timer_1(T1_DISABLED);
   setup_timer_2(T2_DISABLED,0,1);
   setup_timer_3(T3_DISABLED|T3_DIV_BY_1);
   setup_comparator(NC_NC_NC_NC);
   setup_vref(FALSE);
//Setup_Oscillator parameter not selected from Intr Oscillator Config tab
   // TODO: USER CODE!!   
   output_B(0x00);                             
                     
   usb_cdc_init();
   usb_init();                                           
   while(!usb_cdc_connected()) {}                       
   // espera a detectar una transmisión de la PC (Set_Line_Coding)     
      usb_task();                             
       if (usb_enumerated()){                                                                                                 
      printf(usb_cdc_putc, "Estas Conectado al PIC\n\r");//MENSAJE BIENVENIDA                       
      }
     do{       
     while(usb_cdc_kbhit()){ //en espera de nuevo(s) caracter(es) en el buffer
       usb_gets(1, string, 8, 100); // Recibo los caracteres y guardo en string
       printf(usb_cdc_putc, "el estring es: %c\n\r", string);// envio variable string
       caracter=usb_cdc_getc();   //TOMO EL CARACTER QUE TENGO EN EL BUFFER
                                // PARA QUE NO ME QUEDE EN UN BUCLE INFINITO
     }
     } while(1);   
     }     

No se donde esta el error pero la PC solo me muestra "el estring es:" por cada caracter que le llega, mande lo que le mande  :5]
Tambien probe printf(usb_cdc_putc, "el estring es: %u\n\r", string); y ahi me manda "el estring es: 134" y queda fijo en eso...  :(

Alguien me puede explicar bien las funciones usb_gets y usb_get_packet????

Desde ya muchisimas gracias a todos!

Desconectado MLO__

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4581
Re: Recibir string por USB usb_gets y usb_get_packet
« Respuesta #1 en: 20 de Mayo de 2011, 23:37:19 »
Hola.

Prueba con %s.

Saludos
El papel lo aguanta todo

Desconectado proyecto2009utu

  • PIC12
  • **
  • Mensajes: 62
Re: Recibir string por USB usb_gets y usb_get_packet
« Respuesta #2 en: 21 de Mayo de 2011, 08:42:32 »
Buenas probe eso (el %s) y no me anduvo.....
Me parece que el problema es que no recibo los datos en el endpoint 1
alguien sabe como cargar los datos en el EP1??? y que esos datos sean varios caracteres?

Gracias por su ayuda

Desconectado MLO__

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4581
Re: Recibir string por USB usb_gets y usb_get_packet
« Respuesta #3 en: 21 de Mayo de 2011, 09:30:25 »
Hola.

Yo no se usar la función gets() .. mejor usa la función usb_cdc_getc() y lo vas adicionando al bufer, algo así:

Código: C#
  1. if(usb_cdc_kbhit())
  2. {
  3.  bufer[i] = usb_cdc_getc();
  4.  if(bufer[i]=='\r')
  5.   printf(usb_cdc_putc,"%s\r\n",bufer);
  6.  i++;
  7. }

Saludos
El papel lo aguanta todo

Desconectado proyecto2009utu

  • PIC12
  • **
  • Mensajes: 62
Re: Recibir string por USB usb_gets y usb_get_packet
« Respuesta #4 en: 21 de Mayo de 2011, 10:26:52 »
ok... estamos en la misma...
Pero bueno, probe lo que me dices y me da el siguiente error:

Undefined identifier i

No me deja compilar...

Aparte como tu dices se complica para ponerlo todo en una sola variable.... o no entiendo como  :?

Gracias por el interes

Desconectado MLO__

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4581
Re: Recibir string por USB usb_gets y usb_get_packet
« Respuesta #5 en: 21 de Mayo de 2011, 11:00:33 »
Debes definir la variable i

Como así que ponerlo en una sola variable? Los bytes que estas recibiendo se van a guardar en un string
El papel lo aguanta todo

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Recibir string por USB usb_gets y usb_get_packet
« Respuesta #6 en: 21 de Mayo de 2011, 11:23:59 »
No contesto mensajes privados, las consultas en el foro

Desconectado proyecto2009utu

  • PIC12
  • **
  • Mensajes: 62
Re: Recibir string por USB usb_gets y usb_get_packet
« Respuesta #7 en: 21 de Mayo de 2011, 14:22:14 »
Exactamente eso MLO__ , gardarlo todo en la variable string (o como se la quiera llamar)

Muy interesante ese hilo Suky, sin dudas me servira.... pero como hago para recibir eso por USB??? no encontre nada de eso en el hilo  :(

Se puede con usb_gets????

Gracias por su ayuda