Problema putrsXLCD(); no escribe nada!

#1
Hola que tal a todos, de antemano les agradezco el tiempo que se toman por leer mi pregunta. Lo que pasa es que quiero aprender a programar un LCD utilizando C18 con la librería XLCD.h que ya viene con el compilador. El problema que tengo es que puedo hacer que la función:

putcXLCD(´a´);

me imprima este carácter, osea funcione de maravilla, mas sin embargo cuando trato de usar la función:

putrsXLCD("texto");

no imprime nada, no hace nada pues y la verdad no se por que, si en todos lados he visto que así es como se debe de usar esa función. He tratado también de usar la instrucción

putsXLCD(variable) y tampoco funciona.

A continuación les pongo el código, yo no creo que sea algo de hardware,por que entonces: Por que si funciona utilizando la instrucción putcXLCD('a')?

Les dejo el código para ver que opinan:

Código:
#include<p18f2550.h>
#include<delays.h>
#include<xlcd.h>

#pragma config FOSC = XT_XT, FCMEN= OFF, IESO= OFF, CPUDIV= OSC1_PLL2
#pragma config PWRT= ON, BOR= OFF, BORV=0
#pragma config WDT= OFF, WDTPS = 32768
#pragma config MCLRE= ON, LPT1OSC=OFF, PBADEN= OFF, CCP2MX=OFF
#pragma config STVREN= OFF, LVP= OFF, XINST=OFF, DEBUG= OFF
#pragma config CP0= ON, CP1= ON, CP2= ON
#pragma config CPB=ON, CPD= ON
#pragma config WRT0= ON, WRT1 = ON, WRT2=ON
#pragma config WRTB = ON, WRTC= ON, WRTD=ON
#pragma config EBTR0= ON, EBTR1 = ON, EBTR2=ON
#pragma config EBTRB=ON

void DelayFor18TCY(void)
{
	Delay10TCYx(2);
}

void DelayPORXLCD(void)
{
	Delay1KTCYx(15);
}

void DelayXLCD(void)
{
	Delay1KTCYx(2);
}

//ENVIA COMANDO AL LCD

void comandXLCD(unsigned char a)
{
	BusyXLCD();
	WriteCmdXLCD(a);
}


void main()
{
	OpenXLCD(FOUR_BIT & LINES_5X7);
	comandXLCD(0x06);
	comandXLCD(0x0c);
	putcXLCD('a');
    putrsXLCD("HOla Mundo");
	
	while(1)
    {
		
    }

}
GRACIAS. Si encuentro la respuesta antes, yo se las hare saber :D
 
Última edición por un moderador:
#2
Hola, puedes hacer la prueba de intercambiar las instrucciones, osea poner primero putrsXLCD("HOla Mundo"), y ver que pasa.
 
#3
Hola que tal, muchas gracias por responderme ricber :D , ya cambie la ubicación de la instrucción y por desgracia pasa lo mismo :S estoy usando el proteus 7.4 SP3, con un microcontrolador PIC18f2550, ya intente tambien con un PIC18f4550 y pasa exactamente lo mismo. He buscado en varios foros pero en todos lados dice que asi es como debe de funcionar la instruccion y que no hay ningun problema. De verdad que no entiendo por que pasa esto :S. Te dejo el codigo de la simulacion cambiando el orden de las instrucciones.


Código:
#include<p18f2550.h>
#include<delays.h>
#include<xlcd.h>

#pragma config FOSC = XT_XT, FCMEN= OFF, IESO= OFF, CPUDIV= OSC1_PLL2
#pragma config PWRT= ON, BOR= OFF, BORV=0
#pragma config WDT= OFF, WDTPS = 32768
#pragma config MCLRE= ON, LPT1OSC=OFF, PBADEN= OFF, CCP2MX=OFF
#pragma config STVREN= OFF, LVP= OFF, XINST=OFF, DEBUG= OFF
#pragma config CP0= ON, CP1= ON, CP2= ON
#pragma config CPB=ON, CPD= ON
#pragma config WRT0= ON, WRT1 = ON, WRT2=ON
#pragma config WRTB = ON, WRTC= ON, WRTD=ON
#pragma config EBTR0= ON, EBTR1 = ON, EBTR2=ON
#pragma config EBTRB=ON

void DelayFor18TCY(void)
{
	Delay10TCYx(2);
}

void DelayPORXLCD(void)
{
	Delay1KTCYx(15);
}

void DelayXLCD(void)
{
	Delay1KTCYx(2);
}

//ENVIA COMANDO AL LCD

void comandXLCD(unsigned char a)
{
	BusyXLCD();
	WriteCmdXLCD(a);
}


void main()
{
	OpenXLCD(FOUR_BIT & LINES_5X7);
	comandXLCD(0x06);
	comandXLCD(0x0c);
	putrsXLCD("HOla Mundo");
	putcXLCD('b');
    putrsXLCD("HOla Mundo");
    putcXLCD('a');
	
	while(1)
    {
		
    }

}
MUCHAS MUUCHAS GRACIAS :D

PD. En el display me aparecen asi las letras: "ba" gracias
 
Última edición por un moderador:
#5
Solucionado

Ya encontre la solucion al problema. Lo que pasa hice fue crear una nueva libreria, ya que la libreria xlcd.h no contiene los metodos que utilizo, por ejemplo, la libreria xlcd.h tiene una funcion:

void putsXLCD(char *buffer);

pero no viene la programación de esa función, osea, que no hace nada, por eso, cuando mandaba llamar esa función desde mi programa principal no hacia nada ni me marcaba error al utilizar esa instrucción, todo esto debido a que no tenia nada programado esa función.
Como lo solucione fue creando una libreria nueva, con el nombre <lcd.h>, esta libreria contiene la programacion de cada uno de los metodos. Les adjunto la libreria, las instrucciones son las mismas solo que ahora esta libreria incluye todo la programacion de cada uno de los metodos. Funciona todo muy bien. La libreria se tiene que agregar a la carpeta de MCC18/h . ( no se olviden cambiar la extension del archio a lcd.h ya que ahorita esta como archivo de texto).
De lo que me di cuenta, es que, todas las funciones de la libreria (putsXLCD(), putrsXLCD(), etc) vienen en la carpeta de MCC18-src-pmc common- XLCD ahi vienen todas las funciones descritas pero por separado, debe de haber una manera de poder adjuntar esa carpeta al proyecto.


Le agradesco a freshdesing y a ribec :) ojala y les sea util :)
 

Adjuntos

Última edición:
#7
de lujo amigo, ahora si podrán decir que Ablanco les echó la mano :D



de lujo amigo, ahora si podrán decir que Ablanco les echó la mano :D
hola amigos, estoy usando el mplab x, y puse el archivo en c/archivos de programa/microchip/mplabc18/v3.47/h
cuando tecleo #include me aparece el archivo para seleccionarlo, sin embargo, cuando termino de escribir me sale el warning de que no se puede encontrar el archivo.
Saben si se tiene que poner en otro directorio?
 
Última edición:
#8
¿Tienes bien establecidas las locaciones de los compiladores?

Eso lo puedes ver en la pestaña Build Tools del menú Options: Build Tools.jpg

También puedes agregar el archivo ¿?.H desde el árbol de archivos del proyecto: Header Files.jpg

¿Ya probaste colocando el archivo en la carpeta donde está el archivo principal de tu proyecto?
Pero en vez de incluirlo de esta forma: #include <mi_lib.h> debes incluirlo así: #include "mi_lib.h"
 

Temas similares

Arriba