Autor Tema: Problema libreria XLCD con C18, no me funciona  (Leído 3360 veces)

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

Desconectado Thulsa Doom

  • PIC24F
  • *****
  • Mensajes: 771
    • https://electronicadicto.wordpress.com/
Problema libreria XLCD con C18, no me funciona
« en: 10 de Febrero de 2013, 18:06:11 »
Hola a todos, pues llevo varios días intentando que funcione un display lcd 2x16 y no hay manera.
Estoy utilizando C18 v3.41 y el MPLAB 8.88
Hago la práctica que está en el tutorial c18 que ha realizado Suky e incluso el ejemplo que está en la propia guía que tiene MPLAB y con ninguno de ellos funciona.
He probado en hacer correr el código en el proteus y en hardware y no funciona.
Esos mismos montajes los pruebo con un código realizado en CCS C y va perfecto
He probado compilar el código en dos pc diferentes y sigo con el mismo resultado.
He probado con dos cristales diferentes uno de 4MHz y otro de 20MHz y nada
El código es este:

Código: [Seleccionar]
#include <p18f4620.h>

#include "Drivers/delays.h"

#include "Drivers/xlcd.h"

#pragma config OSC=HS,FCMEN=OFF,IESO=OFF
#pragma config PWRT=ON,BOREN=OFF,BORV=0
#pragma config WDT=OFF,WDTPS=32768
#pragma config MCLRE=ON,LPT1OSC=OFF,CCP2MX=PORTC,PBADEN=OFF
#pragma config STVREN=OFF,LVP=OFF,XINST=OFF,DEBUG=OFF
#pragma config CP0=OFF,CP1=OFF,CP2=OFF,CP3=OFF
#pragma config CPB=OFF,CPD=OFF
#pragma config WRT0=OFF,WRT1=OFF,WRT2=OFF
#pragma config WRTB=OFF,WRTC=OFF,WRTD=OFF
#pragma config EBTR0=OFF,EBTR1=OFF,EBTR2=OFF
#pragma config EBTRB=OFF



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

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

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

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

void gotoxyXLCD(unsigned char x, unsigned char y){
unsigned char direccion;

if(y != 1)
direccion = 0x40;
else
direccion = 0;

direccion += x-1;
comandXLCD(0x80 | direccion);
}




void main(void){
 
OpenXLCD( FOUR_BIT & LINES_5X7 );
comandXLCD(0x06);
comandXLCD(0x0C);
putrsXLCD("Probando LCD");
gotoxyXLCD(1,2);
putrsXLCD("Por Thulsa_Doom");

while(1){

}

}

Cuelgo el proyecto por si lo quieren compilar y probarlo


A ver si alguien me puede echar una mano ya no sé por donde seguir
« Última modificación: 10 de Febrero de 2013, 18:08:18 por Thulsa Doom »
Más códigos y desarrollos en https://electronicadicto.wordpress.com/ date una vuelta y curiosea un rato...

Desconectado todopic

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3495
    • http://www.todopicelectronica.com.ar
Re: Problema libreria XLCD con C18, no me funciona
« Respuesta #1 en: 10 de Febrero de 2013, 22:35:59 »
Hola, creo que la falla, es que no colocas la definicion de frecuencia del cristal... esto tiene que ir, antes de las definiciones de delays y del LCD.. es decir, a continuacion que defines el tipo de micro...

Saludos!

Norberto
Firmat - Santa Fe - Argentina

www.TodoPic.net

Solo se tiran piedras, al arbol que tiene frutos...

Desconectado Thulsa Doom

  • PIC24F
  • *****
  • Mensajes: 771
    • https://electronicadicto.wordpress.com/
Re: Problema libreria XLCD con C18, no me funciona
« Respuesta #2 en: 11 de Febrero de 2013, 10:58:54 »
Pues no se si será eso pero así como está funciona un led que parpadea pero el LCD no.

Haciendo pruebas y modificando el código para que parpadee un led he descubierto que el programa se bloquea o se queda retenido en la instrucción de inicialización del display.

