Úvod do modulu adaptéra I2C LCD

Vyskúšajte Náš Nástroj Na Odstránenie Problémov





V tomto príspevku sa pozrieme na modul adaptéra LCD na báze „I2C“ alebo „IIC“ alebo „I square C“, ktorý zredukuje káblové spojenia medzi Arduino a LCD displejom iba na 2 vodiče, čo tiež ušetrí tony GPIO pinov pre iné snímače / pohony atď.

Predtým, ako diskutujeme o module adaptéra I2C LCD, je dôležité pochopiť, čo je zbernica I2C a ako funguje.



Ale na prácu s touto zmienkou o adaptéri LCD nemusíte byť odborníkom na protokol I2C.

Ilustrácia pripojenia I2C:

Ilustrácia pripojenia I2C:

I2C alebo IIC znamená „Inter-Integrated Circuit“ je sériová počítačová zbernica vynájdená polovodičmi spoločnosti Philips, dnes známa ako NXP polovodiče. Tento systém zbernice bol vynájdený v roku 1982.



Čo je to Bus?

Zbernica je skupina káblov / vodičov, ktoré prenášajú údaje z jedného čipu na druhý čip / jednu dosku s plošnými spojmi do druhej dosky s plošnými spojmi.

Hlavnou výhodou protokolu I2C zbernice je, že podporovaný mikrokontrolér alebo senzory alebo čipy môžu byť prepojené iba dvoma vodičmi. Výhodou tohto protokolu je, že môžeme prepojiť 127 rôznych čipov alebo senzorov / ovládačov s jedným hlavným zariadením, ktorým je zvyčajne mikrokontrolér, iba s dvoma vodičmi.

Čo sú dva vodiče I2C?

Dva vodiče sú SDA a SCL, čo sú sériové dáta a sériové hodiny.

Sériové hodiny alebo SCL sa používajú na synchronizáciu dátovej komunikácie po zbernici I2C. SDA alebo sériové dáta sú dátové linky, v ktorých sa skutočné dáta prenášajú z hlavnej jednotky do podradenej jednotky a naopak. Hlavné zariadenie riadi sériové hodiny a rozhoduje, s ktorým podriadeným zariadením musí komunikovať. Žiadne podriadené zariadenie nemôže najskôr iniciovať komunikáciu, môže to robiť iba hlavné zariadenie.

Sériová dátová linka je obojsmerná a robustná. Po odoslaní každej sady 8-bitových údajov prijímajúce zariadenie pošle späť potvrdzovací bit.

Aký rýchly je protokol I2C?

Pôvodná verzia protokolu I2C vyvinutá v roku 1982 podporovala 100 kb / s. Ďalšia verzia bola štandardizovaná v roku 1992 a podporovala rýchlosť 400 kb / s (rýchly režim) a podporovala až 1008 zariadení. Ďalšia verzia bola vyvinutá v roku 1998 s rýchlosťou 3,4 Mb / s (vysokorýchlostný režim).

Niekoľko ďalších verzií I2C bolo vyvinutých v rokoch 2000, 2007, 2012 (s ultra rýchlym režimom 5 Mb / s) a nedávna verzia I2C bola vyvinutá v roku 2014.

Prečo pull-up rezistory v zbernici I2C?

SDA a SCL sú „open-drain“, čo znamená, že obe vedenia môžu ísť NÍZKY, ale nemôžu riadiť vedenia VYSOKÉ, takže na každej z nich je pripojený pull-up odpor.

Ale u väčšiny I2C modulov, ako sú LCD alebo RTC, sú zabudované pull up rezistory, takže nie je potrebné jeden pripájať, pokiaľ to nie je uvedené.

Rezistor Pull-up / Pull-down: Rezistor Pull-up je rezistor pripojený k linke + Ve napájacieho zdroja, aby sa logická úroveň linky udržala na HIGH, ak linka nie je ani vysoká, ani nízka.

Roletový rezistor je rezistor pripojený k –Ve linke napájacieho zdroja, aby sa udržala logická úroveň linky na LOW, ak linka nie je vysoká ani nízka.

To tiež zabraňuje prenikaniu hluku do vedení.

Dúfame, že sme poškriabali povrch protokolu I2C. Ak potrebujete ďalšie informácie o protokole I2C, surfujte ďalej

YouTube a Google.

Teraz sa pozrime na I2C LCD modul:

Zapojenie I2C LCD modulu

K dispozícii je 16 výstupných pinov pre LCD displej, ktoré je možné spájkovať priamo na zadnú stranu modulu 16 X 2 LCD.

Vstupné piny sú + 5V, GND, SDA a SCL. Kolíky SDA a SCL na Arduino Uno sú kolíky A4 a A5. Pre Arduino je mega SDA pin # 20 a SCL je pin # 21.

Porovnajme, ako to vyzerá, keď pripojíme LCD k Arduinu bez adaptéra I2C a s adaptérom.

Bez adaptéra I2C:

Arduino bez adaptéra I2C

S adaptérom I2C:

Arduino pomocou adaptéra I2C

Adaptér je spájkovaný na zadnej strane LCD displeja a ako vidíme, uložili sme množstvo pinov GPIO pre ďalšie úlohy a tiež môžeme pokračovať v pridávaní ďalších 126 zariadení I2C do pinov A4 a A5.

