TODOPIC
Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: Cryn en 24 de Julio de 2007, 16:35:05
-
como se maneja una variable de tipo float? lo quiero para realizar una división y mostrarla por displays, es decir se puede tener la parte entera en un int o int16 y la parte decimal en otro int o int16, como puedo mostrarlos?? para PICs 16f
-
como se maneja una variable de tipo float? lo quiero para realizar una división y mostrarla por displays, es decir se puede tener la parte entera en un int o int16 y la parte decimal en otro int o int16, como puedo mostrarlos?? para PICs 16f
Puedes hacer lo que se te ocurra siempre que lo hagas bien, eso es la ventaja del software. :)
Lo que no me queda claro es si quieres usar float y mostrarlo en un LCD o si quieres usar enteros y a su vez también mostrarlos en el LCD. ambos métodos son válidos pero llevan a manipulaciones diferentes de los datos
PD: en el foro es un tema que sale muchas veces.
-
esque quiero hacer una division y si tiene decimales mostrar uno o dos decimales, en 5 displays de leds, ya he logrado desplegar la parte entera, pero no se me ocurre como hacerlo para la parte decimal, porque no he manipulado un float, y pues haber si lo logro, un saludo, gracias.
uso display de leds porque no tengo lcd
-
Una idea. Uds me dirán si es viable o no.
Si tenés tu número en la variable float F, por ejemplo F=45,235 y vos lo pasas a entero: I=(int)F te queda I=45
Para visualizar los decimales se puede hacer:
Primer decimal D1= (int)((F-I)*10); // toma la parte entera de 2,3500 = 2
Segundo decimal D2= (int)((F-I)*100-D1*10); // toma la parte entera de 23,500-20 = 3
Tercer decimal D3= (int)((F-I)*1000-D1*100-D2*10); //toma la parte entera de 235,00-200-30= 5
Esto consume mucho programa, pero optimiza ram
Primer Decimal DF1 = (F-I)*10; // 2,3500
D1 = (int)DF1; // 2
Segundo Decimal DF2 = (DF1-D1)*10; // (2,3500-2)*10 = 3,500
D2 = (int)DF2; // 3
Tercer Decimal DF3 = (DF2-D2)*10; // (3,500-3)*10 = 5,000
D3 = (int)DF3; // 5
Acá las fórmulas son más simples, se usa menos memoria de programa, pero se consume el doble de ram
Primer Decimal AUX = (F-I)*10; // 2,3500
D1 = (int)AUX; // 2
Segundo Decimal AUX = (AUX-D1)*10; // (2,3500-2)*10 = 3,500
D2 = (int)AUX; // 3
Tercer Decimal AUX = (DF2-D2)*10; // (3,500-3)*10 = 5,000
D3 = (int)AUX; // 5
Esto es lo más óptimo, pues se usa menos memoria de programa que en el caso 1. En sí es similar al caso 2, pero se usa una variable auxiliar con lo que el uso de ram es de n+1 en lugar de 2n, siendo n el número de decimales.
-
también puedes hacer que el resultado de ese float te quede en unidades menores, por ejemplo: 5 voltios , trata que quede 5000 mV allí tienes los 3 digitos que puedes separar con el punto del 7-seg (además que te ahorras el float, y llevas el valor a entero largo
-
Pues ahora mismo estaba liado con eso... y estaba buscando en el foro. Yo lo he hecho de la siguiente manera:
float acuario;
int decenas, unidades, decimas;
decenas=(int) acuario/10;
unidades=(int) acuario-(decenas*10);
decimas=(int) (acuario*10-(decenas*100+unidades*10));
Supongo que esto tardara un "ratito" con tanta multiplicación.
Un saludo