Autor Tema: Envio de array por CDC en C18  (Leído 2360 veces)

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

Desconectado jorgejg

  • PIC12
  • **
  • Mensajes: 96
Envio de array por CDC en C18
« en: 09 de Septiembre de 2011, 14:56:55 »
Mi programa envia a la pc lo que recibe de la pc, pero no puedo recibir bien, el codigo reducido:
char LeerBuffer[64];// almaceno lo que llega de la pc

en el RSI_H:
if(mUSBUSARTIsTxTrfReady())
   if(getsUSBUSART(LeerBuffer,3))//leo 3 caracteres
   {Aux1.Byte_recibido_USB=1;}//avisa al lazo en el main que ha llegado algo de la pc

en el lazo del main:
while(1)
{
   Tareas();
   ProcessIO();

if (Aux1.Byte_recibido_USB==1)
{
Aux1.Byte_recibido_USB=0;
     if(mUSBUSARTIsTxTrfReady())   // Verifica que pueda enviar
      {putUSBUSART(LeerBuffer,3);}//enviar 3 caracteres

que esta mal en este codigo?
recibo parttes de caracteres menos lo que envio de forma completa

Desconectado MerLiNz

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2463
Re: Envio de array por CDC en C18
« Respuesta #1 en: 09 de Septiembre de 2011, 20:11:37 »
las velocidades del pic y del pc estan sincronizadas? Te lo comento porque si el pc tiene 9600 y el pic 115000 es normal que recibas cosas raras, debes poner todo a la misma velocidad.

Desconectado jorgejg

  • PIC12
  • **
  • Mensajes: 96
Re: Envio de array por CDC en C18
« Respuesta #2 en: 09 de Septiembre de 2011, 20:45:58 »
Estoy enviando por USB por medio de CDC no se supone que no deberia importar el baud?

Desconectado MerLiNz

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2463
Re: Envio de array por CDC en C18
« Respuesta #3 en: 09 de Septiembre de 2011, 21:22:10 »
pero estas usando cdc que emula un puerto com en el pc no?

Segun he visto en un ejemplo de microchip se configura la velocidad, por lo cual si puede importar

aqui lo he visto:
      RCSTA = 0x90;          // Single Character RX
        SPBRG = 0x71;
        SPBRGH = 0x02;         // 0x0271 for 48MHz -> 19200 baud
        BAUDCON = 0x08;        // BRG16 = 1


Desconectado jorgejg

  • PIC12
  • **
  • Mensajes: 96
Re: Envio de array por CDC en C18
« Respuesta #4 en: 09 de Septiembre de 2011, 21:40:24 »
En mi programa mando una cadena fija al inicio acabo de probar en recibir a distintas velocidades en la PC y siempre recibe bien, yo creo que la transmisión fisica del canal es puramente USB pero se le hace creer a la PC que es una comunicación serial cuando en realidad no lo es, sino mas bien es comunicación USB.

Basicamente mi problema es enviar (por USB CDC en C18 ) un arreglo de caracteres que he recibido de la PC (via USB) como un eco pero no me funciona bien.

Seguiré posteando algunas otras pruebas que realize.

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Envio de array por CDC en C18
« Respuesta #5 en: 09 de Septiembre de 2011, 22:06:23 »
pero estas usando cdc que emula un puerto com en el pc no?

Segun he visto en un ejemplo de microchip se configura la velocidad, por lo cual si puede importar

aqui lo he visto:
      RCSTA = 0x90;          // Single Character RX
        SPBRG = 0x71;
        SPBRGH = 0x02;         // 0x0271 for 48MHz -> 19200 baud
        BAUDCON = 0x08;        // BRG16 = 1



 :shock:

Eso es para configurar el módulo EUART!

La configuración del baudrate, en windows, se puede hacer en las propiedades del driver.

Probaste el ejemplo básico que trae Microchip? Viendo que funciona ese, armas tu proyecto en base a eso. Me parece que es lo más fácil en tu caso.

Saludos!
No contesto mensajes privados, las consultas en el foro

Desconectado MerLiNz

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2463
Re: Envio de array por CDC en C18
« Respuesta #6 en: 09 de Septiembre de 2011, 22:35:10 »
pero estas usando cdc que emula un puerto com en el pc no?

Segun he visto en un ejemplo de microchip se configura la velocidad, por lo cual si puede importar

aqui lo he visto:
      RCSTA = 0x90;          // Single Character RX
        SPBRG = 0x71;
        SPBRGH = 0x02;         // 0x0271 for 48MHz -> 19200 baud
        BAUDCON = 0x08;        // BRG16 = 1



 :shock:

Eso es para configurar el módulo EUART!

La configuración del baudrate, en windows, se puede hacer en las propiedades del driver.

Probaste el ejemplo básico que trae Microchip? Viendo que funciona ese, armas tu proyecto en base a eso. Me parece que es lo más fácil en tu caso.

Saludos!


pues viene en el ejemplo de microchip: USB Device - CDC - Serial Emulator supongo que sera para usar usb y usart, de todas formas en varios ejemplos pone que para cdc emulado para serial deben tener el mismo baud rate.