Подключение LCD1602 к Arduino по I2C (HD44780/PCF8574)

Подключить LCD1602 к Arduino (или любой другой LCD на базе микросхем HD44780) не всегда удобно, потому что используются как минимум 6 цифровых выходов. LCD I2C модули на базе микросхем PCF8574 позволяют подключить символьный дисплей к плате Arduino всего по двум сигнальным проводам (SDA и SCL).

PCF8574 — I2C модуль для LCD на базе HD44780

Микросхема PCF8574/PCF8574T обеспечивает расширение портов ввода/вывода для контроллеров через интерфейс I2C и позволит легко решить проблему нехватки цифровых портов. При использовании модуля как расширитель портов ввода/вывода следует учитывать то, что вывод Р3 имеет инверсный выход с открытым коллектором.

Микросхема может использоваться для управления ЖК дисплеем под управлением контроллера HD44780, в 4-х битном режиме. Для этой цели на плате установлена микросхема PCF8574, которая является преобразователем шины I2C в параллельный 8 битный порт.

Компоненты PCF8574 - I2C модуль для LCD на базе HD44780

Плата модуля разведена таким образом, чтобы ее можно было сразу подключить к ЖКИ. На вход подается питание и линии I2C. На плате сразу установлены подтягивающие резисторы на линиях SCL и SDA, потенциометр для регулировки контрастности и питание самого дисплея. Джампер справа включает/отключает подсветку.

Установка библиотеки LiquidCrystal I2C

Для работы с данным модулем необходимо установить библиотеку LiquidCrystal I2C. Скачиваем, распаковываем и закидываем в папку libraries в папке Arduino. В случае, если на момент добавления библиотеки, Arduino IDE была открытой, перезагружаем среду.

Библиотеку можно установить из самой среды следующим образом:

  1. В Arduino IDE открываем менеджер библиотек: Скетч->Подключить библиотеку->Управлять библиотеками…Подключение LCD1602 к Arduino по I2C (PCF8574) - Управлять библиотеками...
  2. В строке поиска вводим «LiquidCrystal I2C», находим библиотеку Фрэнка де Брабандера (Frank de Brabander), выбираем последнюю версию и кликаем Установить.Подключение LCD1602 к Arduino по I2C (PCF8574) - Установка LiquidCrystal I2C
  3. Библиотека установлена (INSTALLED).Подключение LCD1602 к Arduino по I2C (PCF8574) - LiquidCrystal I2C INSTALLED

Описание методов библиотеки LiquidCrystal I2C

LiquidCrystal_I2C(uint8_t, uint8_t, uint8_t)

Конструктор для создания экземпляра класса, первый параметр это I2C адрес устройства, второй — число символов, третий — число строк.

LiquidCrystal_I2C(uint8_t lcd_Addr,uint8_t lcd_cols,uint8_t lcd_rows);

init()

Инициализация ЖК-дисплея.

void init();

backlight()

Включение подсветки дисплея.

void backlight();

setCursor(uint8_t, uint8_t)

Установка позиции курсора.

void setCursor(uint8_t, uint8_t);

clear()

Возвращает курсор в начало экрана.

void clear();

home()

Возвращает курсор в начало экрана и удаляет все, что было на экране до этого.

void home();

write(uint8_t)

Позволяет вывести одиночный символ на экран.

#if defined(ARDUINO) && ARDUINO >= 100
  virtual size_t write(uint8_t);
#else
  virtual void write(uint8_t);
#endif

cursor()

Показывает курсор на экране.

void cursor();

noCursor()

Скрывает курсор на экране.

void noCursor();

blink()

Курсор мигает (если до этого было включено его отображение).

void blink();

noBlink()

Курсор не мигает (если до этого было включено его отображение).

void noBlink();

display()

Позволяет включить дисплей.

void display();

noDisplay()

Позволяет отключить дисплей.

void noDisplay();

scrollDisplayLeft()

Прокручивает экран на один знак влево.

void scrollDisplayLeft();

scrollDisplayRight()

Прокручивает экран на один знак вправо.

void scrollDisplayRight();

autoscroll()

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

void autoscroll();

noAutoscroll()

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

void noAutoscroll();

leftToRight()

Установка направление выводимого текста — слева направо.

