Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: ferorts en 11 de Febrero de 2011, 06:21:22
Título: obtener valor decimal
Publicado por: ferorts en 11 de Febrero de 2011, 06:21:22
Hola a todos, estoy trabajando con un PIC 16F886 y con CCS C, mi problema es que estoy haciendo el calculo para obtener el valor del Registro TR2 para el PWM del PIC y me interesa obtener ese valor con decimales, ya que mi idea es si el decimal es mayor a 0.5 redondear hacia arriba y si es menor hacia abajo, asi pretendo obtener un poco mas de precision en la frecuencia obtenida, ahora bien como recibo el valor de la frecuencia por I2C en hex, realizo el calculo como si se tratara de un numero decimal sin problemas, pero a la hora de hacer esto:
float prueba; int16 x; int16 dos_dec; int valor_pr2; int16 dutty;
x = make16(dato2,dato3); //de dos variables de 8 bits formo una de 16.
dos_dec=((64)*(x)); //Siendo X el valor Hex recibido por I2C valor_pr2=((2000000/(dos_dec))-1); //valor registro TR2 para el PWM CCP1 guardado en una variable de tipo entero prueba=((2000000/(dos_dec))-1); //valor registro TR2 guardada en una variable tipo float, real delay_ms(1); dutty=(((valor_pr2)*2)+1); //calculo el valor del dutty para dutty 50% printf("\n\r resultado de Prueba : %g ",prueba); printf("\n\r resultado de Prueba: %f ",prueba);
El resultado me sale sin decimales cuando la operacion si que los tiene, seria algo asi:
Frec Reloj 2MHz;FPWM=450Hz;Presc=16;
(2Mhz/Presc*4*FPWM)-1 = 69.4 - 1 = 68.4 seria el valor, y el programa me muestra todo el rato 68.00.
Que puedo hacer?
Gracias.
Título: Re: obtener valor decimal
Publicado por: pocher en 11 de Febrero de 2011, 08:40:20
¡¡¡Si dos_dec es una variable int16, valor_pr2 no puede ser int!!!
Para que salga 68,4 ¿cuanto vale x? ... no se entiende bien, pon el programa.
Título: Re: obtener valor decimal
Publicado por: AngelGris en 11 de Febrero de 2011, 10:29:43
¿Qué pasa si hacés un casting en la línea que hacés el cálculo de la variable prueba.? Me explico mejor.... vos tenés esto....