I2c adatolvasás. Kapcsolatok

10.09.2021

Aki részt vett elektronikai berendezések fejlesztésében, találkozott már olyan helyzettel, amikor a jelszintek összehangolásához, a mintavételezéshez és a funkcionálisan teljes csomópontok megcímzéséhez hatalmas számú köztes IC-k használatára van szükség.
A hatékonyság növelése és az áramköri megoldások egyszerűsítése érdekében Philips kifejlesztett egy egyszerű kétirányú kétvezetékes buszt az úgynevezett „inter-IC” vezérléshez.
A busz neve InterIC, vagy IIC (I2C) busz volt.

Jelenleg a Philips önmagában több mint 150 féle I2C-kompatibilis eszközt gyárt, amelyeket funkcionálisan az elektronikus berendezésekben való használatra terveztek. különféle célokra. Ide tartoznak a memória IC-k, videoprocesszorok és audio- és videojel-feldolgozó modulok, ADC-k és DAC-k, LCD-meghajtók, processzorok beépített hardveres I2C buszvezérlővel és még sok más.

Az I2C busz a soros adatcsere protokollok egyik változata. Normál módban a soros 8 bites adatátvitel legfeljebb 100 kbit/s, „gyors” módban pedig 400 kbit/s sebességgel történik. Az I2C buszon történő információcsere folyamatának végrehajtásához csak két jelet használnak: adatvonal SDA szinkronizációs vonal SCL A busz kétirányúságának megvalósítása bonyolult buszvezérlők használata nélkül, a csatlakoztatott eszközök kimeneti fokozatai A buszok nyitott lefolyóval vagy nyitott kollektorral rendelkeznek az „ÉS” szerelési funkció biztosításához.

Egyszerű kétvezetékes soros busz Az I2C minimalizálja az IC-k közötti kapcsolatok számát, az IC-k kevesebb érintkezővel rendelkeznek, és kevesebb nyomkövetésre van szükség. Ennek eredményeként - nyomtatott áramkörök egyszerűbbé és technológiailag fejlettebbé válnak a termelésben. Az integrált I2C protokoll szükségtelenné teszi a címdekódolókat és más külső tárgyalási logikákat.

Az egy buszra csatlakoztatott chipek maximális megengedett számát a 400 pF maximális buszkapacitás korlátozza.

A chipekbe épített hardveres zajcsökkentő algoritmus biztosítja az adatok integritását jelentős zajos körülmények között.
Minden I2C-kompatibilis eszköz rendelkezik olyan interfésszel, amely lehetővé teszi, hogy a buszon keresztül kommunikáljanak egymással, még akkor is, ha a tápfeszültségük jelentősen eltér. A következő ábra azt az elvet mutatja, hogy több különböző tápfeszültségű IC-t csatlakoztathatunk egy cserebuszra.

Minden eszközt egyedi cím ismer fel, és az eszköz céljától függően adóként vagy vevőként működhet.

Ezen túlmenően az eszközök adatátvitelkor master és slave kategóriába sorolhatók. A master egy olyan eszköz, amely adatátvitelt kezdeményez és szinkronizációs jeleket generál. Ebben az esetben minden címezhető eszköz slave-nek számít a masterhez képest.

A busz működésének specifikációja alapján egy adott pillanatban csak egy master lehet a buszon, mégpedig az a berendezés, amely a busz SCL jelének generálását biztosítja. A vezető egyaránt működhet vezető-adóként és vezető-vevőként. A busz azonban lehetővé teszi több mester használatát, amelyek viselkedésük bizonyos jellemzőit előírják a vezérlőjelek generálásakor és a busz állapotának felügyeletében. Az a képesség, hogy egynél több mastert csatlakoztassunk a buszhoz, azt jelenti, hogy egynél több master megkísérelheti az átvitel elindítását egyidejűleg. Az ebben az esetben előforduló „ütközések” kiküszöbölésére választottbírósági eljárást fejlesztettek ki - a master viselkedését, amikor a busz egy másik master általi „elfogását” észleli.

Két eszköz szinkronizálásának eljárása Ez az eljárás azon a tényen alapul, hogy az összes I2C eszköz a huzalozás ÉS szabály szerint csatlakozik a buszhoz. eredeti állapot Mind az SDA, mind az SCL jelek magasak.

START és STOP állapot

A cserefolyamat azzal kezdődik, hogy a master generálja a START állapotot - a master az SDA vonal jelének HIGH állapotból LOW állapotba való átmenetét állítja elő az SCL vonal HIGH szinten. Ezt az átmenetet minden, a buszra csatlakoztatott eszköz a cserefolyamat kezdetének jeleként érzékeli.

Az órajel előállítása mindig a mester feladata; Minden master saját órajelet állít elő, amikor adatokat küld a buszon.

A cserefolyamat azzal ér véget, hogy a master generálja a STOP állapotot - az SDA vonal állapotának átmenetét alacsony állapotból HIGH állapotba, amikor az SCL vonal állapota HIGH.

A START és STOP állapotokat mindig a master generálja. A busz a START állapot észlelése után foglaltnak tekinthető. A busz a STOP állapot rögzítése után egy ideig szabadnak tekinthető.

Amikor üzeneteket küld az I2C buszon, minden master saját órajelet generál az SCL vonalon.

A START állapot létrehozása után a master az SCL vonal állapotát LOW-ra csökkenti, és az üzenet első bájtjának legjelentősebb bitjét az SDA sorra állítja. Az üzenetben lévő bájtok száma nincs korlátozva.

Az I2C busz specifikáció csak akkor engedélyezi az SDA vonal módosítását, ha az SCL vonal ALACSONY.

Az adatok érvényesek, és csak a MAGAS órajel állapota alatt kell stabilnak maradniuk.

A master - adó - szolga - vevő általi bájt fogadásának megerősítésére egy speciális megerősítő bit kerül bevezetésre az I2C buszon található csereprotokoll specifikációjába, amelyet az SDA buszon állítanak be a 8. adatbit fogadása után.

Megerősítés

Így az adóból a vevő felé 8 bites adat átvitele egy további ciklussal (az SCL vonal 9. órajel impulzusának kialakításával) teljesül, amely során a vevő beállít alacsony szint jelet az SDA vonalon, a bájt sikeres vételének jeleként.

Az adatátvitelhez megerősítés szükséges. A megfelelő szinkronizálási impulzust a master generálja. Az adó felengedi (HIGH) az SDA vonalat a nyugtázási óra időtartamára. A vevőnek stabil LOW állapotban kell tartania az SDA vonalat a nyugtázó óra HIGH állapotában.

Abban az esetben, ha a vevő slave nem tudja megerősíteni a címét (például amikor végrehajtja Ebben a pillanatban bármilyen valós idejű függvény), az adatsort MAGASAN kell hagyni. A master ekkor STOP jelet adhat ki az adatátvitel megszakításához.

Ha egy mester-vevő részt vesz az átvitelben, akkor jeleznie kell az átvitel végét a szolga adónak az utolsó bájt nyugtázása nélkül. Az adó slave-nek el kell engednie az adatvonalat, hogy a master STOP jelet adjon ki, vagy megismételje a START jelet.

A szinkronizálás az SCL vonalhoz való csatlakozással történik az ÉS szabály használatával.

Ez azt jelenti, hogy a masternek nincs kizárólagos ellenőrzése az SCL vonal LOW-ról HIGH-ra való átmenetére. Abban az esetben, ha a slave-nek további időre van szüksége egy vett bit feldolgozásához, képes az SCL-vonalat alacsonyan tartani, amíg készen áll a következő bit fogadására. Így az SCL vonal LOW lesz a leghosszabb LOW órajel periódusban.

A rövidebb LOW periódusú eszközök alvó állapotba kerülnek a hosszú időszak végéig. Amikor az összes engedélyezett eszköz befejezte az alacsony órajel periódusát, az SCL vonal HIGH lesz. Minden eszköz HIGH-ra fog menni az órajelen. Az első készülék, amelyiknek ez az időtartama lejár, ismét LOW-ra állítja az SCL vonalat. Így az SCL órajelsor LOW periódusát az összes érintett eszköz leghosszabb órajele, a HIGH periódusát pedig az eszközök legrövidebb órajele határozza meg.

A szinkronizálási mechanizmust a vevők használhatják az adatátvitel vezérlésére bájt és bit szinten.

Bájt szinten, ha egy eszköz képes nagy sebességgel fogadni adatbájtokat, de bizonyos időre van szüksége a fogadott bájt tárolására vagy a következő fogadására való felkészülésre, akkor a fogadás és nyugtázás után képes az SCL sort LOW tartani. bájtot, így az adó alvó állapotba kerül.

Bitszinten egy olyan eszköz, mint például a beépített I2C hardveráramkörök nélküli vagy korlátozott áramkörökkel rendelkező mikrokontroller, lelassíthatja az órajel frekvenciáját az LOW periódus meghosszabbításával. Ily módon bármely master átviteli sebessége a lassú eszköz sebességéhez igazodik.

Címzés az I2C buszon

Minden, a buszra csatlakoztatott eszköz egyedi címre címezhető szoftveresen.

Az üzenet címzettjének kiválasztásához az előadó egyedi címkomponenst használ a küldési formátumban. Azonos típusú eszközök használatakor az IC-k gyakran rendelkeznek kiegészítő címválasztóval, amely akár kiegészítő digitális címválasztó bemenetként, akár analóg bemenetként is megvalósítható. Ebben az esetben az ilyen, azonos típusú eszközök címei a buszra kapcsolt eszközök címterében vannak elosztva.

Normál módban 7 bites címzést használnak.

Az I2C buszon a címzési eljárás az, hogy a START jel utáni első bájt határozza meg, hogy melyik slave-et címzi meg a master a csereciklushoz. A kivétel az "Általános hívás" cím, amely a buszon lévő összes eszközt megszólítja. Ha ezt a címet használják, elméletileg minden eszköznek nyugtázó jelet kell küldenie. A gyakorlatban azonban ritkák az olyan eszközök, amelyek képesek kezelni az "általános hívást".

Az első bájt első hét bitje alkotja a slave címet. A nyolcadik, legkisebb jelentőségű bit határozza meg az adatátvitel irányát. A "nulla" azt jelenti, hogy a master információkat ír a kiválasztott slave-nek. Az "Egy" azt jelenti, hogy a mester információkat olvas be a slave-től.

A cím elküldése után a rendszer minden eszköze összehasonlítja a START jel utáni első hét bitet a címével. Ha van egyezés, az eszköz feltételezi, hogy az iránybittől függően slave-vevőként vagy slave-adóként van kiválasztva.

A slave cím egy rögzített és programozható részből állhat.

Gyakran előfordul, hogy a rendszerben több azonos típusú eszköz lesz (például memóriachipek, vagy LED-es jelzőmeghajtók), így a cím programozható részének segítségével a lehető legtöbb ilyen eszközt lehet a buszra csatlakoztatni. . A programozható bitek száma a címben a mikroáramkör szabad érintkezőinek számától függ. Néha egy érintkezőt használnak egy programozható címtartomány analóg beállításával, mint például az SAA1064 IC-ben. Sőt, attól függően, hogy az IC ezen a címtűjén mekkora potenciál van, lehetőség van a meghajtó címterének eltolására úgy, hogy az azonos típusú IC-k ne ütközzenek egymással a közös buszon.

Minden IC, amely támogatja az I2C busz szabvány szerinti működést, fix címekkel rendelkezik, amelyek listáját a gyártó a vezérlő leírásában adja meg.

Az 11110XX címbitkombináció 10 bites címzésre van fenntartva.

BAN BEN Általános nézet a buszon a START állapot kialakulásától a STOP állapotig történő csere folyamatát a következő ábra szemlélteti:

A gumiabroncs-specifikációból következik, hogy ezek az egyszerűek megengedettek csereformátumok, és kombinálva, amikor a START állapottól a STOP állapotig tartó intervallumban a master és a slave egyaránt működhet vevőként és adatadóként. Kombinált formátumok használhatók például a soros memória kezelésére.
Az adat első bájtja alatt egy memóriacímet lehet átadni, amely egy belső regiszterbe kerül. A START jel és a slave cím megismétlése után az adatok lekérésre kerülnek a memóriából. A korábban elért cím automatikus növelésével vagy csökkentésével kapcsolatos minden döntést egy adott eszköz tervezője hozza meg. Ezért minden esetben A legjobb mód Az ellenőrizetlen helyzet elkerülése érdekében a buszon, mielőtt új (vagy korábban nem használt) IC-t használna, alaposan tanulmányozza át annak leírását (adatlapját), miután megkapta a gyártó webhelyéről. Sőt, a gyártók gyakran többet helyeznek el részletes utasításokat pályázat útján.

Mindenesetre a buszspecifikáció szerint minden fejlesztés alatt álló eszköznek vissza kell állítania a buszlogikát START vagy újraSTART jel vételekor, és fel kell készülnie a cím fogadására.

Ennek ellenére az I2C busz használatának fő problémái éppen azért merülnek fel, mert az I2C busszal „kezdő” fejlesztők nem veszik figyelembe, hogy a master (gyakran mikroprocesszor) nem rendelkezik kizárólagos joggal egyik buszvonalhoz sem. .

I2C bővítés

A szabványos I2C busz 100 kbit/s adatátviteli sebességgel és 7 bites címmel több mint 10 éve változatlan formában létezik. Az I2C busz széles körben elfogadott szabvány a Philips és más beszállítók által gyártott több száz típusú chip esetében. Jelenleg az I2C busz specifikációja két irányban bővült: a sebesség növelésével és a címtér bővítésével az új fejlesztésű eszközök körének bővítése érdekében.

A "gyors" módú specifikáció bevezetése, amely lehetővé teszi az adatátviteli sebesség négyszeresét 400 kBit/sec-re. A szabvány ezen „kiterjesztésének” szükségessége a nagy mennyiségű információ átvitelének szükségessége miatt volt szükséges, és ennek következtében növelni kellett. sávszélesség csatorna.

