02 – Modificando la librería XLCD

En el post anterior, expliqué brevemente como utilizar la librería XLCD para controlar un display LCD 16×2. Sin embargo, si tenemos circuitos en donde debido a requerimientos debemos conectar el display a otro puerto, será necesario realizar cambios en las macro de la librería, este es nuestro objetivo: explicar como realizar cambios en la librería xlcd y salir vivos en el intento.

El circuito

En mi caso particular y que utilizaré como ejemplo, dispongo de una placa de desarrollo en donde el conector para el display LCD tiene la siguiente disposición de pines:

Pines LCD

Lo cual se traduce en el siguiente diagrama esquemático:

lcd pic-ek

La nueva asignación de pines para el display LCD respecto al microcontrolador sería:

  • Puerto de datos: Puerto D.
  • Modo de operación: 8 bits (D0:D7).
  • LCD RS: B5
  • LCD RW: B4
  • LCD E: B3

Muy bien, entonces ¿Qué necesitamos para adecuar la librería a nuestra nueva distribución de pines? En esencia, lo siguiente:

  1. Proporcionar permisos de modificación a la carpeta donde se encuentran los archivos de la librerías C18 o ejecutar MPLAB como administrador.
  2. Crear un proyecto en MPLAB X y editar el código del programa (ver el post anterior).
  3. Copiar los archivos fuente de la librería XLCD a nuestro proyecto.
  4. Modificar las macro en el archivo xlcd.h
  5. Compilar y comprobar el funcionamiento.

Teniendo en cuenta todo lo anterior iremos paso a paso.

1. Proporcionando permisos de modificación a las librerías C18.

Las librerías se copian en el directorio de instalación del compilador XC8, si tienen instalado un Windows de 32 bits será:

C:\Program Files\Microchip\xc8\v1.30\include\plib

Si es de 64 bits:

C:\Program Files(x86)\Microchip\xc8\v1.30\include\plib

NOTA: Las rutas pueden cambiar dependiendo del directorio de instalación, la unidad seleccionada durante el proceso de instalación y la versión del compilador.

Una vez ubicada la carpeta, se procede a proporcionar todos los permisos a los usuarios de la computadora sobre la carpeta plib.

Ahora bien, si se nos complica mucho hacer esto, podemos ejecutar MPLAB X como administradores con lo cual tendremos los permisos necesarios. Para hacer que MPLAB X se ejecute siempre como Administrador, se da clic derecho al icono, se selecciona la pestaña Compatibilidad y se marca la casilla «Ejecutar este programa como administrador«.

2. Creando el proyecto en MPLAB X

Incorporamos el código tal cual publiqué en el post anterior, pero debemos hacer una modificación en el modo de datos ya que ahora debe ser de ocho bits, colocaremos:

//Configurando LCD 8 bits mutilínea
OpenXLCD(EIGHT_BIT & LINES_5X7);

3. Copiando los archivos fuente de la librería.

Los archivos fuente de la librería xlcd.h (y de todas las demás), se encuentran en la siguiente ruta: C:\Program Files\Microchip\xc8\v1.30\sources\pic18\plib\XLCD

Copiamos todas los archivos y los pegamos en la carpeta de nuestro proyecto.

Archivos de la librería

Ahora en MPLAB X, procedemos a agregar los archivos copiados, para lo cual se damos clic derecho en Source Files, y seleccionamos Add Existing Item …

Agregar archivos

Seleccionamos todos los archivos y damos clic en Select.

4. Modificando las macros de la librería xlcd.h

Es momento de modificar las macros, para ello nos ubicamos en en la sentencia #include «plib/xlcd.h», damos clic derecho, seleccionamos Navigate y posteriormente Go to Declaration.

Declaracion de xlcd

MPLAB X, abrirá el archivo de código de la librería xlcd.h, en donde haremos la primer modificación ajustando el modo de datos a 8 bits, esto lo hacemos quitando el comentario de la línea 26, dejándola así:

