En esta oportunidad vamos a aprender todo lo necesario para aprovechar la posibilidad que brinda el módulo central del sistema de alarma propuesto para la conexión de una pantalla LCD alfanumérica. Se trata de un agregado ideal para facilitar la interacción entre el usuario y la alarma.
Ventajas de la pantalla LCD
A pesar de lo económicos que son los módulos LED de 7 segmentos, los displays LCD se han impuesto en los aparatos de consumo. La baja de precios ha hecho que, si necesitamos representar más de 8 o 10 dígitos, el costo sea el mismo que si utilizásemos módulos LED. Además, una pantalla LCD permite representar todo tipo de caracteres (cuenta con todo un juego ASCII en su memoria), no está limitada a los dígitos del 0 al 9. Y como si esto fuera poco, el usuario puede definir sus propios caracteres especiales.
Conexión del LCD al módulo central
La alarma que estamos diseñando posee un conector que permite la utilización de una de estas pantallas. Afortunadamente, la mayoría de ellas utiliza el mismo protocolo de comunicaciones y pinout, gracias al empleo de un chip de Hitachi, el HD44780. Esto hace posible que el usuario pueda elegir usar desde un pequeño display de una sola línea de 8 caracteres (suficiente para ingresar una contraseña de activación/desactivación) hasta uno de 4 líneas de 40 caracteres. Dado que la programación de uno u otro display es idéntica, asumiremos para los ejemplos que brindaremos en este artículo que se ha conectado un módulo típico de 2 líneas de 16 caracteres.
En las figuras que están más abajo podemos ver la función que cumple cada uno de los pines del conector previsto en nuestro módulo central (analizado en detalle en la primera entrega de este tutorial) y la de los pines del módulo LCD. Recordemos que la mayoría de ellos respeta este orden, pero que puede haber variaciones. Como siempre, lo mejor es tener a mano la hoja de datos de nuestro módulo para no cometer errores.
Construcción del cable de unión
Tenemos que construir un cable que sirva de “cordón umbilical” entre nuestra placa central y el módulo LCD. Lo ideal es emplear un trozo de cable plano, de al menos 8 conductores. Si bien se venden en las tiendas de componentes electrónicos, por metro, puede que tengamos en casa algún cable de datos de una disquetera o de un disco duro viejo. Si es así, podemos cortar un pedazo de ese cable y ahorrarnos algo de dinero.
Una vez que tengamos el trozo de cable (unos 20 centímetros bastarán) procedemos a separar ligeramente los conductores en cada uno de los extremos. Utilizando el alicate de corte, le pelaremos uno o dos milímetros a cada conductor, y procederemos a estañar uno por uno.
Hecho esto, procederemos a soldar los 8 cables a la posición correspondiente del conector del LCD. Para ello, utilizaremos el esquema de la página anterior, teniendo cuidado de no equivocarnos. También deberemos unir entre sí varios terminales (los que corresponden a GND, RW, D0, D1, D2 y D3). Es una muy buena idea incluir un potenciómetro de 10K, conectado como se ve en el esquema anterior, para permitir modificar el contraste de la pantalla en caso de que las condiciones de iluminación no sean las adecuadas.
También puede utilizarse la función de “backlite” disponible en casi todos los módulos LCD. Como puede verse, los pines 15 y 16 del conector de la pantalla no se han utilizado, y son los que corresponden a los LEDs que proporcionan la iluminación trasera al LCD, permitiendo su uso en la oscuridad. Para llevar a cabo esta modificación, veremos en la hoja de datos del display la tensión necesaria y la corriente que consumen estos LEDs, y se la proporcionaremos a partir de los conductores de alimentación que provienen de la placa central. La mayoría de las veces, basta con aplicarle los 5V mediante un resistor de unos 680 ohm. Pero para no cometer errores, lo ideal es basarse en la hoja de datos de la pantalla que tengamos.
En el otro extremo del cable podemos poner un conector hembra que “calce” en la tira de pines de bronce del módulo central, o, si no pensamos volver a quitar la pantalla, directamente soldar cada cable a cada uno de los pines. Debemos tener en cuenta el orden en que van, y que al soldarlos dos pines adyacentes no queden en contacto. No es una tarea difícil, pero requiere de toda nuestra atención para no dañar nada. Antes de alimentar el circuito, conviene repasar a fondo todo el trabajo.
Programación del display con PIC BASIC
La programación del display LCD, utilizando el lenguaje BASIC incluido en el PIC SIMULATOR IDE, es bastante simple. Ya le hemos dedicado un capítulo de nuestro curso de programación de microcontroladores, así que sería conveniente que lo leas antes de encarar esta etapa del sistema de alarma.
Dos usos para el display de la alarma
Podemos dar dos usos al display de nuestra alarma. El primero de ellos tiene que ver con la notificación al usuario del estado en que se encuentra el sistema. Se pueden implementar, con mucha sencillez, mensajes del tipo “ALARMA ACTIVADA”, “DISPARO” o cualquiera que el lector crea conveniente. Tampoco tenemos que olvidar que el módulo principal propuesto cuenta con tres LEDs encargados de avisar los estados más importantes de la alarma, y que veremos en las próximas entregas cómo sacarle partido.
El segundo uso es el más interesante, y se relaciona con la entrada de datos por medio del teclado. Si bien podemos mantener muy simple el diseño de nuestra alarma haciendo que se active y desactive simplemente pulsando una tecla, es mucho mejor que dichas tareas se ejecuten previo ingreso de una contraseña. Podemos elegir entre una palabra clave (o número clave) que permita llevar a cabo ambas tareas (que es lo habitual) o también podemos disponer de una clave para la activación y una diferente para la desactivación. Eso es lo bueno de diseñar nuestro propio sistema de seguridad.
Un ejemplo de lectura del teclado y escritura en el LCD
Dado que la programación del display está íntimamente ligada al uso del teclado, les proponemos un ejemplo que utiliza a ambos elementos: un pequeño programa que se encarga de leer el teclado y mostrar un mensaje en la pantalla indicando qué tecla se ha pulsado. Este es el listado:
'----------------------------------
'Alarma NeoTeo
'Ejemplo lectura Teclado y
'escritura en el LCD.
'----------------------------------
AllDigital 'Todos los pines del puerto A como E/S.
TRISA = %11111111 'Puerto A como entradas
TRISB = %00001111 'Puerto B: 4 entradas, 4 salidas
'Declaro las variables a utilizar
Dim tecla As Byte 'Tecla presionada
tecla = 16 '16 = no hay tecla presionada
'Declaro los parametros para el LCD
Define LCD_BITS = 4
Define LCD_DREG = portd
Define LCD_DBIT = 4
Define LCD_RSREG = portc
Define LCD_RSBIT = 6
Define LCD_EREG = portc
Define LCD_EBIT = 7
Lcdinit 0 'inicializo el lcd sin cursor.
'Bucle principal
Lcdout "ALARMA LISTA" 'Muestra el texto…
WaitMs 1000 'Espero un segundo
Lcdcmdout LcdClear 'borro el display
loop: 'Leo el teclado
Gosub leoteclado
WaitMs 10 'Espero
'Si se presiono una tecla, la muestro
If tecla <> 16 Then
Gosub muestrotecla
WaitMs 100 'espero y...
Lcdcmdout LcdClear 'Borro el contenido de la pantalla
Endif
Goto loop 'vuelvo a loop: para repetir indefinidamente.
End
leoteclado:
tecla = 16 '16 = no hay tecla presionada
'Leo la primer columna
PORTB = %10000000
If PORTB.3 = 1 Then tecla = 1 'Tecla "1"
If PORTB.2 = 1 Then tecla = 4 'Tecla "4"
If PORTB.1 = 1 Then tecla = 7 'Tecla "7"
If PORTB.0 = 1 Then tecla = 10 'Tecla "*"
'Leo la segunda columna
PORTB = %01000000
If PORTB.3 = 1 Then tecla = 2 'Tecla "2"
If PORTB.2 = 1 Then tecla = 5 'Tecla "5"
If PORTB.1 = 1 Then tecla = 8 'Tecla "8"
If PORTB.0 = 1 Then tecla = 0 'Tecla "0"
'Leo la tercer columna
PORTB = %00100000
If PORTB.3 = 1 Then tecla = 3 'Tecla "3"
If PORTB.2 = 1 Then tecla = 6 'Tecla "6"
If PORTB.1 = 1 Then tecla = 9 'Tecla "9"
If PORTB.0 = 1 Then tecla = 11 'Tecla "#"
'Leo la cuarta columna
PORTB = %00010000
If PORTB.3 = 1 Then tecla = 12 'Tecla "TEST"
If PORTB.2 = 1 Then tecla = 13 'Tecla "PANICO"
If PORTB.1 = 1 Then tecla = 14 'Tecla "F1"
If PORTB.0 = 1 Then tecla = 15 'Tecla "F2"
Return
muestrotecla:
Lcdcmdout LcdClear 'Borro el contenido de la pantalla
If tecla < 10 Then Lcdout "Tecla: ", #tecla
If tecla = 10 Then Lcdout "Tecla: *"
If tecla = 11 Then Lcdout "Tecla: #"
If tecla = 12 Then Lcdout "Tecla: TEST"
If tecla = 13 Then Lcdout "Tecla: PANICO"
If tecla = 14 Then Lcdout "Tecla: F1"
If tecla = 15 Then Lcdout "Tecla: F2"
Return
Si has leído nuestro tutorial sobre programación de microcontroladores, no deberías tener problemas para comprender el funcionamiento de este pequeño programa. Si aún no lo has hecho, esta es una buena oportunidad para darle un vistazo.
Con esto damos por terminada la tercera entrega de este tutorial. En el próximo, veremos cómo construir la sirena, cómo controlar los LEDs indicadores y mucho más.