Autor Tema: Problemas con floats  (Leído 2117 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado Carafa

  • PIC10
  • *
  • Mensajes: 12
Problemas con floats
« en: 08 de Marzo de 2004, 06:18:00 »
Hola. El asunto es el siguiente: tengo un proyecto por el que recibo unas señales de consigna por el puerto serie y estas deben activar ambos módulos PWM del uc. Las consignas las recibo en formato caracter (0 a 255) y para saber realmente la consigna a aplicar (escalada entre 0 y 5 voltios) le aplico:

unsigned char value;    //valor recibido por el puerto serie
float v;                          //valor de consigna
long dc;                        //ciclo de trabajo PWM

v = (5/255) * value;

después activo PWM (setup_pwm, timer2...) y calculo dc:

dc = (long)(v * 4000000 / 5 * frec_pwm);

y le paso dc al pwm.

Sin embargo el pwm no se activa y después de varios intentos de prueba y error he llegado a la conclusión de que el problema está en la linea:

v = (5/255) * value;

porque no debe hacer una conversión correcta entre value (tipo char) y v (tipo float). Pero no sé como solucionarlo. ¿Alguna idea?

Gracias.


Desconectado fopy

  • PIC10
  • *
  • Mensajes: 35
RE: Problemas con floats
« Respuesta #1 en: 08 de Marzo de 2004, 08:23:00 »
a mi me parece que tendrias que probar:

void linkfloats(void)
{
 float *pun,a;
pun=&a;
a=*pun;
}

luego en tu codigo

v=(float)((5/255)*value);

espero q te sirva!!

Desconectado pacalaconcurso

  • PIC24F
  • *****
  • Mensajes: 718
RE: Problemas con floats
« Respuesta #2 en: 08 de Marzo de 2004, 08:29:00 »
fijate que value no es de tipo foat y creo quie la conversion no se realiza de forma explicita, prueba

v = (5/255) * (float)value

y define value como int8.
saludos


Desconectado Carafa

  • PIC10
  • *
  • Mensajes: 12
RE: Problemas con floats
« Respuesta #3 en: 10 de Marzo de 2004, 13:23:00 »
Gracias a ambos por las respuestas. He probado ambas soluciones pero continuaba sin funcionarme así que he decidio acabar con el perro y así acabar con la rabia: fuera floats. Me he apañado con ints dando un pequeño rodeo y todo solucionado.

Salu2!

Desconectado Xa2

  • PIC12
  • **
  • Mensajes: 58
RE: Problemas con floats
« Respuesta #4 en: 02 de Abril de 2004, 04:51:00 »
Carafa; te voy a pedir un favor, me podrias mandar el programa en C completo de lo que quieres hacer, me vendria muy bien; lo podrias poner en el foro, o mandarmelo a mi email:
pottoloa@hotmail.com

si no es mucha molestia por favor, me ayudarias bastante!!
Gracias por adelantado hagas lo que hagas!!
Saludos a todos!!

achamber2k3

  • Visitante
RE: Problemas con floats
« Respuesta #5 en: 29 de Agosto de 2004, 16:09:00 »
Se que es un poco tarde para la respuesta pero aqui va algo por si le sirve de ayuda a alguien luego

v = (5/255) * value

debes decir explicitamente q la operacion es entre floats. No me preguntes porque pero asi funciona a la perfeccion:

v = (5.0/255.0) * value

Lo he probado al llevar los valores de int16 de mi CAD a voltios.

Desconectado cucaracha

  • PIC24H
  • ******
  • Mensajes: 1409
    • CUCAWEB
RE: Problemas con floats
« Respuesta #6 en: 29 de Agosto de 2004, 16:39:00 »
Y también tarde, pero algo más:
recuerden
-el signo / para división entera.
-el signo % para el resto de la división.

Si pones 1/2 devuelve la parte entera, osea cero.
Si pones 1%2 devuelve el resto, osea 5.
En tu caso 5/255 devuelve cero. Por lo que v siempre valdrá cero.

Aunque es curioso eso que comentas. Si lo que pones son números flotantes resulta bien. No lo he probado, pero es curioso...
Supongo que si indicas la coma en el número toma ya el signo / normalmente.

También hay que indicar lo que comenta pacala, ya que por ejemplo si ponemos v=255*value, la cosa no funciona, aunque v se un long (value es un int). Hay que indicar momentaneamente que trate a value como un long en este caso, así (long)value. Es un ejemplo para que lo entienda el que le pueda sacar uso.

Saludos!!
Saludos desde Huelva (ESPAÑA)

achamber2k3

  • Visitante
RE: Problemas con floats
« Respuesta #7 en: 29 de Agosto de 2004, 18:15:00 »
Si, esto de los diferentes usos del / es por lo que los programadores llaman sobrecarga de operadores, si los operadores son enteros regresara enteros si son float regresara float. por tanto como coloca pacala v = (5/255) * (float)value  pues sigue siendo 0 (5/255) por un float. Diferente si colocamos 5.0/255 o 5/255.0. Dale que ya hemos descubierto porque ocurre!!!

achamber2k3

  • Visitante
RE: Problemas con floats
« Respuesta #8 en: 29 de Agosto de 2004, 18:17:00 »
Sorry por el lapsus es polimorfismo de funciones en vez de sobre carga de operadores... Bueno bueno es domingo... cualquier cosa puedo decir un dia tan aburrido como hoy...!!


 

anything