Upozorňujeme, že štandardná knižnica z tekutých kryštálov nebude s týmto adaptérom I2C LCD fungovať. K tomu slúži špeciálna knižnica, ktorá bude čoskoro popísaná a ukážeme vám, ako tento modul použiť s príkladom kódovania.

Ako pripojiť adaptér I2C k displeju 16 x 2

V predchádzajúcich častiach článku sme sa naučili základy protokolu I2C a urobili sme si základný prehľad o module adaptéra I2C LCD. V tomto príspevku sa naučíme, ako pripojiť modul adaptéra I2C LCD k 16 x 2 LCD displeju, a uvidíme, ako programujeme na príklade.

Hlavnou výhodou protokolu I2C je, že podporované snímače / vstupné / výstupné zariadenia môžeme zapojiť iba do dvoch liniek, čo je pri Arduine užitočné, pretože má obmedzené piny GPIO.

Teraz sa pozrime, ako pripojiť modul k LCD.

Modul má 16 výstupných pinov a 4 vstupné piny. Adaptér môžeme len spájkovať na zadnú stranu 16 x 2 LCD displeja. Zo 4 vstupných pinov sú dva + 5 V a GND, zvyšné dva sú SDA a SCL.

Vidíme, že sme v Arduine uložili veľa pinov pre ďalšie vstupné / výstupné úlohy.

Kontrast displeja môžeme upraviť nastavením potenciometra pomocou malého skrutkovača (zvýraznené červeným rámčekom).

Podsvietenie je teraz možné ovládať v samotnom programovom kóde:

lcd.backlight ()

Zapne sa tým podsvietenie LCD displeja.

lcd.noBacklight ()

Týmto vypnete podsvietenie LCD displeja.

Vidíme, že je pripojený jumper, ktorý je zvýraznený v červenom poli, ak je jumper odstránený, podsvietenie zostáva VYPNUTÉ bez ohľadu na príkaz programu.

Teraz je nastavenie hardvéru hotové, pozrime sa, ako kódovať. Pamätajte, že I2C LCD modul potrebuje špeciálne informácie

knižnica a predinštalovaná knižnica „liquidcrystal“ nebude fungovať.

Tu si môžete stiahnuť knižnicu I2C LCD a pridať do Arduino IDE:

github.com/marcoschwartz/LiquidCrystal_I2C

Z predchádzajúceho príspevku sme sa dozvedeli, že zariadenia I2C majú adresu, pomocou ktorej môže hlavný procesor alebo mikrokontrolér identifikovať zariadenie a komunikovať.

Vo väčšine prípadov by pre modul I2C LCD bola adresa „0x27“. Ale iná výroba môže mať inú adresu. Do programu musíme zadať správnu adresu, až potom bude fungovať váš LCD displej.

Ak chcete zistiť adresu, stačí pripojiť 5V na Vcc a GND na GND Arduina a SCL pin I2C modulu na A5 a SDA na A4 a nahrať nasledujúci kód.

Toto naskenuje pripojené zariadenia I2C a zobrazí ich 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)
}
// -------------------------------- //

Vložte kód a otvorte sériový monitor.

Ako vidíme, boli detekované dve zariadenia a ich adresy sú zobrazené, ale ak chcete zistiť iba adresu I2C LCD modulu, nemali by ste počas skenovania pripájať žiadne ďalšie I2C zariadenia.
Na záver sme teda dostali adresu „0x27“.

Teraz si napríklad urobíme digitálne hodinky, pretože existujú dve zariadenia I2C, LCD modul a RTC alebo hodinový modul v reálnom čase. Oba moduly budú spojené dvoma vodičmi.

Stiahnite si nasledujúcu knižnicu:
Knižnica RTC: github.com/PaulStoffregen/DS1307RTC
TimeLib.h: github.com/PaulStoffregen/Time

Ako nastaviť čas na RTC

• Otvorte Arduino IDE a prejdite do ponuky Súbor> Príklad> DS1307RTC> nastavený čas.
• Nahrajte kód s dokončeným hardvérom a otvoreným sériovým monitorom a ste hotoví.

Schéma zapojenia:

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, ktorú sme zistili skenovaním, a 16 a 2 predstavujú počet riadkov a stĺpcov na LCD displeji.

Pre RTC nepotrebujeme nájsť adresu, ale našli sme to pri skenovaní „0x68“, ale aj tak to knižnica RTC spracuje.

Teraz sa pozrime, ako veľmi sme znížili preťaženie vodičov a zachránili GPIO piny na Arduine.

Iba 4 vodiče sú pripojené k LCD displeju, ktorý je zvýraznený červeným rámčekom.

Z Arduina sú tiež pripojené iba 4 vodiče a modul RTC zdieľa rovnaké vedenia.

Teraz ste získali základné vedomosti o I2C a o tom, ako používať modul adaptéra I2C LCD.
Páči sa vám tento príspevok? Máte nejaké otázky? Prosím, vyjadrte sa v sekcii komentárov, môžete dostať rýchlu odpoveď.




Dvojica: Obvod testeru jednoduchých tranzistorových diód Ďalej: Vytvorte tento obvod IR predlžovača dosahu