Autor Tema: Ayuda con RS232 en VB  (Leído 7324 veces)

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

Desconectado zonadjarn

  • PIC10
  • *
  • Mensajes: 45
Ayuda con RS232 en VB
« en: 25 de Mayo de 2007, 05:47:04 »
Tengo le siguiente programa en VB 6.0, a este lo tengo unido a un max232 y este a su vez a un pic, cuando le mando d12z tiene q encenderse una luz.Mi pregunta es la siguiente:

tengo el siguiente codigo:
Private Sub Command1_Click()

If comunicacion.PortOpen = False Then
    comunicacion.PortOpen = True
End If
comunicacion.Output = "d"
comunicacion.Output = "1"
comunicacion.Output = "2"
comunicacion.Output = "z"
comunicacion.PortOpen = False
End Sub

Private Sub Form_Load()
comunicacion.PortOpen = True
End Sub

Pues bien hay va lo que me deja un poco descolocado, cuando le doy al boton sin hacer la deputacion paso a paso el PIC no me responde, pero cuando le doy a depuracion paso a paso y le voyo dando al F8 me funciona perfectamente, ¿A que puede ser debido???????.......Reciban un cordial Saludo
En los Albores de la Electronica, "THE GOD IS PIO LAZARO"

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18310
    • MicroPIC
Re: Ayuda con RS232 en VB
« Respuesta #1 en: 25 de Mayo de 2007, 05:52:57 »
Si funciona paso a paso pero no en real todo apunta a un problema de tiempos. Examina la velocidad de trabajo, e  incluso incluye retrasos en tu programa hasta encontrarlo.
Me ha hecho mucha gracia lo de "deputación"  :D

Desconectado zonadjarn

  • PIC10
  • *
  • Mensajes: 45
Re: Ayuda con RS232 en VB
« Respuesta #2 en: 25 de Mayo de 2007, 06:03:53 »
Buenas, utilizo un PIC16F876 que esta conectado a 9600, como el mscomm del VB, que mas puede ser?....Saludos y gracias


P.d-->deputacion se me colo depuracion jejejej...Saludos
En los Albores de la Electronica, "THE GOD IS PIO LAZARO"

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18310
    • MicroPIC
Re: Ayuda con RS232 en VB
« Respuesta #3 en: 25 de Mayo de 2007, 06:06:41 »
¿Será que falta un Intro al final de cada envío?

Desconectado zonadjarn

  • PIC10
  • *
  • Mensajes: 45
Re: Ayuda con RS232 en VB
« Respuesta #4 en: 25 de Mayo de 2007, 06:08:18 »
¿Será que falta un Intro al final de cada envío?

Por probar, ahora te cuento....Saludos
En los Albores de la Electronica, "THE GOD IS PIO LAZARO"

Desconectado zonadjarn

  • PIC10
  • *
  • Mensajes: 45
Re: Ayuda con RS232 en VB
« Respuesta #5 en: 25 de Mayo de 2007, 06:10:48 »
He puesto esto:

Private Sub Command1_Click()

If comunicacion.PortOpen = False Then
    comunicacion.PortOpen = True
End If
comunicacion.Output = "d" & Chr(13)
comunicacion.Output = "1" & Chr(13)
comunicacion.Output = "2" & Chr(13)
comunicacion.Output = "z" & Chr(13)
comunicacion.PortOpen = False
End Sub

Pero me lo hace bien la segunda vez que le pulso, la primera no.....Saludos
En los Albores de la Electronica, "THE GOD IS PIO LAZARO"

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18310
    • MicroPIC
Re: Ayuda con RS232 en VB
« Respuesta #6 en: 25 de Mayo de 2007, 06:14:24 »
¿Y la recepción del PIC cómo la haces?

Desconectado zonadjarn

  • PIC10
  • *
  • Mensajes: 45
Re: Ayuda con RS232 en VB
« Respuesta #7 en: 25 de Mayo de 2007, 06:16:57 »
¿Y la recepción del PIC cómo la haces?
asi es como recepciono si:

sentido=getc();
   if (sentido=='d'){
      enable_interrupts(INT_EXT);
      enable_interrupts(GLOBAL);
      ext_int_edge(H_to_L);
      numero=getc();
      total=(numero-48);
      numero=0;
      sum_contador=0;
      numero=getc();
      while ((numero>122) || (numero<122) ){
         numero=(numero-48);
         total=(total*10);
         total=(total+numero);
         numero=0;
         numero=getc();
      }
      while (sum_contador<total){
         port_c=2;
      }
      disable_interrupts(GLOBAL);
      port_c=4;
   }
En los Albores de la Electronica, "THE GOD IS PIO LAZARO"

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18310
    • MicroPIC
Re: Ayuda con RS232 en VB
« Respuesta #8 en: 25 de Mayo de 2007, 06:22:42 »
Creo que sería mejor si haces la recepción en el PIC utilizando la interrupción de la USART y dejando en un buffer los caracteres recibidos para luego procesarlos. Es probable que tu PC vaya mucho más rápido de lo que el PIC puede tragar y se escapen cosas.

Desconectado zonadjarn

  • PIC10
  • *
  • Mensajes: 45
