Autor Tema: float con LCD hi-tech  (Leído 2770 veces)

0 Usuarios y 3 Visitantes están viendo este tema.

Desconectado halowin

  • PIC16
  • ***
  • Mensajes: 151
float con LCD hi-tech
« en: 05 de Agosto de 2012, 11:03:53 »
Hola.
Estoy intentando pintar por un LCD un float resultado de hacer una multiplicacion.
Para ello estoy usando "sprintf" pero MPLAB me da error:
Código: [Seleccionar]
lcd1.c; 33.13 illegal conversion between types
double -> pointer to const unsigned char

la parte del programa es esta:
Código: [Seleccionar]
vel = vueltas * 3.60;
sprintf(strvel,"%f",vel);
lcd_puts(vel);

y otras veces me tira esto (segun cambios y pruebas que hago)

Código: [Seleccionar]
86. no space for auto/param

El micro es un PIC16f84, ¿anda un poco rácano este bicho de memoria para esto o que puedo estar haciendo mal?.
Estoy usando como libreria la "lcd.c" que viene en los ejemplos de instalacion, pero no me acaba de gustar porque las letras las pintas como borrosas (como si tuviera poca tinta para entendernos) y no es la LCD porque le cargo otros ejemplos que tengo hechos en asm y se ve perfectamente.

Gracias


Desconectado halowin

  • PIC16
  • ***
  • Mensajes: 151
Re: float con LCD hi-tech
« Respuesta #1 en: 05 de Agosto de 2012, 11:59:56 »
Bueno, he visto esto por ahi investigando un poco. En un foro alguien preguntaba por el problema de este error:

Código: [Seleccionar]
I am trying to compile the code in AN1271 for PIC16HV785, and with the Hi-Tech Pro v9.70, it compiles fine.

But in Lite mode, I am getting this error:
Error [1358] C:\...\PIC16HV785\AN1271.c; 82. no space for _isr temps (5)

What does this mean, and is there a workaround to make it work with the Lite version?

y él mismo debió descubrirlo:

Código: [Seleccionar]
Solved.
Lite version literally runs out of ROM space because code generation is less optimized.
Fixed it by eliminating floating point maths usage.

¿Esto significa que con esta version del compilador me tengo que olvidar de los floats? Pues si es así, se acabó para mi este compilador.





Desconectado AngelGris

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2480
Re: float con LCD hi-tech
« Respuesta #2 en: 05 de Agosto de 2012, 15:07:05 »
  Yo había hecho un encoder RC en el cual usaba variables float para establecer el tiempo de cada servo. Era sobre un F876 y no tuve ningún problema.

  Ahora estoy haciendo unas pruebas sobre un 18F2550 y me da un error relacionado con el espacio en un sector de programa. Justamente se genera el error si uso una variable float. Aunque si elimino mis rutinas de interrupción ya no se genera el error.

  Voy a trasladar el programa a un 16F876 para ver que pasa... cuando termine te comento.
De vez en cuando la vida
nos besa en la boca
y a colores se despliega
como un atlas

Desconectado halowin

  • PIC16
  • ***
  • Mensajes: 151
Re: float con LCD hi-tech
« Respuesta #3 en: 07 de Agosto de 2012, 13:45:15 »
Una valoracion:

He hecho la prueba de una multiplicacion de un entero con un float para obtener un float para pintarlo por la LCD y esto es el resultado con dos compiladores:

1.- Con PIC16F84
============

El Hi-Tech ni se digna a hacer la multiplicacion porque no tiene espacio en memoria.
El Mikro-C me hace la multiplicacion, pero no funciona la funcion FloatToStr por problemas de memoria, pero al menos me hace la multiplicacion, luego si puedo aplicar la funcion IntToStr sobre el float resiltante, con lo que solo cometo un error de decimales, que para mi invento no tiene importancia ya que está midiendo una velocidad y me da igual que me diga que voy a 111,60 Km/h que a 111 Km/h


2.- Con PIC16F818
=============

Lo mismo, el Hi-Tech se niega a hacerme la multiplicación.
El Mikro-C si la hace pero no hace la conversion de FloatToStr pero si la de IntToStr.


Conclusion:

En igualdad de micros y rácanos ambos de memoria, el Mikro-C es mejor que el Hi-Tech, por lo que ya tiene un voto mas para quedarame con él.

Saludos.




Desconectado AngelGris

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2480
Re: float con LCD hi-tech
« Respuesta #4 en: 07 de Agosto de 2012, 22:08:05 »

Conclusion:

En igualdad de micros y rácanos ambos de memoria, el Mikro-C es mejor que el Hi-Tech, por lo que ya tiene un voto mas para quedarame con él.

Saludos.

  Son muy interesantes las pruebas que hiciste. Ahora... ¿Mikro-C, lo tienes con medicina o su versión de prueba? ¿HiTech, es lite o todavía estás dentro de los 30 días de prueba de la versión Por?

  Creo que la única forma de hacer una comparación justa sería poder utilizar ambos compiladores en igualdad de condiciones.
