Autor Tema: Despliegue de datos en Visual Basic  (Leído 5858 veces)

0 Usuarios y 2 Visitantes están viendo este tema.

Desconectado badtzdizzy

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 234
Despliegue de datos en Visual Basic
« en: 12 de Mayo de 2004, 12:54:00 »
Hola

Quisiera saber como le puedo hacer para que cuando despliegue mis datos en el listbox, sean de uno en uno y no todos los que se almacenen en el buffer, el codigo que utilizo para el pic es el siguiente:

Codigo:

#include <16f874A.h>
#fuses HS,NOWDT,NOPROTECT,NOPUT,NOBROWNOUT,NOLVP,NOCPD,WRT
#use delay(clock=20000000)
#use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7)  

main()
  {
     float value;
   float const resoluc = 5.0/256.0;
   set_tris_b(0x00);

   setup_adc_ports(ALL_ANALOG);
   setup_adc(ADC_CLOCK_INTERNAL);
   set_adc_channel(0);
   
 
  while (TRUE)
       {
         delay_ms(500);
        value=read_adc();
        value=value*resoluc;
        printf ("  %1.2f", value);
        output_high(PIN_B7);
       }         
   }




y para visual utilizo lo siguiente:

Codigo:

Private Sub cmdRecibir_Click()
Dim buferentrada As String
buferentrada = MSComm1.Input   "En esta variable se almacena lo que entra por el puerto serie
List1.AddItem buferentrada
End Sub

Private Sub Form_Load()
MSComm1.CommPort = 1        "puerto com1
MSComm1.PortOpen = True     "se abre el puerto para que funcione
buferentrada = MSComm1.Input   "En esta variable se almacena lo que entra por el puerto serie
End Sub

Private Sub MSComm1_OnComm()
MSComm1.Settings = "9600,n,8,1" "configuracion del puerto serie
End Sub



Si me pueden echar la mano se los agradecería bastante

Desconectado Colores

  • Moderadores
  • PIC16
  • *****
  • Mensajes: 232
RE: Despliegue de datos en Visual Basic
« Respuesta #1 en: 14 de Mayo de 2004, 11:08:00 »
Ok, capaz que te puedo ayudar, pero no entiendo el problema.
Vos decís que necesitás ver los datos de a uno, bien, que estás viendo con ése código ahora? Te tira cadenas de caracteres y querés ver de a un caracter?
Si fuera así tendrías que darle un valor de 1 a la propiedad InputLen del control MsComm. InputLen define la cantidad de datos que se almacenan en el buffer (esta propiedad es útil para leer datos de máquinas cuyo resultado tiene un formato de bloques de datos de longitud fija). Esta propiedad por default (si no se especifica) está seteada en 0, esto quiere decir que cuando vos leés con Input te va a devolver todos los datos que entraron. Entonces tenés que probar poniendo MSComm1.InputLen = 1 en el Form_Load.
El problema es que me parece que se pueden perder datos... cuándo establecés InputLen = 1 creo que el buffer sólo guarda un caracter. Cuándo entran varios sólo guarda el último. Si esto sucediera podrías hacer 2 cosas:      (continúa...)

Desconectado Colores

  • Moderadores
  • PIC16
  • *****
  • Mensajes: 232
RE: Despliegue de datos en Visual Basic
« Respuesta #2 en: 14 de Mayo de 2004, 11:15:00 »
1)
Podés generar un evento cada vez que entra un dato. O sea que VB llame a una rutina cada vez que se acceda al puerto. Esto se hace con el evento MsComm1.OnComm y ahí podés leer el buffer dentro de esa subrutina. Si InputLen = 1 debería devolverte de a 1 caracter.

2) Podés dejar todo como está y "desarmar" caracter por caracter lo que guardas en la variable del buffer. Por ejemplo: si guardó "encendido" tendrías que descomponer esto en e-n-c-e-n-d-i-d-o y agregar de a uno los caracteres en la lista.

La primera opción quizás esté mejor porque no depende de que el usuario haga click en un boton sinó que se actualiza automáticamente.

Desconectado Colores

  • Moderadores
  • PIC16
  • *****
  • Mensajes: 232
RE: Despliegue de datos en Visual Basic
« Respuesta #3 en: 14 de Mayo de 2004, 11:20:00 »
Ahh... me olvidaba...
En la opción 1) tenés que setear la propiedad RThreshold en 1, para que el control MSComm genere el evento OnComm cada vez que entra 1 carácter en el búfer de recepción.

Desconectado badtzdizzy

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 234
RE: Despliegue de datos en Visual Basic
« Respuesta #4 en: 17 de Mayo de 2004, 11:14:00 »
Hola, pues muchas gracias por la informacion, ahora lo que trato es de enviar datos al pic desde visual basic, concretamente controlar el pwm, solo que no se como interpreta los caracteres que recibe el pic, por ejemplo, yo mando desde visual valores de 0 a 255, bytes, pero no se si en realidad recibe esos valores el pic. De antemano gracias por la ayuda.

Desconectado Colores

  • Moderadores
  • PIC16
  • *****
  • Mensajes: 232
RE: Despliegue de datos en Visual Basic
« Respuesta #5 en: 17 de Mayo de 2004, 18:27:00 »
Yo intenté hacer algo con el puerto desde VB a un pic (16F873) y no tuve buenos resultados. Aunque no experimenté mucho y hace tiempo que no lo pruebo, intenté establecer comunicación entre el Pic y la Pc enviando datos al Pic y que el Pic me los devolviera... esto era para probar la comunicación. El Pic me debía devolver una secuencia de caracteres, y en realidad devolvía basura.
Ahora me doy cuenta que quizás no funcionó como yo esperaba porque desde el Pic yo enviaba caracteres ASCII y el control MsComm interpreta valores ANSI (que no son iguales).
Para comprobar si la comunicación funciona podrías probar de enviar un número y que el Pic lo multiplique por 2 y te lo devuelva (esto para probar si la comunicación es exitosa).

Desconectado Abago

  • PIC24F
  • *****
  • Mensajes: 792
RE: Despliegue de datos en Visual Basic
« Respuesta #6 en: 17 de Mayo de 2004, 23:36:00 »
Para que los datos te salgan de uno en uno, tendrás que crearte un pequeño protocolo, para interpretar donde termina un caracter del buffer de tu pic, y donde empieza otro....

Una vez que tengas esto preparado, solo tendrás que leer del buffer del pic, hasta encontrar el caracter de break

me explico...
el buffer que tienes en el pic, por ejemplo tiene almacenada una frase separada por comas, y lo que quieres es que te aparezcan las palabras en el listbox...

Bueno, pues lees caracteres hasta encontrar la coma. En ese momento, poner un listbox.addittem y a ese nuevo ittem, le añades la palabra leida del pic...
y así hasta que termines con el buffer del pic...

Te doy una explicación teorica, porque hace casi un año que no toco el vb, y ya se me olvidan algunas cosillas...

de todos modos, te recomiendo que te pases por la pagina de guille vb... Puedes aprender mucho...

Desconectado Abago

  • PIC24F
  • *****
  • Mensajes: 792
RE: Despliegue de datos en Visual Basic
« Respuesta #7 en: 17 de Mayo de 2004, 23:41:00 »
el pic recive los datos que le envias por el puerto serie, con su correspondiente valor ascii del caracter...

por ejemplo, si pulsas un intro, al pic, le llega el codigo 13

asi, que a bajarte una lista de todos los codigos ascii..

Desconectado Colores

  • Moderadores
  • PIC16
  • *****
  • Mensajes: 232
RE: Despliegue de datos en Visual Basic
« Respuesta #8 en: 18 de Mayo de 2004, 11:12:00 »
Umhh... muy interesante lo que dice Abago. Yo no tenía en cuenta que el Pic usaba un buffer. Yo pensé que el dato que se enviaba se perdía por sobreescritura si no se recibía a tiempo en el lado de la PC.
Ahora bien, si esto se puede hacer debería haber una forma de "pedirle" datos al Pic para que este los envíe y ir verificando que no se produzcan errores. Esto se debe hacer con las líneas del RS232 que están aparte de Tx y Rx... Yo en mi caso no uso esas líneas, sólo uso Rx y Tx y la USART hardware del Pic (16F873). En este caso no sé como almacenar en un buffer... solo pretendo enviar un byte cada tanto. Se supone que tengo que hacer un protocolo tipo handshaking entre la Pc y el Pic para verificar que no se pierdan datos? Como uso el buffer en el Pic? Uso una variable como arreglo en un buffer circular por soft?

