Autor Tema: Problema recepcion de datos USB 18f4550 - Modo cdc  (Leído 4715 veces)

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

Desconectado javier

  • PIC10
  • *
  • Mensajes: 35
Problema recepcion de datos USB 18f4550 - Modo cdc
« en: 21 de Enero de 2012, 22:01:38 »
Hola,
Estoy arrancando con usb y ya empeze con dolor de cabezas, el envio de datos del pic --> pc anda bien, pero cuanco testeo comunicacioon pc--> pic siempre recibo el valor decimal 11 , me base en el ejemplo posteado en http://picmania.garcia-cuervo.net/usb_3_cdctransfers.php , como vi que no me andaba la recepcion, achique el programa y agrege un pin uart (PIN_D7)pasa sacar los datos y ver que estoy recibiendo...aca posteo el codigo, me fije en otros posts y no encuentro que estoy haciendo mal, descarto problemas de hardware porque anda el envio de datos, alguna idea?
Saludos,
Javier

#include <18F4550.h>
#fuses HSPLL,NOWDT,NOPROTECT,NOLVP,NODEBUG,USBDIV,PLL5,CPUDIV1,VREGEN

#use delay(clock=48000000)
#use rs232(baud=9600, xmit=PIN_D7, rcv=PIN_A4,STREAM=PUER_PC)
#include ".\include\usb_cdc.h"
#DEFINE LED PIN_E2


void main() {
   BYTE i, j, address, value;
   output_high(LED);
   delay_ms(500);
   output_low(LED);
   delay_ms(500);
   fprintf(PUER_PC,"%S\n\r","TEST COMM 232");
   delay_ms(300);
   usb_cdc_init();
   usb_init();
 
 while(!usb_cdc_connected()) {}
  do {
      usb_task();
      if (usb_enumerated()) {
         printf(usb_cdc_putc,"\r\n\n Ingresar Valor:\r\n");              // manda datos pic --> pc
 
         value =usb_cdc_getc();                   // recibe datos pc --> pic
         
         fprintf(PUER_PC," valor =%u\n\r", value );  //mando lo que recibo para chequear(siempre recibe "11"!!)
     
      }
     
   } while (TRUE);
}

Desconectado rivale

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1707
Re: Problema recepcion de datos USB 18f4550 - Modo cdc
« Respuesta #1 en: 21 de Enero de 2012, 22:17:26 »
yo tuve ese mismo problema y fue por el ccs, que version tienes?, yo cambie los archivos de usb por unos que tenia de un ccs version 4.08
"Nada es imposible, no si puedes imaginarlo"

Desconectado javier

  • PIC10
  • *
  • Mensajes: 35
Re: Problema recepcion de datos USB 18f4550 - Modo cdc
« Respuesta #2 en: 22 de Enero de 2012, 04:09:46 »
estoy con la version 4.114 .. con que version tuviste problemas?reemplazaste usb_cdc.h ?

Desconectado javier

  • PIC10
  • *
  • Mensajes: 35
Re: Problemas con USB 18f4550 y Windows 7
« Respuesta #3 en: 24 de Enero de 2012, 01:11:09 »
Bueno...andubo cuando lo compile con la version 3.249 (trate reemplazando el archivo usb.h en 4.114 pero tira error al compilar),
ahora me encuentro con 2 nuevos problemas que no se como resolver..
1-No anda en windows 7,solo xp, ni llego a la parte de instalar el driver(.inf) porque no lo detecta como dispositivo usb - creo que hay que modificar el archivo usb_desc_cdc.h que en el ejemplo fueron modificados por redpic para que ande en xp
2-En xp anda pero note que cuando se enchufa en diferentes puertos usb de la misma computadora, el serial com que se genera cambia de numero -pasa de serial com5 a com4 y a com6, supongo que el mismo problema se genera en windows 7
Si hay alguien me puede dar una mano, agredezo muchisimo la ayuda...
Saludos,
Javier