De vez en cuando la vida
nos besa en la boca
y a colores se despliega
como un atlas

Desconectado halowin

  • PIC16
  • ***
  • Mensajes: 151
Re: float con LCD hi-tech
« Respuesta #5 en: 08 de Agosto de 2012, 06:37:46 »
Una valoracion:

He hecho la prueba de una multiplicacion de un entero con un float para obtener un float para pintarlo por la LCD y esto es el resultado con dos compiladores:

1.- Con PIC16F84
============

El Hi-Tech ni se digna a hacer la multiplicacion porque no tiene espacio en memoria.
El Mikro-C me hace la multiplicacion, pero no funciona la funcion FloatToStr por problemas de memoria, pero al menos me hace la multiplicacion, luego si puedo aplicar la funcion IntToStr sobre el float resiltante, con lo que solo cometo un error de decimales, que para mi invento no tiene importancia ya que está midiendo una velocidad y me da igual que me diga que voy a 111,60 Km/h que a 111 Km/h


2.- Con PIC16F818
=============

Lo mismo, el Hi-Tech se niega a hacerme la multiplicación.
El Mikro-C si la hace pero no hace la conversion de FloatToStr pero si la de IntToStr.


Conclusion:

En igualdad de micros y rácanos ambos de memoria, el Mikro-C es mejor que el Hi-Tech, por lo que ya tiene un voto mas para quedarame con él.

Saludos.




Añado la prueba con:

3.- PIC16F877A
==========

Hi-Tech sin problemas ya, funciona "sprintf()" sin problemas.
Mikro-C sin problemas tampoco, funciona "FloatToStr()" sin problemas.


Las versiones utilizadas:

1.- HiTech:
Hi-Tech C compiler for PIC10/12/16 MCUs (Lite Mode) V.9.83

2.- Mikro-C:
MikroC Pro V.5.6.1 (NOT REGISTERED)

(Esto del NOT REGISTERED me imagino que es a lo que te refieres con que si tiene "medicina" o no.


Pues la cosa es muy sencilla. El programa que estoy haciendo tan solo necesita tener programada una interrupción externa que mete pulsos por RB0/INT y que lleva asociada una interrupción que lo que hace es incrementar una variable tipo "int" o "char".
Por otro lado hay programado un TMR0 para que se desvode cada segundo exacto, y una interrupción asociadad que lo que hace es leer la otra variable, multiplicarla por un factor (3.6) y volver a dejar a 0 dicha variable.

Como veis para eso no necesito mas micro que un simple PIC16F84 pero me encontré con este problemón de los float y obviamente no voy a meter un pepino com el 16F877 para salvar ese obstáculo porque me sobra el 99.9% del micro.

Entonces optaré por la opcion del Mikro-C porque al menos me hace esa multiplicación real aunque la funcion IntToStr() me trinque los decimales.

Es que no es lo mismo hacer por ejemplo IntToStr(31*3.6) que 31*3, en el primer caso se me queda la cuenta en 111 y en el segundo caso en 93, lo que conlleva un error muy grande.

Pues eso es todo.

Gracias y un saludo.








« Última modificación: 08 de Agosto de 2012, 06:51:10 por halowin »

Desconectado AngelGris

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2480
Re: float con LCD hi-tech
« Respuesta #6 en: 08 de Agosto de 2012, 08:59:51 »
  Muy interesante lo tuyo.

  Efectivamente me refería a saber si estaba registrado o no el MikroC.

  Tal vez un PIC que te pueda ir es el 16F648, tiene 18 pines como el F84 pero 4K de memoria en lugar de 1K como el F84. Además el F648 cuenta con otros timers también.
De vez en cuando la vida
nos besa en la boca
y a colores se despliega
como un atlas

Desconectado halowin

  • PIC16
  • ***
  • Mensajes: 151
Re: float con LCD hi-tech
« Respuesta #7 en: 08 de Agosto de 2012, 12:38:05 »
  Muy interesante lo tuyo.

  Efectivamente me refería a saber si estaba registrado o no el MikroC.

  Tal vez un PIC que te pueda ir es el 16F648, tiene 18 pines como el F84 pero 4K de memoria en lugar de 1K como el F84. Además el F648 cuenta con otros timers también.

Realmente tengo la duda de si el problema de memoria está en la memoria de programa o en la RAM, yo me inclino mas bien por la RAM, los 68 bytes del F84 y los 128 bytes del F818 frente a los 368 del F877A (no lo se ???? )

Desconectado AngelGris

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2480
Re: float con LCD hi-tech
« Respuesta #8 en: 08 de Agosto de 2012, 12:42:21 »
  Con el 648 tenes 256Bytes de RAM
De vez en cuando la vida
nos besa en la boca
y a colores se despliega
como un atlas


 

anything