Duda control 2 LCD 4x20 a través de I2C

Hola buenas,

Soy nuevo en el foro, este es mi primer post.

Estoy empezando en esto del mundo arduino, y necesitaría consejo de alguien más experto para la siguiente duda.

Seria posible controlar 2 LCD (4x20 en este caso) con una sola placa por i2c??

He visto que la Leonardo tiene 2 puertos i2c. Podria usarlos para conectar cada una de ellas y comunicarlas sin mas?

Y en las placas que solo tienen una salida i2c. Podria crear un bus entre el arduino y las 2 LCDs puenteandolos en paralelo (con sus correspondientes resistencias)? Como tendría entonces que asignar direcciones de memoria a los elementos del bus i2c (en este caso las LCD) para escribir en la correspondiente?

Gracias!!

Bueno esta claro que partes de un error conceptual. I2C es un protocolo que permite manejar muchos dispositivos direccionándolos de modo que usar dos puertos i2C es para otros casos.
Cada dispositivo se direcciona con un address (dirección de 3 bits) de modo que si modificas la dirección de los dos LCDs no vas a tener problemas. Aparecen como A0 A1 y A2 y normalmente estan fijos en los módulos como el que mencionas. Pero tienen la opción de poder ajustarse a otra configuración.

Como no pusiste de que módulo hablamos no puedo decirte como configurarlo.
Busca las direcciones que te expliqué y lo vemos.

Buenas Surbyte,

Gracias por contestar.

La verdad es que estoy un poco verde en el tema. Si por módulo te refieres a la LCD, mi idea es utilizar unas similares a las del siguiente enlace.

LCD 4x20

Si por módulo te refieres a la placa de arduino a usar, no lo tengo muy claro. He estado leyendo y creo que la Arduino Due se adapta bien a lo que quiero hacer ( el proyecto sería unos marcadores para un circuito de scalextric, en el que por cada LCD se muestra el numero de vueltas, velocidad y mejor vuelta de cada jugador). Además controlo una serie de leds que quiero poner en una recta que se vayan encendiendo consecutivamente cada 250ms. Con lo que necesito 15 salidas digitales (de sobra con la arduino Due).

El problema que tengo es como controlar dichas LCD con la Due. Según me dices, bastaría con poner diferentes direcciónes hardware en las LCD, es así? O dicha dirección se configura por software?

Y de que manera me comunicaría con cada una de ellas en el código?? Es decir, como le indico al programa a que LCD debe mandar los datos?

Gracias por tu tiempo y ayuda, y perdón de nuevo. Soy bastante novato.

En el link (en el que no usaste tags asi que intenta editarlo para que se vea como indica las reglas del foro), se menciona la dirección I2C Address: 0x27

Este modulo transforma cualquier LCD para ser usado via i2C y como lees permite cambiar la dirección de 0x20 (que es la que viene por defecto) hasta 0x27 asi que resuelto tu problema

Modulo i2c para LCD

Gracias, así lo haré. :wink:

Pero sigo con la duda de como hago para mostrar los datos en una u otra, es decir, como debo decirle al programa que envíe los datos a una dirección (LCD1) o a otra (LCD2)

Investigaré a fondo a ver si veo algo

Ahh es muy facil, cuando veas la librería LCD_I2C entenderás como funciona. Te paso un ejemplo

Aca un ejemplo como el que vas a usar.
En este ejemplo se configuran dos LCDs de 16x2 caracteres y dirección 0x20 para el primero.
Y luego definí otro como lcd2 en la dirección 0x21.
Tranquilamente puedes definir un LCD de 20x4 si quieres.

/*
 * Displays text sent over the serial port (e.g. from the Serial Monitor) on
 * an attached LCD.
 */
#include <Wire.h> 
#include <LiquidCrystal_I2C.h>

LiquidCrystal_I2C lcd1(0x20,16,2);  // set the LCD address to 0x20 for a 16 chars and 2 line display
LiquidCrystal_I2C lcd2(0x21,16,2);  // set the LCD address to 0x20 for a 16 chars and 2 line display

void setup()
{
  lcd1.init();                      // initialize the lcd 
  lcd1.backlight();
  lcd2.init();                      // initialize the lcd 
  lcd2.backlight();

  Serial.begin(9600);
}

void loop()
{
  // when characters arrive over the serial port...
  if (Serial.available()) {
    // wait a bit for the entire message to arrive
    delay(100);
    // clear the screen
    lcd1.clear();
    lcd2.clear();
    // read all the available characters
    while (Serial.available() > 0) {
      // display each character to the LCD
      lcd1.write(Serial.read());   // repito el caracter enviado por serial en ambos lcd's
      lcd2.write(Serial.read());

    }
  }
}

Eso es justo lo que necesitaba.

Muchísimas gracias!!!!