TODOPIC

Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: iNoXSteeL en 06 de Diciembre de 2009, 16:06:06

Título: Diferencias en código analógico
Publicado por: iNoXSteeL en 06 de Diciembre de 2009, 16:06:06
Hola a todos,

Tengo un dilema con estos códigos, el primero no funciona, el segundo sí, y a mi parecer son exactamente iguales, vosotros véis algo raro ??

El que no funciona

Código: C
  1. set_adc_channel(0);
  2.    delay_us(20);
  3.    
  4.    ReadNtc = Read_ADC();
  5.    Vntc = 5 * ReadNtc  / 1024;
  6.  
  7.    ResNtc =  Vntc * 10000  / ( 5 - Vntc ) ;
  8.    TempOut = (1 / (((log(ResNtc/20000) * (1 / NtcBeta) )) + (1 / 298.15))) - 273.15;

El que si..

Código: C
  1. set_adc_channel( 0 );
  2.    delay_us(20);
  3.    ReadNtc = Read_ADC();
  4.       Vntc = 5.0 * ReadNtc / 1024.0;
  5.       ResNtc = Vntc * 10000.0 / (5.0 - Vntc);
  6.       TempOut = log(ResNtc/20000.0);
  7.        TempOut = (1.0/298.15) + (TempOut *(1.0/NtcBeta));
  8.       TempOut=1.0/TempOut;
  9.       TempOut = TempOut -273.15;

A ver si me podéis aclarar el porqué, quizá sea por hacer la operación de una vez?

Gracias, un saludo.
Título: Re: Diferencias en código analógico
Publicado por: migsantiago en 06 de Diciembre de 2009, 17:04:54
La diferencia está en el casting que haces de los datos.

Esta operación se hace en enteros...

Código: [Seleccionar]
Vntc = 5 * ReadNtc  / 1024;
Y ésta se hace en flotantes...

Código: [Seleccionar]
     Vntc = 5.0 * ReadNtc / 1024.0;
En el foro ya se ha hablado sobre casting, puedes usar el buscador para encontrar más detalles.
Título: Re: Diferencias en código analógico
Publicado por: iNoXSteeL en 06 de Diciembre de 2009, 17:26:41
Gracias por la aclaración MigSantiago, ahora si funciona. Voy a leer sobre el casting, pues no sabía de el.

Un saludo.