Autor Tema: Problemas con printf de Float  (Leído 2619 veces)

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

Desconectado Alejandro

  • PIC16
  • ***
  • Mensajes: 112
Problemas con printf de Float
« en: 25 de Marzo de 2011, 19:47:00 »
Hola, tengo el sgte codigo en ccs, cuando lo pruebo en el Proteus funciona perfectamente, puedo ver los que escribe el el hyperterminal de Proteus, pero cuando lo pruebo en el micro solo puedo recibir en el hyperterminal de la PC puro 0.0000, alguien me podria decir cual es mi error!!!

Código: [Seleccionar]
#include <18F452.h>
#fuses HS,NOWDT,NOPROTECT,NOLVP,NOBROWNOUT,NOSTVREN
#use delay(clock=20000000)
#use rs232(baud=19200, xmit=PIN_C6, rcv=PIN_C7, ERRORS)// RS232 Estándar
#use standard_io(b)
#use standard_io(d)

#include <stdlib.h>
#include <input.c>

int32 pulsos_LH ;
float Mostrar;
int32 Indice;

#INT_TIMER0
void Tiempo_Demo() {

set_timer0(22464);

Indice++;
pulsos_LH = 56;

    Mostrar = (pulsos_LH*3600*0.036)/((Indice)*2.25);
printf("Consumo = %8.4f L/H\r\n",Mostrar);
}


void main(){

setup_timer_0(RTCC_INTERNAL|RTCC_DIV_256);
    enable_interrupts(INT_TIMER0);

    enable_interrupts(GLOBAL);
set_timer0(22464);

while (TRUE);

}
Citar
Consumo =   0.0000 L/H
Consumo =   0.0000 L/H
Consumo =   0.0000 L/H
Consumo =   0.0000 L/H
Consumo =   0.0000 L/H
Consumo =   0.0000 L/H
Consumo =   0.0000 L/H

Desconectado AngelGris

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2480
Re: Problemas con printf de Float
« Respuesta #1 en: 25 de Marzo de 2011, 20:06:30 »
  No podría decirte porque en Proteus funciona y porque en el micro real no.
  Si puedo aconsejarte que tanto la asignación del valor a la variable "Mostrar" como el "printf...." conviene hacerlos fuera de la rutina de interrupción, para que la misma dure el menor tiempo posible.
De vez en cuando la vida
nos besa en la boca
y a colores se despliega
como un atlas

Desconectado Alejandro

  • PIC16
  • ***
  • Mensajes: 112
Re: Problemas con printf de Float
« Respuesta #2 en: 25 de Marzo de 2011, 20:13:31 »
Citar
Si puedo aconsejarte que tanto la asignación del valor a la variable "Mostrar" como el "printf...." conviene hacerlos fuera de la rutina de interrupción

Al inicio estaba como tu sugieres pero igual tenia el  mismo resultado!!!.
Código: [Seleccionar]
#include <18F452.h>
#fuses HS,NOWDT,NOPROTECT,NOLVP,NOBROWNOUT,NOSTVREN
#use delay(clock=20000000)
#use rs232(baud=19200, xmit=PIN_C6, rcv=PIN_C7, ERRORS)// RS232 Estándar
#use standard_io(b)
#use standard_io(d)

#include <stdlib.h>
#include <input.c>

int32 pulsos_LH ;
float Mostrar;
int32 Indice;

#INT_TIMER0
void Tiempo_Demo() {

set_timer0(22464);

Indice++;

}


void main(){

setup_timer_0(RTCC_INTERNAL|RTCC_DIV_256);
    enable_interrupts(INT_TIMER0);

    enable_interrupts(GLOBAL);
set_timer0(22464);

pulsos_LH = 56;

while (TRUE){


    Mostrar = (pulsos_LH*3600*0.036)/((Indice)*2.25);
printf("Consumo = %8.4f L/H\r\n",Mostrar);
}
}
« Última modificación: 25 de Marzo de 2011, 22:02:35 por Alejandro »

Desconectado bmb

  • PIC18
  • ****
  • Mensajes: 423
Re: Problemas con printf de Float
« Respuesta #3 en: 25 de Marzo de 2011, 22:09:42 »
Hola Alejandro, aparte del consejo de AngelGris, de momento sería recomendarte que inicialices a Indice que es una variable de 32 bits ya que en el PIC real podría estar arrancando con un valor muy alto.

Saludos!

Desconectado Alejandro

  • PIC16
  • ***
  • Mensajes: 112
Re: Problemas con printf de Float
« Respuesta #4 en: 25 de Marzo de 2011, 22:37:55 »
Hola bmb ,

Si pero de todos modos se imprimiria algun valor, el problema es que solo obtengo puros ceros!!!!

Desconectado bmb

  • PIC18
  • ****
  • Mensajes: 423
Re: Problemas con printf de Float
« Respuesta #5 en: 25 de Marzo de 2011, 23:06:15 »
Hola Alejandro, yo haría el intento solo por salir de dudas.  Supongamos que al iniciar Indice entra con un valor de 350000000.

Mostrar = (pulsos_LH*3600*0.036)/((Indice)*2.25);
Mostrar = (56*3600*0.036/(350000000*2.25))
Mostrar = (7257.6 / 787500000)
Mostrar = 0.000009216

Como tienes a printf con el formato %8.4f entonces solo vas a ver:

Citar
Consumo =   0.0000 L/H

Saludos!


 

anything