En la entrega anterior de este tutorial aprendimos cómo enviar mensajes al usuario mediante una pantalla LCD alfanumérica. Hoy construiremos un pequeño módulo que nos permita realizar algunas prácticas, y que seguramente emplearemos más adelante como parte de otros proyectos.
Un módulo de expansión para el PIC Trainer
En realidad, construir un módulo de expansión para nuestro PIC Trainer es muy sencillo, gracias a la electrónica incluida a bordo de cada módulo LCD, que se encarga de las tareas más complejas.
Nuestro proyecto consiste básicamente en una serie de conectores que permiten al microcontrolador situado en el PIC Trainer enviar los caracteres y comandos a la pantalla. Dado que los LCD tienen, generalmente, la posibilidad de ajustar su contraste o la luz de fondo, hemos previsto la electrónica necesaria para poder seleccionar mediante una serie de jumpers alguna de esas funciones. Y por supuesto, hemos dotado a la placa con un preset de 10K para regular el contraste del LCD.
Debido a que el consumo del módulo, sobre todo si hacemos uso de los LEDs de backlite, es algo elevado (unos 200mA) para el regulador de voltaje incluido en el PIC Trainer, hemos dotado a la placa del LCD con su propio regulador. Hemos elegido para esta tarea a un “hermano menor” del 7805, el 78L05, que en una cápsula mucho más pequeña puede entregarnos 5V perfectamente regulados.
La siguiente imagen nos muestra el esquema eléctrico de nuestra nueva placa de expansión:
Un circuito sencillo
Como podemos ver, el circuito es verdaderamente sencillo: una tensión de alimentación de entre 7.5 y 15 voltios se conecta a la bornera de alimentación, pasa a través de un diodo que protege al regulador de voltaje de una conexión errónea de la fuente de alimentación, y mediante el 78L05 y los condensadores asociados es regulada a 5V.
Los conectores del módulo
El módulo LCD tiene conectados los cuatro bits más altos de su bus de datos a un conector tipo molex de 10 vías, al que hemos llamado “A”. Los restantes cuatro bits están unidos al conector B. De esta manera, si queremos utilizar un programa que emplea solo cuatro bits para comunicarse con el módulo, usaremos el conector A; y en caso de querer probar un programa que utiliza un bus de datos de 8 bits, utilizaremos ambos conectores.
El tercer molex, llamado “C”, es el conector “de control”. En efecto, las líneas de control del LCD se encuentran agrupadas en este conector, teniendo la posibilidad de seleccionar la función “R/W” mediante un jumper (JP1). Si el jumper se encuentra colocado entre los pines 1 y 2, el control de la línea “R/W” estará en manos del microcontrolador, por lo que el programa deberá poner un “0” en esa línea antes de poder escribir en él. Si el jumper está en la posición 2-3, el LCD estará preparado para que escribamos en él todo el tiempo. No podremos leer su memoria interna (tarea poco frecuente) y utilizaremos un pin menos en el microcontrolador.
El cuarto pin de control corresponde al backlite. Esta es la iluminación trasera del display, que permite utilizarlo en condiciones de iluminación pobre, por ejemplo de noche. Como el consumo del backlite es excesivo para alimentarlo directamente desde un puerto del microcontrolador, hemos utilizado un transistor 2N3906 que se encargue de esa tarea.
El jumper JP2 sirve para seleccionar si el backlite va a estar encendido (jumper en 1-2), bajo el control del PIC (jumper en 2-3) o apagado permanentemente (sin jumper). En caso de seleccionar el control desde el microcontrolador, podremos utilizar pulsos PWM para regular la intensidad luminosa de los LEDs. Esto, junto con el control de velocidad de motores de corriente continua, será tema de otro capítulo del tutorial.
Por último, el preset de 10k, que aparece en color azul en las fotos, es el encargado de fijar el nivel de contraste del display, para que su lectura sea lo más cómoda posible.
Armado del módulo
El armado del módulo de expansión no tiene secretos, es muy similar a otros que hemos realizado en NeoTeo, con la salvedad de que en este caso hemos formado una especie de “sándwich” con la placa de circuito impreso y el LCD, que se monta sobre pines de bronce para permitir que debajo de él se ubiquen el transistor, la resistencia de su base y algunos puentes necesarios.
Para el armado utilizaremos de referencia las fotos incluidas en el artículo, y comenzaremos fabricando el PCB mediante el método explicado anteriormente, para luego soldar todos los componentes, dejando para el final el montaje del LCD.
En caso de que al alimentar el circuito el LCD esté “en blanco”, deberemos ajustar el preset. Cuando el cursor del preset está en la mitad del recorrido, el display debería ser perfectamente legible.
Conexión con el PIC Trainer
Para realizar las prácticas, deberemos conectar este módulo con el PIC Trainer de 40 pines como se ve en la foto siguiente.
Una vez conectado todo, podemos cargar en el PIC el primero de nuestros ejemplos:
Ejemplos de programación
A continuación, unos ejemplos de cómo se utilizan todas estas instrucciones. El primero se encarga de mostrar un texto parpadeando en la primera línea del display. Intenten deducir cómo está conectado el LCD al PIC mirando las instrucciones “DEFINE” del principio del programa.
Ejemplo 1: texto parpadeante con bus de 8 bits
DEFINE LCD_BITS = 8
DEFINE LCD_DREG = PORTD
DEFINE LCD_DBIT = 0
DEFINE LCD_RSREG = PORTB
DEFINE LCD_RSBIT = 1
DEFINE LCD_EREG = PORTB
DEFINE LCD_EBIT = 3
DEFINE LCD_RWREG = PORTB
DEFINE LCD_RWBIT = 2
LCDINIT 0 ‘inicializo el LCD sin cursor.
loop:
LCDOUT "www.NeoTeo.com" ‘Muestra el texto…
WAITMS 1000 ‘Espero un segundo
LCDCMDOUT LcdClear ‘Borro el display
WAITMS 1000 ‘Espero un segundo
GOTO loop ‘Vuelvo a loop: para repetir indefinidamente.
Como podemos deducir a partir de lo visto en el capítulo anterior, el LCD está conectado con el bus de datos (de 8 bits) en el PORTD, el pin PORTB.1 se emplea para el control de la línea RS del LCD, el pin PORTB.3 para la línea E y el control de R/W está a cargo del PIC, mediante el pin PORTB.2.
En el módulo LCD debemos poner el jumper JP1 en la posición 1-2 para permitir al PIC 16F877A el control de la gestión de lecto/escritura del LCD.
Ejemplo 2: bus de 4 bits
El siguiente ejemplo solo difiere del anterior en que se utiliza un bus de control de solo 4 bits de ancho, en la parte baja del PORTD (D.0 a D.3), y dejamos la línea R/W siempre en escritura. Para hacer esto, debemos mover JP1 a la posición 2-3. El cable plano que une la parte alta del PORTD (conector 4) con el LCD puede ser removido, ya que no pasarán datos por él. Así quedaría el programa:
DEFINE LCD_BITS = 4
DEFINE LCD_DREG = PORTD
DEFINE LCD_DBIT = 0
DEFINE LCD_RSREG = PORTB
DEFINE LCD_RSBIT = 1
DEFINE LCD_EREG = PORTB
DEFINE LCD_EBIT = 3
LCDINIT 0 ‘inicializo el LCD sin cursor.
loop:
LCDOUT "www.NeoTeo.com" ‘Muestra el texto…
WAITMS 1000 ‘Espero un segundo
LCDCMDOUT LcdClear ‘Borro el display
WAITMS 1000 ‘Espero un segundo
GOTO loop ‘Vuelvo a loop: para repetir indefinidamente.
Si quisiéramos utilizar la parte alta del PORTD como bus de control del LCD, solamente deberíamos cambiar la línea
DEFINE LCD_DBIT = 0
a
DEFINE LCD_DBIT = 4
El resto del programa quedaría igual. Por supuesto, se debe cambiar de lugar el cable plano de datos, y ponerlo entre el conector 5 y el LCD; caso contrario, no veremos nada en el display.
Ejemplo 3: mostrar una variable en el LCD
El último ejemplo es una adaptación del ejemplo visto en el capítulo anterior: muestra cómo imprimir el contenido de una variable (“A”) en el LCD. En el segundo renglón se cuentan los números del 65535 al 0, mientras que en el primero se muestra un texto.
DEFINE LCD_BITS = 8
DEFINE LCD_DREG = PORTD
DEFINE LCD_DBIT = 0
DEFINE LCD_RSREG = PORTB
DEFINE LCD_RSBIT = 1
DEFINE LCD_EREG = PORTB
DEFINE LCD_EBIT = 3
DEFINE LCD_RWREG = PORTB
DEFINE LCD_RWBIT = 2
DIM A AS WORD
A = 65535
LCDINIT 3 ‘Cursor parpadeando
WAITMS 1000
loop:
LCDOUT "¡Estoy contando!” ‘Texto del primer renglón
LCDCMDOUT LcdLine2Home ‘Paso al Segundo renglón
LCDOUT #A ‘Muestro el valor de A
A = A - 1
WAITMS 250
LCDCMDOUT LcdClear ‘Limpio del display
GOTO loop
Dejamos al lector la tarea de deducir cómo deben configurarse los jumpers del módulo LCD y de qué manera se conectan los cables entre el PIC Trainer y el LCD.
Es muy recomendable realizar estas prácticas, por simples que puedan parecer, ya que servirán para tomar confianza con el uso del display y, sobre todo, para poder comenzar a construir nuestros propios programas.
El PCB del módulo
Más información