Въведение в I2C LCD адаптерния модул

Опитайте Нашия Инструмент За Премахване На Проблемите





В тази публикация ще разгледаме модула за LCD адаптер, базиран на „I2C“ или „IIC“ или „I square C“, който ще намали жичните връзки между Arduino и LCD дисплея до само 2 проводника, като също така ще спестите тонове GPIO щифтове за други сензори / задвижвания и т.н.

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



Но така или иначе не е нужно да сте експерт с I2C протокол, за да работите с този споменат LCD адаптер.

Илюстрация на I2C връзка:

Илюстрация на I2C връзка:

I2C или IIC означава „Inter-Integrated Circuit“ е серийна компютърна шина, изобретена от полупроводници Philips, днес известни като NXP полупроводници. Тази автобусна система е изобретена през 1982г.



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

Bus е група кабели / проводници, които пренасят данни от един чип към друг чип / една платка към друга платка.

Основното предимство на I2C bus протокола е, че поддържаният микроконтролер или сензори или чипове могат да бъдат свързани помежду си само с два проводника. Предимството на този протокол е, че можем да свържем 127 различни чипа или сензори / драйвери към едно главно устройство, което обикновено е микроконтролер само с 2 проводника.

Какви са двата I2C проводника?

Двата проводника са SDA и SCL, които са съответно серийни данни и сериен часовник.

Серийният часовник или SCL се използва за синхронизиране на комуникацията на данни през I2C шина. SDA или серийните данни е линията за данни, в която действителните данни се предават от главен към подчинен и обратно. Главното устройство контролира серийния часовник и решава за кое подчинено устройство трябва да комуникира. Никое подчинено устройство не може първо да инициира комуникация, само главното устройство може да направи.

Линията за серийни данни е двупосочна и стабилна, след като всеки набор от 8-битови данни е изпратен, приемащото устройство изпраща обратно бит за потвърждение.

Колко бърз е протоколът I2C?

Оригиналната версия на протокола I2C, разработен през 1982 г., поддържа 100 Kbps. Следващата версия е стандартизирана през 1992 г., която поддържа 400Kbps (бърз режим) и поддържа до 1008 устройства. Следващата версия е разработена през 1998 г. с 3,4 Mbps (високоскоростен режим).

Няколко други версии на I2C са разработени през 2000, 2007, 2012 (с 5Mbps Ultra-Fast режим), а последната версия на I2C е разработена през 2014.

Защо изтеглящи резистори в I2C шина?

SDA и SCL са „с отворено източване“, което означава, че и двете линии могат да отидат НИСКО, но не могат да задвижват линиите ВИСОКО, така че на всяка от линиите е свързан издърпващ резистор.

Но с повечето модули I2C като LCD или RTC има вградени съпротивления за изтегляне, така че не е необходимо да свързваме един, освен ако не е посочено.

Издърпващ / издърпващ резистор: Издърпващият резистор е резистор, свързан към + Ve линия на захранването, за да поддържа логическото ниво на линия до HIGH, ако линията не е нито висока, нито ниска.

Падащ резистор е резистор, свързан към –Ve линия на захранването, за да поддържа логическото ниво на линия до LOW, ако линията не е нито висока, нито ниска.

Това също така предотвратява навлизането на шум в линиите.

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

YouTube и Google.

Сега нека да разгледаме I2C LCD модула:

I2C разклонения на LCD модули

Има 16 изходни щифта за LCD дисплей, които могат да бъдат запоени директно към задната част на 16 X 2 LCD модула.

Входните щифтове са + 5V, GND, SDA и SCL. SDA и SCL щифтовете на Arduino Uno са съответно щифтове A4 и A5. За Arduino mega SDA е ПИН # 20, а SCL е ПИН # 21.

Нека сравним как изглежда, когато свързваме LCD към Arduino без адаптера I2C и с адаптера.

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

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

С I2C адаптер:

Arduino с помощта на I2C адаптер

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

Моля, обърнете внимание, че стандартната библиотека Liquid Crystal няма да работи с този I2C LCD адаптер, има специална библиотека за това, която скоро ще бъде разгледана и ние ще ви покажем как да използвате този модул с пример за кодиране.

Как да свържете I2C адаптер към дисплей 16 x 2

В горните раздели на статията научихме основите на I2C протокола и направихме основен преглед на I2C LCD адаптерния модул. В тази публикация ще научим как да свържете I2C LCD адаптерния модул към 16 x 2 LCD дисплей и ще видим как програмираме с пример.

Основното предимство на протокола I2C е, че можем да свържем поддържаните сензори / входно / изходни устройства само в два реда и е полезно за Arduino, тъй като има ограничени GPIO пинове.

Сега нека видим как да свържете модула към LCD.

Модулът има 16 изходни щифта и 4 входни щифта. Можем просто да запоим адаптера в задната част на 16 x 2 LCD дисплея. От 4-те входни щифта, двата са + 5V и GND, останалите два са SDA и SCL.

Виждаме, че спестихме много щифтове в Arduino за други входно / изходни задачи.

Можем да регулираме контраста на дисплея, като регулираме потенциометъра с малка отвертка (маркирана в червено поле).

Подсветката вече може да се контролира в самия програмен код:

lcd. backlight ()

Това ще включи подсветката на LCD дисплея.

lcd.noBacklight ()

Това ще изключи подсветката на LCD дисплея.

Виждаме, че има свързан джъмпер, който е маркиран в червено, ако джъмперът бъде премахнат, подсветката остава ИЗКЛЮЧЕНА независимо от командата на програмата.

Сега хардуерната настройка е завършена, сега нека видим как да кодираме. Моля, не забравяйте, че I2C LCD модулът се нуждае от специални

библиотеката и предварително инсталираната библиотека „liquidcrystal“ няма да работят.

Можете да изтеглите I2C LCD библиотеката от тук и да добавите към Arduino IDE:

github.com/marcoschwartz/LiquidCrystal_I2C

От предишната публикация научихме, че I2C устройствата имат адрес, по който капитанът или микроконтролерът могат да идентифицират устройството и да комуникират.

В повечето случаи за I2C LCD модула адресът ще бъде '0x27'. Но различното производство може да има различен адрес. Трябва да въведем правилния адрес в програмата само тогава вашият LCD дисплей ще функционира.

За да намерите адреса, просто свържете 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 устройства, LCD модулът и RTC или модул с часовник в реално време. И двата модула ще бъдат свързани с два проводника.

Изтеглете следната библиотека:
RTC библиотека: github.com/PaulStoffregen/DS1307RTC
TimeLib.h: github.com/PaulStoffregen/Time

Как да зададете време за RTC

• Отворете Arduino IDE и отворете File> Example> 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 lcd (0x27, 16, 2)

„0x27“ е адресът, който намерихме при сканиране, а 16 и 2 са броят на редовете и колоните на LCD дисплея.

За RTC не е необходимо да намираме адреса, но намерихме, докато сканирахме „0x68“, но така или иначе RTC библиотеката ще се справи.

Сега нека видим доколко намалихме задръстванията на проводниците и запазихме GPIO пинове на Arduino.

Само 4 проводника са свързани към LCD дисплея, маркирани в червено поле.

Също така само 4 проводника са свързани от Arduino и RTC модулът споделя същите линии.

Досега сте придобили основни познания за I2C и как да използвате I2C LCD адаптерния модул.
Харесвате ли тази публикация? Имате ли някакви въпроси? Моля, изразете в раздела за коментари, може да получите бърз отговор.




Предишна: Обикновена схема на тестер за транзисторен диод Напред: Направете тази верига за удължаване на обхвата на IR дистанционно управление