Autor Tema: Problemas al imprimir LCD 16x2  (Leído 5372 veces)

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

Desconectado josefe

  • PIC12
  • **
  • Mensajes: 68
    • mi blog http://freespacejd.blogspot.com
Problemas al imprimir LCD 16x2
« en: 26 de Noviembre de 2012, 01:03:08 »
Buenas tengo unas 5 horas tratando de resolver un problema ya casi esta listo pero tengo problemitas al imprimir.

El problema esta en que por ejemplo imprimo  (2,1,text) y luego (2,4,text2) pero el segundo texto no imprime en el cuarto caracter si no en el 8 o mas lejos del 4.

Algo asi hago

Código: [Seleccionar]
char *prueba="mundo",*tex1,*tex2;


Lcd_Out(1, 1, "Hola");
Lcd_Out(1, 6, prueba);

Lcd_Out(2, 1, text1);
Lcd_Out(2, 4, tex2);


Esto imprime asi
==========
|Hola mundo   |
|hi         word |
==========


Como ven hay demasada separación entre text1 y 2 y no se porque.

Tambien probe con  Lcd_Out_Cp(text2) pero igual qda




Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18286
    • MicroPIC
Re: Problemas al imprimir LCD 16x2
« Respuesta #1 en: 26 de Noviembre de 2012, 02:55:21 »
¿Qué valores tienen las variables tex1 y tex2?

Desconectado josefe

  • PIC12
  • **
  • Mensajes: 68
    • mi blog http://freespacejd.blogspot.com
Re: Problemas al imprimir LCD 16x2
« Respuesta #2 en: 26 de Noviembre de 2012, 09:02:11 »
¿Qué valores tienen las variables tex1 y tex2?

hi y world, es solo un ejemplo

Desconectado josefe

  • PIC12
  • **
  • Mensajes: 68
    • mi blog http://freespacejd.blogspot.com
Re: Problemas al imprimir LCD 16x2
« Respuesta #3 en: 26 de Noviembre de 2012, 09:20:13 »
Ya estoy viendo el error pero igual no se que hacer, el valor lo extraigo de la eeprom, por ejemplo yo tenia 0(cero) en xdireccion, lo extraigo le sumo 1 y lo muestro en pantalla, este se muestra correctamente pero lo mustra como con espacios, como si antes del valor hubieran espacios en blanco que ocupan casillas del lcd

guardo en la eeprom el valor 1

estraigo le sumo 1 y muestro en pantalla

=============
|Suma:              2  | LCD16x2..linea 2
=============

Por que los espacios en blanco? entre 3 y 5.

Sera porq lo saca como HEX?

Desconectado fuente

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 571
Re: Problemas al imprimir LCD 16x2
« Respuesta #4 en: 26 de Noviembre de 2012, 09:30:04 »
No se como funcionará la funcion LCD_OUT por dentro, pero puede ser la falta de un terminador.
Las funciones de tratamiento de cadena suelen recorrer la misma hasta que encuentran un valor nulo (0, o /n).
Cuando termines de formar la cadena, que el último valor sea 0 (o un caracter de escape /n si la estas construyendo con un sprintf)

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18286
    • MicroPIC
Re: Problemas al imprimir LCD 16x2
« Respuesta #5 en: 26 de Noviembre de 2012, 12:32:14 »
Enséñanos cómo cargas las variables tex1 y tex2, seguro que te falta el 0 al final

Desconectado josefe

  • PIC12
  • **
  • Mensajes: 68
    • mi blog http://freespacejd.blogspot.com
Re: Problemas al imprimir LCD 16x2
« Respuesta #6 en: 26 de Noviembre de 2012, 12:53:17 »
Enséñanos cómo cargas las variables tex1 y tex2, seguro que te falta el 0 al final

int valor;
char prueba; //tambien probe *prueba *prueba[2], este ultimo arroja caracteres raros
Código: [Seleccionar]
int valor;
char prueba;

valor=EEPROM_Read(0x30);

IntToStr(valor,prueba);

Lcd_Out(2, 1, text1);
Lcd_Out(2, 4, prueba);//este da el problema, probe colocando un texto y aparece justo en la cuarta linea del LCD



El valor se muestra pero muy alejado

Desconectado fuente

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 571
Re: Problemas al imprimir LCD 16x2
« Respuesta #7 en: 26 de Noviembre de 2012, 13:24:40 »
¿Qué versión de C es?

Prueba con esto. Declara prueba con una longitud determinada:

Código: [Seleccionar]
char prueba[4];
Si la función IntToStr no te pone el terminador, cosa que dudo, pónselo tu:

Código: [Seleccionar]
prueba[3]=0;
eso suponiendo que únicamente vas a tener 3 dígitos.

Desconectado josefe

  • PIC12
  • **
  • Mensajes: 68
    • mi blog http://freespacejd.blogspot.com