void leftToRight();

rightToLeft()

Установка направление выводимого текста — справа налево.

void rightToLeft();

createChar(uint8_t, uint8_t[])

Создает символ. Первый параметр — это номер (код) символа от 0 до 7, а второй — массив 8 битовых масок для создания черных и белых точек.

void createChar(uint8_t, uint8_t[]);

Подключение LCD1602 к Arduino

Модуль оборудован четырех-пиновым разъемом стандарта 2.54мм

  • SCL: последовательная линия тактирования (Serial CLock)
  • SDA: последовательная линия данных (Serial DAta)
  • VCC: «+» питания
  • GND: «-» питания

Выводы отвечающие за интерфейс I2C на платах Arduino на базе различных контроллеров разнятся

Arduino Mega Arduino Uno/Nano/Pro Mini LCD I2C модуль Цвет проводов на фото
GND GND GND Черный
5V 5V VCC Красный
20 (SDA) A4 SDA Зелёный
21 (SCL) A5 SCL Жёлтый

Схема подключения LCD1602 к Arduino по I2C

Схема подключения LCD1602 к Arduino по I2C(HD44780 - PCF8574)

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

/*
  Добавляем необходимые библиотеки
*/
#include <LiquidCrystal_I2C.h>

/*
  Устанавливаем ЖК-дисплей по адресу 0x27, 16 символов и 2 строки
*/
LiquidCrystal_I2C lcd(0x27, 16, 2);

void setup()
{
  /*
    Инициализируем ЖК-дисплей
  */
  lcd.init();
  /*
    Включаем подсветку дисплея
  */
  lcd.backlight();
  /*
    Устанавливаем курсор на первую строку и нулевой символ.
  */
  lcd.setCursor(0, 0);
  /*
    Выводим на экран строку
  */
  lcd.print("   micro-pi.ru  ");
}


void loop()
{
  /*
    Устанавливаем курсор на вторую строку и 3 символ.
  */
  lcd.setCursor(3, 1);
  /*
    Выводим на экран количество секунд с момента запуска ардуины
  */
  lcd.print(millis() / 1000);
  delay(1000);
}

Результат

Подключение LCD1602 к Arduino - Результат
Подключение LCD1602 к Arduino - Результат

Создание собственных символов

С выводом текста разобрались, буквы английского алфавита зашиты в память контроллера. А вот что делать если нужного символа в памяти контроллера нет? Требуемый символ можно сделать вручную. Данный способ частично, ограничение в 7 символов, поможет решить проблему вывода.

Ячейка, в рассматриваемых нами дисплеях, имеет разрешение 5х8 точек. Все, к чему сводится задача создания символа, это написать битовую маску и расставить в ней единички в местах где должны гореть точки и нолики где нет.

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

/*
  Добавляем необходимые библиотеки
*/
#include <LiquidCrystal_I2C.h>

extern uint8_t bell[8];
extern uint8_t note[8];
extern uint8_t clock[8];
extern uint8_t heart[8];
extern uint8_t duck[8];
extern uint8_t check[8];
extern uint8_t cross[8];
extern uint8_t retarrow[8];

/*
  Устанавливаем ЖК-дисплей по адресу 0x27, 16 символов и 2 строки
*/
LiquidCrystal_I2C lcd(0x27, 16, 2);

void setup()
{
  /*
    Инициализируем ЖК-дисплей
  */
  lcd.init();

  /*
    Включаем подсветку дисплея
  */
  lcd.backlight();

  /*
    Добавляем символы
  */
  lcd.createChar(0, bell);
  lcd.createChar(1, note);
  lcd.createChar(2, clock);
  lcd.createChar(3, heart);
  lcd.createChar(4, duck);
  lcd.createChar(5, check);
  lcd.createChar(6, cross);
  lcd.createChar(7, retarrow);

  /*
    Устанавливаем курсор на первую строку и нулевой символ.
  */
  lcd.home();

  /*
    Выводим на экран строку
  */
  lcd.print("Hello world...");
}

