TODOPIC

Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: xalito en 17 de Octubre de 2012, 01:07:31

Título: Problemas con la impresión de flotantes en LCD con CCS, con solución
Publicado por: xalito en 17 de Octubre de 2012, 01:07:31
Mi problema era el siguiente: realizando un medidor de distancia para mi bicicleta, mediante la cuenta de los pulsos entrantes por el TMR1 de un 16f877a, ya que el timer es de 16 bits uso una variable int16 (metros) para obtener el valor y cuando la cuenta es mayor a 1000 metros, ahora los convierto a kilómetros (float) y estos los muestro en un LCD; el problema era que al dividir "metros"/1000 para obtener la medida en kilómetros, es decir convertir los metros (int 16) a kilómetros (float) el LCD no imprimía los números después del punto decimal.

Código: [Seleccionar]
void cuenta_mts(){
   metros = get_timer1();
   if (metros>1000){
      kms = metrosf/1000;
   }
}

Código donde se imprime metros o kilómetros:
Código: [Seleccionar]
     if (metros < 1000){
         lcd_gotoxy (10, 1) ;
         printf (lcd_putc, "%05Lum",metros);
      }
      else{  
         lcd_gotoxy (10, 2) ;
         printf (lcd_putc, "%2.3fk",kms);
      }
La solución fué "preconvertir" los metros que eran int16 a float y después realizar la división.
Código: [Seleccionar]
void cuenta_mts(){
   metros = get_timer1();
   if (metros>1000){
      metrosf = metros; //metros es int16 y metrosf ya es flotante
      kms = metrosf/1000;
   }
}

Espero que a alguien más le ayude y que mi tema este en el lugar y con las características correctas, gracias.
Título: Re: Problemas con la impresión de flotantes en LCD con CCS, con solución
Publicado por: jhozate en 20 de Octubre de 2012, 14:38:47
puede ser que en el primer código no funcionaba porque no habías puesto 1000.0