Úvod do modulu adaptéru I2C LCD

Vyzkoušejte Náš Nástroj Pro Odstranění Problémů





V tomto příspěvku se podíváme na modul adaptéru LCD na bázi „I2C“ nebo „IIC“ nebo „I square C“, který sníží připojení vodičů mezi Arduino a LCD displejem na pouhé 2 vodiče, což také ušetří spoustu GPIO pinů pro další senzory / pohony atd.

Než budeme diskutovat o modulu adaptéru I2C LCD, je důležité pochopit, co je sběrnice I2C a jak funguje.



Ale každopádně nemusíte být odborníkem s protokolem I2C, abyste mohli pracovat s touto zmínkou o LCD adaptéru.

Ilustrace připojení I2C:

Ilustrace připojení I2C:

I2C nebo IIC je zkratka pro „Inter-Integrated Circuit“, což je sériová počítačová sběrnice vyvinutá společností polovodiče Philips, dnes známá jako NXP polovodiče. Tento systém sběrnice byl vynalezen v roce 1982.



Co je Bus?

Sběrnice je skupina kabelů / vodičů, které přenášejí data z jednoho čipu na druhý čip / jednu desku s plošnými spoji na jinou desku s plošnými spoji.

Hlavní výhodou protokolu sběrnice I2C je, že podporovaný mikrokontrolér nebo senzory nebo čipy mohou být propojeny pouze dvěma vodiči. Výhodou tohoto protokolu je, že můžeme propojit 127 různých čipů nebo senzorů / ovladačů k jednomu hlavnímu zařízení, kterým je obvykle mikrokontrolér s pouhými 2 dráty.

Jaké jsou dva vodiče I2C?

Dva vodiče jsou SDA a SCL, což jsou sériová data, respektive sériové hodiny.

Sériové hodiny nebo SCL se používají k synchronizaci datové komunikace po sběrnici I2C. SDA nebo sériová data jsou datová linka, ve které jsou skutečná data přenášena z hlavního do podřízeného a naopak. Hlavní zařízení řídí sériové hodiny a rozhoduje, pro které podřízené zařízení potřebuje komunikovat. Žádné podřízené zařízení nemůže zahájit komunikaci jako první, pouze hlavní zařízení.

Sériová datová linka je obousměrná a robustní, po odeslání každé sady 8bitových dat přijímací zařízení odešle zpět potvrzovací bit.

Jak rychlý je protokol I2C?

Původní verze protokolu I2C vyvinutá v roce 1982 podporovala 100 kb / s. Další verze byla standardizována v roce 1992, která podporovala 400 kb / s (rychlý režim) a podporovala až 1008 zařízení. Další verze byla vyvinuta v roce 1998 s rychlostí 3,4 Mb / s (vysokorychlostní režim).

Několik dalších verzí I2C bylo vyvinuto v letech 2000, 2007, 2012 (s ultrarychlým režimem 5 Mb / s) a poslední verze I2C byla vyvinuta v roce 2014.

Proč pull-up rezistory na sběrnici I2C?

SDA a SCL jsou „open-drain“, což znamená, že obě linky mohou jít NÍZKO, ale nemohou řídit linky VYSOKÉ, takže na každé z linek je připojen pull-up rezistor.

Ale u většiny modulů I2C, jako jsou LCD nebo RTC, jsou zabudovány pull-up rezistory, takže není třeba jeden připojovat, pokud není specifikován.

Pull-up / Pull-down rezistor: Pull-up rezistor je rezistor připojený k + Ve vedení napájení, aby udržel logickou úroveň vedení na HIGH, pokud vedení není ani vysoké, ani nízké.

Stahovací rezistor je rezistor připojený k –Ve vedení napájení, aby udržel logickou úroveň vedení na LOW, pokud vedení není ani vysoké, ani nízké.

Tím také zabráníte vstupu hluku do vedení.

Doufáme, že jsme poškrábali povrch protokolu I2C. Pokud potřebujete více informací o protokolu I2C, surfujte dále

YouTube a Google.

Nyní se podívejme na I2C LCD modul:

Pinout I2C LCD modulu

K dispozici je 16 výstupních pinů pro LCD displej, které lze připájet přímo na zadní stranu modulu 16 X 2 LCD.

Vstupní piny jsou + 5V, GND, SDA a SCL. Piny SDA a SCL na Arduino Uno jsou piny A4 a A5. Pro Arduino je mega SDA pin # 20 a SCL je pin # 21.

Porovnejme si, jak to vypadá, když připojíme LCD k Arduinu bez adaptéru I2C a s adaptérem.

Bez adaptéru I2C:

Arduino bez adaptéru I2C

S adaptérem I2C:

Arduino pomocí adaptéru I2C

Adaptér je připájen na zadní straně LCD displeje a jak vidíme, že jsme uložili spoustu pinů GPIO pro další úkoly a také můžeme pokračovat v přidávání dalších 126 zařízení I2C do pinů A4 a A5.