Re: Ayuda con RS232 en VB
« Respuesta #9 en: 25 de Mayo de 2007, 06:25:23 »
Creo que sería mejor si haces la recepción en el PIC utilizando la interrupción de la USART y dejando en un buffer los caracteres recibidos para luego procesarlos. Es probable que tu PC vaya mucho más rápido de lo que el PIC puede tragar y se escapen cosas.

USART? que es eso?, no podria hacer q los baudios irian mas rapido para solucionarlo?, lo que nose es porque la segunda vez q pulso el boton me lo hace bien....Saludos
En los Albores de la Electronica, "THE GOD IS PIO LAZARO"

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18310
    • MicroPIC
Re: Ayuda con RS232 en VB
« Respuesta #10 en: 25 de Mayo de 2007, 08:38:26 »
Esto es la USART

Este es un ejemplo del tratamiento por interrupción que te comentaba:

Código: C
  1. #INT_RDA
  2. void serial_isr()
  3. {
  4.    int8 t;
  5.  
  6.    buffer[next_in] = fgetc(PC);
  7.    t = next_in;
  8.    next_in = (next_in+1) % sizeof(buffer);
  9.    if(next_in == next_out)
  10.       next_in=t;        // Buffer full !!
  11. }

Desconectado Milo

  • PIC16
  • ***
  • Mensajes: 101
Re: Ayuda con RS232 en VB
« Respuesta #11 en: 25 de Mayo de 2007, 15:09:31 »

Buennass:

Yo tuve un problema parecido, cuando le enviaba caracteres de mi programa vb al dspic se colgaba porque aunque estuviesen configurados los dos a la misma velocidad (programa vb y dspic) el dspic no le daba tiempo a cogerlos todos y se colgaba, consegui solucionarlo poniendo un delay que para salir del paso me sirvió, yo puse esto:

Option Explicit
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)         'Puede dar problemas leido en el foro

Y esto dentro de la función:

frmPrincipal.MSComm1.Output = Chr$(&H3C)                    'Caracter sincronismo
    Sleep 100                                                   'Si no le pongo este delay se resetea el dspic
    frmPrincipal.MSComm1.Output = Chr$(&H1)                    'Modo Algoritomo PY0
    Sleep 100

.....

si quieres leer más del problema que tuve por si es el mismo que tu tuviste aquí te dejo lo que escribi en el foro y lo que me respondieron,

Foro VB

Foro dspic

Suerte y saludos,
"En tanto que haya alguien que crea en una idea, la idea vive" Ortega y Gasset

Desconectado zonadjarn

  • PIC10
  • *
  • Mensajes: 45
Re: Ayuda con RS232 en VB
« Respuesta #12 en: 27 de Mayo de 2007, 12:02:09 »

Buennass:

Yo tuve un problema parecido, cuando le enviaba caracteres de mi programa vb al dspic se colgaba porque aunque estuviesen configurados los dos a la misma velocidad (programa vb y dspic) el dspic no le daba tiempo a cogerlos todos y se colgaba, consegui solucionarlo poniendo un delay que para salir del paso me sirvió, yo puse esto:

Option Explicit
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)         'Puede dar problemas leido en el foro

Y esto dentro de la función:

frmPrincipal.MSComm1.Output = Chr$(&H3C)                    'Caracter sincronismo
    Sleep 100                                                   'Si no le pongo este delay se resetea el dspic
    frmPrincipal.MSComm1.Output = Chr$(&H1)                    'Modo Algoritomo PY0
    Sleep 100

.....

si quieres leer más del problema que tuve por si es el mismo que tu tuviste aquí te dejo lo que escribi en el foro y lo que me respondieron,

Foro VB

Foro dspic

Suerte y saludos,

Una pregunta, dentro de que funcion? y para que sirven las lineas del output?...Saludos
En los Albores de la Electronica, "THE GOD IS PIO LAZARO"

Desconectado Milo

  • PIC16
  • ***
  • Mensajes: 101
Re: Ayuda con RS232 en VB
« Respuesta #13 en: 28 de Mayo de 2007, 12:48:09 »

Buennass:

La función que tu llames cuando vayas a enviar los datos por el puerto com.

¿A qué te refieres con las líneas del output?, lo que va detrás del ' es comentario pero no te fijes en eso, son comentarios de mi programa que no tienen nada que ver, como puse el código rápido no pense en quitarlos tu quedate solo con la función Sleep,

Tu código sería algo así:

comunicacion.Output = "d" & Chr(13)
Sleep(100)  --> Aquí tienes que poner el tiempo que tu quieras en milisegundos
comunicacion.Output = "1" & Chr(13)
Sleep(100)
........

suerte, y si no entiendes algo, ya sabes pregunta.

saludos
"En tanto que haya alguien que crea en una idea, la idea vive" Ortega y Gasset

Desconectado zonadjarn

  • PIC10
  • *
  • Mensajes: 45
Re: Ayuda con RS232 en VB
« Respuesta #14 en: 28 de Mayo de 2007, 19:22:03 »
Gracias por tu ayuda, mañana probare a bajarle un poco la velocidad lo primero a ver si funciona, y si no conseguimos nada probaremos con tu solucion, lo dicho muchisimas gracias.....Saludos a todos
En los Albores de la Electronica, "THE GOD IS PIO LAZARO"