Autor Tema: obtener valor decimal  (Leído 2821 veces)

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

Desconectado ferorts

  • PIC10
  • *
  • Mensajes: 36
obtener valor decimal
« 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.

Desconectado pocher

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 2569
Re: obtener valor decimal
« Respuesta #1 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.

Desconectado AngelGris

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2480
Re: obtener valor decimal
« Respuesta #2 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....

Código: C
  1. prueba=((2000000/(dos_dec))-1);

  ¿y que ocurre si ponés esto?

Código: C
  1. prueba = (float)((2000000/(dos_dec))-1);
De vez en cuando la vida
nos besa en la boca
y a colores se despliega
como un atlas


 

anything