Autor Tema: mplab 7.60 c18 pasar de un float a un string como???decimales en lcd  (Leído 9585 veces)

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

Desconectado redep

  • PIC12
  • **
  • Mensajes: 75
Bueno e estado buscando por internet estos dias como poder mostrar digitos decimales en un lcd  es decir de una variable float transformalar a una cadena para poder mandarla al lcd y que se muestre el numero con decimales he visto que en css esto no es porblema por las librerias y comandos que existen pero en c18 la cosa cambia o por lo menos no he encontrado nada.

si me pudieseis ayudar lo agradeceria.

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18286
    • MicroPIC
Re: mplab 7.60 c18 pasar de un float a un string como???decimales en lcd
« Respuesta #1 en: 07 de Octubre de 2008, 06:30:33 »
Puedes usar el comando sprintf de la librería stdio.h


Desconectado woofer

  • PIC10
  • *
  • Mensajes: 5
Re: mplab 7.60 c18 pasar de un float a un string como???decimales en lcd
« Respuesta #2 en: 07 de Octubre de 2008, 15:12:46 »
Hola nocturno....he mirado en la pagina ke has indicado...pero hay no se encuentra el codigo fuente de las funciones, solo esta la explicacion de como usarla.

¿¿Se pueden conseguir los fuentes de todas las librerias para el C18????


Un saludo!

Desconectado woofer

  • PIC10
  • *
  • Mensajes: 5
Re: mplab 7.60 c18 pasar de un float a un string como???decimales en lcd
« Respuesta #3 en: 07 de Octubre de 2008, 15:33:45 »
Vale...ke despiste....si las librerias ya estan incluidas en el C18...eso me pasa por guiarme solo del documento de librerias de los perifericos!!!

...haber si me aclaro con la funcion:

  int fprintf(FILE *stream, const char *formato, ...);

...."stream" es el vector donde me guardara la cadena de caracteres ekivalente al valor numerico ke le paso en "formato"???


un saludo!

Desconectado redep

  • PIC12
  • **
  • Mensajes: 75
Re: mplab 7.60 c18 pasar de un float a un string como???decimales en lcd
« Respuesta #4 en: 07 de Octubre de 2008, 15:46:31 »
al darme la pista de la instruccion he encontrado esto la he probado y va pero es una forma un poco chapucera de mostrar decimales ya que realmente te concatena dos numeros para mostrarlos, ay alguna otra forma como un itoa pero para los float


#include "math.h"
float f = 100.55;
float f1,f2;
int i1,i2;
char output[10];

int main(void)
{

 f1=floor(f);
 f2=f - f1;
 i1 = (int)f1;
 i2 = (int)100*f2;  //assume you want 2 decimal

 sprintf(output,"%i.%02i", i1,i2);

while(1);

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18286
    • MicroPIC
Re: mplab 7.60 c18 pasar de un float a un string como???decimales en lcd
« Respuesta #5 en: 07 de Octubre de 2008, 18:32:31 »
Para imprimir un float se utiliza
sprintf (output,"%5.2f",f);

siendo 5 el total de dígitos y 2 el nº de decimales a imprimir.

Desconectado redep

  • PIC12
  • **
  • Mensajes: 75
Re: mplab 7.60 c18 pasar de un float a un string como???decimales en lcd
« Respuesta #6 en: 08 de Octubre de 2008, 16:25:02 »
Este es parte de mi codigo nocturno trabajo con el icd2 y cuando ago debug y paso a la intruccion siguiente del sprintf per aparece que tempstr esta vacio la verdad es que no se que hago mal.Si me pudieses ayudar te lo agradeceria mucho.





char tempstr[4];

int temp;
float nivel;
float res;
int temp;
float temp2;
void main(void)
{

UCON = 0X00; 

TRISA = 0XFF;
TRISD = 0X0F;
TRISB = 0X00;
PORTA = 0X00;
PORTD = 0X00;
PORTB = 0X00;
TRISE=0xFF;

Delay1KTCYx(100);//AY QUE DEJAR UN PEQUEÑO RETARDO AL PRINCIPIO PARA QUE SE INICIE EL LCD
Inicializa_LCD();
Delay1KTCYx(15);//RETARDO INCESARIO
Comando_LCD(CLEAR);
Comando_LCD(CURSOR_OFF & BLINK_ON);

Comando_LCD(CLEAR);
temp=0;
OpenADC(ADC_FOSC_4 & ADC_RIGHT_JUST & ADC_12_TAD,
ADC_CH1 & ADC_INT_OFF & ADC_VREFPLUS_VDD & ADC_VREFMINUS_VSS,
13);
SetChanADC(ADC_CH1);
Delay10TCYx( 50 );
ConvertADC(); // Start conversion
while( BusyADC() ); // Wait for ADC conversion
temp = ReadADC(); // Read result and put in temp
CloseADC(); // Disable A/D converter

nivel=temp*4.8828/1000;
res=(-17401.6-nivel*1000)/(nivel-182.5984);
temp2=(res-100)/(0.39);
sprintf(tempstr,"%4.2f",temp2);

Dato_String_LCD(tempstr)//pone un string en el lcd

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18286
    • MicroPIC
Re: mplab 7.60 c18 pasar de un float a un string como???decimales en lcd
« Respuesta #7 en: 08 de Octubre de 2008, 16:46:02 »
Pues no sé. Échale un vistazo al ejemplo que trae C30:

Código: Javascript
  1. #include <stdio.h> /* for sprintf, printf */
  2. int main(void)
  3. {
  4. char sbuf[100], s[]="Print this string";
  5. int x = 1, y;
  6. char a = '\n';
  7. y = sprintf(sbuf, "%s %d time%c", s, x, a);
  8. printf("Number of characters printed to "
  9. "string buffer = %d\n", y);
  10. printf("String = %s\n", sbuf);
  11. }
  12. Output:
  13. Number of characters printed to string buffer = 25
  14. String = Print this string 1 time

Desconectado redep

  • PIC12
  • **
  • Mensajes: 75
Re: mplab 7.60 c18 pasar de un float a un string como???decimales en lcd
« Respuesta #8 en: 09 de Octubre de 2008, 07:43:50 »
Gracias por la rapidez de la respuesta, haber si mañana lo puedo probar en mi 18f tu ejemplo adaptandolo.

De todas formas haber si la gente que haya programado un 18f que me comente cmo visualizar decimales.


gracias a todos

Desconectado redep

  • PIC12
  • **
  • Mensajes: 75
Re: mplab 7.60 c18 pasar de un float a un string como???decimales en lcd
« Respuesta #9 en: 09 de Octubre de 2008, 09:00:47 »
bueno buscando esta mañan alguna solucion e confirmado que en c18 la libreria stdio.h no soporta numeros float
esto esta sacado del datasheep, por lo que entonces ay alguna otra solucion.

2.7.4 stdio.h Functions
The output functions defined in stdio.h differ from the ANSI defined versions with
regards to data in program memory, floating-point format support, and MPLAB C18
specific extensions.
The functions puts and fputs expect the output string to be stored in program
memory. The functions vsprintf, vprintf, sprintf, printf, fprintf and
vfprintf expect the format string to be stored in program memory.
The functions vsprintf, vprintf, sprintf, printf, fprintf and vfprintf do
not support floating-point conversion specifiers.
The MPLAB C18 specific extensions for 24-bit integers and data in program memory
are described in Section 4.7 of MPLAB® C18 C Compiler Libraries.