Problema con variable float

Hola a todos, les consulto porque tengo una duda con un programa en CCS, uso una variable int y con dos pulsadores le asigno un valor +1 o -1 segun se presionen.
Luego envio un pulso por un puerto con ese valor.
Ahora Lo que quiero hacer es que con un pulsador sume 1 pero con el otro reste 0.2, solo cambie la variable a float y ahora al presionar +1 la salida se hace de 127ms.
En algo la estoy pifiando, si pueden aclararme el problema les estare muy agradecidos. Saludos.
 
No dices el procesador pero supongo que estas usando PIC y C....

El problema es que el uso de una variable flotante en un micro de 8 bits es muchisimo trabajo... asi que mejor usa todo int y multiplica por 10... osea:

en vez de sumar y restar 1 suma y resta 10, y cuando quieras el otro boton solo resta 2
 
Hola que tal amigos del foro, tengo problemas con las variables float o soy yo ?

les envio una imagen donde se ve una variable float y una int en la ventana watch del MPLAB
fijense que la variable float no se guarda bien, en lugar de guardarse el numero asignado 5, se esta guardando 8321 !!!

la verdad no se como solucionar esto que me esta causando problemas para hacer programas, ya que me hace cualquiercosa cuando uso variables float y ahora descubro que esta pasando esto

espero que me puedan ayudar, desde ya muchas gracias !
 

Adjuntos

  • float.jpg
    float.jpg
    57.3 KB · Visitas: 23
Hola, bueno he pasado problemas cómo describes, pero en mi caso cuando comparaba variables tipo LONG, con las de tipo INT, era un desastre.
La solución en C fue la sig:
INT var1,
LONG var2, var_aux

var_aux=var1;

if (var2>var_aux).....
De ésta manera comparo dos variables del mismo tipo, y problema solucionado, no es tu caso, pero puede ayudarte a ver el problema de otra manera.
 
Última edición:
Pero si pancho luego se encoje a 4.4 usando INT8 bajara a 4.

Lo que no me cabe en lógica es que use 0x0000.2081 debería ser 0x040A.0000, no entiendo por qué está usando exponentes negativos :eek: ¿Qué compilador es?
 
Lo que no me cabe en lógica es que use 0x0000.2081 debería ser 0x040A.0000, no entiendo por qué está usando exponentes negativos :eek: ¿Qué compilador es?
Por la instrucción; "output_high(PIN_B3);" tiene que ser el PCWHD de CCS.
Y está usando MPLAB como entorno.

En MPLABX los valores se muestran correctamente.
Float_Value.jpg
 
Pero si pancho luego se encoje a 4.4 usando INT8 bajara a 4.

Lo que no me cabe en lógica es que use 0x0000.2081 debería ser 0x040A.0000, no entiendo por qué está usando exponentes negativos :eek: ¿Qué compilador es?

Da la impresión que el compilador guarda el float en Big-endian, y primero exponente, luego signo, luego mantisa: 00000000 00000000 00100000 1000001 ->[2^(129-127)] (+) (1).01....
 
Ya descubrí por qué se muestra ese valor (8321)
Es debido al formato de representación y asignación de la variable.

Por defecto debe ser...
Size: 32 bits
Format: MCHP Float
Byte Order: Low:High
Correct Format.jpg

Y la selección de formato errónea, fue de la siguiente forma:
Size: 16 o 32 bits
Format: Decimal
Byte Order: High:Low
Incorrect Format.jpg

Eso pasa por andarle moviendo a las propiedades del Watch Window. :LOL:
 
Sali un momento y me encontre todas estas respuestas! gracias por ocuparse del tema y disculpen por no entrar antes.

Darkbytes tiene razon estoy usando CCS y el MPLAB como entorno para hacer el debugger y poder ver el valor de las variables ( Darkbytes vos podes ver las variables sin conectar un pic fisicamente ? o te pusiste en la molestia de conectar todo ? si es asi desde hoy sos mi mejor amigo lo lamento XD )

También estoy usando el pic18f4550 y siempre habia usado los 16F no se si la configuración tendrá que ver con eso y hay que ir cambiando la configuracion siempre al cambiar de familias de pics ?

Apenitas pueda pruebo la configuración que me dices Darkbytes y te comento como me fue :)
 
Según me parece recordar, el mplab incluye simulador, no hace como Proteus, solo la memoria para que veas los registros.

Bueno, cada chip tiene su forma de almacenar los números, casi no empleo flotantes y cuando lo hago es mayormente en un Cortex-M4F donde la FPU emplea IEEE 754.
 
Darkbytes, ¿vos podes ver las variables sin conectar un pic físicamente o te pusiste en la molestia de conectar todo?
Si es así, desde hoy sos mi mejor amigo lo lamento XD.
Únicamente ejecuté el programa en el simulador, porque para ver el valor de las variables no es necesario montar el circuito físicamente.
Para hacer una depuración en físico se usa el ICD. (In Circuit Debugger)
También estoy usando el pic18f4550 y siempre había usado los 16F.
¿No sé si la configuración tendrá que ver con eso y hay que ir cambiando la configuración siempre al cambiar de familias de pics?
En el simulador no hay que cambiar nada porque automáticamente detecta los tipos de variables.
Si te fijas, desde el principio obtuve los valores correctos.

En la programación tampoco cambia nada porque estás usando un compilador de alto nivel que se encarga del trabajo rudo.
En lenguaje ensamblador o PICBasic, si tienes que programar de otra forma por el tipo de registros de los PIC18.
Apenitas pueda, pruebo la configuración que me dices Darkbytes y te comento cómo me fue :)
Regresa todo a los valores por defecto y ya no tendrás ese problema.

Suerte.
 
Atrás
Arriba