/* Interface type 8-bit or 4-bit
* For 8-bit operation uncomment the #define BIT8
*/
#define BIT8

A continuación, comentamos las líneas 34 y 35 que definen el puerto de datos y agregamos la asignación al puerto D:

/* DATA_PORT defines the port to which the LCD data lines are connected */
// #define DATA_PORT PORTB
// #define TRIS_DATA_PORT TRISB
#define DATA_PORT PORTD
#define TRIS_DATA_PORT TRISD

Cambiamos la definición de los pines RW y E del LCD, comentando el código por defecto y agregando las nuevas definiciones, dejando el código de la siguiente manera:

/* CTRL_PORT defines the port where the control lines are connected.
* These are just samples, change to match your application.
*/
//#define RW_PIN LATBbits.LATB6 /* PORT for RW */
//#define TRIS_RW TRISBbits.TRISB6 /* TRIS for RW */

#define RW_PIN LATBbits.LATB4
#define TRIS_RW TRISBbits.TRISB4

#define RS_PIN LATBbits.LATB5
#define TRIS_RS TRISBbits.TRISB5

//#define E_PIN LATBbits.LATB4 /* PORT for D */
//#define TRIS_E TRISBbits.TRISB4 /* TRIS for E */

#define E_PIN LATBbits.LATB3
#define TRIS_E TRISBbits.TRISB3

5. Compilar y comprobar el funcionamiento.

Procedemos a compilar el proyecto, esto tomará un poco de tiempo ya que se procesará cada uno de los archivos de código incorporados al proyecto. Si no tenemos errores procedemos a comprobar el funcionamiento en PROTEUS.

Prueba

 

El siguiente video muestra la implementación en el circuito.

 

Conclusiones

Modificando las macros de la librería  podemos utilizarla con casi cualquier variante de conexiones de puerto que se diseñe. Aunque no se haya descrito en este post, la librería se puede configurar para que trabaje en modo de 4 bits con lo que se libera la mitad de los bits del puerto D los cuales podrían ser utilizados para otros fines, dejaré esto como una pequeña tarea a todos aquellos a quienes les haya parecido interesante utilizar la librería.

Volveré posteriormente con otro post en donde explicaré como utilizar la librería ADC.h del módulo convertidor Analógico a Digital para que posteriormente podamos integrar las librerías xlcd.h y adc.h para implementar un sencillo voltímetro digital.

Saludos a tod@s desde El Salvador…

7 comentarios sobre “02 – Modificando la librería XLCD

    1. #ifndef MlLibreria_H
      #define MiLibreria_H

      void MiFuncion();

      #endif
      // Nota: en la punto .h se declaran las variables y las funciones y estan deben incluirsen en el archivo main.c antes de void main{void}.

      Me gusta

    1. La primera vez es normal que te equivoques. La clave es ser metódico y prestar atención a los detalles, en alguna parte estas cometiendo un error. El código ha sido constantemente comprobado por lo que te garantizo que funciona.
      Un Saludo,

      Me gusta

      1. Qué tal saludos !!!!
        Tengo u. Pequeño problema con un puerto del pic 18f4550 el cual es el c resulta que lo nesesito utilizar para salida de datos pero hay un pin que siempre permanece en estado (1) y no recibe las indicaciones programas me gustaría saber cómo poder hacerlo funcionar

        Me gusta

  1. Hola jjguevara09. Recomiendo hacer lo siguiente para no confundirse. Lo mejor es no traer los archivos.c a tu carpeta. dejalos quietos. trae solo los punto .h. en el caso del lcd el archivo xlcd.h coloquelo en la carpeta de tu proyecto. y configure el mplab para que busque primero ese archivo que es el que se debe modificar. en el arbol adjunte los archivos .c originales bajo la etiqueta source files de la carpeta …/lib/XLCD. Tambien configure esa ruta para que el compilador encuentre el archivo delays.h. este metodo le permite utilizar toda la potencia de las librerias.

    Me gusta

Deja un comentario