A "10 bites címzés" specifikáció bevezetése, amely 1024 további cím használatát teszi lehetővé, mert a 7 bites címzéssel engedélyezett 112 cím nagy részét már többször használták. Az új eszközök címeinek elhelyezésével kapcsolatos problémák elkerülése érdekében kívánatos nagyobb számú címkombináció alkalmazása. Az új 10 bites címzés segítségével megközelítőleg tízszeresére nőtt a rendelkezésre álló címek száma.

Minden új, I2C interfésszel rendelkező eszköz működik gyors mód. Lehetőleg 400 kbit/s-os adatfogadásra és/vagy adatátvitelre képesek legyenek. Legalább gyors módban be kell tudniuk lépni a szinkronizálást, hogy az átviteli sebességet (az LOW SCL periódus meghosszabbításával) elfogadható értékre csökkentsék.

A gyors eszközök általában felfelé kompatibilisek, ami azt jelenti, hogy normál eszközökkel is működhetnek lassú buszon. Ez nyilvánvaló szabványos eszközök nem tudnak gyors buszon működni, mert nem tudnak nagy sebességgel szinkronizálni, és állapotuk kiszámíthatatlanná válik. A gyors slave eszközöknek 7 bites vagy 10 bites címük lehet. A 7 bites cím azonban előnyösebb, mivel hardveres megvalósítása egyszerűbb és az üzenet hossza rövidebb. A 7 bites és 10 bites címekkel rendelkező eszközök egyidejűleg használhatók ugyanazon a buszon, az adatátviteli sebességtől függetlenül. Mind a meglévő, mind a jövőbeni mesterek képesek lesznek 7 bites és 10 bites címeket is generálni.

Gyors módban a buszvonalak protokollja, formátuma, logikai szintje és maximális kapacitív terhelése változatlan marad. Az SDA és SCL vonalak szinkronizálási algoritmusa nem változott. A "gyors" eszközöknek azonban nem kell kompatibilisnek lenniük a CBUS eszközökkel, mivel nem működhetnek nagy sebességgel. Bemeneti áramkörök gyors eszközök Mindkét vonalon beépített túlfeszültség-elnyomással és Schmitt-triggerrel kell rendelkeznie. Általános szabály, hogy amikor a gyors tápfeszültség meghibásodik, készülék kimenetei, az I2C vonalakhoz kapcsolódó buszoknak át kell térniük a harmadik állapotba. A végfokozatok áramköri felépítése olyan változtatásokon esett át, amelyek biztosítják a vezetőél felfutási idejét (átmenet LOW-ból HIGH állapotba). Ha 200 pF-ig terjedő buszterheléseknél ezt a szerepet felhúzó ellenállások látják el, akkor 200 pF-től 400 pF-ig terjedő terheléseknél ezt a funkciót egy áramforrás vagy egy kapcsolt ellenállás-áramkör látja el, amely biztosítja az I2C buszvonalak „kényszerített” kapcsolását. .

A 10 bites címzés sem változtatja meg a buszformátumot. Ehhez az első bájt első hét bitjének 1111ХХХ fenntartott címkombinációját használjuk. A 10 bites címzés nem befolyásolja a meglévő 7 bites címzést. A 7 bites és 10 bites címzéssel rendelkező eszközök ugyanarra a buszra csatlakoztathatók. Bár az 1111XXX szekvenciának nyolc lehetséges kombinációja van, csak négyet használnak - 11110XX. Az 11111XX-hez hasonló kombinációk további buszfejlesztésekre vannak fenntartva. Az első két bájt bitkiosztása Az első két bájtból képződik a 10 bites cím. Az első bájt első hét bitje 11110XX formátumú kombináció, ahol a két legkisebb jelentőségű bit (XX) a 10 bites cím két legjelentősebb (9 és 8) bitje; Az első bájt nyolcadik bitje az iránybit.
A "nulla" ebben a bitben azt jelenti, hogy a master információkat fog írni a slave-nek, az "egy" pedig azt, hogy a mester információt fog olvasni a slave-től. Ha az iránybit nulla, akkor a második bájt tartalmazza a 10 bites cím maradék 8 bitjét. Ha az iránybit egy, akkor a következő bájt tartalmazza a slave-től a masterhez továbbított adatokat.

Végezetül meg kell jegyezni, hogy az I2C busz szabvány egyszerűen megvalósítja az ütközési arbitrációt - megoldja a buszon több mester általi egyidejű csere inicializálásának problémáját adatvesztés nélkül.

Ez, és az I2C busz használatának, megvalósításának és használatának egyéb, konkrétabb jellemzői közvetlenül a weboldalon találhatók Philips .

A leírás elkészítésekor a cikkben bemutatott anyagokat használtuk fel

Az I2C interfész (vagy másképpen IIC) meglehetősen elterjedt hálózat soros interfész, amelyet a Philips talált ki és viszonylag egyre népszerűbb Magassebesség adatátvitel (általában 100 kbit/s-ig, modern mikroáramkörökben 400 kbit/s-ig), alacsony költség és egyszerű kivitelezés.

1) Fizika.

Fizikailag a hálózat egy kétvezetékes busz, melynek vonalait ún ADATÉs ÓRA(egy harmadik vezeték is szükséges - föld, de az interfészt általában kétvezetékesnek nevezik a jelvezetékek száma miatt). Ennek megfelelően az adatok továbbítása a DATA vonalon keresztül történik, az órajel pedig a CLOCK vonalat használja. A buszra legfeljebb 128 előfizető csatlakozhat, mindegyik saját egyedi szám. Egy adott időpontban csak egy előfizető és csak egy irányba továbbít információt.

Az I2C eszközök „nyílt kollektoros” kimenettel rendelkeznek. Amikor a kimeneti tranzisztor zárva van, a megfelelő vonalon egy külső felhúzó ellenálláson keresztül magas szintet állítanak be, amikor a kimeneti tranzisztor nyitva van, a megfelelő vezetéket a földre húzza, és alacsony szintet állít be (lásd az ábrát); . Az ellenállások értéke néhány kiloohmtól több tíz kiloohmig terjed (minél nagyobb a sebesség, annál kisebb az ellenállások értéke, de annál nagyobb az energiafogyasztás). Az ábrán a bemenetnél lévő háromszögek azt mutatják, hogy a bemenetek nagy impedanciájúak, és ennek megfelelően nem befolyásolják a vonalak jelszintjét, hanem csak „leolvassák” ezeket a szinteket. Általában 5 V vagy 3,3 V szinteket használnak.

2) Logikák.

Az I2C buszon lévő bármely eszköz kétféle lehet: Master (master) vagy Slave (slave). Az adatcsere munkamenetekben történik. A „mester” eszköz teljes mértékben vezérli a munkamenetet: elindítja az adatcsere munkamenetet, vezérli az átvitelt óraimpulzusok küldésével az Óra vonalra, és befejezi a munkamenetet.

Ezenkívül az adatátvitel irányától függően a „Master” és „Slave” eszközök egyaránt lehetnek „vevők” vagy „adók”. Amikor a „Master” adatokat kap a „Slave”-től, akkor ez a „Vevő”, a „Slave” pedig az „Adó”. Amikor a „Slave” adatokat kap a „Master”-től, akkor az már „Vevő”, és a „Master” ebben az esetben „Adó”.