Vezměte prosím na vědomí, že standardní knihovna Liquid Crystal nebude s tímto I2C LCD adaptérem fungovat, k tomu je speciální knihovna, která bude brzy pokryta a my vám ukážeme, jak tento modul použít s příkladem kódování.

Jak připojit adaptér I2C k displeji 16 x 2

Ve výše uvedených částech článku jsme se naučili základy protokolu I2C a udělali základní přehled o modulu adaptéru I2C LCD. V tomto příspěvku se naučíme, jak připojit modul adaptéru I2C LCD k 16 x 2 LCD displeji a uvidíme, jak programovat s příkladem.

Hlavní výhodou protokolu I2C je, že můžeme zapojit podporovaná čidla / vstupní / výstupní zařízení pouze ve dvou linkách a je to užitečné pro Arduino, protože má omezené GPIO piny.

Nyní se podívejme, jak připojit modul k LCD.

Modul má 16 výstupních pinů a 4 vstupní piny. Adaptér stačí připájet k zadní straně 16 x 2 LCD displeje. Ze 4 vstupních pinů jsou dva + 5V a GND, zbytek dvou jsou SDA a SCL.

Vidíme, že jsme v Arduinu uložili spoustu pinů pro další vstupní / výstupní úkoly.

Můžeme upravit kontrast displeje nastavením potenciometru pomocí malého šroubováku (zvýrazněno červeným rámečkem).

Podsvícení lze nyní ovládat v samotném programovém kódu:

lcd.backlight ()

Tím se zapne podsvícení LCD displeje.

lcd.noBacklight ()

Tím se vypne podsvícení LCD displeje.

Vidíme, že je připojena propojka, která je zvýrazněna červeným rámečkem, pokud je propojka odstraněna, podsvícení zůstane VYPNUTO bez ohledu na příkaz programu.

Nyní je nastavení hardwaru hotové, pojďme se podívat, jak kódovat. Pamatujte, že I2C LCD modul potřebuje speciální

knihovna a předinstalovaná knihovna „liquidcrystal“ nebudou fungovat.

Knihovnu I2C LCD si můžete stáhnout odtud a přidat do Arduino IDE:

github.com/marcoschwartz/LiquidCrystal_I2C

Z předchozího příspěvku jsme se dozvěděli, že zařízení I2C mají adresu, pomocí které může hlavní nebo mikrokontrolér identifikovat zařízení a komunikovat.

Ve většině případů by pro I2C LCD modul byla adresa „0x27“. Ale odlišná výroba může mít jinou adresu. Do programu musíme zadat správnou adresu, až poté bude fungovat váš LCD displej.

Chcete-li zjistit adresu, stačí připojit 5V k Vcc a GND ke GND Arduina a SCL pin modulu I2C na A5 a SDA na A4 a nahrát níže uvedený kód.

Toto naskenuje připojená zařízení I2C a zobrazí jejich adresu.

// -------------------------------- //
#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)
}
// -------------------------------- //

Nahrajte kód a otevřete sériový monitor.

Jak vidíme, byla detekována dvě zařízení a jejich adresy jsou zobrazeny, ale pokud chcete zjistit pouze adresu I2C LCD modulu, neměli byste během skenování připojovat žádná další zařízení I2C.
Na závěr jsme tedy dostali adresu „0x27“.

Nyní uděláme jako příklad digitální hodinky, protože existují dvě zařízení I2C, modul LCD a modul RTC nebo modul hodin reálného času. Oba moduly budou propojeny dvěma dráty.

Stáhněte si následující knihovnu:
Knihovna RTC: github.com/PaulStoffregen/DS1307RTC
TimeLib.h: github.com/PaulStoffregen/Time

Jak nastavit čas na RTC

• Otevřete Arduino IDE a přejděte do Soubor> Příklad> DS1307RTC> nastavit čas.
• Nahrajte kód s dokončeným hardwarem a otevřeným sériovým monitorem a jste hotovi.

Kruhový diagram:

Program:

//------------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-------//

Poznámka:

LiquidCrystal_I2C lcd (0x27, 16, 2)

„0x27“ je adresa, kterou jsme zjistili skenováním, a 16 a 2 jsou počet řádků a sloupců na LCD displeji.

U RTC nepotřebujeme najít adresu, ale našli jsme to při skenování „0x68“, ale knihovna RTC to stejně zvládne.

Nyní se podívejme, jak moc jsme snížili přetížení vodičů a uložili GPIO piny na Arduinu.

K LCD displeji jsou připojeny pouze 4 vodiče zvýrazněné červeným rámečkem.

Z Arduina jsou také připojeny pouze 4 vodiče a modul RTC sdílí stejné linky.

Nyní jste získali základní znalosti o I2C a o tom, jak používat modul adaptéru I2C LCD.
Líbí se vám tento příspěvek? Máte nějaké dotazy? V sekci komentářů prosím vyjádřete, můžete obdržet rychlou odpověď.




Předchozí: Jednoduchý tranzistorový diodový testovací obvod Další: Vytvořte tento obvod dálkového ovládání IR dálkového ovládání