четверг, 7 мая 2015 г.

Подключение LCD к Arduino по шине I2C.


Подключение LCD по шине I2C заметно сокращает количество соединений. В продаже есть LCD с уже встроенным модулем I2C, а также отдельно I2C адаптеры.


На фото один из таких адаптеров, который можно просто припаять к LCD.


Адаптер имеет контакты VCC, GND, SDA, SCL, которые подсоеднияют к соответствующим контактам Arduino (на Arduino UNO - SDA к A4 , SCL к A5).


(На рисунке - черный провод - SCL , коричневый - SDA).

Для Arduino IDE потребуется библиотека LiquidCrystal_I2C. 

Пример скетча:


#include <Wire.h> 
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27,16,2);  //установить адрес LCD 0х27, дисплей 16х2. Если дисплей, например 20х4, то 16,2 изменить на 20,4
void setup()
{
 lcd.init();                      // инициализация LCD 

 lcd.backlight(); //Включаем подсветку LCD
 lcd.print("iq-channel.ru"); //текст на LCD
}
void loop()
{
}


Обратите внимание, что адрес LCD в скетче - 0х27. В зависимости от типа применяющихся микросхем в адаптере, адрес может меняться. Кроме того, адрес можно менять с помощью перемычек А0, А1, А2 на плате адаптера.

Узнать I2С адрес устройства можно с помощью I2C-сканнера. Подключите устройство к Arduino и залейте скетч:

// i2c_scanner

// Version 4, March 3, 2013, Using Arduino 1.0.3
//    by Arduino.cc user Krodal.
//    Changes by louarnold removed.
//    Scanning addresses changed from 0...127 to 1...119,
//    according to the i2c scanner by Nick Gammon
//    http://www.gammon.com.au/forum/?id=10896
// Version 5, March 28, 2013
//    As version 4, but address scans now to 127.
//    A sensor seems to use address 120.
// 
// This sketch tests the standard 7-bit addresses
// Devices with higher bit address might not be seen properly.
//

#include <Wire.h>

void setup()
{
  Wire.begin();

  Serial.begin(9600);
  Serial.println("\nI2C Scanner");
}

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

  Serial.println("Scanning...");

  nDevices = 0;
  for(address = 1; address < 127; address++ ) 
  {
    // The i2c_scanner uses the return value of
    // the Write.endTransmisstion to see if
    // a device did acknowledge to the address.
    Wire.beginTransmission(address);
    error = Wire.endTransmission();

    if (error == 0)
    {
      Serial.print("I2C device found at address 0x");
      if (address<16) 
        Serial.print("0");
      Serial.print(address,HEX);
      Serial.println("  !");

      nDevices++;
    }
    else if (error==4) 
    {
      Serial.print("Unknow error at address 0x");
      if (address<16) 
        Serial.print("0");
      Serial.println(address,HEX);
    }    
  }
  if (nDevices == 0)
    Serial.println("No I2C devices found\n");
  else
    Serial.println("done\n");

  delay(5000);           // wait 5 seconds for next scan
}

В мониторе последовательного порта на Arduino IDE увидите адрес устройства.



Если есть вопросы - пишите в "Комментарии". Рад буду помочь!





Комментариев нет:

Отправить комментарий