Desconectado rivale

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1707
Re: Problema recepcion de datos USB 18f4550 - Modo cdc
« Respuesta #4 en: 24 de Enero de 2012, 01:13:46 »
Hola, checa este link y prueba con los archivos que subi ahi: http://www.todopic.com.ar/foros/index.php?topic=33531.0

en cuanto al nombre del puerto es normal, cada puerto usb te va a asignar un com diferente
"Nada es imposible, no si puedes imaginarlo"

Desconectado javier

  • PIC10
  • *
  • Mensajes: 35
Re: Problema recepcion de datos USB 18f4550 - Modo cdc
« Respuesta #5 en: 24 de Enero de 2012, 19:32:47 »
Rivale sos un maestro!salio andando en windows 7,muchisimas gracias!! en cuanto al numero de puerto com asignado, sabes si hay alguna manera de que siempre tome el mismo numero? yo pensaba un numero alto(como 25) para qu no tenga conflicto con otros puertos com. El tema es que del lado de la pc estoy programando con VB6, que ya tiene un monton de problemas con el control MSComm porque no detecta cuando el cable pasa de estar enchufado a desenchufado, eso ya lo resolvi pero me obliga a conectar y desconectar el puerto continuamente para testear el estado..si a eso le sume que no se en que puerto esta se complica mas...alguna idea si lo que quiero hacer es posible?, en el ejemplo de redpic dice que abre el puerto com 5 pero no encuento en los archivos donde esta eso  determinado
Saludos y gracias por adelantado!
Javier

Desconectado rivale

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1707
Re: Problema recepcion de datos USB 18f4550 - Modo cdc
« Respuesta #6 en: 24 de Enero de 2012, 19:41:39 »
siempre que conectes tu micro a un puerto usb tendra siempre el mismo com, pero el numero del puerto se lo asigna la computadora, no el micro, pero no deberias tener problemas ya que la pc se encarga de enumerarlos y no se pueden repetir 2 puertos com.

"Nada es imposible, no si puedes imaginarlo"

Desconectado jhozate

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1698
Re: Problema recepcion de datos USB 18f4550 - Modo cdc
« Respuesta #7 en: 24 de Enero de 2012, 19:54:37 »
no recuerdo como es en windows7, pero en xp se dirige a panel de control y en administrador de dispositivos buscar en la pestaña puertos COM, eliges el del pic, click derecho/propiedades. En la pestaña "configuracion del puerto" das click al boton "opciones  avanzadas" y ahi encuentras como asignar otro numero a ese COM.
Pero como dice rivale, despues de que tu pic es reconocido y todo funciona bien, siempre se asigna el mismo nombre.
Ser Colombiano es un Premio, Saludos desde CALI-COLOMBIA

Desconectado javier

  • PIC10
  • *
  • Mensajes: 35
Re: Problema recepcion de datos USB 18f4550 - Modo cdc
« Respuesta #8 en: 25 de Enero de 2012, 19:41:29 »
Muchas gracias por las respuestas Jhozate y rivale, ya resolvi el problema del lado de la computadora, aca posteo la solucion, el problema es que cuando el usuario instale el programa y enchufe el harware no se sabe que numero de puerto va a aprecer entonces del lado de vb6 no se sabe con que numero de puerto comunicarse...el otro problema es que por mas que uno escanee para ver que puerto existe puede ser que haya varios y hay que identificar el numero de puerto que tiene conectado el hardware. Por otro lado el vb6 tiene el problema que una vez que el puerto comm esta creado cuando se desenchufa el cable, no lo detecta(esta condicion se sigue dando :MSComm1.PortOpen = True) asi que hay que abrir y cerrar el puerto continuamente para "ver" si esta conectado o no. Aca resolvi todo con estas dos rutinas, la primer rutina "ver_en_que_puerto" testea los puertos desde el 1 al 9, cuando encuentra el harware(hardware responde con un cararter), empieza a abrir y cerrar el puerto cada 500ms rutina "TimerUsb_Timer", si se desconecta el cable, vuelve a la rutina "ver_en_que_puerto" y vuelve a hacer lo mismo, la subrutina testeo_communic manda un caracter al hardware y espera que el  hardware responda con otro caracter.Espero les sea util.
Saludos,
Javier


Private Sub ver_en_que_puerto()

On Error Resume Next
StatusBar1.Visible = True
For indice_puerto = 1 To 9
  MSComm1.CommPort = indice_puerto
   MSComm1.PortOpen = True
   
    resp = testeo_communic
    If resp = True Then 'responde hardware!!!
       puerto_detectado = True
       TimerUsb.Interval = 500 'epiezo a abrir y cerrar este puerto(indice_puerto) constantemente
       TimerUsb.Enabled = True
       Exit Sub
    Else
     MSComm1.PortOpen = False
      Err.Clear
    End If

Next indice_puerto
 
StatusBar1.Panels(1).text = "Desconectado"
  TimerUsb.Interval = 500 'epiezo a chequear ese puerto constantemente
       TimerUsb.Enabled = True
End Sub



Private Sub TimerUsb_Timer()
On Error GoTo problema
DoEvents

TimerUsb.Enabled = False

If puerto_detectado = True Then

                If MSComm1.PortOpen = True Then
                    DoEvents
                    StatusBar1.Panels(1).text = "Conectado com N:" & indice_puerto & ""
                    'Debug.Print "Conectado"
                    MSComm1.PortOpen = False
                    TimerUsb.Enabled = True
                    conectado_usb = True
                    Exit Sub
                Else
                    DoEvents
                    MSComm1.PortOpen = True
                    TimerUsb.Enabled = True
                    conectado_usb = True
                    Exit Sub
                End If


Else
ver_en_que_puerto
 TimerUsb.Enabled = True
Exit Sub
End If


problema:
     'Debug.Print Err.Number & ": " & Err.Description
     Select Case Err.Number
        Case 8002   'Número de puerto no válido
            DoEvents
         
          StatusBar1.Panels(1).text = "Desconectado"
        Case 8005 'el puerto ya está abierto
            DoEvents
           
           StatusBar1.Panels(1).text = "Puerto no abierto"
        Case 8012 '8012 el dispositivo no está abierto
            DoEvents
           
           StatusBar1.Panels(1).text = "Desconectado"
        Case 8015
            DoEvents
             
            StatusBar1.Panels(1).text = "Desconectado"
    End Select
    conectado_usb = False
    puerto_detectado = False
    TimerUsb.Enabled = True
      Exit Sub

 
 

Desconectado rivale

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1707
Re: Problema recepcion de datos USB 18f4550 - Modo cdc
« Respuesta #9 en: 25 de Enero de 2012, 19:47:30 »
Gracias por compartir tus resultados, me gusto la forma en que identificas en que puerto esta conectado el software, lo hare en mis siguientes interfaces para evitar pedirle al usuario que escoja el puerto.

Saludos
"Nada es imposible, no si puedes imaginarlo"

Desconectado javier

  • PIC10
  • *
  • Mensajes: 35
Re: Problema recepcion de datos USB 18f4550 - Modo cdc
« Respuesta #10 en: 25 de Enero de 2012, 21:02:09 »
Gracias Rivale, indispensable poner On Error Resume Next en la primera rutina porque abre puertos que no existen. Funciona perfecto lo deje todo un dia testeado, cambiando de puertos usb y la aplicacion de vb6 siempre encuentra el hardware cuando los puertos com van cambiando.
Ahora el problema que tengo es con el compilador, el usb anda con la version la verson 3.249 pero no con 4.114 que estaba usando, el tema es que tengo que trabajar con pics(18f4550 me queda chico)que esta version vieja no soporta....hay hay hay...
Saludos,
Javier

Desconectado rivale

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1707
Re: Problema recepcion de datos USB 18f4550 - Modo cdc
« Respuesta #11 en: 25 de Enero de 2012, 21:05:14 »
busca los drivers de la version 4.08 o alguna similar, ya que la 4.114 me dio problemas al leer datos
"Nada es imposible, no si puedes imaginarlo"