TODOPIC

Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: proyecto2009utu en 20 de Mayo de 2011, 18:27:30

Título: Recibir string por USB usb_gets y usb_get_packet
Publicado por: proyecto2009utu 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!
Título: Re: Recibir string por USB usb_gets y usb_get_packet
Publicado por: MLO__ en 20 de Mayo de 2011, 23:37:19
Hola.

Prueba con %s.

Saludos
Título: Re: Recibir string por USB usb_gets y usb_get_packet
Publicado por: proyecto2009utu 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
Título: Re: Recibir string por USB usb_gets y usb_get_packet
Publicado por: MLO__ 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
Título: Re: Recibir string por USB usb_gets y usb_get_packet
Publicado por: proyecto2009utu 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
Título: Re: Recibir string por USB usb_gets y usb_get_packet
Publicado por: MLO__ 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
Título: Re: Recibir string por USB usb_gets y usb_get_packet
Publicado por: Suky en 21 de Mayo de 2011, 11:23:59
Para leer un poco http://www.todopic.com.ar/foros/index.php?topic=25785.0
Título: Re: Recibir string por USB usb_gets y usb_get_packet
Publicado por: proyecto2009utu 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