Haz una pregunta
  Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos
Foros Registrarse ¿Olvidaste tu contraseña?

Temas similares

09/11/2011 #1


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.
09/11/2011 #2
Moderador

Avatar de Chico3001

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
09/11/2011 #3


Gracias, lo probare.
22/07/2016 #4

Avatar de ilcapo

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 !
Imágenes Adjuntas
Tipo de Archivo: jpg float.jpg (57,3 KB (Kilobytes), 23 visitas)
22/07/2016 #5

Avatar de Gudino Roberto duberlin

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.
22/07/2016 #6

Avatar de ruben90

Pero si pancho es igual a 5, porque lo declaras como float? Decláralo como int8.
22/07/2016 #7

Avatar de Nuyel

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 ¿Qué compilador es?
22/07/2016 #8
Moderador

Avatar de D@rkbytes

Nuyel dijo: Ver Mensaje
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 ¿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.

Imágenes Adjuntas
Tipo de Archivo: jpg Float_Value.jpg (161,1 KB (Kilobytes), 41 visitas)
23/07/2016 #9

Avatar de palurdo

Nuyel dijo: Ver Mensaje
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 ¿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....
23/07/2016 #10
Moderador

Avatar de D@rkbytes

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


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


Eso pasa por andarle moviendo a las propiedades del Watch Window.
Imágenes Adjuntas
Tipo de Archivo: jpg Correct Format.jpg (117,2 KB (Kilobytes), 35 visitas)
Tipo de Archivo: jpg Incorrect Format.jpg (110,2 KB (Kilobytes), 33 visitas)
23/07/2016 #11

Avatar de ilcapo

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
23/07/2016 #12

Avatar de Nuyel

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.
23/07/2016 #13
Moderador

Avatar de D@rkbytes

ilcapo dijo: Ver Mensaje
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)
ilcapo dijo: Ver Mensaje
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.
ilcapo dijo: Ver Mensaje
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.
Respuesta
¿Tienes una mejor respuesta a este tema? ¿Quieres hacerle una pregunta a nuestra comunidad y sus expertos? Registrate

Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos

Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO ©2011, Crawlability, Inc.