Discusiones sobre Productos NI

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

labview puerto serie serial port

¡Resuelto!
Ir a solución

Hola,

 

Analiza tus lineas verdes (yo soy daltonico de lectura), no había visto donde decías lo de las lineas verdes. Si las analizas ves que tienes un overflow a partir de 31ºC.

Al principio como analogRead devuelve int pues todas las operaciones se hacían en int y finalmente el compilador te hace un casting a float. ¿Qué hicistes? pues cambiar los tipos a float 5 (int)--> 5.0 (float) y ya operas en punto flotante, mas lento.

//antes supongo algo así

pin0=(analogRead(0)*5*100)/1023; //el resultado no hubiese tenido decimales aún cuando no hubiese overflow (creo).  Pruebalo con long y verás.

 

// despues trabajas en float (flotantes de 32 bits) donde este tipo de problemas son muy poco frecuentes. Te pueden jugar malas pasadas pero son casos muy contados de divisiones y diferencias.

 

pin0=(analogRead(0)*5.0*100.0)/1023.0; //esto trabaja con float, yo personalmente me quedaría mas tranquilo añadiendo un casting al analogRead de float. Lo sustituyo por:

pin0=((float)analogRead(0)*5.0*100.0)/1023.0; 

 

pues nada, solo eso quería comentarte para que fueras viendolo, las reglas en la informática no son seguras.

 

Saludos Emilio.

 

0 kudos
Mensaje 21 de 26
1.733 Vistas

Hola,

 

Un par de horas despues de escribir la duda encontre el error, sabia que el fallo venia en la variable de luz porque la de luxes los da bien y lo unico que cambiaba era que se multiplicaba por 100 asi que me dio por mirar los tamaños del int y el float y entonces me di cuenta, sobre todo cuando vi que cuando llegaba al limite te marcaba con signo menos como a mi me pasaba asi que los hice long y listo problema solucionado.

 

T1 y T2 no los e hecho long ya que el float que me va a aparacer no va a llegar nunca a 100.00ºC, ya que si no estariamos todos fritos, asi que al multiplicarlo por 100 el int en ningun caso va a llegar a 10000. En cambio la irradiancia si me puede llegar a unos 1500.00W/m^2 y al multiplicarlo por 100 el int se me desborda, otra de las cosas que me salto al ojo cuando vi lo de  -32,768 a 32,768 fue que a mi se me aturullaba justo cuando la irradiancia llegaba sobre los 315.00 o 320.00 W/m^2.

 

Asi que nada, a acabar el documento y todo finiquitado. Gracias.

0 kudos
Mensaje 22 de 26
1.727 Vistas

Hola, 

me alegro que todo haya termado bien y que fuese ese el problema, a veces basta con contarle las cosas a alguien para darte cuenta del problema.

 

Saludos.

0 kudos
Mensaje 23 de 26
1.724 Vistas

puede encontrar un tutorial acerca de comunicacion serie en el siguiente documento https://decibel.ni.com/content/docs/DOC-30528

0 kudos
Mensaje 24 de 26
1.538 Vistas

Buen aporte Atom,

hay gente que se molesta de documentar lo importante.

Como digo al principio del hilo, también puedes mandar los datos en binario, más rapido y compacto.

 

Eso si esta forma hay que definir la estructura de los datos, se envía un mensaje, con un id de cabecera, longitud de mensaje y un CRC al final.

 

No sé si de ésto hay alguna documentación por ahí. Esta es la forma que uso para comunicarme normalmente entre los microcontroladores y el pc.

 

Saludos 

 

Emilio.

0 kudos
Mensaje 26 de 26
1.527 Vistas