10-20-2011 09:11 AM
Hola que tal? Ando con problemas para graficar los resultados del buffer de VISA, a su vez suele suceder que el ultimo string en el buffer no se toma completamente, por lo que el gráfico no es correcto. Por ejemplo debería leer 1023 sin embargo lee 023, grafica en el lugar correspondiente al 23 de la pantalla y no al 1023 por lo que la grafica que se observa es inapropiada, deberia verse una senoidal de 1Hz.
He probado usar una busqueda con expresiones regulares dentro del buffer, pero sin resultados. Estoy seguro que el problema esta con labview porque usando hyperterminal nunca me queda un dato cortado.
El objetivo final es poder visualizar señales senoidales de hasta 1KHz.
Estoy usando:
Un microcontrolador PIC 16F877a programado con CCS (con interrupciones)
Conexion serie a la PC
Simulo todo con Proteus
Adjunto los archivos necesarios y un video donde se muestra el comportamiento del gráfico.
Agradeceria mucho su ayuda
Atte
--
Augusto
10-20-2011 10:44 AM
Que tal Augusto
Tienes un poco diferente el Vi de tu video al que mandaste. No importa, aqui tienes que tener cuidado con los bytes que vas a enviar y los que vas a leer. Podrias mejor leer de byte en byte y asi asegurarte de que lea todos, poniendo un wait de 0 por ejemplo para evitar que envias mas rapido de lo que puedas leer. La configuracion del serial esta bien, asegurate que el baudrate en ambos dispositivo sea el mismo. En el video se ve solamente la mitad de una señal senoidad, lo otro que recibe es error o asi es como deberia salir, pues comantas que es solamente un dato el que no recibe correctamente.
Saludos
10-20-2011 12:51 PM
Muchas Gracias por tu respuesta! Es muy bueno el soporte de NI a su comunidad de usuarios!
Te comento que estuve probando tal como dices, no puedo tomar de byte a byte porque como los numeros están codificados en ASCII para leer bien los datos necesito tomar 4 bytes. Como te daras cuenta en el video que adjunto hay un problema en la sincronizacion del buffer, a veces toma bien los datos y a veces mal, haciendo que los números sean mal representados. Esto no mejora si la captura del puerto serie es en tiempo real.
El baudrate esta comprado que es el mismo 😉
Lo que quiero observar es una sinusoide completa, tal como observas hay un pedazo de sinusoide que está mal representada.
Agradeceria cualquier tipo de respuesta/inquietud/solucion
Atte
--
Augusto
10-21-2011 10:34 AM
Hola
Intenta con un baudrate mas pequeño.
No se como estas mandando los datos, le estas enviando datos de 0 a 1023 o de 1023 a -1023 . porque tendras que cambiar el parametro de default de tu funcion string to number. No podrias mandar los datos en forma binaria? , vaya que en lugar de enviar 1 ASSCI ( 0x31) lo envies como 1 (0x01). Esto facilitaria las operaciones, porque? , porque en lugar de leerte 76 90 57 , te puede estar leyendo *7 69 05 7* donde el * son valores anteriores y posteriores, que se desfasee, probablemente esto este ocurriendo. Le dices que lea 8 bytes, cuando le puedes estar mandando 4, 5, 2 y no va a saber como interpretarlos, se van a guardar en el buffer los que falten o sobren y se van a anexar con el valor siguiente.
Saludos
10-21-2011 01:02 PM
He coincidido con tu planteo, hace unas horas estuve probando como comentas y he podido resolver el problema, ya puedo visualizar de manera medianamente correcta señales de 200-300Hz.
Como los bytes llegan desordenados (porq la comunicacion es asincrona) he puesto un boton que invierte el orden de los bytes, para formar un entero de 16 bits.
Lamentablemente la maxima velocidad serie que puedo simular es de 57600 bps, ya probare "fisicamente" con 115200
Adjunto video
Gracias por el interes en el problema
pd: podrian permitir subir al foro archivos con extension rar?
--
Augusto
10-21-2011 01:11 PM
Hola Augusto
Consultare con IT acerca de subir archivos .rar, pues creo es por cuestiones de politica.
Podrias volver a subir el archivo, pues no me permite abrirlo.
Saludos
10-21-2011 01:34 PM
Ahi va en formato zip (el otro es un rar pero con la extension cambiada).
Atte
--
Augusto