TODOPIC

Lenguajes de programación para PC => Visual Basic => Mensaje iniciado por: zonadjarn en 25 de Mayo de 2007, 05:47:04

Título: Ayuda con RS232 en VB
Publicado por: zonadjarn 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
Título: Re: Ayuda con RS232 en VB
Publicado por: Nocturno 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
Título: Re: Ayuda con RS232 en VB
Publicado por: zonadjarn 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
Título: Re: Ayuda con RS232 en VB
Publicado por: Nocturno en 25 de Mayo de 2007, 06:06:41
¿Será que falta un Intro al final de cada envío?
Título: Re: Ayuda con RS232 en VB
Publicado por: zonadjarn 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
Título: Re: Ayuda con RS232 en VB
Publicado por: zonadjarn 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
Título: Re: Ayuda con RS232 en VB
Publicado por: Nocturno en 25 de Mayo de 2007, 06:14:24
¿Y la recepción del PIC cómo la haces?
Título: Re: Ayuda con RS232 en VB
Publicado por: zonadjarn 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;
   }
Título: Re: Ayuda con RS232 en VB
Publicado por: Nocturno 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.
Título: Re: Ayuda con RS232 en VB
Publicado por: zonadjarn 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
Título: Re: Ayuda con RS232 en VB
Publicado por: Nocturno en 25 de Mayo de 2007, 08:38:26
Esto es la USART (http://elrebujito.es/wikipic/index.php/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. }
Título: Re: Ayuda con RS232 en VB
Publicado por: Milo 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 (http://www.todopic.com.ar/foros/index.php?topic=7013.100)

Foro dspic (http://www.todopic.com.ar/foros/index.php?topic=17297.0)

Suerte y saludos,
Título: Re: Ayuda con RS232 en VB
Publicado por: zonadjarn 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 (http://www.todopic.com.ar/foros/index.php?topic=7013.100)

Foro dspic (http://www.todopic.com.ar/foros/index.php?topic=17297.0)

Suerte y saludos,

Una pregunta, dentro de que funcion? y para que sirven las lineas del output?...Saludos
Título: Re: Ayuda con RS232 en VB
Publicado por: Milo 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
Título: Re: Ayuda con RS232 en VB
Publicado por: zonadjarn 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
Título: Re: Ayuda con RS232 en VB
Publicado por: wachapori65 en 11 de Julio de 2007, 16:08:57
Hey hey hey! Hola a todos:

Una pregunta, o mejor dicho varias. Estoy haciendo un proyecto de activacion de un bus comun por medio del pic16f84, aplicacion pequeña, pero me lo encargaron que la interfase se controlara por windows, un programa de gestion, me recomendaron que usará el visual basic y tengo la version 6. El problema es que en mi vida lo he usado, pero como todo electronico, y mas en comunicaciones, hay una vez primera para todo y que bueno que me toco hacerlo, por que dentro de todo lo malo de no saber, aprendes de eso. En fin, el pic recibe una palabra de 8 bits, dependiendo que palabra sea es el pin que va activar a un latch y mantener ese pulso, eso ya esta controlado salvo unos detalles.

A lo que voy es que ya sé mas o menos se como se configura el com1, nada mas necesito mandar la palabra en rs 232 y estaba leyendo que no es posible mandar la constante binaria directamente, tengo que hacer una conversion a ascii y si es que debo hacer retardos para que el pic las detecte, por que lee las palabras en estado alto, 1/9600 Baudios = 104 µs.

El programa nada mas debe mandar la palabra en 1 byte y el pic se encarga de lo demas (a no ser que tenga problams en la recepcion, que es lo que quiero ver con el programa).
Si pueden ayudar a este parroquiano en la oscuridad.
Saludos desde Sonora, Mexico
Sale al rato Confused

Título: Re: Ayuda con RS232 en VB
Publicado por: wachapori65 en 11 de Julio de 2007, 17:24:19
Me marca que tengo que depurar en el If, no se que tenga el VB6 que esta aqui, pero asi mas o menos va el programita:

Private Sub Boton_Device1_Click(Index As Integer)
    If MSComm.PortOpen = False Then
        MSComm.PortOpen = True
    End If
MSComm1.PortOpen = True
MSComm1.OutPut = "A" & Chr(13)  'a lo que lei en le foro debe de ir Chr 13 y estoy pensando poner un retardo de 100ms pero primero lo primero


If MSComm1.CommEvent = comEvSend Then
    MsgBox "Enviando..."
Else
    On Error GoTo manejar_errores
End If


manejar_errores:
 MsgBox ("Error al intentar abrir COM" + Str$(nro_puerto))
 MsgBox ("Error detectado por Visual Basic: " + Err.Description)
 Resume Salir ' Resume me permite continuar con el programa.
Salir:

MSComm1.PortOpen = False

End Sub


Private Sub MSComm1_OnComm()
    MSComm1.CommPort = 1 'puerto com1
    MSComm1.Settings = "9600,N,8,1" 'configurando velocidad, sin paridad, 1 byte, 1 bit stop
    MSComm1.InputLen = 0 'sin recepcion de bits
    MSComm1.RThreshold = 1
    MSComm1.PortOpen = True
End


Nada mas es enviar el byte, esta bien asi? :?