Autor Tema: Problemas de refresco de lcd con float  (Leído 4456 veces)

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

Desconectado piriots

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 609
Problemas de refresco de lcd con float
« en: 28 de Mayo de 2007, 13:25:58 »
Buenas!! estoy haciendo un programa y me encuentro con un problemilla. Si saco una variable float por la LCD no tengo ningun problema, la dificultad aparece cuando defino los decimales que quiero %1.2f, lo que me ocurre en este caso es que el lcd no muestra bien los datos, muestra la primera fila, parpadea se borra la primera fila y se queda la segunda hasta que se refresca la lcd (mediante interrupcion del timer). ¿Alguien sabe que es lo que puede ocurrir? Aqui les dejo el trozo de codigo que me da los problemas.   


   float pinof;
      float coronaf;
      pinof=pino;
      coronaf=corona;
     
      enable_interrupts(int_timer0);
      enable_interrupts(int_timer2);
      reltrans=coronaf/pinof;
      rpmcotxe=conta*reltrans;               // calculamos las rpm del motor a partir de las ruedas
     // velocitat=conta*(6.2832 *(diametre/2));              // calculamos la velocidad a partir del diametro de la ruda y las vueltas
     // velms=velocitat/1000;
     
      lcd_putc("\f"); // borra el display
      lcd_gotoxy(1,1);
      printf(lcd_putc,"V=14.3 Ve=%1.2f\n",reltrans);         
      printf(lcd_putc,"I=150 Rpm=%lu",rpmcotxe);

Salu2 y gracias

Desconectado QIQE

  • PIC18
  • ****
  • Mensajes: 335
Re: Problemas de refresco de lcd con float
« Respuesta #1 en: 28 de Mayo de 2007, 15:55:51 »
Trata de modificar tu programa de esta manera.

printf(lcd_putc,"V=14.3 Ve=%1.4f\n",reltrans);

Me parece, me parece!! digo que algunos compiladores la segunda cifra la entienden como el numero total de caracteres que va a imprimir el float esto quiere decir segun el 1.4:

vas a escribir
1-> unidades-> un espacio
. -> coma decimal -> un espacio
2 -> decimales -> dos espacios

en total 4

pruebalo y nos cuentas ;)
Muchas gracias por vuestro tiempo.

Saludos desde valencia!!!

Desconectado piriots

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 609
Re: Problemas de refresco de lcd con float
« Respuesta #2 en: 28 de Mayo de 2007, 18:51:56 »
Ahora mismo lo he probado y la cosa sigue igual y la verdad es que no tengo la menor idea del porque.

Salu2

Desconectado MGLSOFT

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 7918
Re: Problemas de refresco de lcd con float
« Respuesta #3 en: 28 de Mayo de 2007, 21:51:16 »
Que tipo de variables son reltrans y rpmcotxe ?
No veo las declaraciones... :mrgreen: :mrgreen:
Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18310
    • MicroPIC
Re: Problemas de refresco de lcd con float
« Respuesta #4 en: 29 de Mayo de 2007, 02:11:11 »
Piriots, ¿no será que con un sólo dígito entero el resultado no cabe y el PIC se hace la picha un lío?

Desconectado piriots

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 609
Re: Problemas de refresco de lcd con float
« Respuesta #5 en: 29 de Mayo de 2007, 06:49:46 »
No ves la declaracion  porque son  variables globales y las he puesto al principio del programa 
static float reltrans=0;
static long int rpmcotxe=0

Manolo normalmente el resultado estara entre 1 y 3 la parte entera, y con 2 decimales hay suficiente. El resultado es correcto cuando uso %f por ejemplo salia 2.70000000000 pues claro esta que no necesito todos estos ceros para nada, al intentar acortar el numero de posiciones decimales %1.2f no sale el resultado y es cuando empieza a parpadear la pantalla.

Salu2


Desconectado MGLSOFT

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 7918
Re: Problemas de refresco de lcd con float
« Respuesta #6 en: 29 de Mayo de 2007, 09:17:06 »
Si consigues que CCS pueda poner un valor float en una variable STATIC, por favor avisame, asi yo tambien lo hago!! :D :D :D :D
Una variable Static en C es una constante!! :mrgreen: :mrgreen: :mrgreen: :mrgreen:
Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.

Desconectado piriots

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 609
Re: Problemas de refresco de lcd con float
« Respuesta #7 en: 29 de Mayo de 2007, 09:33:13 »
Si consigues que CCS pueda poner un valor float en una variable STATIC, por favor avisame, asi yo tambien lo hago!! :D :D :D :D

Enga pues vamos a intentarlo! me lo tomare como un reto personal  :D :D :D

Continuemos con el asunto de la variable magica :-) , he intentado hacer lo mismo declarando la variable solo float y el resultado es el mismo, la LCD parpadea sin mostrar el resultado.

Marcos, tu post me ha creado una duda, porque si no puedo poner un valor float en una static, antes obtenia el resultado correcto usando %f y al usar %1.2f aparecen los problemas?

Salu2

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18310
    • MicroPIC
Re: Problemas de refresco de lcd con float
« Respuesta #8 en: 29 de Mayo de 2007, 11:19:04 »
Pues es raro lo que te pasa, pero en vista de lo habitual de los bugs de CCS, yo probaría compilando con otra versión.

Desconectado PalitroqueZ

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5490
    • Electrónica Didacta
Re: Problemas de refresco de lcd con float
« Respuesta #9 en: 29 de Mayo de 2007, 13:21:38 »
...
Una variable Static en C es una constante!! :mrgreen: :mrgreen: :mrgreen: :mrgreen:

que raro, yo tenía la idea que con static, se iniciaba la variable a cero al ejecutarse un programa. :5}
La propiedad privada es la mayor garantía de libertad.
Friedrich August von Hayek

Desconectado QIQE

  • PIC18
  • ****
  • Mensajes: 335
Re: Problemas de refresco de lcd con float
« Respuesta #10 en: 29 de Mayo de 2007, 13:58:13 »
segun F1 (AYUDA!!!!) en CCS

static
 Variable is globally active and initialized to 0.  Only accessible from this compilation unit.
 
Muchas gracias por vuestro tiempo.

Saludos desde valencia!!!

Desconectado MGLSOFT

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 7918
Re: Problemas de refresco de lcd con float
« Respuesta #11 en: 29 de Mayo de 2007, 17:18:12 »
Pido disculpas, aparentemente estoy equivocado respecto de Static. :shock: :shock: :shock:

Pero igualmemente ese tipo de variables puede ser utilizada dentro del programa, como hace Piriots?? :shock: :shock: :shock:
Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.

Desconectado piriots

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 609
Re: Problemas de refresco de lcd con float
« Respuesta #12 en: 29 de Mayo de 2007, 18:24:50 »

que raro, yo tenía la idea que con static, se iniciaba la variable a cero al ejecutarse un programa. :5}
Esta es la intencion que yo tenia al hacer la declaracion. Y segun tengo entendido, las variables globales hay que declararlas fuera de las funciones y del main, esto es lo que he hecho yo:

#include <16f877.h>
#use delay(clock=4000000)
#fuses XT, NOPROTECT, NOPUT, NOWDT, NOBROWNOUT, NOLVP, NOCPD
#org 0x1F00, 0x1FFF // bootloader
#include <lcd.c>
//#define use_portb_lcd
#byte port_a=5
#byte port_b=6
#byte port_c=7
static int long_roda=0;           
static int velocitat=0.00;       
static int velms=0.00;             
static long int rpmcotxe=0;       
static long conta=0;               
static long rpm=0;               
static float reltrans=0;           
static int cotxe=0;               
static int actualitza=0;           
static int pral=0;                 
static int sec=0;                 
         int diametre=10;         
         int pino=9;               
         int corona=27;             
static int tecla=0;               

Esta es la declaracion de variables que he hecho, el motivo de que sean static es que necesito utilizar el valor y modificarlo dentro de distintas funciones, por lo que tiene que ser una variable global.

¿Cual seria la forma correcta de hacerlo?

Salu2

Desconectado piriots

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 609
Re: Problemas de refresco de lcd con float
« Respuesta #13 en: 29 de Mayo de 2007, 19:05:32 »
Ya lo he solucionado!! al final no era ningun problema de variables! El caso es que para refrescar los valores del lcd utilizo la interrupcion del timer 2, y no se que es exactamente lo que pasaba pero cambiando la configuracion del timer se ha solucionado el problema.

Gracias por vuestros comentarios!

Salu2

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18310
    • MicroPIC
Re: Problemas de refresco de lcd con float
« Respuesta #14 en: 30 de Mayo de 2007, 01:33:49 »
Me alegro que lo tengas, ¡pero qué raro!