Autor Tema: Conversión de float32 a string en CCS.  (Leído 3995 veces)

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

Desconectado gastonv_90

  • PIC10
  • *
  • Mensajes: 9
Conversión de float32 a string en CCS.
« en: 08 de Enero de 2017, 12:00:57 »
Buenos días,

Me encuentro realizando un proyecto en el que tengo que mostrar por un display la información recibida de 6 sensores. Para ello estoy utilizando un PIC 18F4520. Una vez digitalizada la información y formateada como float32 para mostrar la información que requiero necesito convertirla a string para poder mostrarla en el display LCD 16x2.

He probado con la función SPRINTF pero sin buenos resultados. El display solo mostraba la parte entera y luego del puntos todos ceros. La utilice de la forma que ejemplifica el index del ccs,

char string[5];

float k;
main() {

   k=12.345;

   sprintf(string,"\f%6.3f",f);

}

Alguna idea de donde le puedo estar errando ? o conocen alguna otra forma de hacerlo ?
 El código lo subo mañana.
 Desde ya gracias y saludos,


Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:Conversión de float32 a string en CCS.
« Respuesta #1 en: 08 de Enero de 2017, 13:34:16 »
Citar
Alguna idea de donde le puedo estar errando ?

char string[5];

Es muy pequeño. se consideras todo tu numero k serian 6 caracteres + 1 caracter nulo que indica el final del string.
Segun tu formato del printf estas esperando hasta 6 enteros y 3 decimales, si le sumas el punto y el caracter nulo, el minimo deberia ser de 11 caracteres o lugares del array

   sprintf(string,"\f%6.3f",f);

No se por que usas f, cuando imagino que por tu codigo deberia usar k, la otra es que no se si tiene implementando el \f, sino podrias quitarlo y reemplazarlo por \r\n aunque sea para probar.

Es lo unico mal que veo.

Desconectado gastonv_90

  • PIC10
  • *
  • Mensajes: 9
Re:Conversión de float32 a string en CCS.
« Respuesta #2 en: 08 de Enero de 2017, 19:05:46 »
Gracias KILLERJC por la respuesta.

si el k fue un error de tipeo. No entendía bien el formateo que hacia la función sprintf.

Mañana voy a probar con una declaracion del string mas grande a ver que tal funciona.

Saludos,

Desconectado gastonv_90

  • PIC10
  • *
  • Mensajes: 9
Re:Conversión de float32 a string en CCS.
« Respuesta #3 en: 10 de Enero de 2017, 09:37:53 »
Sigo sin poder mostrar en el display la variable del tipo float32.

Realice lo siguiente,

char string[11];
float k;
lcd_init();
main()
{
   k=12.345;
   sprintf(string,"%6.3f",k);
   lcd_gotoxy(1,1);
   printf(lcd_putc, string);
}


Estoy haciendo las cosas bien ? existe alguna otra forma ?

El compilador que estoy usando es el v4.084

Saludos,

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:Conversión de float32 a string en CCS.
« Respuesta #4 en: 10 de Enero de 2017, 13:54:25 »
El sprintf esta correcto, el printf hay que modificarlo ( los probe en un compilador C para PC ).

Si este es tu codigo algo mal tenes:

Código: C
  1. char string[11];
  2. float k;
  3. lcd_init();
  4. main()
  5. {
  6.    k=12.345;
  7.    sprintf(string,"%6.3f",k);
  8.    lcd_gotoxy(1,1);
  9.    printf(lcd_putc, string);
  10. }

Deberia ser algo asi:

Código: C
  1. char string[11];
  2. float k;
  3.  
  4. void main(void)
  5. {
  6.    lcd_init();
  7.    k=12.345;
  8.    sprintf(string,"%6.3f",k);
  9.    lcd_gotoxy(1,1);
  10.    printf(lcd_putc,"%s", string);
  11.  
  12.    while(1);
  13. }

Primero asegurate de que puedas escribir algo en el LCD, segundo recien ahi vemos el tema de la conversion. La otra es no usar el sprintf para nada.

Código: C
  1. float k;
  2.  
  3. void main(void)
  4. {
  5.    lcd_init();
  6.    k=12.345;
  7.    lcd_gotoxy(1,1);
  8.    printf(lcd_putc,"%6.3f", k);
  9.  
  10.    while(1);
  11. }

Desconectado gastonv_90

  • PIC10
  • *
  • Mensajes: 9
Re:Conversión de float32 a string en CCS.
« Respuesta #5 en: 11 de Enero de 2017, 09:54:02 »
Hola, Gracias por las respuestas,

Ya resolví el problema. Resulta que mi variable K provenía de una cuenta realizada con lo que se obtenía de un adc. K era una variable del tipo float y lo que se obtenía del ADC era un tipo INT, por alguna razón me estaba truncando la parte decimal cuando hacia la cuenta K. Por lo tanto, previo a la cuenta K asigne la conversión del ADC a una variable tipo float y posterior a eso hice la cuenta con todas variables del tipo float.

El error no estaba en la muestra sino que estaba en la cuenta previa. Además, lo termine haciendo como decis de utilizar directamente printf(lcd_putc,"%6.3f",k) y muestra perfecto.

Problema solucionado,

Muchas gracias