Arduino, Rasperry y algo más

Como usar dos LCD con un arduino (I)

En el foro español de Arduino hubo un compañero que me dijo, con razón, que con una sola pantalla de 2×16 la información que puedo mostrar es limitada. Pero no quiero subir mucho el presupuesto ni tengo mas pines libres, y dandole vueltas al asunto se me ocurrió que sería  estupendo poder poner una pantalla por cada corredor. No son muy caras (menos de 10 euros), pero no tengo tantos pines libres.

La cuestión de los pines libres me tenia totalmente atascado, hasta que di con la solución: usar puertas lógicas y un pin de control. Os pongo un esquema (escaneado, no he sido capaz de hacer con KiCad y paso de hacerlo con un programa de dibujo):

Como controlar 2 LCD

Como controlar 2 LCD

Explico como  funciona:

El pin 13 del Arduino es el que he configurado como correspondiente al ENABLE del LCD en la librería LiquidCrystal  de Arduino. Y el pin 1 es el que voy a usar como pin de selección entre un LCD y otro.

La selección se hace a través de las puertas lógicas, van unidas, en sus salidas a los pines ENABLE de los dos LCD según el esquema del dibujo. De esta forma puedo manejar dos LCD’s iguales sin ocupar demasiados pines y sin rehacer la librería que acompaña a Arduino.

  • LCD 1: Es el caso facil. Si pongo el pin 1 (CONTROL) en alta, la salida de la puerta lógica AND será la misma que la del pin 13 (ENABLE), y el LCD será manejado por Arduino y la librería LiquidCrystal sin problemas.
  • LCD 2: Esto es mas complicado, pues tenía que conseguir que la salida de las puertas fuera la misma que el pin 13 cuando el pin 1 estuviera apagado, pero solo en ese momento. Por si sola no hay ninguna puerta que me de ese resultado, por lo que se tienen que combinar dos. Una de la posibilidades es la que pongo en el dibujo. La tabla de la verdad de esas puertas combinadas es:

Pin 1

(control)

 Pin 13(Enable) XOR  +  Pin 13(Enable)  AND
 1  1  0  1  0
 1  0  1  0  0
 0  1  1  1  1
 0  0  0  0  0
Como se puede observar la única combinación activa el pin ENABLE del LCD 2 es cuando el pin de control está apagado y se activa el pin 13, con lo que se controla el LCD con la librería LiquidCrystal, como si solo hubiera una.
En resumen: se activa o no el pin de control (en este caso el 1) según queramos escribir en un LCD u otro y mandamos la orden con la librería LiquidCrystal como si solo hubiera una pantalla. Así solo se ocupa un pin mas pero tenemos dos LCD, ademas de ser muy fáciles de utilizar.
Continua aquí.

Anterior

Especificaciones del digitalizador de mandos v1

Siguiente

Como usar dos LCD con un arduino (II)

6 comentarios

  1. No hubiera sido más fácil con una NOT ? la puedes controlar desde un unico pin

    salida
    L—–>LCD1
    L—–>NOT>—–>LCD2

    salida LCD1 LCD2
    0 0 1
    1 1 0

    • Esog Enaug

      Hola y gracias por leerme.
      No sirve lo que has puesto. No se consigue lo mismo. Necesitaba, a través de la activación o no de un pin, que se activara una salida u otra, pero controladas ambas por otro pin.
      Con el esquema que tu has puesto, con una sola puerta, se activaría el LCD2 al desactivar un pin, si ese pin es el que controla la librería LCD la pantalla esperaría ordenes cuando no se le va a enviar nada.
      Explicado de otra forma, necesito sacar la siguiente tgabla de la verdad:

      LCD Enable Pin Salida Salida
      (Arduino) Control LCD 1 LCD 2
      0 0 0 0
      0 1 0 0
      1 0 0 1
      1 1 1 0

      Para lograr esta tabla de resultados se necesitan dos puertas.
      Pero ¿por que necesito estos resultados? Muy fácil: si te fijas en la tabla veras que solo hay una forma concreta de activar cada LCD, y que ambas requieren que el pin asociado a la salida Enable en la librería está activo, por lo que la librería no tiene por que saber si hay una o más LCDs.

      Supongo que se puede conseguir lo mismo con otra combinación de puertas, pero esta fue la que se me ocurrió a mi.

      • Hola, es un placer,

        No Sabía que las LCD necesitan un pin de control, no he tocado nunca las LCD.
        Con la tabla de verdad que me has mostrado, he analizado el circuito y me sale;

        PIN13 PIN1 AND LCD1 XOR AND2 LCD2
        0 0 0 0 0 0 0
        0 1 0 0 1 0 0
        1 0 0 0 1 1 1
        1 1 1 1 0 0 0

        Esa es la tabla de verdad del circuito, abajo te pongo la tabla de verdad del que te proponía (como mera observación, no pretendo ser «don perfecto», además estoy dándote la razón XD)

        Tomando el pin 13 como pin de control y el pin1 pasa por la NOT directo al LCD2;
        PIN13 PIN1 NOT LCD1 LCD2
        0 0 1 0 X
        0 1 0 X 0
        1 0 1 0 1
        1 1 0 1 0

        Con eso no se si se activaría el LCD2 en caso de que el pin de control esté a 0 y o mismo con el LCD1, con lo que pueden producir lecturas erróneas, así que mi comentario anterior tenía un fallo de diseño, aunque si se evita ese detalle, sí puede usarse con menos componentes lógicos, jeje

        De hecho, creo que la misión del controlador de las LCD es estar activando una y otra constantemente de forma que el ojo humano vea ambas pantallas activas a la vez, no? no se si me explico…
        Y el ENABLE será para que la LCD reciba el dato a mostrar, estoy hablando con suposiciones, reitero que nunca he tocado una LCD.
        Si me informo mejor de como van las LCD, intentaré buscar una forma de conectar varias LCD (como con un MUX).

        Menuda chapa para decirte que estaba equivocado, eh?

        • Esog Enaug

          Hola.
          Lo último que pones tampoco valdría: Si pones, en el ejemplo, el pin 13 directamente a la LCD1 y a través de la puerta NOT a la LCD2, la LCD1 se pondría a esperar datos siempre, es decir, podrías escribir en la LCD1 o en las dos. Tienes que poner otra puerta que haga que si escribes en la 1 NO se escriba en la 2 y viceversa.

          En definitiva, siempre con dos puertas (o conjuntos de ellas), por que tienes que tomar dos decisiones distintas.

          No se si me explico o no.

  2. La verdad es que no he entendido mucho, pero bueno, ya te dije que no he mirado nada de LCD, así que he comentado desde la total ignorancia, solo sugería una idea si era viable.

    Sólo me queda por decir que es un gran trabajo. Enhorabuena!

  3. fm

    Creo que lo que estás buscando es un I2CLCDextraIO. Puedes verlo en mi web o en el foro arduino.

    La gracia que tiene la placa es que te permite conectar hasta 8 LCDs en el bus I2C. Por otro lado he escrito una librería unas 3.25 veces más rápida que la original de Arduino y en modo I2C es unas 15 más rápida que la LiquidCrystal original de ladyada.

    DISCLAIMER: he puesto información que he diseñado y vendo en mi web.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.

Funciona con WordPress & Tema de Anders Norén