Desconectado Abago

  • PIC24F
  • *****
  • Mensajes: 792
RE: Despliegue de datos en Visual Basic
« Respuesta #9 en: 18 de Mayo de 2004, 13:05:00 »
Solo teneis que haceros un pequeño programa en PBP que mande al puerto serie una cadena cada x segundos, y vereis que no hay error!!!

inicio:
serout2 porta.2,188,["hola",10,13]
pause 2000
goto inicio

con esto estará mandando la cadena hola, un salto de linea, y un retorno de carro cada 2000ms

conectar el circuito al hiperterminal... Y vereis que no hay error...
Los datos siempre llegan
La usart del puerto serie del pc, tiene un buffer bastante bien gestionado.
para gestionar el error de datos, tendríamos que crear un CRC, y si este CRC, no es válido, mandarle al pic, un comando para que reenvie.... poco mas.

Sobre el tema de pedirle los datos al pic, sería haciendo un control de flujo por hardware, usando las lineas DTS/RTS... Pero ya complicais la cosa...


Yo tampoco uso el control de flujo, y todo funciona a las mil maravillas....

para el anterior ejemplo, usando la usart, usaríamos el hserout

Yo para el envio de datos, no uso el buffer, dado que el hserout, gestiona todo....
Para la recepción, cree un buffer fifo de 30 bytes, porque si el pc manda mas datos de los devidos, sin control de flujo, el buffer interno de la usart del pic que tiene 2 bytes, se satura....

Desconectado badtzdizzy

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 234
RE: Despliegue de datos en Visual Basic
« Respuesta #10 en: 21 de Mayo de 2004, 11:43:00 »
Ahh, ahora voy entendiendo un poco mas, muchas gracias a todos por su ayuda.
Entonces lo que tengo que hacer es que en el programa que cargo en el pic es donde tengo que hacer la conversion de ascii a decimal o lo que yo necesite verdad ?  Con razón no me salia.
Lo que pretendo es controlar el PWM, y pues necesitaba colocar un valor numerico en la varible duty. Pues muchas gracias y seguimos en contacto para ver que va saliendo.

Desconectado pacalaconcurso

  • PIC24F
  • *****
  • Mensajes: 718
RE: Despliegue de datos en Visual Basic
« Respuesta #11 en: 21 de Mayo de 2004, 16:44:00 »



Desconectado badtzdizzy

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 234
RE: Despliegue de datos en Visual Basic
« Respuesta #12 en: 22 de Mayo de 2004, 20:00:00 »
Pues mas o menos yo tengo lo mismo, solo que en lugar de graficar yo quiero controlar la intensidad de luz de un led conectado en el pin del PWM, y esto lo quiero hacer con una perilla como la que muestras pero desde Visual Basic. Si me puedes echar la mano te lo agradecería Pacalaconcurso.

Desconectado pacalaconcurso

  • PIC24F
  • *****
  • Mensajes: 718
RE: Despliegue de datos en Visual Basic
« Respuesta #13 en: 23 de Mayo de 2004, 06:05:00 »
este ejemplo esta en VB.net, si programas el micro en C usando el codigo para el esclavo modbus que esta en mi web ya lo tienes.
de cualquier forma estoy terminando una dll para visual de forma que podremos conectar con el micro sin tener que preocuparnos de configurar nada (la dll incluso controla el puerto por lo que solo tenemos que pasar en numero del puerto serie y la velocidad)
las primeras pruebas funcionan 100%.
mi idea es poner unos ejemplos de como usarla en VB.
a ver si la puedo terminar.

saludos

Desconectado Abago

  • PIC24F
  • *****
  • Mensajes: 792
RE: Despliegue de datos en Visual Basic
« Respuesta #14 en: 23 de Mayo de 2004, 19:29:00 »
Pacala Eres un genio.....
Te has creado una dll de gestión de comunicaciones ????



 

anything