Введение в модуль адаптера ЖК-дисплея I2C

Попробуйте наш инструмент устранения неполадок





В этом посте мы рассмотрим модуль адаптера ЖК-дисплея на основе «I2C», «IIC» или «I square C», который сократит количество проводных соединений между Arduino и ЖК-дисплеем до 2 проводов, а также сэкономит тонны контактов GPIO для другие датчики / приводы и т. д.

Прежде чем мы обсудим модуль адаптера I2C LCD, важно понять, что такое шина I2C и как она работает.



Но в любом случае вам не нужно быть экспертом в протоколе I2C, чтобы работать с этим упомянутым ЖК-адаптером.

Иллюстрация подключения I2C:

Иллюстрация подключения I2C:

I2C или IIC расшифровывается как «Inter-Integrated Circuit» и представляет собой последовательную компьютерную шину, изобретенную Philips Semiconductors, сегодня известную как полупроводники NXP. Эта автобусная система была изобретена в 1982 году.



Что такое автобус?

Шина - это группа кабелей / проводов, по которым данные передаются от одной микросхемы к другой микросхеме / с одной печатной платы на другую печатную плату.

Основное преимущество протокола шины I2C заключается в том, что поддерживаемый микроконтроллер, датчики или микросхемы могут быть связаны между собой всего двумя проводами. Сногсшибательное преимущество этого протокола заключается в том, что мы можем соединить 127 различных микросхем или датчиков / драйверов к одному главному устройству, которое обычно представляет собой микроконтроллер всего с 2 проводами.

Какие два провода I2C?

Два провода - это SDA и SCL, которые являются последовательными данными и последовательными часами соответственно.

Последовательные часы или SCL используются для синхронизации передачи данных по шине I2C. SDA или последовательные данные - это линия данных, в которой фактические данные передаются от ведущего к ведомому и наоборот. Ведущее устройство управляет последовательными часами и решает, для какого ведомого устройства необходимо установить связь. Ни одно ведомое устройство не может инициировать связь первым, это может сделать только ведущее устройство.

Линия последовательных данных является двунаправленной и надежной, после отправки каждого набора из 8-битных данных принимающее устройство отправляет обратно бит подтверждения.

Насколько быстр протокол I2C?

Первоначальная версия протокола I2C, разработанная в 1982 году, поддерживала 100 Кбит / с. Следующая версия была стандартизирована в 1992 году и поддерживала 400 Кбит / с (быстрый режим) и поддерживала до 1008 устройств. Следующая версия была разработана в 1998 году со скоростью 3,4 Мбит / с (высокоскоростной режим).

Несколько других версий I2C были разработаны в 2000, 2007, 2012 годах (со сверхбыстрым режимом 5 Мбит / с), а последняя версия I2C была разработана в 2014 году.

Зачем нужны подтягивающие резисторы в шине I2C?

SDA и SCL имеют «открытый сток», что означает, что обе линии могут перейти в НИЗКИЙ уровень, но не могут управлять линиями в ВЫСОКОМ состоянии, поэтому подтягивающий резистор подключен к каждой из линий.

Но с большинством модулей I2C, таких как LCD или RTC, встроены подтягивающие резисторы, поэтому нам не нужно подключать их, если это не указано.

Подтягивающий / понижающий резистор: Подтягивающий резистор - это резистор, подключенный к линии + Ve источника питания, чтобы поддерживать логический уровень линии на ВЫСОКОМ уровне, если линия не является ни высокой, ни низкой.

Понижающий резистор - это резистор, подключенный к линии –Ve источника питания, чтобы поддерживать логический уровень линии на НИЗКОМ уровне, если линия не является ни высокой, ни низкой.

Это также предотвращает попадание шума в линии.

Мы надеемся, что мы коснулись поверхности протокола I2C, если вам нужна дополнительная информация о протоколе I2C, перейдите по ссылке

YouTube и Google.

Теперь посмотрим на ЖК-модуль I2C:

Распиновка ЖК-модуля I2C

Есть 16 выходных контактов для ЖК-дисплея, которые можно припаять непосредственно к задней части ЖК-модуля 16 X 2.