compilo el programa y lo cargo al montaje en hardware que he hecho con un ICD2 y al correrlo en modo debugger he observado que el programa se retiene al llegar a
Código: [Seleccionar]
OpenXLCD(FOUR_BIT & LINES_5X7);y de la única manera que sale es si le doy a pausa y run de nuevo, en se momento ya empieza a parpadear el led pero no sale nada en pantalla


el código modificado es este
Código: [Seleccionar]
#include <p18f4620.h>

#include "Drivers/delays.h"

#define UPPER
#include "Drivers/xlcd.h"

#pragma config OSC=HS,FCMEN=OFF,IESO=OFF
#pragma config PWRT=ON,BOREN=OFF,BORV=0
#pragma config WDT=OFF,WDTPS=32768
#pragma config MCLRE=ON,LPT1OSC=OFF,CCP2MX=PORTC,PBADEN=ON
#pragma config STVREN=OFF,LVP=OFF,XINST=OFF,DEBUG=OFF
#pragma config CP0=OFF,CP1=OFF,CP2=OFF,CP3=OFF
#pragma config CPB=OFF,CPD=OFF
#pragma config WRT0=OFF,WRT1=OFF,WRT2=OFF
#pragma config WRTB=OFF,WRTC=OFF,WRTD=OFF
#pragma config EBTR0=OFF,EBTR1=OFF,EBTR2=OFF
#pragma config EBTRB=OFF


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

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

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

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

void gotoxyXLCD(unsigned char x, unsigned char y){
unsigned char direccion;

if(y != 1)
direccion = 0x40;
else
direccion = 0;

direccion += x-1;
comandXLCD(0x80 | direccion);
}




void main(void){

     char i = 0;

ADCON1 = 0x0F;
TRISA = 0x00;
LATA = 0x00;

 
OpenXLCD(FOUR_BIT & LINES_5X7);
comandXLCD(0x06);
comandXLCD(0x0C);
putrsXLCD("Probando LCD");
gotoxyXLCD(1,2);
putrsXLCD("Por Thulsa_Doom");

while(1){
   
for(i=0;i<10;i++){
LATA = 0xFF;
Delay10KTCYx(3000);
LATA = 0x00;
Delay10KTCYx(3000);
}
}

}

No sé a que se debe que se quede retenido ahí.

subo de nuevo el código ya compilado y el proyecto entero
Más códigos y desarrollos en https://electronicadicto.wordpress.com/ date una vuelta y curiosea un rato...

Desconectado Vayadespiste

  • PIC12
  • **
  • Mensajes: 53
Re: Problema libreria XLCD con C18, no me funciona
« Respuesta #3 en: 11 de Febrero de 2013, 11:34:19 »
Hola, estoy seguro que ya lo has hecho pero por si acaso, debes recordar que cuando usas esa librería ( XLCD) en modo de 4 bits has de definir el nibble que usas, sea bajo o alto dentro de la librería.

Código: [Seleccionar]

/* When in 4-bit interface define if the data is in the upper
 * or lower nibble.  For lower nibble, comment the #define UPPER
 */
/* #define UPPER */


Desconectado Thulsa Doom

  • PIC24F
  • *****
  • Mensajes: 771
    • https://electronicadicto.wordpress.com/
Re: Problema libreria XLCD con C18, no me funciona
« Respuesta #4 en: 11 de Febrero de 2013, 11:46:43 »
Pues si, he comentado y descomentado esa línea y el resultado es el mismo
Más códigos y desarrollos en https://electronicadicto.wordpress.com/ date una vuelta y curiosea un rato...

Desconectado jukinch

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 608
Re: Problema libreria XLCD con C18, no me funciona
« Respuesta #5 en: 13 de Febrero de 2013, 10:09:19 »
Usás el pin RW conectado a tierra?
"Divide las dificultades que examinas en tantas partes como sea posible para su mejor solución." -René Descartes

Desconectado Thulsa Doom

  • PIC24F
  • *****
  • Mensajes: 771
    • https://electronicadicto.wordpress.com/
Re: Problema libreria XLCD con C18, no me funciona
« Respuesta #6 en: 13 de Febrero de 2013, 10:56:28 »
Buenas, pues he logardo que el código funcione en proteus pero no he conseguido que funcione en hardware.

