Discusiones sobre Productos NI

cancelar
Mostrando los resultados de 
Buscar en lugar de 
Quiere decir: 

Comunicacion del pic16f876 con el labwindows c

Antonio, por lo que parece tienes muchas dudas y algunas muy básicas, por lo que sería bien que buscaras algun tutorial sobre este tema.

 

Te señalo algunos puntos en tu documento que no entiendo bien u que son de aclarar un poco.

 

Primero: no se entiende la velocidad de comunicación de tu equipo (así se habla de 4800 como de 9600 baudios): te acuerdo que si este parámetro no es igual en los dos lados de del cable nunca se establecerá la comunicación.

Seguidamente se indica que cada mensaje es terminato por el carácter 0xA: eres seguro que el PIC lo va a transmitir? Si no hay este carácter la lectura seguro que termina con un timeout. Te comento de paso que según lo que parece el PIC va a transmitir bytes en binario y no números en claro, por lo que no es buena cosa usar un carácter de terminación puesto que el mismo podría encontrarse dentro del mensaje y no solamente al final.

He notado que siempre indicas que van a leerse muchos caracteres (1000 o 1024) sea en el MAX, en el VISA y en la librería RS232 del CVI: te aconsejo que bajes este valor puesto que PIC va transmitiento dos bytes solamente para cada mensaje y podrías no recibir 1000 caracteres en los 5 segundos precisados como timeout.

 

Por último me parece que tienes algunas dudas sobre cómo se transmiten los datos por serial: ten en cuenta que no por recibir los mensajes en cadenas debes esperar que estos sean transmitidos en claro. Por lo que entiendo del programa del PIC, éste va transmitiendo solamente una variable en formato compacto de dos bytes, y no un texto como por ejemplo "1.234" que serían 5 caracteres. Esto es: habrá que hacer alguna conversión del mensaje del PIC para obtener el valor real que quieres. Además es posible que lo que se transmite sea el resultato puro de la conversión de analogico a digital, esto es un número intero que corresponde al valor en bit del señal medido (entre 0 y 1024): en este caso se tratará de aplicar el justo coeficiente para obtener el valor real medido.



Proud to use LW/CVI from 3.1 on.

My contributions to the Developer Community
________________________________________
If I have helped you, why not giving me a kudos?
0 kudos
Mensaje 11 de 21
2.099 Vistas

Saludos Roberto!

 

Gracias por la informacion,aplicare lo que me estas diciendo, la comunicacion si es de 9600 y esta tanto ene l pic como en elabwindows, estoy seguro de que el pic no trasmte 0xA, como hhago que lo trasmita solo lo escribo, si no e sasi no se como hacerlo.

0 kudos
Mensaje 12 de 21
2.041 Vistas

Si quieres añadir un caráctere al mensaje del PIC crelo que sea suficiente utilizar un segunodo SEROUT en su programa: no estoy seguro de esto ya que no uso esa microprocesadora ni tampoco el microbasic.

 

Pero antes que todo podrías empezar leyendo dos bytes solamente desde el MAX y ver si retorna algo del PIC



Proud to use LW/CVI from 3.1 on.

My contributions to the Developer Community
________________________________________
If I have helped you, why not giving me a kudos?
0 kudos
Mensaje 13 de 21
2.032 Vistas

Hola roberto!

 

Estoy corrigiendo segun los consejos que me distes, pero tengo este error y no entiendo como corregirlo este es el error: VISA:  (Hex 0xBFFF0015) Timeout expired before operation completed, ya que en el pic coloque el salto de linea o el 0xA, pero sigue dandome el error ya no entiendo esto y esto trabado aqui en este error.

 

gracias por tu tiempo nuevamente

0 kudos
Mensaje 14 de 21
2.021 Vistas

Antonio, debes controlar que los parámetros de comunicación sean iguales en el PIC y en la PC: si quieres trabajar son el carácter de fin de mensaje el PIC debe enviarlo y la serial en CVI va configurada para esperarlo; si no quieres usarlo debes quitarlo del PIC y del CVI. Chequea bien cómo configuras la comuicación serial en el VISA para averiguar que sea igual a la transmisión del PIC.

