Bevezetés az I2C LCD adapter modulba

Próbálja Ki A Műszerünket A Problémák Kiküszöbölésére





Ebben a bejegyzésben az „I2C”, „IIC” vagy „I négyzet C” alapú LCD adapter modulokat vesszük szemügyre, amelyek csak 2 vezetékre csökkentik az Arduino és az LCD kijelző közötti vezetékkapcsolatokat, rengeteg GPIO csapot spórolva meg egyéb érzékelők / meghajtók stb.

Mielőtt megvitatnánk az I2C LCD adapter modult, fontos megérteni, mi az I2C busz és hogyan működik.



De amúgy sem kell az I2C protokoll szakértője lenni ahhoz, hogy az említett LCD-adapterrel dolgozzon.

Az I2C kapcsolat illusztrációja:

Az I2C kapcsolat illusztrációja:

Az I2C vagy IIC az „Inter-Integrated Circuit” rövidítése egy soros számítógépes busz, amelyet a Philips félvezetők találtak ki, ma NXP félvezetőknek hívják. Ezt a buszrendszert 1982-ben találták ki.



Mi az a busz?

A busz olyan kábelek / vezetékek csoportja, amelyek adatokat továbbítanak egyik chipről egy másik chipre / egy áramköri kártyáról egy másik áramkörre.

Az I2C buszprotokoll legfőbb előnye, hogy a támogatott mikrovezérlő vagy érzékelők vagy chipek csak két vezetékkel kapcsolhatók össze. Ennek a protokollnak az az előnye, hogy 127 különböző chipet vagy érzékelőt / meghajtót tudunk összekapcsolni egy mester eszközzel, amely általában csak 2 vezetékkel rendelkező mikrovezérlő.

Mi a két I2C vezeték?

A két vezeték SDA és SCL, amelyek soros adatok, ill.

A soros órát vagy SCL-t használják az adatkommunikáció szinkronizálására az I2C buszon. Az SDA vagy a soros adat az az adatsor, amelyben a tényleges adatokat mesterről szolga felé továbbítják, és fordítva. A master eszköz vezérli a soros órát, és eldönti, hogy melyik slave eszközhöz kell kommunikálnia. Egy rabszolga eszköz sem kezdeményezhet először kommunikációt, csak a fő eszköz képes rá.

A soros adatsor kétirányú és robusztus, minden 8 bites adatsor elküldése után a fogadó eszköz visszaküld egy nyugtázó bitet.

Mennyire gyors az I2C protokoll?

Az 1982-ben kifejlesztett I2C protokoll eredeti verziója 100 Kbps sebességet támogatott. A következő verziót 1992-ben szabványosították, amely támogatta a 400 kbps (gyors mód) és akár 1008 eszközt. A következő verziót 1998-ban fejlesztették ki 3,4 Mbps sebességgel (Nagy sebességű mód).

Számos más I2C verziót fejlesztettek ki 2000-ben, 2007-ben, 2012-ben (5Mbps Ultra-Fast üzemmóddal), az I2C legújabb verzióját pedig 2014-ben.

Miért húzóellenállások az I2C buszon?

Az SDA és az SCL „nyitott lefolyású”, ami azt jelenti, hogy mindkét vonal LOW-ra haladhat, de nem tudja a vonalakat HIGH-ra hajtani, ezért mindegyik vonalon fel van húzva egy ellenállás.

De a legtöbb I2C modul, például az LCD vagy az RTC beépített ellenállásokkal rendelkezik, így nincs szükségünk ilyenek csatlakoztatására, hacsak nincs megadva.

Felhúzási / lehúzási ellenállás: A felhúzási ellenállás a tápellátás + Ve vezetékéhez csatlakozó ellenállás, amely a HIGH irányú vonal logikai szintjét tartja, ha a vezeték nem magas vagy alacsony.

A lehúzható ellenállás az ellenállás, amely a tápellátás –Ve vezetékéhez csatlakozik, hogy a vonal logikai szintje LOW legyen, ha a vezeték nem magas vagy alacsony.

Ez megakadályozza a zaj bejutását a vonalakba is.

Reméljük, hogy megkarcoltuk az I2C protokoll felületét. Ha további információra van szüksége az I2C protokollról, kérjük, böngésszen tovább

YouTube és a Google.

Most vessünk egy pillantást az I2C LCD modulra:

I2C LCD modul kivezetései

Az LCD kijelző számára 16 kimeneti tű található, amelyek közvetlenül forraszthatók a 16 X 2 LCD modul hátuljához.

A bemeneti csapok + 5V, GND, SDA és SCL. Az Arduino Uno SDA és SCL csapjai az A4, illetve az A5 tűk. Az Arduino mega esetében az SDA a 20. tű, az SCL pedig a 21. tű.

Hasonlítsuk össze, hogyan néz ki, amikor az LCD-t az I2C adapter és az adapter nélkül csatlakoztatjuk az Arduino-hoz.

I2C adapter nélkül:

Arduino I2C adapter nélkül

I2C adapterrel:

Arduino az I2C adapter használatával

Az adapter forrasztva van az LCD kijelző hátulján, és mivel láthatjuk, hogy rengeteg GPIO tűt mentettünk el más feladatokhoz, és folytathatjuk 126 további I2C eszköz hozzáadását az A4 és A5 csapokhoz.