Входные контакты: + 5V, GND, SDA и SCL. Контакты SDA и SCL на Arduino Uno - это контакты A4 и A5 соответственно. Для Arduino mega SDA - это контакт №20, а SCL - контакт №21.

Давайте сравним, как это выглядит, когда мы подключаем ЖК-дисплей к Arduino без адаптера I2C и с адаптером.

Без адаптера I2C:

Arduino без адаптера I2C

С адаптером I2C:

Arduino с использованием адаптера I2C

Адаптер припаян к задней части ЖК-дисплея, и, как мы видим, мы сохранили множество контактов GPIO для других задач, а также можем продолжить добавление еще 126 устройств I2C к контактам A4 и A5.

Обратите внимание, что стандартная библиотека Liquid Crystal не будет работать с этим ЖК-адаптером I2C, для этого есть специальная библиотека, о которой скоро расскажем, и мы покажем вам, как использовать этот модуль с примером кодирования.

Как подключить адаптер I2C к дисплею 16 x 2

В приведенных выше разделах статьи мы изучили основы протокола I2C и сделали базовый обзор модуля адаптера I2C LCD. В этом посте мы узнаем, как подключить модуль адаптера ЖК-дисплея I2C к ЖК-дисплею 16 x 2, и посмотрим, как программировать на примере.

Основное преимущество протокола I2C заключается в том, что мы можем подключить поддерживаемые датчики / устройства ввода / вывода всего двумя линиями, и это полезно с Arduino, поскольку у него ограниченное количество контактов GPIO.

Теперь посмотрим, как подключить модуль к ЖК-дисплею.

Модуль имеет 16 выходных контактов и 4 входных контакта. Мы можем просто припаять адаптер к задней части ЖК-дисплея 16 x 2. Из 4 входных контактов два - + 5V и GND, остальные два - SDA и SCL.

Мы видим, что мы сохранили много контактов на Arduino для других задач ввода / вывода.

Мы можем регулировать контрастность дисплея, регулируя потенциометр с помощью маленькой отвертки (выделено красным квадратом).

Подсветкой теперь можно управлять в самом программном коде:

lcd.backlight ()

Это включит подсветку ЖК-дисплея.

lcd.noBacklight ()

Это выключит подсветку ЖК-дисплея.

Мы видим, что перемычка подключена, которая выделена красным квадратом, если перемычка снята, подсветка остается выключенной независимо от команды программы.

Теперь настройка оборудования завершена, теперь давайте посмотрим, как программировать. Помните, что ЖК-модуль I2C требует особого

библиотека и предустановленная библиотека «liquidcrystal» работать не будут.

Вы можете скачать библиотеку I2C LCD здесь и добавить в Arduino IDE:

github.com/marcoschwartz/LiquidCrystal_I2C

Из предыдущего поста мы узнали, что устройства I2C имеют адрес, по которому мастер или микроконтроллер могут идентифицировать устройство и общаться.

В большинстве случаев для ЖК-модуля I2C адрес будет «0x27». Но у разных производителей могут быть разные адреса. Нам нужно ввести правильный адрес в программу, только тогда ваш ЖК-дисплей будет работать.

Чтобы найти адрес, просто подключите 5V к Vcc и GND к GND Arduino, а вывод SCL модуля I2C к A5 и SDA к A4 и загрузите приведенный ниже код.

Это просканирует подключенные устройства I2C и покажет их адреса.

// -------------------------------- //
#include
void setup()
{
Wire.begin()
Serial.begin(9600)
while (!Serial)
Serial.println('-----------------------')
Serial.println('I2C Device Scanner')
Serial.println('-----------------------')
}
void loop()
{
byte error
byte address
int Devices
Serial.println('Scanning...')
Devices = 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(' !')
Devices++
}
else if (error == 4)
{
Serial.print('Unknown error at address 0x')
if (address <16)
Serial.print('0')
Serial.println(address, HEX)
}
}
if (Devices == 0)
{
Serial.println('No I2C devices found ')
}
else
{
Serial.println('-------------- done -------------')
Serial.println('')
}
delay(5000)
}
// -------------------------------- //