Ne keverje össze a „Master” eszköztípust az „Adó” állapottal. Annak ellenére, hogy amikor a „Master” információt olvas ki a „Slave”-ből, az utóbbi adatokat helyez az adatbuszra, ezt csak akkor teszi meg, ha a „Master” ezt az Óra sor megfelelő szintjének beállításával engedélyezi. Tehát, bár ebben az esetben a „Slave” vezérli az adatbuszt, magát a központot továbbra is a „Master” vezérli.

Készenléti üzemmódban (amikor nincs adatcsere munkamenet) mindkét jelvonal (Adat és Óra) magas szintű állapotban van (tápfeszültségre húzva).

Minden csereszakasz úgy kezdődik, hogy a „mester” beadja az úgynevezett Start feltételt. A „Kezdési feltétel” az adatsor szintjének magasról alacsonyra történő változása, ha magas szint van az Óra sorban.

Az „Indítási feltétel” elküldése után a „Master”-nek először azt kell mondania, hogy kivel akar kommunikálni, és meg kell jelölnie, hogy pontosan mit akar - adatokat átvinni a készülékre vagy kiolvasni onnan. Ehhez kiadja a buszon annak a „Slave” eszköznek a 7 bites címét (egyébként azt mondják: „megcímzi a „Slave” eszközt), amellyel kommunikálni akar, és egy bittel jelzi az adatátvitel irányát. (0 - ha a „Master”-től a „Slave”-ig és 1 - ha a „Slave”-től a „Master”-ig). A „Start” feltétel elküldése utáni első bájtot mindig minden „Slave” címzésként érzékeli.

Mivel az adatátvitel iránya a munkamenet nyitásakor az eszköz címzésével együtt van feltüntetve, ennek megváltoztatásához egy másik munkamenetet kell nyitni (ismét adja meg a „Start” feltételt, címezze meg ugyanazt az eszközt és jelezze az új átvitelt irány).

Miután a „mester” megmondja, hogy pontosan kihez szól, és jelzi az adatátvitel irányát, megkezdődik a tényleges átvitel: a „mester” adatokat ad ki a busznak a „Szolga” számára, vagy kapja meg tőle. A cserének ezt a részét (milyen adatokat és milyen sorrendben kell a „Masternek” küldenie a buszra, hogy a készülék megértse és azt tegye, amire szüksége van) már minden egyes eszköz határozza meg.

A „Master” hírfolyamának minden egyes cseréje az úgynevezett Stop feltétellel zárul, amely abból áll, hogy az adatsor szintjét alacsonyról magasra változtatjuk, ismét magas szint jelenlétében az Óra sorban. Ha egy Stop feltétel generálódik a buszon, akkor minden nyitott cseremunka lezárul.

A munkameneten belül tilos bármilyen változtatás az Adatsorban, amíg az Óra vonal magas, mivel ebben az időben az adatokat a „Vevő” olvassa. Ha ilyen változások történnek, azokat minden esetben vagy „Start” feltételnek (amely leállítja az adatcserét) vagy „Stop” feltételnek (ami az aktuális cseremenet végét jelenti). Ennek megfelelően egy csereszakasz során előfordulhat a „Transmitter” adattelepítése (az adatsorban a kívánt szint beállítása).
csak akkor, ha az Óra vonal alacsony.

Néhány szó arról, hogy ebben az esetben mi a különbség az „adatcsere befejezése” és a „cseremenet vége” között. Elvileg a „Master” az első cseremenet lezárása nélkül nyithat egy vagy több cseremenetet ugyanazzal (például, ahogy fentebb említettük, az adatátvitel irányának megváltoztatásához), vagy akár más „Slave-okkal” ”, új „Start” -feltétel benyújtása a „Stop” -feltételek megadása nélkül az előző munkamenet lezárásához. Vezérelje az adatsort, hogy válaszoljon a „Master”-re, ebben az esetben engedélyezve lesz annak az eszköznek, amelyre a „Master”utoljára fordulta régi munkamenet azonban nem tekinthető befejezettnek. És ezért. A működés felgyorsítása érdekében sok eszköz (pl. 24Cxx eeprom) a „Master”-től kapott adatokat egy pufferbe helyezi, és csak azután kezdi el kezelni ezeket a kapott adatokat, miután megkapta a cseremenet végéről szóló jelzést (azaz , „Leállítási feltételek”).

Például, ha 2 eeprom 24Cxx chip lóg a buszon, és megnyitott egy felvételi munkamenetet az egyik chipre, és adatokat vitt át rá rögzítéshez, majd az első munkamenet bezárása nélkül új munkamenetet nyitott, hogy írjon egy másik chipet, akkor a valódi rögzítés és az első és második mikroáramkörökbe csak a buszon „Stop feltétel” kialakulása után kerül sor, amely mindkét munkamenetet lezárja. Miután megkapta az adatokat a „Master”-től, az eeprom egy belső pufferbe helyezi azokat, és megvárja a munkamenet végét, hogy megkezdhesse a belső pufferből közvetlenül az eepromba való írás tényleges folyamatát. Azaz, ha az adatok rögzítéshez az első mikrukhba való átvitele után nem zárta be ezt a munkamenetet, megnyitott egy második munkamenetet és elküldte a rögzítendő adatokat a második mikrukh-nak, majd a „Stop feltétel” létrehozása nélkül kikapcsolva, akkor az adatok nem lesznek rögzítve sem az első, sem a második chipben. Vagy ha például felváltva írsz adatokat két mikrukh-ra, akkor elvileg megnyithatsz egy munkamenetet, hogy az elsőre írj, majd egy másikat, hogy a másodikra ​​írj, majd egy harmadikat, hogy újra írj az elsőre stb. , de ha nem zárja be ezeket a munkameneteket, az végül a belső pufferek túlcsordulásához és végső soron adatvesztéshez vezet..

Itt a következő hasonlatot adhatjuk: tanulók egy osztályban („rabszolgák”) és tanár („mester”). Tegyük fel, hogy a tanár a táblához hívott egy diákot (legyen Vasja) és megkérte, hogy oldjon meg néhány példát. Miután Vasya megoldotta ezt a példát, a tanár a táblához hívta Petyát, és elkezdte tőle kérni a házi feladatát, de nem engedte, hogy Vasját visszamenjen a helyére. Ebben az esetben úgy tűnik, hogy a beszélgetés Vasyával véget ért - a tanár Petyával beszél, de Vasya a táblánál áll, és nem tud nyugodtan intézni a dolgát (a vele folytatott kommunikációs munkamenet nincs lezárva).

Ha a „Slave”-nek nincs ideje feldolgozni az adatokat a cseremenet során, meghosszabbíthatja a csere folyamatát az Óra sor alacsony szinten tartásával, így a „Master”-nek ellenőriznie kell az Óra vonal magasra való visszatérését. szinten, miután kiadta. Szeretném hangsúlyozni, hogy ne keverje össze azt az állapotot, amikor a „Szolga”-nak nincs ideje adatokat fogadni vagy küldeni, azzal az állapottal, amikor egyszerűen a cseremenet eredményeként kapott adatok feldolgozásával van elfoglalva. Az első esetben (adatcsere során) az Óra sor lenyomásával meghosszabbíthatja a cserét, a második esetben (amikor a vele folytatott csereszakasz befejeződött) nincs joga semmilyen vonalhoz hozzányúlni. Ez utóbbi esetben egyszerűen nem válaszol a „mester” hozzá intézett „felhívására”.

Egy munkameneten belül az átvitel kilenc bites csomagokból áll, amelyeket normál pozitív logikával továbbítanak (azaz a magas értéke 1 és az alacsony értéke 0). Ebből 8 bitet az „Adó” továbbít a „Vevőnek”, az utolsó kilencedik bitet pedig a „Vevő” az „Adó”-nak. A csomagban lévő bitek először a legjelentősebb biteket továbbítják. Az utolsó, kilencedik bitet ACK nyugtázási bitnek nevezik (az angol elismerő szóból). Fordított formában kerül átvitelre, vagyis a sorban a 0 a megerősítő bit jelenlétét, az 1 pedig a hiányát jelenti. A nyugtázó bit jelezheti vagy az eszköz hiányát vagy foglaltságát (ha nem volt beállítva a címzés során), vagy azt, hogy a „Vevő” be akarja fejezni az átvitelt, vagy a „Master” által küldött parancs nem fejeződött be.

Minden bit egy órajelben kerül átvitelre. Az órajelciklusnak azt a felét, amely alatt az óravonal alacsonyra van állítva, az adó előfizető egy adatbitet állít be a buszon (ha az előző bitet egy másik előfizető küldte, akkor az adatbuszt ekkor kell felszabadítania) . Az óraciklusnak azt a felét, amely alatt az óravonalat magasra állítják, a fogadó előfizető arra használja, hogy kiolvassa a beállított bitértéket az adatbuszról.

Ez minden. Az alábbi ábrák ezt a teljes leírást mutatják grafikus formában.

3) Diagramok és időzítések.



Paraméter Kijelölés Minimális érték

Az I 2 C egy kétvezetékes interfész, amelyet a Philips Corporation fejlesztett ki. Az eredetiben műszaki követelmény a felületre maximális sebesség Az adatátvitel 100 Kbps volt. Idővel azonban megjelentek a nagyobb sebességű I 2 C üzemmódok szabványai Ugyanazon az I 2 C buszra különböző hozzáférési sebességű eszközöket lehet csatlakoztatni, mivel az adatátviteli sebességet az órajel határozza meg.

Az adatátviteli protokollt úgy alakították ki, hogy garantálja a továbbított adatok megbízható vételét.

Adatátvitelkor az egyik eszköz a „Master”, amely kezdeményezi az adatátvitelt és szinkronizációs jeleket generál. Egy másik eszköz "Slave" - ​​csak a "Master" parancsára kezdi meg az átvitelt.

A PIC16CXXX mikrokontrollerek hardverben valósítják meg az SSP modulban lévő eszköz „Slave” üzemmódját. A „Master” mód szoftveresen van megvalósítva.

Az I 2 C busszal végzett munka leírására használt alapvető kifejezések:

Adó– buszon keresztül adatot továbbító eszköz

Vevő– a buszról adatokat fogadó eszköz

"Fő"- adást kezdeményező és órajelet előállító eszköz

"Rabszolga"- a „mester” által címzett eszköz

Több "mester"- I 2 C busz üzemmód egynél több „Masterrel”

Választottbíráskodás– eljárás annak biztosítására, hogy csak egy „Master” vezérelje a buszt

Szinkronizálás– eljárás két vagy több eszköz órajelének szinkronizálására

A szinkronizáló jel (SCL) és adat (SDA) generátorok kimeneti fokozatait nyitott kollektoros (lefolyó) áramkörök szerint kell kialakítani, hogy több kimenetet kombináljanak, és külső ellenálláson keresztül a tápegység pozitívhoz kell csatlakoztatni, hogy a busz szintje „ 1”, ha egyik eszköz sem generál „0” jelet. A maximális kapacitív terhelés 400 pF kapacitásra korlátozódik.

Adatátvitel inicializálása és befejezése

Ha nincs adatátvitel a buszon, az SCL és SDA jelek magas szinten maradnak a külső ellenállás miatt.

A START és STOP jeleket a „Master” generálja, hogy meghatározza az adatátvitel kezdetét és végét.

A START jelet az SDA jel magasról alacsonyra való átmenete hozza létre, miközben az SCL jel magas. A STOP jel úgy van definiálva, hogy az SDA alacsonyról magasra megy, amikor az SCL magas. Így adatátvitelkor az SDA jel csak akkor változhat, ha az SCL jel alacsony.

Eszközök címzése az I 2 C buszon

Az eszközök címzésére két címformátumot használnak:

Egyszerű 7 bites formátum R/W olvasási/írási bittel;

és 10 bites formátum - az első bájt a cím két legjelentősebb bitjét és az írási/olvasási bitet tartalmazza, a második bájt a cím alacsony rendű részét tartalmazza.

Elfogadás megerősítése

Adatátvitelkor minden egyes elküldött bájt után a vevőnek ACK jellel kell nyugtáznia a bájt fogadását.

Ha a Slave nem nyugtázza a cím vagy adatbájt átvételét, a Masternek meg kell szakítania az átvitelt STOP jel generálásával.

Amikor adatokat továbbít a „Slave”-ről a „Master”-re, a „Master” ACK adat nyugtázó jeleket generál. Ha a „Master” nem nyugtázza a bájt átvételét, a „Slave” leállítja az adatátvitelt az SDA vonal „felengedésével”. Ezt követően a „Master” STOP jelet generálhat.

Az adatátvitel késleltetéséhez a „Slave” logikai nullát állíthat be, jelezve a „Master” számára, hogy várjon. Az SCL vonal felszabadítása után az adatátvitel folytatódik.

Adatátvitel a "Master"-ről a "Slave"-re

Adatok olvasása a "Slave"-ből

Az újraindítás jel használata a „Slave” eléréséhez

Multi-Master mód

Az I 2 C adatátviteli protokoll lehetővé teszi, hogy egynél több „Master” legyen a buszon. Az arbitrációs és szinkronizálási funkciók a buszkonfliktusok megoldására szolgálnak az átvitel inicializálása során.

Választottbíráskodás

A választottbírósági eljárás az SDA vonalon történik, ha az SCL vonal magas. Az az eszköz, amely magas szintet generál az SDA vonalon, amikor egy másik alacsony adást ad, elveszti a „Master” átvételi jogát, és „Slave” módba kell váltania. Egy „Master”, amely elvesztette a kezdeményezést a buszon, óraimpulzusokat generálhat annak a bájtnak a végéig, amelyben elvesztette master tulajdonságait.

Szinkronizálás

A buszon történő szinkronizálás az SCL jelen végrehajtott arbitrázs végrehajtása után történik. Amikor az SCL jel magasról alacsonyra vált, minden érdeklődő eszköz elkezdi számolni az alacsony szint időtartamát. Az eszközök ezután elkezdik átállítani az SCL-szintet alacsonyról magasra a szükséges adatsebességnek megfelelően. Az alacsony szintről a magasra történő átállás után az érintett készülékek számolják a magas szint időtartamát. Az első eszköz, amely az SCL jelet alacsony szintre hajtja, határozza meg az órajel paramétereit.

LCD kijelzö– gyakori vendég az Arduino projektekben. De összetett sémák előfordulhat, hogy hiányoznak az Arduino portok, mert olyan pajzsot kell csatlakoztatni, aminek nagyon-nagyon sok tűje van. A megoldás ebben a helyzetben az lehet I2C/IIC egy adapter, amely egy szinte szabványos Arduino 1602 pajzsot köt össze Uno, Nano vagy Mega kártyákkal, mindössze 4 tűvel. Ebben a cikkben meglátjuk, hogyan tud kapcsolódni LCD képernyő az I2C felülettel milyen könyvtárakat lehet használni, írunk egy rövid vázlatos példát és elemezzük a tipikus hibákat.

Folyadékkristályos kijelző LCD 1602 van jó választás karakterláncok kiadására különböző projektekben. Olcsó, különféle módosítások vannak különböző háttérvilágítási színekkel, könnyen letölthet kész könyvtárakat az Arduino vázlatokhoz. De ennek a képernyőnek a fő hátránya az a tény, hogy a kijelzőn 16 van digitális kimenetek, amelyből legalább 6 szükséges, ezért ennek az LCD-képernyőnek az i2c nélküli használata komoly korlátozásokat jelent az Arduino Uno vagy Nano kártyák számára. Ha nincs elég kapcsolat, akkor vásárolnia kell Arduino tábla Mega vagy mentse a névjegyeket, beleértve a kijelző csatlakoztatását az i2c-n keresztül.

Az LCD 1602 lábak rövid leírása

Nézzük meg közelebbről az LCD1602 érintkezőit:

Mindegyik csapnak megvan a maga célja:

  1. Földi GND;
  2. Tápellátás 5 V;
  3. A monitor kontrasztjának beállítása;
  4. Parancs, adat;
  5. Adatok írása és olvasása;
  6. Engedélyezze;

7-14. Adatvonalak;

  1. Plusz háttérvilágítás;
  2. Mínusz háttérvilágítás.

Kijelző specifikációi:

  • Karakter megjelenítési típus, lehetőség van szimbólumok betöltésére;
  • LED lámpák;
  • Vezérlő HD44780;
  • Tápfeszültség 5V;
  • 16x2 karakteres formátum;
  • Üzemi hőmérséklet tartomány -20C és +70C között, tárolási hőmérséklet -30C és +80C között;
  • Betekintési szög 180 fok.

Az LCD csatlakozási rajza az Arduino kártyához i2C nélkül

A monitor I2C nélküli Arduino mikrokontrollerhez való közvetlen csatlakoztatásának szabványos diagramja a következő.

A csatlakoztatott érintkezők nagy száma miatt előfordulhat, hogy nincs elég hely a szükséges elemek csatlakoztatásához. Az I2C használatával a vezetékek száma 4-re, a foglalt érintkezők száma pedig 2-re csökken.

Hol vásárolhat LCD képernyőket és pajzsokat az Arduino számára

Az 1602-es LCD-kijelző (és a 2004-es verzió) meglehetősen népszerű, így a hazai webáruházakban és a külföldi oldalakon is könnyen megtalálható. Íme néhány link a leginkább elérhető lehetőségekhez:

LCD1602+I2C kék képernyős modul, Arduino kompatibilis Egyszerű LCD kijelzö 1602 (zöld háttérvilágítás) olcsóbb, mint 80 rubel Nagy LCD2004 képernyő I2C HD44780-zal Arduinohoz (kék és zöld háttérvilágítás)
1602-es kijelző IIC adapterrel és kék háttérvilágítással Az LCD1602 másik változata forrasztott I2C modullal Port IIC/I2C/TWI/SPI adaptermodul 1602-es pajzshoz, kompatibilis az Arduino-val
RGB háttérvilágítású kijelző! LCD 16×2 + billentyűzet + Buzzer Shield Arduino-hoz Shield Arduino-hoz gombokkal és képernyővel LCD1602 LCD 1602 LCD kijelző 3D nyomtatóhoz (Smart Controller for RAMPS 1.4, Text LCD 20×4), SD és MicroSD kártyaolvasó modul

Az I2C protokoll leírása

Mielőtt megvitatná a kijelző Arduino-hoz i2c adapteren keresztüli csatlakoztatását, beszéljünk röviden magáról az i2C protokollról.

I2C/IIC(Inter-Integrated Circuit) egy protokoll, amelyet eredetileg integrált áramkörök összekapcsolására hoztak létre elektronikai eszköz. A fejlesztés a Philips tulajdona. Az i2c protokoll egy 8 bites busz használatán alapul, amely a vezérlőelektronikában lévő blokkok kommunikálásához szükséges, valamint egy címzési rendszeren, melynek köszönhetően ugyanazon a vezetékeken keresztül több eszközzel is kommunikálhatunk. Egyszerűen csak adatokat továbbítunk egyik vagy másik eszközre, az adatcsomagokhoz hozzáadva a kívánt elem azonosítóját.

A legtöbb egyszerű áramkör Az I2C tartalmazhat egy mestereszközt (leggyakrabban egy Arduino mikrokontroller) és több szolgát (például egy LCD-kijelzőt). Minden eszköznek van egy címe 7 és 127 között. Nem lehet két azonos című eszköz ugyanabban az áramkörben.

Az Arduino alaplap támogatja az i2c-t hardverben. Az A4 és A5 érintkezők segítségével csatlakoztathatja az eszközöket ezzel a protokollal.

Az I2C működésének számos előnye van:

  • A működéshez csak 2 vonal szükséges - SDA (adatvonal) és SCL (szinkronizálási vonal).
  • Számos vezető eszköz csatlakoztatása.
  • Csökkentett fejlesztési idő.
  • Csak egy mikrokontroller szükséges a teljes eszközkészlet vezérléséhez.
  • Az egy buszra csatlakoztatható mikroáramkörök számát csak a maximális kapacitás korlátozza.
  • Magas fokú adatbiztonság az áramkörökbe épített speciális túlfeszültség-szűrő szűrőnek köszönhetően.
  • Egyszerű eljárás a felmerülő hibák diagnosztizálására és a hibák gyors hibakeresésére.
  • A busz már magába az Arduinóba integrálva van, így nincs szükség további buszinterfész fejlesztésére.

Hibák:

  • Van egy kapacitív korlát a vonalon - 400 pF.
  • Nehéz programozni egy I2C vezérlőt, ha több különböző eszköz van a buszon.
  • Nál nél Nagy mennyiségű az eszközök nehezen találják meg a hibát, ha valamelyikük hibásan alacsony szintű állapotot állít be.

i2c modul LCD 1602 Arduino-hoz

Az i2c kijelző használatának leggyorsabb és legkényelmesebb módja az Arduino-ban, ha kész képernyőt vásárol beépített protokolltámogatással. De nincs túl sok ilyen képernyő, és nem is olcsók. De már rengeteg különböző szabványos képernyőt gyártottak. Ezért ma a legkedvezőbb és legnépszerűbb lehetőség egy külön I2C modul vásárlása és használata - egy adapter, amely így néz ki:

A modul egyik oldalán i2c érintkezőket látunk - föld, táp és 2 az adatátvitelhez. A másik adapteren külső tápcsatlakozókat látunk. És természetesen a táblán sok csap található, amelyekkel a modult a szabványos képernyőtüskékre forrasztják.


Az i2c kimenetek az Arduino kártyához való csatlakozásra szolgálnak. Ha szükséges, csatlakozunk külső tápegység háttérvilágításhoz. A beépített trimmerrel egyéni kontrasztértékeket állíthatunk be J

A piacon megtalálhatók az LCD 1602 modulok már forrasztott adapterekkel, használatuk a lehető legegyszerűbb. Ha külön adaptert vásárolt, akkor azt először a modulhoz kell forrasztania.

Az LCD-képernyő csatlakoztatása az Arduino-hoz I2C-n keresztül

A csatlakoztatáshoz magára az Arduino kártyára, egy kijelzőre, egy kenyérsütőtáblára, csatlakozó vezetékekre és egy potenciométerre van szükség.

Ha speciális különálló i2c adaptert használ, először forrasztania kell a képernyőmodulhoz. Ott nehéz hibázni, ezt a sémát lehet követni.


Az i2c támogatással rendelkező LCD monitor négy vezetékkel csatlakozik az alaplaphoz - két vezeték az adatokhoz, két vezeték az áramellátáshoz.

  • A GND érintkező csatlakozik a GND-hez az alaplapon.
  • A VCC tűje 5V-on van.
  • Az SCL az A5 érintkezőhöz csatlakozik.
  • Az SDA az A érintkezőhöz csatlakozik.

És ez minden! Nincsenek dróthálók, amelyekbe nagyon könnyű belegabalyodni. Ugyanakkor egyszerűen a könyvtárakra bízhatjuk az i2C protokoll megvalósításának minden bonyolultságát.

Könyvtárak az i2c LCD kijelzővel való munkavégzéshez

Az Arduino és az LCD 1602 I2C buszon keresztüli interakciójához legalább két könyvtárra lesz szüksége:

  • Az I2C-vel való munkavégzéshez használható Wire.h könyvtár már elérhető itt szabványos program Arduino IDE.
  • A LiquidCrystal_I2C.h könyvtár, amely sokféle parancsot tartalmaz a monitor I2C buszon keresztüli vezérléséhez, és lehetővé teszi a vázlat egyszerűbbé és rövidebbé tételét. Ezenkívül telepítenie kell a könyvtárat A kijelző csatlakoztatása után telepítenie kell a LiquidCrystal_I2C.h könyvtárat is.

Miután az összes szükséges könyvtárat a vázlathoz csatlakoztattuk, létrehozunk egy objektumot, és használhatjuk annak összes funkcióját. A teszteléshez töltsük be a következő szabványos példavázlatot.

#beleértve #beleértve // A könyvtárat is beleértve //#include // Alternatív könyvtár csatlakoztatása LiquidCrystal_I2C lcd(0x27,16,2); // Adja meg az I2C címet (a leggyakoribb érték), valamint a képernyő paramétereit (LCD 1602 esetén - 2 sor, egyenként 16 karakter //LiquidCrystal_PCF8574 lcd(0x27); // Opció a PCF8574 könyvtárhoz void setup( ) ( lcd.init (); // A kijelző inicializálása lcd.backlight(); // A háttérvilágítás csatlakoztatása lcd.setCursor(0,0); // Állítsa a kurzort az első sor elejére lcd.print(" Hello"); lcd.setCursor(0,1); // Állítsa a kurzort a második sor elejére lcd.print("ArduinoMaster"); // Írjon be szöveget a második sorba ) void loop() ( )

A LiquidCrystal_I2C könyvtár funkcióinak és módszereinek leírása:

  • home() és clear() - az első funkció lehetővé teszi a kurzor visszaállítását a képernyő elejére, a második ugyanezt teszi, ugyanakkor töröl mindent, ami korábban a monitoron volt.
  • write(ch) – lehetővé teszi egyetlen ch karakter kinyomtatását a képernyőre.
  • cursor() és noCursor() – megjeleníti/elrejti a kurzort a képernyőn.
  • blink() és noBlink() – a kurzor villog/nem villog (ha a megjelenítése korábban engedélyezve volt).
  • display() és noDisplay() – lehetővé teszi a kijelző csatlakoztatását/letiltását.
  • scrollDisplayLeft() és scrollDisplayRight() – görgeti a képernyőt egy karakterrel balra/jobbra.
  • autoscroll() és noAutoscroll() – lehetővé teszi az automatikus görgetés mód engedélyezését/letiltását. Ebben a módban minden új karakter ugyanarra a helyre kerül, és kiszorítja a képernyőre korábban írottakat.
  • leftToRight() és rightTo Left() – A megjelenített szöveg irányának beállítása – balról jobbra vagy jobbról balra.
  • createChar(ch, bitmap) – létrehoz egy karaktert ch kóddal (0–7), bittérképek tömbjét használva fekete-fehér pontok létrehozásához.

Alternatív könyvtár az i2c kijelzővel való munkavégzéshez

Bizonyos esetekben hibák léphetnek fel, amikor a megadott könyvtárat PCF8574 vezérlőkkel felszerelt eszközökkel használja. Ebben az esetben a LiquidCrystal_PCF8574.h könyvtár javasolható alternatívaként. Kibővíti a LiquidCrystal_I2C-t, így nem lehet probléma a használatával.

Problémák az i2c lcd kijelző csatlakoztatásakor

Ha a vázlat feltöltése után nem lát semmilyen üzenetet a kijelzőn, próbálkozzon a következő lépésekkel.

Először is növelheti vagy csökkentheti a monitor kontrasztját. A karakterek gyakran egyszerűen nem láthatók a kontraszt és a háttérvilágítási mód miatt.

Ha ez nem segít, ellenőrizze, hogy az érintkezők megfelelően vannak-e csatlakoztatva, és hogy a háttérvilágítás csatlakoztatva van-e. Ha külön i2c adaptert használt, akkor ellenőrizze újra az érintkezők forrasztásának minőségét.

A képernyőről hiányzó szöveg másik gyakori oka lehet a helytelen i2c-cím. Először próbálja meg megváltoztatni az eszköz címét a vázlatban 0x27 0x20-ról 0x3F-re. A különböző gyártók eltérő alapértelmezett címeket programozhatnak be. Ha ez nem segít, akkor futtathatja az i2c szkenner vázlatot, amely minden csatlakoztatott eszközt átvizsgál, és nyers erővel meghatározza a címüket. Példa egy i2c szkenner vázlatára.

Ha a képernyő továbbra sem működik, próbálja meg kiforrasztani az adaptert, és a szokásos módon csatlakoztassa az LCD-t.

Következtetés

Ebben a cikkben megvizsgáltuk az LCD-képernyő használatának főbb kérdéseit összetett Arduino-projektekben, amikor szabad tűket kell mentenünk a táblán. Egy egyszerű és olcsó i2c adapter lehetővé teszi egy 1602-es LCD képernyő csatlakoztatását, amely mindössze 2 analóg érintkezőt foglal el. Sok esetben ez nagyon fontos lehet. Az ár a kényelem kedvéért egy további modul - konverter és könyvtár - használatának szükségessége. Véleményünk szerint ez nem túl magas ár a kényelemért, ezért erősen javasoljuk ennek a funkciónak a használatát projektekben.

10 Ohm és 1 MOhm közötti névleges értékekkel);

  • 2 db 4,7 kOhm-os ellenállás (ugyanabból a készletből);
  • összekötő vezetékek (például itt van egy jó készlet);
  • számítógép Arduino IDE-vel.
  • 1 Leírás I2C interfész

    A soros IIC (más néven I2C – Inter-Integrated Circuits) két kétirányú kommunikációs vonalat használ, amelyeket soros adatbusznak neveznek az adatok továbbítására. SDA (soros adatok)és órabusz SCL (soros óra). Két elektromos vezeték is van. Az SDA és SCL buszokat ellenállásokon keresztül húzzák fel a teljesítménybuszra.

    Legalább egy van a neten mester eszköz, amely adatátvitelt kezdeményez és szinkronizációs jeleket generál. A hálózatnak is van szolga eszközök, amelyek a vezető kérésére továbbítják az adatokat. Minden slave eszköznek egyedi címe van, amelyet a mester használ a hozzáféréshez. A készülék címe az adatlapon van feltüntetve. Egy I2C buszra akár 127 eszköz, köztük több master is csatlakoztatható. A buszra működés közben is csatlakoztathatók az eszközök, pl. támogatja a forró csatlakoztatást.

    Nézzük meg az I2C protokollon keresztüli csere idődiagramját. Többféle lehetőség is létezik, nézzük meg az egyik leggyakoribbat. Használjuk ki logikai elemző, csatlakozik az SCL és SDA buszokhoz.

    A mester kezdeményezi a cserét. Ehhez óraimpulzusokat kezd generálni, és az SCL vonal mentén elküldi azokat 9 darabos csomagban. Ugyanakkor az SDA adatsoron beállítja készülék címe, amellyel kommunikációt kell létesíteni, melyeket az első 7 órajel impulzus vezérel (ezért a címtartomány korlátozása: 2 7 = 128 mínusz nulla cím). Az üzenet következő része műveleti kód(olvasni vagy írni) és még egy kicsit - elismerő bit(ACK), hogy a slave eszköz elfogadta a kérést. Ha a megerősítő bit nem érkezik meg, a csere véget ér. Vagy a mester továbbra is ismételt kéréseket küld.

    Ezt az alábbi ábra szemlélteti. Az első esetben például csatlakoztassuk le a slave eszközt a buszról. Látható, hogy a master megpróbál kommunikációt létesíteni a 0x27 címû eszközzel, de nem kap visszaigazolást (NAK). A csere véget ér.


    Most csatlakoztassa a slave eszközt az I2C buszhoz, és ismételje meg a műveletet. A helyzet megváltozott. Az első címet tartalmazó csomag nyugtát (ACK) kapott a slave-től. A csere folytatódott. Az információkat 9 bites csomagokban is továbbítják, de most 8 bitet foglaltak el adatés 1 bit - elismerő bit a slave minden bájt adatot kap. Ha a kapcsolat bármely pillanatban megszakad, és a nyugtázó bit nem érkezik meg, a master leállítja az átvitelt.

    2 I2C megvalósítás az Arduinóban

    Az Arduino két portot használ az I2C interfészen keresztüli működéshez. Például be Arduino UNOés Arduino Nano analóg port Az A4 az SDA-nak, az A5 analóg port az SCL-nek felel meg.


    Más táblamodelleknél a tű megfeleltetése a következő:

    3 "Wire" könyvtár az IIC-vel való együttműködéshez

    Az eszközökkel az I2C buszon keresztüli adatcsere megkönnyítése érdekében szabványos könyvtárat írtak az Arduino számára Huzal. A következő funkciókkal rendelkezik:

    FunkcióCélja
    kezd (cím) a könyvtár inicializálása és csatlakozás az I2C buszhoz; ha a cím nincs megadva, akkor a csatlakoztatott eszközt tekintik masternek; 7 bites címzést használnak;
    requestFrom() a mester arra használja, hogy bizonyos számú bájtot kérjen a slave-től;
    startTransmission(cím) adatátvitel megkezdése a slave eszközre egy adott címen;
    endTransmission() adatátvitel leállítása a slave számára;
    ír() adatok rögzítése a slave-től válaszként egy kérésre;
    elérhető() visszaadja a slave-től fogadható információ bájtok számát;
    olvas() a slave-től a mesterhez vagy a mestertől a szolgához továbbított bájt beolvasása;
    onReceive() azt a funkciót jelöli, amelyet meg kell hívni, amikor a slave adást kap a mastertől;
    kérésre() azt a funkciót jelöli, amelyet meg kell hívni, amikor a master adást kap a slave-től.

    4 I2C eszköz csatlakoztatása az Arduinóhoz

    Lássuk, hogyan kell dolgozni az I2C busszal Arduino segítségével.

    Először is állítsunk össze egy áramkört, mint az ábrán. A LED fényerejét egy digitális 64 pozíciós AD5171 potenciométerrel szabályozzuk (lásd a műszaki leírást), amely az I2C buszra csatlakozik. A cím, amelyen elérjük a potenciométert, 0x2c (44 decimális).


    5 Eszköz kezelés IIC buszon keresztül

    Tekintsük az információcsere diagramjait digitális potenciométer AD5171 szerepelt technikai leírás:


    Érdeklődünk az adatok nyilvántartásba írásának diagramja iránt RDAC. Ez a regiszter a potenciométer ellenállásának szabályozására szolgál.

    Nyissunk meg egy vázlatot a "Wire" könyvtár példáiból: Fájl Minták Wire digital_potenciometer. Töltsük be az Arduino memóriájába.

    #beleértve // a "Wire" könyvtár csatlakoztatása byte val = 0; // potenciométerre való átvitel void setup() ( Wire.begin(); // kapcsolódjon az I2C buszhoz masterként } void loop() ( Wire.beginTransmission(44); // csere elindítása "44" I2C-című eszközzel (0x2C) Wire.write(byte(0x00)); // írási utasítás küldése az RDAC regiszternek Wire.write(val); // a 64 pozíciós potenciométer pozíciójának beállítása Wire.endTransmission(); // teljes I2C átvitel val++; // érték növelése 1-gyel if (val == 63) ( // amikor a potenciométer eléri a maximális érték = 0; // reset val ) delay(500); }

    Bekapcsolás után láthatja, hogy a LED fényereje ciklikusan növekszik, majd kialszik. Ebben az esetben az Arduino segítségével vezéreljük a potenciométert az I2C buszon keresztül.