г. Москва, ул.Новороссийская, дом 21, к.64. м.Люблино,ПН-ПТ с 10.00 до 19.30 и СБ с 12.00 до 16.00
+7(985) 997-37-74
24.10.2016

Решаем проблему не рабочей I2C связи для LCD 1602

24.10.2016

 Дисплеи winstar на контроллере hd44780 довольно таки массово используются повсеместно. Но стандартное его подключение по 16 выводным линиям к Arduino не совсем удобно. Масса проводов занимает и без того драгоценные пины.

 

 

 

 Но в данной ситуации есть выход! Это модуль переходник I2Cдля нашего LCD. Подключаем по двум проводам и все здорово! Но не тут то было… Для начала скачиваем и устанавливаем библиотеку для работы с I2C дисплеем, называется она LiquidCrystal_I2C. Далее необходимо задать адрес дисплея указывается он в этой строчке:

 

Стоит отметить, что адрес 0x27 стандартен для большинства модулей и идет по умолчанию но…..бывают и отклонения от правил. Иногда он определяется, как стандартный но дисплей с ним не работает. Проверить адрес можно довольно таки просто записав нижеприведенную программу (I2Cscanner) в плату Arduino : 

 

#include <Wire.h>
void setup()
{
  Wire.begin();
 
  Serial.begin(9600);
  while (!Serial);             
  Serial.println("\nI2C Scanner");
}
void loop()
{
  byte error, address;
  int nDevices;
 
  Serial.println("Scanning...");
  nDevices = 0;
  for(address = 1; address < 127; 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);         
}

 Далее открываем serialmonitorи видим считанный адрес. Но как и говорилось ранее иногда модуль по какой то причине не работает с адресом 0x27. Что же делать?

В таком случае на плате модуля I2Cсушествуют перемычки для переключения на другой адрес

На рисунке обозначены как A0,A1,A2:

 

 Замыкая какую либо из них мы получаем новый адрес и все работает!

Например замкнем A0. Загрузим скетч сканера на плату получим следующее:

 

 Прописываем адрес в программу загружаем и получаем: