Autor Tema: envio a LCD  (Leído 1973 veces)

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

Desconectado Vayadespiste

  • PIC12
  • **
  • Mensajes: 53
envio a LCD
« en: 11 de Noviembre de 2007, 17:17:25 »
Saludos al foro, estoy iniciándome en el C (mc18) y me he encontrado este problema:

char minbuf[2];                           
char maxbuf[2];

T_Minima=20;
T_Maxima=26;
.......

      btoa (T_Minima,minbuf);      /* Conversión de Hex a un array de ASCII */
      btoa (T_Maxima,maxbuf);      
      WriteCmdXLCD(LINEA_2);
      putsXLCD(minbuf);      /* Envió del valor de la Temperatura */   
                                .........
Cuando se envía la rutina de escritura de los 2 valores en minbuf (20 en este caso), la secuencia de envió de la cadena envía seguidos los 2 caracteres de maxbuf, es decir al LCD manda 2026 cuando el envió es solo "minbuf". De momento lo he solucionado enviando un carácter por vez, es decir putcXLCD(minbuf[0]) y despues el otro carácter, la pregunta:
"¿ que estoy haciendo mal para que me envié las 2 cadenas?.

Gracias y un saludo.



Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
Re: envio a LCD
« Respuesta #1 en: 12 de Noviembre de 2007, 15:57:42 »
A tu cadena le falta un caracter de fin de cadena.  Por ello y al estar ambas cadenas minbuf y maxbuf contiguas en memoria de seguro la función toma todo hasta que encuentra un #0 en la memoria y deja de enviar.

Debes agregarle a tu string un null de fin de string .
- La soberbia de un Einstein es entendible.. la de un salame es intolerable (A.Dolina)
- En teoría no hay diferencia entre la teoría y la práctica. En la práctica... si la hay.
- Lee, Lee, Lee y luego pregunta.(maunix)
- Las que conducen y arrastran al mundo no son las máquinas, sino las ideas (V. Hugo)
- Todos los hombres se parecen por sus palabras; solamente las obras evidencian que no son iguales.(Moliere)
- Todo debería ser hecho tan simple como sea posible pero no mas simple que eso.(A.Einstein)

Desconectado Vayadespiste

  • PIC12
  • **
  • Mensajes: 53
Re: envio a LCD
« Respuesta #2 en: 13 de Noviembre de 2007, 03:23:58 »
Gracias por tu tiempo Maunix, como me suele pasar una respuesta suele llevar a otra pregunta ya he encontrado el carácter normal a usar como fin de strin que si no  he leído mal es \0 y me ha quedado la duda como hacerlo, al mismo tiempo en el mismo pdf he visto que como ejemplo se declaraba un bufer sin número que lo limite es decir, en lugar de minbufer[2] he visto que se declaraba minbufer[] y parece que esto añade el carácter de fin automáticamente, creo que queda claro que estoy empezando con "C". Pero bueno, lo dicho al principio gracias por tu tiempo y ahora por lo menos se donde mirar.

Gracias y un saludo.


Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
Re: envio a LCD
« Respuesta #3 en: 13 de Noviembre de 2007, 11:59:00 »
Pero minbufer[] asi nomas? Hablas del C18 o de un C genérico?

Fijate si no tiene además un "const" antes y al lado un "=" de definicion.  POr ej.


const char mystr[] = "my string";


o bien


char mystr[] = "my string";
- La soberbia de un Einstein es entendible.. la de un salame es intolerable (A.Dolina)
- En teoría no hay diferencia entre la teoría y la práctica. En la práctica... si la hay.
- Lee, Lee, Lee y luego pregunta.(maunix)
- Las que conducen y arrastran al mundo no son las máquinas, sino las ideas (V. Hugo)
- Todos los hombres se parecen por sus palabras; solamente las obras evidencian que no son iguales.(Moliere)
- Todo debería ser hecho tan simple como sea posible pero no mas simple que eso.(A.Einstein)

Desconectado Vayadespiste

  • PIC12
  • **
  • Mensajes: 53
Re: envio a LCD
« Respuesta #4 en: 13 de Noviembre de 2007, 15:01:27 »
Si es tal y como dices, lleva = y el valor a continuación.

Gracias y un saludo.

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
Re: envio a LCD
« Respuesta #5 en: 14 de Noviembre de 2007, 09:36:19 »
Si es tal y como dices, lleva = y el valor a continuación.

Gracias y un saludo.

Bueno, el = es porque en realidad estas definiendo una constante o dicho de otra forma es un string con un largo perfectamente conocido -> el largo de lo que le sigue .  Y luego el C le agrega el NULL

SI haces

char mystr[] = "hola"

El compilador habrá creado un string de 5 chars, 4 para hola y uno extra para el NULL.

- La soberbia de un Einstein es entendible.. la de un salame es intolerable (A.Dolina)
- En teoría no hay diferencia entre la teoría y la práctica. En la práctica... si la hay.
- Lee, Lee, Lee y luego pregunta.(maunix)
- Las que conducen y arrastran al mundo no son las máquinas, sino las ideas (V. Hugo)
- Todos los hombres se parecen por sus palabras; solamente las obras evidencian que no son iguales.(Moliere)
- Todo debería ser hecho tan simple como sea posible pero no mas simple que eso.(A.Einstein)

Desconectado Vayadespiste

  • PIC12
  • **
  • Mensajes: 53
Re: envio a LCD
« Respuesta #6 en: 15 de Noviembre de 2007, 13:20:39 »
Gracias a tu ayuda Maunix ya me funciona como quería, ahora las cadenas que tengo declaradas si que terminan, siguiendo tus instrucciones las he declarado he inicializado al mismo tiempo y funcionan perfectamente:

char minbuf[]= "00";
char maxbuf[]="00";

Ahora al inicializarlas con esos valores aunque sea de 0 me coloca el compilador el " . " y corta la cadena en su punto, luego al asignarle los valores mediante el "btoa......" los coloca perfectamente en su sitio.

Un saludo.