Re: Problemas al imprimir LCD 16x2
« Respuesta #8 en: 26 de Noviembre de 2012, 18:04:19 »
¿Qué versión de C es?

Prueba con esto. Declara prueba con una longitud determinada:

Código: [Seleccionar]
char prueba[4];
Si la función IntToStr no te pone el terminador, cosa que dudo, pónselo tu:

Código: [Seleccionar]
prueba[3]=0;
eso suponiendo que únicamente vas a tener 3 dígitos.

Lo he hecho como has dicho pero nada.




Como vez alli el primer cuadro es colocando un texto directo.

El segundo colocandolo como explique en otro comentario y qda alejado mas si suma que es lo importante.

El tercer cuadro es colocandolo como dijiste pero sin igualarlo a 0, este me muestra caracteres raros ademas del simbolo de grados que parece que lo copiara de la linea de arriba, cuado lo hice como dijiste no mostraba nada, o sea como el primer cuadro pero sin letras.


Y en el segundo cuadro para poder que se vean los numeros tuve que eliminat la impresion del max ya que lo tapaba.


Estoy usando Mikroc 2012
« Última modificación: 26 de Noviembre de 2012, 18:06:49 por josefe »

Desconectado fuente

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 571
Re: Problemas al imprimir LCD 16x2
« Respuesta #9 en: 27 de Noviembre de 2012, 04:57:21 »
Esa versión de C no la he utilizado nunca, no se como se comporta.
Busca en la ayuda de mikroC esa función para ver como se comporta y que requerimientos tiene.
Por lo que se ve en las imágenes que has puesto, parece que devuelve una longitud de cadena fija y bastante grande, por lo que borra todo el texto que tenga por debajo.

Desconectado josefe

  • PIC12
  • **
  • Mensajes: 68
    • mi blog http://freespacejd.blogspot.com
Re: Problemas al imprimir LCD 16x2
« Respuesta #10 en: 27 de Noviembre de 2012, 17:01:44 »
Esa versión de C no la he utilizado nunca, no se como se comporta.
Busca en la ayuda de mikroC esa función para ver como se comporta y que requerimientos tiene.
Por lo que se ve en las imágenes que has puesto, parece que devuelve una longitud de cadena fija y bastante grande, por lo que borra todo el texto que tenga por debajo.


Y cual es la version que todos usan o por lo menos la mayoria ya que siempre pregunto por mikroc y todos dicen que no lo usan cuando a mi me ha parecido un programa sencillo y facil de utilizar.

Desconectado fuente

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 571
Re: Problemas al imprimir LCD 16x2
« Respuesta #11 en: 27 de Noviembre de 2012, 18:23:16 »
Facil de utilizar si, pero muy poco control sobre el micro.
Yo utilizo el C18,  y es mas parecido al ansi c. También he usado el sdcc, y no va nada mal.
¿qué te decia el manual de la función inttostr?

Desconectado josefe

  • PIC12
  • **
  • Mensajes: 68
    • mi blog http://freespacejd.blogspot.com
Re: Problemas al imprimir LCD 16x2
« Respuesta #12 en: 29 de Noviembre de 2012, 16:10:27 »
Facil de utilizar si, pero muy poco control sobre el micro.
Yo utilizo el C18,  y es mas parecido al ansi c. También he usado el sdcc, y no va nada mal.
¿qué te decia el manual de la función inttostr?

Prototype: void IntToStr(int input, char *output);
 
Returns: Nothing.
 
Description: Converts input signed integer number to a string. The output string has fixed width of 7 characters including null character at the end (string termination). The output string is right justified and the remaining positions on the left (if any) are filled with blanks.

Parameters :

input: signed integer number to be converted
output: destination string

 
Requires Destination string should be at least 7 characters in length.
 
Example int j = -4220;
char txt[7];
...
IntToStr(j, txt);  // txt is " -4220" (one blank here)

Desconectado fuente

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 571
Re: Problemas al imprimir LCD 16x2
« Respuesta #13 en: 29 de Noviembre de 2012, 18:18:53 »
Pues ahí te lo está diciendo todo.
La salida es una cadena de longitud fija de 7 caracteres, justificada a la derecha y relleno de caracteres en blanco, por eso te sobreescribe el MAX.
Mira a ver si tienes alguna otra función que haga lo que quieres.
« Última modificación: 30 de Noviembre de 2012, 06:25:56 por fuente »

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18286
    • MicroPIC
Re: Problemas al imprimir LCD 16x2
« Respuesta #14 en: 30 de Noviembre de 2012, 00:59:25 »
Fuente tiene razón, lo explica la ayuda de tu función.

Prueba haciendo esto:
Lcd_Out(2, 4, prueba[3]);

Así imprimirás a partir del 4º carácter del string.