viernes, 23 de marzo de 2012

Arduino + LCD vía I2C

Hace una semana me llegó un display LCD 16x2 con interfaz de conexión i2c, no había tenido oportunidad de probarlo hasta hace unos días.
La gracia de este LCD está en la interfaz, que requiere sólo 4 pines:
  • Vcc (+5V)
  • GND
  • SDA (TX Data)
  • SCL (RX Data)
La comunicación de datos se efectúa mediante i2c, el que emplea un bus de comunicación de dos cables, los que alimentan y comunican dispositivos identificados por una dirección física. El bus permite velocidades entre 100Kbits/s a 400Kbits/s y la transmisión de datos se efectúa en palabras de 8bits.

Para conectar el LCD al Arduino se debe emplear los pines 4 y 5 para SDA y SCL respectivamente. Las conexiones quedarían así:
Finalmente, una vez que hemos efectuado las conexiones debemos cargar algún programa (se requiere la librería LiquidCrystal_I2C):
#include <Wire.h>
 
#include <LiquidCrystal_I2C.h>

LiquidCrystal_I2C lcd(0x27,16,2); // 0x27 es la direccion del LCD 16x2

void setup(){
    lcd.init(); 
    lcd.backlight(); //enciende la iluminacion
    lcd.setCursor(0, 0);
    lcd.print("Probando i2c");
}

void loop(){
    delay(1000);
}


7 comentarios:

Esparbel dijo...
Este comentario ha sido eliminado por el autor.
Esparbel dijo...

Buen post y buena información.¿Que función cumplen las resistencias?.

Un saludo.

Nicu FLORICA dijo...

very good.. thx

Aitor Martin dijo...

En el bus I2C es importante colocar una resistencia de pull-up a cada linea, tanto a la SDA como a la SCL, porque son con estas resistencias precisamente las que le marcan la velocidad de transmisión al bus. Prueba con resistencias pull-up de 4K7 que suele ser un valor bastante estándar, pero recuerda que dependiendo de la velocidad hay que subir o bajar el valor de estas pull-ups.

Microchip en este documento (http://ww1.microchip.com/downloads/en/DeviceDoc/i2c.pdf) aconseja:

4K7<100kbps
2K2>100kps
1K>400Kbps

Prueba a ver si simplemente con esto ya comunicas.

Saludos.
____________

Aitor Martin dijo...
Este comentario ha sido eliminado por el autor.
Unknown dijo...

Hola
La direccion del LCD has puesto que es la 0x27. ¿Cómo sabes que es esta dirección?

En caso de ser la dirección que tu asignas al LCD ¿Por qué sabe el bus que esa es la dirección del LCD y no la de otro dispositivo I2C?

Eduardo Villagrán Morales dijo...

Cada chip i2c tiene una dirección. Esta se define por medio de pines o jumpers en caso de placas.
Luego cada dispositivo solo ejecuta instrucciones que le corresponden según la dirección.

El LCD que tengo permite elegir entre 8 direcciones, solo moviendo 3 jumpers (2³). Por lo que podría tener 8 LCD independientes usando el mismo tipo de chip i2c. Podría usar otro tipo de LCD i2c que usen otro rango de direcciones para agregar más pantallas.