miércoles, 29 de noviembre de 2017

Como trabajar con un LCD con modulo I2C en Arduino en 3 pasos para un LCD 20x4 ( o 16x2)

Como trabajar con un LCD con modulo I2C en Arduino en 4 pasos para un LCD 20x4 ( o 16x2)

Paso 1. Alambrar el modulo I2C al Arduino UNO
SDA - Pin A4 de Arduino
SCL - Pin A4 de Arduino
VCC - Fuente Arduino
GND - Tierra Arduino

Paso 2. Escanear la dirección del módulo con el siguiente código

//Descargado de:
//https://miarduinounotieneunblog.blogspot.com.co/2015/12/display-lcd-16x2-con-comunicacion-i2c.html

/*  TITULO: Escaner de direcciones I2C

    AUTOR:
   
    MARIANO DEL CAMPO GARCÍA (@2016) --> INGENIERO TÉCNICO INDUSTRIAL ESPECIALIDAD ELECTRÓNICA
    - FACEBOOK: https://www.facebook.com/mariano.delcampogarcia
    - TWITTER: https://twitter.com/MarianoCampoGa
    - CORREO: marianodc83@gmail.com
   
   
    DESCRIPCIÓN DEL PROGRAMA
   
    Este programa sirve para buscar la dirección de comunicación I2C, en dispositivos conectados a nuestro
    Arduino mediante este protocolo de comunicación. El programa nos envía todas las direcciones de los
    dispositivos I2C que tengamos conectados en un determinado instante a través del monitor serie del IDE
    de Arduino. En este caso vamos a utilizar el escaner I2C para encontrar la dirección de un display LCD
    1602 conectado a través de este protocolo de comunicación.
 

    ESQUEMA DE CONEXION
   
                                      +-----+
         +----[PWR]-------------------| USB |--+
         |                            +-----+  |
         |         GND/RST2  [ ][ ]            |
         |       MOSI2/SCK2  [ ][ ]  A5/SCL[ ] |   SCL del módulo I2C conectado al LCD 1602
         |          5V/MISO2 [ ][ ]  A4/SDA[ ] |   SDA del módulo I2C conectado al LCD 1602
         |                             AREF[ ] |
         |                              GND[ ] |
         | [ ]N/C                    SCK/13[ ] |  
         | [ ]IOREF                 MISO/12[ ] |  
         | [ ]RST                   MOSI/11[ ]~|  
         | [ ]3V3    +---+               10[ ]~|  
         | [ ]5v    -| A |-               9[ ]~|  
         | [ ]GND   -| R |-               8[ ] |  
         | [ ]GND   -| D |-                    |
         | [ ]Vin   -| U |-               7[ ] |  
         |          -| I |-               6[ ]~|  
         | [ ]A0    -| N |-               5[ ]~|  
         | [ ]A1    -| O |-               4[ ] |  
         | [ ]A2     +---+           INT1/3[ ]~| 
         | [ ]A3                     INT0/2[ ] |  
         | [ ]A4/SDA  RST SCK MISO     TX>1[ ] |  
         | [ ]A5/SCL  [ ] [ ] [ ]      RX<0[ ] |  
         |            [ ] [ ] [ ]              |
         |  UNO_R3    GND MOSI 5V  ____________/
          \_______________________/

  NOTAS:
   - La alimentación y la masa del módulo LCM 1602 I2C V1 instalado en el LCD 1602, van directamente conectadas
     a VCC (+5V) y GND respectivamente. 
*/

// Librería necesaria para comunicación I2C
#include <Wire.h>


void setup()
{
  Wire.begin(); // Iniciamos la comunicación I2C

  Serial.begin(9600); // Iniciamos la comunicación con el monitor serie
  //while (!Serial);             // Leonardo: wait for serial monitor
  Serial.println("\nEscaner de direcciones I2C");
}


void loop()
{
  byte error, address;
  int nDevices;

  Serial.println("Escaneando...");

  nDevices = 0;
  for(address = 1; address < 127; address++ )
  {
    // Se utiliza el valor de retorno de Write.endTransmisstion() para ver si se ha reconocido
    // o no la dirección I2C de un dispositivo
  
    Wire.beginTransmission(address);
    error = Wire.endTransmission();

    if (error == 0)
    {
      Serial.print("Dispositivo I2C encontrado en la direccion 0x");
      if (address<16)
        Serial.print("0");
      Serial.print(address,HEX);
      Serial.println("!");

      nDevices++;
    }
    else if (error == 4)
    {
      Serial.print("Error desconocido en la direccion 0x");
      if (address<16)
        Serial.print("0");
      Serial.println(address,HEX);
    }   
  }
  if (nDevices == 0)
    Serial.println("No se han encontrado direcciones I2C de ningun dispositivo \n");
  else
    Serial.println("Hecho\n");

  delay(5000);           // Espera 5 segundos hasta el siguiente escaneo
}



Paso 3. Descargar la libreria desde Github, e instalarla en Arduino (Programa -> Incluir Libreria...)

https://github.com/fdebrabander/Arduino-LiquidCrystal-I2C-library


 https://cloud.mail.ru/public/4q5r/YzCuu7hEW

Paso 4. Hola mundo del LCD con I2C
Tener en cuenta escribir la dirección del escaneo en la creación del objeto: lcd(0x3F, 20, 4), en este caso el escaneo nos arrojo 0x3f



#include <Wire.h>
#include <LiquidCrystal_I2C.h>

// Set the LCD address to 0x3F for a 16 chars and 2 line display
LiquidCrystal_I2C lcd(0x3F, 20, 4);

void setup()
{
  // initialize the LCD
  lcd.begin();

  // Turn on the blacklight and print a message.
  lcd.backlight();
  lcd.print("Hello, world!");
}

void loop()
{
  // Do nothing here...
}




Otro enlace interesante:
http://osoyoo.com/2017/01/15/use-arduino-serial-port-to-talk-with-i2c-lcd-display/

No hay comentarios:

Publicar un comentario