void loop()
{
  static char i = 0;

  /*
    Устанавливаем курсор на вторую строку и 'i' символ.
  */
  lcd.setCursor(i, 1);

  /*
    Выводим на экран символ с номером 'i'
  */
  lcd.print(i);

  /*
     Ждём секунду
  */
  delay(1000);

  if (i == 7)
  {
    /*
      Очищаем вторую строку после вывода всех символов
    */

    i = 0;
    lcd.setCursor(0, 1);
    for (char j = 0; j < 16; j++)
    {
      lcd.print(' ');
    }
  }
  else
  {
    i++;
  }
}

/*
  ..O..
  .OOO.
  .OOO.
  .OOO.
  OOOOO
  .....
  ..O..
*/
uint8_t bell[8]  = {
  0b00100,
  0b01110,
  0b01110,
  0b01110,
  0b11111,
  0b00000,
  0b00100
};

/*
  ...O.
  ...OO
  ...O.
  .OOO.
  OOOO.
  .OO..
  .....
*/
uint8_t note[8]  = {
  0b00010,
  0b00011,
  0b00010,
  0b01110,
  0b11110,
  0b01100,
  0b000000000
};

/*
  .....
  .OOO.
  O.O.O
  O.OOO
  O...O
  .OOO.
  .....
*/
uint8_t clock[8] = {
  0b00000,
  0b01110,
  0b10101,
  0b10111,
  0b10001,
  0b01110,
  0b00000
};

/*
  .....
  .O.O.
  OOOOO
  OOOOO
  .OOO.
  ..O..
  .....
*/
uint8_t heart[8] = {
  0b00000,
  0b01010,
  0b11111,
  0b11111,
  0b01110,
  0b00100,
  0b00000
};

/*
  .....
  .OO..
  OOO.O
  .OOOO
  .OOOO
  ..OO.
  .....
*/
uint8_t duck[8]  = {
  0b00000,
  0b01100,
  0b11101,
  0b01111,
  0b01111,
  0b00110,
  0b00000
};

/*
  .....
  ....O
  ...OO
  O.OO.
  OOO..
  .O..O
  .....
*/
uint8_t check[8] = {
  0b00000,
  0b00001,
  0b00011,
  0b10110,
  0b11100,
  0b01001,
  0b00000
};

/*
  .....
  OO.OO
  .OOO.
  ..O..
  .OOO.
  OO.OO
  .....
*/
uint8_t cross[8] = {
  0b00000,
  0b11011,
  0b01110,
  0b00100,
  0b01110,
  0b11011,
  0b00000
};

/*
  ....O
  ....O
  ..O.O
  .O..O
  OOOOO
  .O..O
  ..O..
*/
uint8_t retarrow[8] = {
  0b00001,
  0b00001,
  0b00101,
  0b01001,
  0b11111,
  0b01001,
  0b00100
};

Результат

Подключение LCD1602 к Arduino - Создание собственных символов

Проблемы подключения LCD1602 к Arduino по I2C

Если после загрузки скетча у вас не появилось никакой надписи на дисплее, попробуйте выполнить следующие действия:

  1. Можно регулировать контрастность индикатора потенциометром. Часто символы просто не видны из-за режима контрастности и подсветки.Подключение LCD1602 к Arduino по I2C (HD44780-PCF8574) - контрастность дисплея
  2. Проверьте правильность подключения контактов, подключено ли питание подсветки. Если вы использовали отдельный I2C переходник, то проверьте еще раз качество пайки контактов.
  3. Проверьте правильность I2C адреса. Попробуйте сперва поменять в скетче адрес устройства с 0x20 до 0x27 для PCF8574 или с 0x38 до 0x3F для PCF8574A. Если и это не помогло, можете запустить скетч I2C сканера, который просматривает все подключенные устройства и определяет их адрес методом перебора. Для изменения адресации необходимо установить джамперы в нужное положение, тем самым притянуть выводы A0, A1, A2 к положительному либо отрицательному потенциалу. На плате положения промаркированы.Подключение LCD1602 к Arduino по I2C (HD44780-PCF8574) - адрес

    Подключение LCD1602 к Arduino по I2C (HD44780-PCF8574) - Выбор адресации

  4. Если экран все еще останется нерабочим, попробуйте подключить LCD обычным образом.

Материалы

datasheets PCF8574.pdf
LiquidCrystal_I2C

Купить LCD Adapter PCF8574 на AliExpress

Похожие записи

Комментарии 5

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *