Autor Tema: subo pequeña libreria para LCD en Hitech C  (Leído 19780 veces)

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

Desconectado AngelGris

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2480
Re: subo pequeña libreria para LCD en Hitech C
« Respuesta #45 en: 25 de Mayo de 2011, 19:56:27 »
  Ese no es el problema, pero creo que ya lo encontré.

  Por defecto (después de un PowerOnReset) los pines que se configuren como entradas, quedarán como entradas analógicas. La librería pone como entrada el puerto que se esté utilizando para datos, para poder leer el bit de bussy, y así esperar a que se desocupe el display para mandarle el próximo dato.

  En tu pic, al hacer entradas al puerto B, quedan como entradas analógicas y por lo tanto no es interpretado correctamente el bit de bussy enviado por el display.

  Para solucionar eso, basta con poner

Código: C
  1. ANSEL = 0;
  2. ANSELH = 0;

  antes de llamar a InitLcd();
De vez en cuando la vida
nos besa en la boca
y a colores se despliega
como un atlas

Desconectado czeiss

  • PIC10
  • *
  • Mensajes: 5
Re: subo pequeña libreria para LCD en Hitech C
« Respuesta #46 en: 26 de Mayo de 2011, 03:50:42 »
Hola
Muchas gracias, ahora funciona me sacaste un peso de encima. Te pasaste AngelGris.
Ahora seguire practicando con HiTech C.
Me puedes recomendar un manual de HiTech para partir desde cero..
Nuavemente gracias.
Saludos


Desconectado AngelGris

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2480
Re: subo pequeña libreria para LCD en Hitech C
« Respuesta #47 en: 26 de Mayo de 2011, 09:25:51 »
  He bajado varios libros de C, pero la mayoría tenían ejemplos en CCS o MikroC. Así que básicamente lei uno de ANSI-C y uno bastante básico de C que tenía algunos ejemplos comparativos entre la sintaxis de CCS y la de HiTech, el resto fue empezar a ver algunos ejemplos que trae el compilador y también la lectura de los archivos .h del propio compilador.

  Estos son los libros que leí...

"An introduction to programming the Microchip PIC in C"

"Aprenda lenguaje ANSI C como si estuviera en primero"
De vez en cuando la vida
nos besa en la boca
y a colores se despliega
como un atlas

Desconectado AngelGris

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2480
Re: subo pequeña libreria para LCD en Hitech C
« Respuesta #48 en: 28 de Octubre de 2011, 23:56:58 »
  Aca dejo la última versión de la libreria. Modifiqué la forma en que manejo de los puertos para que se pueda utilizar tanto en la familia 16F como en la 18F.
De vez en cuando la vida
nos besa en la boca
y a colores se despliega
como un atlas

Desconectado jukinch

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 608
Re: subo pequeña libreria para LCD en Hitech C
« Respuesta #49 en: 29 de Octubre de 2011, 01:29:50 »
Gracias Angelgris por compartirla :)
"Divide las dificultades que examinas en tantas partes como sea posible para su mejor solución." -René Descartes

Desconectado matucho

  • PIC10
  • *
  • Mensajes: 7
Re: subo pequeña libreria para LCD en Hitech C
« Respuesta #50 en: 16 de Julio de 2012, 23:19:39 »
Gracias, esta muy buena!

Desconectado Masterboy1980

  • PIC10
  • *
  • Mensajes: 15
Re: subo pequeña libreria para LCD en Hitech C
« Respuesta #51 en: 16 de Septiembre de 2012, 23:14:12 »
oye, verás que pongo todo lo que indicas en el ejemplo para usar tu librería y me dice "faltan definir parámetros"

Build F:\HI-TECH_MPLAB\N_LCD_1.0 for device 16F877A
Using driver C:\Program Files (x86)\HI-TECH Software\PICC\9.83\bin\picc.exe

Make: The target "F:\HI-TECH_MPLAB\SuperLcd.p1" is out of date.
Executing: "C:\Program Files (x86)\HI-TECH Software\PICC\9.83\bin\picc.exe" --pass1 F:\HI-TECH_MPLAB\SuperLcd.c -q --chip=16F877A -P --runtime=default --opt=default -D__DEBUG=1 -g --asmlist "--errformat=Error   [%n] %f; %l.%c %s" "--msgformat=Advisory[%n] %s" "--warnformat=Warning [%n] %f; %l.%c %s"
Error   [103] F:\HI-TECH_MPLAB\SuperLcd.c; 300.32 #error: Faltan definir parametros
Make: The target "F:\HI-TECH_MPLAB\LCD_1.00.p1" is out of date.
Executing: "C:\Program Files (x86)\HI-TECH Software\PICC\9.83\bin\picc.exe" --pass1 F:\HI-TECH_MPLAB\LCD_1.00.c -q --chip=16F877A -P --runtime=default --opt=default -D__DEBUG=1 -g --asmlist "--errformat=Error   [%n] %f; %l.%c %s" "--msgformat=Advisory[%n] %s" "--warnformat=Warning [%n] %f; %l.%c %s"

********** Build failed! **********

eso es lo que me indica todo el tiempo.

uso la última librería que pones y los datos del ejemplo y le doy compilar y nada. Si pudieras por favor orientarme.

Desconectado AngelGris

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2480
Re: subo pequeña libreria para LCD en Hitech C
« Respuesta #52 en: 16 de Septiembre de 2012, 23:40:58 »
  Por favor muestra el código que estás utilizando.
De vez en cuando la vida
nos besa en la boca
y a colores se despliega
como un atlas

Desconectado Masterboy1980

  • PIC10
  • *
  • Mensajes: 15
Re: subo pequeña libreria para LCD en Hitech C
« Respuesta #53 en: 16 de Septiembre de 2012, 23:50:29 »
mira este es el código:

#define _XTAL_FREQ 4000000    // Cristal 4MHz 
  #define LcdRW RB0             // El bit 0 del puerto B para RW
  #define LcdRS RB1             // El bit 1 del puerto B para RS
  #define LcdEN RB2             // El bit 2 del puerto B para EN
  #define LcdRWTris TRISB0
  #define LcdRSTris TRISB1
  #define LcdENTris TRISB2 
  #define LcdDataPort PORTB     // Uso el puerto B para los datos
  #define LcdDataTris TRISB 
  #define LcdD4 4              // Solo utilizar para protocolo de 4 Bits
  #include <htc.h>
  #include "SuperLcd.c"         // Incluimos nuestra libreria
 

 void main(void)
{
  const char * pantalla = "Mundo";
 
  InitLcd();
  WriteStrLcd ("Hola");          // escribe en la primer linea la palabra Hola
  GotoxyLcd (1,2);
  WriteStrLcd (pantalla);        // escribe en la segunda linea la palabra apuntada por la variable pantalla
  SetCursorLcd (CursorOff | CursorBlinkOn); // apaga el cursor, y lo hace parpadear
  LcdShift (ShiftDisplay | ShiftRight); // dezplaza el display hacia la derecha (texto a la izquierda)
}

sin embargo como te podrás dar cuenta es el mismo que tu pones y verás que no compila.

Desconectado AngelGris

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2480
Re: subo pequeña libreria para LCD en Hitech C
« Respuesta #54 en: 17 de Septiembre de 2012, 09:33:23 »
  Por lo general la primer línea del programa debe ser

Código: C
  1. #include <htc.h>

tu la estás colocando luego de los #define, prueba con ese cambio para ver que ocurre.

  Yo utilicé la librería con la versión 9.8 del compilador.
De vez en cuando la vida
nos besa en la boca
y a colores se despliega
como un atlas

Desconectado Masterboy1980

  • PIC10
  • *
  • Mensajes: 15
Re: subo pequeña libreria para LCD en Hitech C
« Respuesta #55 en: 17 de Septiembre de 2012, 21:22:48 »
efectivamente ya lo hice y sigue marcando el mismo error, yo estoy utilizando el MPLAB v8.87 con el compilador HI-TECH 9.83... es curioso pues a todos los demás parece funcionarles bien si acaso algunos inconvenientes y yo topé con pared con ese detalle.

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: subo pequeña libreria para LCD en Hitech C
« Respuesta #56 en: 17 de Septiembre de 2012, 21:36:03 »
La manera adecuada sería crear un SuperLCD.h donde allí colocar los #define que corresponde la micro, o sea:

Código: C
  1. #ifndef __SUPER_LCD_H_
  2. #define __SUPER_LCD_H_
  3.   #define _XTAL_FREQ 4000000
  4.   #include <htc.h>
  5.   #define LcdRW RB0             // El bit 0 del puerto B para RW
  6.   #define LcdRS RB1             // El bit 1 del puerto B para RS
  7.   #define LcdEN RB2             // El bit 2 del puerto B para EN
  8.   #define LcdRWTris TRISB0
  9.   #define LcdRSTris TRISB1
  10.   #define LcdENTris TRISB2  
  11.   #define LcdDataPort PORTB     // Uso el puerto B para los datos
  12.   #define LcdDataTris TRISB  
  13.   #define LcdD4 4              // Solo utilizar para protocolo de 4 Bits
  14.  
  15. void WriteByteLcd(unsigned char Data, unsigned char dir);
  16. void InitLcd(void);
  17. void GotoxyLcd (unsigned char x, unsigned char y);
  18. void WriteStrLcd (const char *palabra);
  19.  
  20.   #define LcdShift(Estado) WriteByteLcd (Estado,0)
  21.   #define SetCursorLcd(Estado) WriteByteLcd (Estado,0)
  22.   #define WriteCharLcd(letra) WriteByteLcd (letra,1)
  23.   #define LcdOn() WriteByteLcd(0x0C,0)
  24.   #define LcdOff() WriteByteLcd(0x08,0)
  25.   #define ClearLcd() WriteByteLcd(0x01,0)
  26.  
  27.  
  28. #endif

En SuperLCD.c colocar al principio #include "SuperLCD.h" y los mismo en el main.c

Es una mala costumbre incluir los *.c, me parece que viene del uso de CCS  :mrgreen:

Saludos!
« Última modificación: 17 de Septiembre de 2012, 22:14:01 por Suky »
No contesto mensajes privados, las consultas en el foro

Desconectado Masterboy1980

  • PIC10
  • *
  • Mensajes: 15
Re: subo pequeña libreria para LCD en Hitech C
« Respuesta #57 en: 17 de Septiembre de 2012, 23:45:52 »
De la misma manera que el anterior caso y ahora incluyendo el archivo de cabecera que muestras tampoco funciona, sigue diciendo Faltan definir parámetros.

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: subo pequeña libreria para LCD en Hitech C
« Respuesta #58 en: 18 de Septiembre de 2012, 00:26:25 »
 :shock: Ahi ya no se que será, porque claramente se ve que están todos los parametros necesarios y establecidos de la mejor manera :tongue:
No contesto mensajes privados, las consultas en el foro

Desconectado AngelGris

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2480
Re: subo pequeña libreria para LCD en Hitech C
« Respuesta #59 en: 18 de Septiembre de 2012, 09:28:26 »
  Acabo de bajar la librería y compilar un ejemplo de reloj y funcionó bien, siempre trabajando con la versión 9.80 del compilador.

  Puedes intentar lo siguiente... edita la librería y elimina las siguientes primeras lineas de código.

Código: C
  1. #if defined (LcdRW) && defined (LcdRS) && defined (LcdEN) &&\
  2.     defined (LcdDataPort)
  3.   #if defined (LcdD4)                   //Define el bit de menos peso del nibble (puede ser 0 o 4)
  4.     #define Protocolo4Bits
  5.     #if (LcdD4 != 0) && (LcdD4 != 4)
  6.       #error Mal definido D4 del LCD
  7.         #endif
  8.   #endif

 y también elimina las siguientes últimas líneas de código

Código: C
  1. #else
  2.   #error Faltan definir parametros
  3. #endif

  Dichas líneas están justamente para que genere un error cuando te faltó definir algún parámetro o cuando está mal definido LcdD4.

De vez en cuando la vida
nos besa en la boca
y a colores se despliega
como un atlas


 

anything