Después. debes dejar un adecuato tiempo en el CVI para recibir los caracteres: trabajando en 9600 baudios se transmite aproximadamente un carácter cada milisegundo, asó que debes tener un tiempo de timeout suficiente para recibir todos los caracteres que indicas.



Proud to use LW/CVI from 3.1 on.

My contributions to the Developer Community
________________________________________
If I have helped you, why not giving me a kudos?
0 kudos
Mensaje 15 de 21
2.012 Vistas

Un saludo !

 tengo noticias disculpa mi falta de consistencia en el foro estaba solucionando mi problema de comunicacion y te puedo decir que consegui solucion, antes que todo gracias por tu aydua, te dejo un archivo para que veas lo que paso y lo que hice para solucionarlo, te puedo adelantar que era un problema con mi tarjeta de adquisicion, pero tambien en el documento te digo que tienes que hacer para solventar esto en labview o labwindow es muy sencilla la solucion (claro esto era para mi problema)

0 kudos
Mensaje 16 de 21
1.953 Vistas

Me alegra saber que has solucionado tu poblema. Nosostros también utilizamos el Max232 como interfaz entre las microprocesadoras que usamos y las computadoras, y siempre hay que poner un poco de cuidado en los componentes que vienen alrededor de él.

Mucha suerte con tu aplicación.



Proud to use LW/CVI from 3.1 on.

My contributions to the Developer Community
________________________________________
If I have helped you, why not giving me a kudos?
0 kudos
Mensaje 17 de 21
1.950 Vistas

Un saludo!

 

tengo una duda de la comunicazion rs232 del labwindows c, es con respecto a un error d erun time mi codigo es el siguiente,

#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <math.h>
#include <rs232.h>
 

 int er3,er2;
 int er5;
  static unsigned char buffer[10];
  int CR;
int  main ()
  {
OpenComConfig (6, "COM6", 9600, 0, 8, 1, 512, 512);
er5 = ComRdTerm (6, buffer, 10,CR);

  printf ("\nData read: %*f\n",&er5 );

 CloseCom (6);
 
  }

 

 

estoy tratando d ever por pantalla lo que tienen el conRdterm, pero muestra un error No FATAL RUN TIME maximum field has been exceeden, como corrijo esto, o es qu eno puedo mostarar por pantalla el dato que tengo.

0 kudos
Mensaje 18 de 21
1.922 Vistas

Hola Antonio,

lo primero que se me ocurre es que no has asignad ningun valor a la variable CR que se usa como terminador. Lo que puede pasar en este caso es que CR tenga un valor no válido (es un byte value, o sea debería estar en el rango desde 0 hasta 255) y el ComRdTerm actue de manera inesperada y restituya un error (a lo mejor intenta leer hasta encontrar el terminator, que no va a encontrar nunca, y acaba leyendo más caracteres de los que caben en 'buffer').

Te aconsejo que pongas int CR = 13 si quieres terminar la lectura en el carácter Carriage return.

 

Secundariamente, te aconsejo que pongas -1 en la dimensión del buffer de salida de la serial, de esta manera: OpenComConfig (6, "COM6", 9600, 0, 8, 1, 512, -1); esto facilita mucho la comunicación puesto que es sistema no va a utilizar ningun buffer de salida sino que escribe directamente sobre el puerto. Mira a la ayuda en línea para mayores detalles.

 

Saludos



Proud to use LW/CVI from 3.1 on.

My contributions to the Developer Community
________________________________________
If I have helped you, why not giving me a kudos?
0 kudos
Mensaje 19 de 21
1.915 Vistas

Hola Roberto!

 

ya intente hacer lo que me recomendaste la ultima vez pero no funciona, tambien tengo dudas de como puedo manipular los datos que obtengo por el puerto rs232, y luego graficar estos datos, esto es lo que quiero:

 

poder ver los datos que obtengo por el puerto y poder manipularlo( esdecir poder meter estos datos en una formula y luego obtener un resultado)

estos datos graficarlos

luego mandar una respuesta por el puerto

 

intente leer los manuales pero no entiendo y no me es de gran claridad de como hacer estas cosa si puedes una vez mas ayudarme gracias

0 kudos
Mensaje 20 de 21
1.878 Vistas