Felhívjuk figyelmét, hogy a standard Liquid Crystal könyvtár nem fog működni ezzel az I2C LCD adapterrel, erre van egy speciális könyvtár, amely hamarosan lefedésre kerül, és kódolási példával megmutatjuk, hogyan kell használni ezt a modult.

Az I2C adapter csatlakoztatása 16 x 2 kijelzőhöz

A cikk fenti szakaszaiban megtanultuk az I2C protokoll alapjait, és áttekintettük az I2C LCD adapter modult. Ebben a bejegyzésben megtanuljuk, hogyan kell az I2C LCD adapter modult csatlakoztatni a 16 x 2 LCD kijelzőhöz, és megnézzük, hogyan kell programozni egy példával.

Az I2C protokoll legfőbb előnye, hogy a támogatott érzékelőket / bemeneti / kimeneti eszközöket csak két vonalon tudjuk bekötni, és ez hasznos az Arduino esetében, mivel korlátozott GPIO csapokkal rendelkezik.

Most nézzük meg, hogyan lehet a modult csatlakoztatni az LCD-hez.

A modul 16 kimeneti és 4 bemeneti tűvel rendelkezik. Csak ráforraszthatjuk az adaptert a 16 x 2 LCD kijelző hátuljára. A 4 bemeneti tű közül a kettő + 5 V és GND, a többi kettő SDA és SCL.

Láthatjuk, hogy sok bejegyzést mentettünk az Arduino-n más bemeneti / kimeneti feladatokhoz.

A kijelző kontrasztját a potenciométer kis csavarhúzóval történő beállításával állíthatjuk be (piros négyzettel kiemelve).

A háttérvilágítás most a programkódban vezérelhető:

lcd.backlight ()

Ez bekapcsolja az LCD kijelző háttérvilágítását.

lcd.noBacklight ()

Ez kikapcsolja az LCD kijelző háttérvilágítását.

Láthatjuk, hogy van egy áthidaló csatlakoztatva, amely a piros mezőben van kiemelve, ha az áthidalót eltávolítják, akkor a háttérvilágítás a program parancsától függetlenül KI marad.

Most elkészült a hardver beállítása, most nézzük meg, hogyan kell kódolni. Ne feledje, hogy az I2C LCD modulnak külön kell lennie

könyvtár és az előre telepített „liquidcrystal” könyvtár nem fog működni.

Innen letöltheti az I2C LCD könyvtárat, és hozzáadhatja az Arduino IDE-hez:

github.com/marcoschwartz/LiquidCrystal_I2C

Az előző bejegyzésből megtudtuk, hogy az I2C készülékeknek van címe, amely alapján a master vagy a mikrovezérlő képes azonosítani az eszközt és kommunikálni.

A legtöbb esetben az I2C LCD modul esetében a cím „0x27” lenne. De a különböző gyártásnak eltérő címe lehet. Csak akkor kell beírnunk a helyes címet a programba, ha az LCD-kijelzője működik.

A cím megtalálásához egyszerűen csatlakoztassa az 5V-t a Vcc-hez, a GND-t pedig az Arduino GND-jéhez, az I2C modul SCL-tűjét pedig az A5-höz, az SDA-t pedig az A4-hez, és töltse fel az alábbi kódot.

Ez beolvassa a csatlakoztatott I2C eszközöket, és megmutatja azok címét.

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

Töltse fel a kódot, és nyissa meg a soros monitort.

Mint láthatjuk, két eszközt észleltünk, és a címeik megjelennek, de ha csak az I2C LCD modul címét szeretné megtalálni, akkor szkennelés közben nem szabad más I2C eszközt csatlakoztatnia.
Összefoglalva tehát a „0x27” címet kaptuk.

Most egy digitális órát fogunk készíteni, mert két I2C eszköz létezik, az LCD modul és az RTC vagy a valós idejű óra modul. Mindkét modult két vezetékkel fogják összekötni.

Töltse le a következő könyvtárat:
RTC könyvtár: github.com/PaulStoffregen/DS1307RTC
TimeLib.h: github.com/PaulStoffregen/Time

Hogyan állítsuk be az időt az RTC-re

• Nyissa meg az Arduino IDE alkalmazást, és keresse meg a Fájl> Példa> DS1307RTC> beállított időt.
• Töltse fel a kódot komplett hardverrel és nyitott soros monitorral, és kész.

Kördiagramm:

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

Jegyzet:

LiquidCrystal_I2C lcd (0x27, 16, 2)

A „0x27” az a cím, amelyet szkenneléssel találtunk, a 16 és 2 pedig az LCD kijelző sorainak és oszlopainak száma.

Az RTC esetében nem kell megkeresnünk a címet, de a „0x68” beolvasása közben igen, de az RTC könyvtár mindenképp kezelni fogja.

Most nézzük meg, mennyivel csökkentettük a vezeték torlódását és GPIO-csapokat mentettünk az Arduinóra.

Csak 4 vezeték van csatlakoztatva az LCD kijelzőhöz, piros négyzettel kiemelve.

Szintén csak 4 vezeték van csatlakoztatva az Arduino-tól, és az RTC modul ugyanazokkal a vonalakkal rendelkezik.

Mostanra alapvető ismereteket szerzett az I2C-ről és az I2C LCD adapter modul használatáról.
Tetszik ez a bejegyzés? Van kérdése? Kérjük, fejtse ki a megjegyzés rovatban, így gyors választ kaphat.




Előző: Egyszerű tranzisztoros dióda tesztelő áramkör Következő: Készítse el ezt az IR távirányító hatótávolság-bővítő áramkört