La manera de que funcione es añadirle a la ventana del proyecto el código fuente de la librería XLCD.

Cuelgo captura del proyecto porque una imagen vale más que mil palabras


Ahora ya en proteus me sale el texto en pantalla y el led parpadea pero en hardware se sigue quedando trabado en la función
Código: [Seleccionar]
OpenXLCD(FOUR_BIT & LINES_5X7);y ya no parpadea el led ni pausando y pulsando de nuevo el botón Run 
Más códigos y desarrollos en https://electronicadicto.wordpress.com/ date una vuelta y curiosea un rato...

Desconectado todopic

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3495
    • http://www.todopicelectronica.com.ar
Re: Problema libreria XLCD con C18, no me funciona
« Respuesta #7 en: 13 de Febrero de 2013, 16:46:24 »
La manera de que funcione es añadirle a la ventana del proyecto el código fuente de la librería XLCD.

Hola, #include "Drivers/xlcd.h" .. significa que  "Drivers/xlcd.h" (entre comillas) se encuentra en la misma carpeta que el proyecto... quizás no la tenias ubicada en esa posición..., y por eso la escribiste dentro del programa...
Firmat - Santa Fe - Argentina

www.TodoPic.net

Solo se tiran piedras, al arbol que tiene frutos...

Desconectado Thulsa Doom

  • PIC24F
  • *****
  • Mensajes: 771
    • https://electronicadicto.wordpress.com/
Re: Problema libreria XLCD con C18, no me funciona
« Respuesta #8 en: 13 de Febrero de 2013, 20:25:19 »
No, yo siempre lo que hago es sacar los archivos que interviene en el proyecto y añadirlos a la carpeta del proyecto por si hago modificaciones en ellos, creo una carpeta donde los recojo y luego los llamo con las comillas, ese no es el problema porque ahora ya me funciona en el proteus pero en el harware no me va

Usás el pin RW conectado a tierra?
y No, no lo use de esa manera, no lo uso así porque el código en CCS C no falla y funciona bien
« Última modificación: 13 de Febrero de 2013, 20:27:23 por Thulsa Doom »
Más códigos y desarrollos en https://electronicadicto.wordpress.com/ date una vuelta y curiosea un rato...

Desconectado Thulsa Doom

  • PIC24F
  • *****
  • Mensajes: 771
    • https://electronicadicto.wordpress.com/
Re: Problema libreria XLCD con C18, no me funciona
« Respuesta #9 en: 19 de Febrero de 2013, 16:14:08 »
Ya se cual es el problema, resulta que utilizo el mimo pin para el ICD2 que para la patilla RW del display, ósea la patilla 39 (RB6) del chip, aunque lo tengo separado con una resistencia de 10k no puedo utilizarlo.

Pero ahora tengo otro problema, resulta que añadiendo los archivos fuente del XLCD a la ventana del proyecto ya funciona, pero solo funciona con un cristal de 4MHz, si intento hacer que funcione el código poniendo un cristal de 20MHz en el chip, el display no funciona, salen caracteres raros, creo que tiene que ver con el tiempo de sincronismo del display.

Según veo en el documento de librerías que tiene el MPLAB los tiempos se calculan con una formula.

Código: [Seleccionar]
void DelayPORXLCD (void)
{
  Delay1KTCYx(60); // Delay of 15ms
                   // Cycles = (TimeDelay * Fosc) / 4
                   // Cycles = (15ms * 16MHz) / 4
                   // Cycles = 60,000
  return;
}
void DelayXLCD (void)
{
  Delay1KTCYx(20); // Delay of 5ms
                   // Cycles = (TimeDelay * Fosc) / 4
                   // Cycles = (5ms * 16MHz) / 4
                   // Cycles = 20,000
  return;
}


 Pero aplico la formula y sigue igual, entonces ya no se que hacer para adaptar el driver a un cristal de 20MHz a ver si alguien me echa una mano
Más códigos y desarrollos en https://electronicadicto.wordpress.com/ date una vuelta y curiosea un rato...