Загрузите код и откройте монитор последовательного порта.

Как мы видим, были обнаружены два устройства и отображены их адреса, но если вы хотите найти только адрес модуля I2C LCD, вам не следует подключать какие-либо другие устройства I2C во время сканирования.
В итоге мы получили адрес «0x27».

Теперь мы собираемся сделать цифровые часы в качестве примера, потому что есть два устройства I2C, ЖК-модуль и RTC или модуль часов реального времени. Оба модуля будут соединены двумя проводами.

Загрузите следующую библиотеку:
Библиотека RTC: github.com/PaulStoffregen/DS1307RTC
TimeLib.h: github.com/PaulStoffregen/Time

Как установить время в RTC

• Откройте Arduino IDE и перейдите в Файл> Пример> DS1307RTC> установить время.
• Загрузите код с готовым оборудованием и откройте монитор последовательного порта, и все готово.

Принципиальная электрическая схема:

Программа:

//------------Program Developed by R.Girish-------//
#include
#include
#include
#include
LiquidCrystal_I2C lcd(0x27, 16, 2)
void setup()
{
lcd.init()
lcd.backlight()
}
void loop()
{
tmElements_t tm
lcd.clear()
if (RTC.read(tm))
{
if (tm.Hour >= 12)
{
lcd.setCursor(14, 0)
lcd.print('PM')
}
if (tm.Hour <12)
{
lcd.setCursor(14, 0)
lcd.print('AM')
}
lcd.setCursor(0, 0)
lcd.print('TIME:')
if (tm.Hour > 12)
{
if (tm.Hour == 13) lcd.print('01')
if (tm.Hour == 14) lcd.print('02')
if (tm.Hour == 15) lcd.print('03')
if (tm.Hour == 16) lcd.print('04')
if (tm.Hour == 17) lcd.print('05')
if (tm.Hour == 18) lcd.print('06')
if (tm.Hour == 19) lcd.print('07')
if (tm.Hour == 20) lcd.print('08')
if (tm.Hour == 21) lcd.print('09')
if (tm.Hour == 22) lcd.print('10')
if (tm.Hour == 23) lcd.print('11')
}
else
{
lcd.print(tm.Hour)
}
lcd.print(':')
lcd.print(tm.Minute)
lcd.print(':')
lcd.print(tm.Second)
lcd.setCursor(0, 1)
lcd.print('DATE:')
lcd.print(tm.Day)
lcd.print('/')
lcd.print(tm.Month)
lcd.print('/')
lcd.print(tmYearToCalendar(tm.Year))
} else {
if (RTC.chipPresent())
{
lcd.setCursor(0, 0)
lcd.print('RTC stopped!!!')
lcd.setCursor(0, 1)
lcd.print('Run SetTime code')
} else {
lcd.clear()
lcd.setCursor(0, 0)
lcd.print('Read error!')
lcd.setCursor(0, 1)
lcd.print('Check circuitry!')
}
}
delay(1000)
}
//------------Program Developed by R.Girish-------//

Примечание:

LiquidCrystal_I2C жк (0x27, 16, 2)

«0x27» - это адрес, который мы нашли при сканировании, а 16 и 2 - это количество строк и столбцов на ЖК-дисплее.

Для RTC нам не нужно находить адрес, но мы нашли при сканировании «0x68», но в любом случае библиотека RTC справится с этим.

Теперь давайте посмотрим, насколько мы уменьшили перегрузку проводов и сохранили контакты GPIO на Arduino.

К ЖК-дисплею подключены всего 4 провода, выделенные красным прямоугольником.

Также только 4 провода подключены от Arduino, и модуль RTC использует те же линии.

К настоящему времени вы получили базовые знания о I2C и о том, как использовать модуль адаптера I2C LCD.
Вам нравится этот пост? У вас есть вопросы? Пожалуйста, выразите в разделе комментариев, вы можете получить быстрый ответ.




Предыдущая статья: Простая схема тестера транзисторных диодов Далее: Сделайте эту схему расширителя диапазона ИК-пульта дистанционного управления