I2c očitavanje podataka. Kontakti

10.09.2021

Svako ko se bavio razvojem elektronske opreme susreo se sa situacijom da je za koordinaciju nivoa signala, uzorkovanje i adresiranje funkcionalno kompletnih čvorova potrebno koristiti ogroman broj međuIC-ova.
Za povećanje efikasnosti i pojednostavljenje rješenja kola, Philips razvio jednostavnu dvosmjernu dvožičnu magistralu za takozvanu “inter-IC” kontrolu.
Sabirnica je nazvana InterIC, ili IIC (I2C) sabirnica.

Trenutno samo Philips proizvodi više od 150 tipova I2C kompatibilnih uređaja, funkcionalno dizajniranih za rad u elektronskoj opremi za razne namjene. To uključuje memorijske IC-ove, video procesore i module za obradu audio i video signala, ADC i DAC-ove, drajvere za LCD ekrane, procesore sa ugrađenim hardverskim I2C kontrolerom magistrale i još mnogo toga.

I2C magistrala je jedna od modifikacija protokola za serijsku razmjenu podataka. U standardnom režimu, serijski 8-bitni podaci se prenose brzinom do 100 kbit/s, au „brzom“ režimu do 400 kbit/s. Za izvođenje procesa razmjene informacija na I2C sabirnici koriste se samo dva signala: linija podataka SDA sinhronizacija linija SCL Da bi se osigurala implementacija dvosmjernosti sabirnice bez upotrebe složenih bus arbitara, izlazni stupnjevi uređaja spojenih na sabirnice imaju otvoreni odvod ili otvoreni kolektor za montažu funkcije „I“.

Jednostavna dvožična I2C serijska magistrala minimizira broj veza između IC-a, IC-ovi imaju manje pinova i potrebno je manje tragova. Kao rezultat - štampane ploče postati jednostavniji i tehnološki napredniji u proizvodnji. Integrirani I2C protokol eliminira potrebu za dekoderima adresa i drugom vanjskom logikom pregovaranja.

Maksimalni dozvoljeni broj čipova povezanih na jednu magistralu ograničen je maksimalnim kapacitetom magistrale od 400 pF.

Algoritam za suzbijanje hardverske buke ugrađen u čipove osigurava integritet podataka u uslovima značajne buke.
Svi I2C kompatibilni uređaji imaju sučelje koje im omogućava da međusobno komuniciraju preko magistrale, čak i ako im je napon napajanja značajno drugačiji. Sljedeća slika prikazuje princip povezivanja nekoliko IC-a s različitim naponima napajanja na jednu razmjenjivačku magistralu.

Svaki uređaj se prepoznaje po jedinstvenoj adresi i može djelovati kao predajnik ili prijemnik, ovisno o namjeni uređaja.

Dodatno, uređaji se mogu klasifikovati kao master i slave prilikom prenosa podataka. Master je uređaj koji inicira prijenos podataka i generiše signale sinhronizacije. U ovom slučaju, svaki adresabilni uređaj se smatra slave u odnosu na master.

Na osnovu specifikacije rada sabirnice, u svakom trenutku na sabirnici može postojati samo jedan master, odnosno uređaj koji osigurava generiranje bus SCL signala. Vođa može djelovati i kao vođa-predajnik i vođa-prijemnik. Međutim, sabirnica vam omogućava da imate nekoliko mastera, namećući određene karakteristike njihovog ponašanja u generisanju kontrolnih signala i praćenju statusa sabirnice. Mogućnost povezivanja više od jednog mastera na sabirnicu znači da više od jednog mastera može pokušati započeti prijenos u isto vrijeme. Da bi se eliminisali "sudari" koji mogu nastati u ovom slučaju, razvijena je arbitražna procedura - ponašanje mastera kada se detektuje "hvatanje" sabirnice od strane drugog mastera.

Procedura za sinhronizaciju dva uređaja Ova procedura se zasniva na činjenici da su svi I2C uređaji povezani na sabirnicu prema pravilu I ožičenja. originalno stanje I SDA i SCL signali su visoki.

START i STOP status

Procedura zamjene počinje tako što master generira START stanje - master generiše prijelaz signala SDA linije iz HIGH stanja u LOW stanje na visokom nivou na SCL liniji. Ovaj prijelaz percipiraju svi uređaji povezani na sabirnicu kao znak početka postupka zamjene.

Generisanje taktnog signala je uvek odgovornost mastera; Svaki master generiše svoj sopstveni sat kada šalje podatke preko magistrale.

Procedura razmjene završava tako što master generira STOP stanje - prijelaz stanja SDA linije iz niskog stanja u HIGH stanje kada je stanje SCL linije HIGH.

START i STOP stanja uvijek generira master. Sabirnica se smatra zauzetom nakon što se detektuje START stanje. Sabirnica se smatra slobodnom neko vrijeme nakon što se zabilježi STOP stanje.

Prilikom slanja poruka preko I2C magistrale, svaki master generiše svoj vlastiti takt signal na SCL liniji.

Nakon formiranja stanja START, master snižava stanje SCL linije na LOW i postavlja najznačajniji bit prvog bajta poruke na SDA liniju. Broj bajtova u poruci nije ograničen.

Specifikacija I2C sabirnice dozvoljava promjene na SDA liniji samo kada je SCL linija LOW.

Podaci su važeći i trebali bi ostati stabilni samo tokom stanja VISOKOG sata.

Za potvrdu prijema bajta od glavnog predajnika od strane slave prijemnika, u specifikaciju protokola razmjene se uvodi poseban bit potvrde preko I2C sabirnice, koji se postavlja na SDA magistralu nakon prijema 8. bita podataka.

Potvrda

Dakle, prijenos 8 bitova podataka od predajnika do prijemnika je završen dodatnim ciklusom (formiranje 9. taktnog impulsa SCL linije), tokom kojeg prijemnik postavlja nizak nivo signala na SDA liniji, kao znak uspješnog prijema bajta.

Potrebna je potvrda prilikom prijenosa podataka. Odgovarajući sinhronizacijski impuls generira master. Predajnik otpušta (HIGH) SDA liniju za vrijeme trajanja sata potvrde. Prijemnik mora držati SDA liniju za vrijeme HIGH stanja sata potvrde u stabilnom LOW stanju.

U slučaju da slave prijemnik ne može potvrditi svoju adresu (na primjer, kada trenutno obavlja neke funkcije u realnom vremenu), podatkovna linija mora biti ostavljena VISOKO. Master tada može izdati STOP signal za prekid prijenosa podataka.

Ako je glavni-prijemnik uključen u prijenos, tada mora naznačiti kraj prijenosa do podređenog-predajnika tako što neće potvrditi posljednji bajt. Slave koji odašilje mora osloboditi podatkovnu liniju kako bi omogućio masteru da izda STOP signal ili ponovi START signal.

Sinhronizacija se izvodi pomoću veze na SCL liniju korištenjem pravila AND.

To znači da master nema isključivu kontrolu nad prijelazom SCL linije iz LOW u HIGH. U slučaju da je slave-u potrebno dodatno vrijeme za obradu primljenog bita, on ima mogućnost da drži SCL liniju na niskom nivou dok ne bude spreman da primi sljedeći bit. Dakle, SCL linija će biti LOW za najduži LOW period takta.

Uređaji sa kraćim LOW periodom će ući u stanje mirovanja dok se duži period ne završi. Kada svi omogućeni uređaji završe svoj LOW period takta, SCL linija će postati HIGH. Svi uređaji će početi da rade HIGH u svom taktu. Prvi uređaj koji istekne ovaj period će ponovo postaviti SCL liniju LOW. Dakle, LOW period linije takta SCL određen je najdužim periodom takta svih uključenih uređaja, a period HIGH je određen najkraćim periodom takta uređaja.

Prijemnici mogu koristiti mehanizam sinhronizacije kao sredstvo kontrole prijenosa podataka na nivou bajtova i bita.

Na nivou bajtova, ako uređaj može primati bajtove podataka velikom brzinom, ali mu je potrebno određeno vrijeme da pohrani primljeni bajt ili da se pripremi za primanje sljedećeg, tada može držati SCL liniju LOW nakon prijema i potvrde bajta, čime se predajnik stavlja u stanje mirovanja.

Na nivou bita, uređaj kao što je mikrokontroler bez ugrađenih I2C hardverskih kola ili sa ograničenim kolima može usporiti frekvenciju takta produžavanjem svog LOW perioda. Na taj način se brzina prijenosa bilo kojeg mastera prilagođava brzini sporog uređaja.

Adresiranje na I2C sabirnici

Svaki uređaj spojen na magistralu može biti adresiran softverom na jedinstvenu adresu.

Da bi izabrao primaoca poruke, prezenter koristi jedinstvenu adresnu komponentu u formatu za slanje. Kada se koriste uređaji istog tipa, IC-ovi često imaju dodatni birač adrese, koji se može implementirati ili kao dodatni digitalni ulaz za biranje adresa ili kao analogni ulaz. U ovom slučaju, adrese takvih uređaja istog tipa distribuiraju se u adresnom prostoru uređaja povezanih na magistralu.

U normalnom načinu rada koristi se 7-bitno adresiranje.

Procedura adresiranja na I2C magistrali je da prvi bajt nakon START signala određuje koji slave adresira master za ciklus razmjene. Izuzetak je adresa "General Call" koja se obraća svim uređajima na magistrali. Kada se koristi ova adresa, svi uređaji bi u teoriji trebali poslati signal potvrde. Međutim, u praksi su rijetki uređaji koji mogu podnijeti "opći poziv".

Prvih sedam bitova prvog bajta čine slave adresu. Osmi, najmanji bitni bit, određuje smjer prijenosa podataka. "Nula" znači da će master pisati informacije odabranom slave-u. "Jedan" znači da će master čitati informacije od slave-a.

Nakon slanja adrese, svaki uređaj u sistemu upoređuje prvih sedam bitova nakon START signala sa svojom adresom. Ako postoji podudaranje, uređaj pretpostavlja da je odabran kao slave-prijemnik ili kao slave-predajnik, ovisno o bitu smjera.

Slave adresa može se sastojati od fiksnog i programabilnog dijela.

Često se dešava da sistem ima više uređaja istog tipa (na primjer, memorijski čip ili drajver LED indikatora), pa je korištenjem programabilnog dijela adrese moguće povezati najveći mogući broj takvih uređaja na magistralu. . Broj programabilnih bitova u adresi ovisi o broju slobodnih pinova mikrokola. Ponekad se koristi jedan pin sa analognom postavkom programabilnog opsega adresa, kao što je, na primjer, implementirano u SAA1064 IC. Štaviše, ovisno o potencijalu na ovom adresnom pinu IC-a, moguće je pomjeriti adresni prostor drajvera tako da IC istog tipa ne sukobljavaju jedni s drugima na zajedničkoj magistrali.

Svi IC-ovi koji podržavaju rad u standardu sabirnice I2C imaju skup fiksnih adresa, čiju listu navodi proizvođač u opisima kontrolera.

Kombinacija bitova adrese 11110XX rezervirana je za 10-bitno adresiranje.

IN opšti pogled proces razmjene na sabirnici od trenutka formiranja START stanja do STOP stanja može se ilustrovati sljedećom slikom:

Kao što slijedi iz specifikacije guma, one su dozvoljene kao jednostavne formati za razmjenu, i kombinovano, kada se u intervalu od START stanja do STOP stanja, master i slave mogu ponašati i kao prijemnik i kao predajnik podataka. Kombinirani formati se mogu koristiti, na primjer, za upravljanje serijskom memorijom.
Tokom prvog bajta podataka može se proslijediti memorijska adresa, koja se upisuje u interni registar zasuna. Nakon ponavljanja START signala i slave adrese, podaci se preuzimaju iz memorije. Sve odluke o automatskom povećanju ili smanjenju adrese kojoj se prethodno pristupilo donosi dizajner određenog uređaja. Stoga, u svakom slučaju Najbolji način Kako biste izbjegli nekontroliranu situaciju na sabirnici, prije korištenja novog (ili prethodno nekorištenog) IC-a, trebali biste pažljivo proučiti njegov opis (datasheet), nakon što ste ga dobili s web stranice proizvođača. Štaviše, proizvođači često stavljaju više detaljna uputstva po aplikaciji.

U svakom slučaju, prema specifikaciji magistrale, svi uređaji u razvoju moraju resetirati logiku sabirnice kada prime START ili ponovno START signal i pripremiti se za primanje adrese.

Ipak, glavni problemi s korištenjem I2C sabirnice nastaju upravo zato što programeri koji "počinju" raditi s I2C sabirnicom ne uzimaju u obzir činjenicu da master (često mikroprocesor) nema ekskluzivno pravo ni na jednu od linija sabirnice. .

I2C ekspanzija

Standardna I2C magistrala sa brzinom prijenosa podataka od 100 kbit/s i 7-bitnom adresom postoji više od 10 godina nepromijenjena. I2C sabirnica je široko prihvaćena kao standard za stotine tipova čipova koje proizvodi Philips i drugi dobavljači. Trenutno je specifikacija I2C magistrale proširena u dva smjera: povećanje brzine i proširenje adresnog prostora kako bi se proširio raspon novorazvijenih uređaja.

Uvođenje specifikacije "brzog" načina rada, koja omogućava da se brzina prijenosa podataka četiri puta poveća na 400 kBit/sec. Potreba za ovim “proširenjem” standarda bila je potrebna zbog potrebe za prijenosom velikih količina informacija, i, kao posljedica, potrebe za povećanjem kapaciteta kanala.

Uvođenje specifikacije "10-bitnog adresiranja" koja omogućava korištenje 1024 dodatne adrese, jer većina od 112 adresa koje dozvoljava 7-bitno adresiranje je već korišteno više puta. Da biste spriječili probleme sa postavljanjem adresa novih uređaja, poželjno je imati veći broj adresnih kombinacija. Približno desetostruko povećanje broja dostupnih adresa dobijeno je korištenjem novog 10-bitnog adresiranja.

Svi novi uređaji sa I2C interfejsom rade brzi način rada. Poželjno je da budu u stanju da primaju i/ili prenose podatke brzinom od 400 kbit/s. U najmanju ruku, moraju biti u mogućnosti da uđu u sinhronizaciju u brzom načinu rada kako bi smanjili brzinu prijenosa (produžavanjem LOW SCL perioda) na prihvatljivu vrijednost.

Brzi uređaji su općenito kompatibilni prema gore, što znači da mogu raditi sa standardnim uređajima preko spore magistrale. Očigledno je da standardnim uređajima nisu u mogućnosti da rade na brzoj magistrali jer ne mogu da se sinhronizuju velikom brzinom i njihovo stanje će postati nepredvidivo. Brzi slave uređaji mogu imati 7-bitnu ili 10-bitnu adresu. Međutim, 7-bitna adresa je poželjnija, jer je njena hardverska implementacija jednostavnija i dužina poruke kraća. Uređaji sa 7-bitnim i 10-bitnim adresama mogu se koristiti istovremeno na istoj magistrali, bez obzira na brzinu prijenosa. I postojeći i budući masteri će moći generirati i 7-bitne i 10-bitne adrese.

U brzom načinu rada, protokol, format, logički nivoi i maksimalno kapacitivno opterećenje magistralnih linija ostaju nepromijenjeni. Algoritam sinhronizacije za SDA i SCL linije nije promijenjen. Međutim, "brzi" uređaji ne moraju biti kompatibilni sa CBUS uređajima, jer ne mogu raditi pri velikim brzinama. Ulazna kola brzi uređaji mora imati ugrađenu supresiju prenapona i Schmittov okidač na obje linije.Izlazni bafer brzih uređaja mora imati kaskadu s kontrolom vremena padanja SDA i SCL linija. U pravilu, kada prestane brzi napon napajanja, izlazi uređaja, autobusi povezani na I2C linije moraju prijeći u treće stanje. Dizajn kola izlaznih stupnjeva je podvrgnut promjenama kako bi se osiguralo vrijeme porasta vodeće ivice (prijelaz iz LOW u HIGH stanje). Ako za opterećenja sabirnice do 200 pF ovu ulogu obavljaju pull-up otpornici, onda za opterećenja od 200 pF do 400 pF ovu funkciju obavlja strujni izvor ili sklopni otpornički krug koji osigurava "prisilno" prebacivanje linija I2C sabirnice .

10-bitno adresiranje također ne mijenja format magistrale. Za to se koristi rezervirana adresna kombinacija 1111HHH od prvih sedam bitova prvog bajta. 10-bitno adresiranje ne utiče na postojeće 7-bitno adresiranje. Uređaji sa 7-bitnim i 10-bitnim adresiranjem mogu biti povezani na istu magistralu. Iako postoji osam mogućih kombinacija sekvence 1111XXX, koriste se samo četiri - 11110XX. Kombinacije poput 11111XX rezervisane su za dalja poboljšanja guma. Dodjela bitova prva dva bajta 10-bitna adresa se formira od prva dva bajta. Prvih sedam bitova prvog bajta su kombinacija oblika 11110XX, gde su dva najmanje značajna bita (XX) dva najznačajnija (9 i 8) bita 10-bitne adrese; Osmi bit prvog bajta je bit smjera.
"Nula" u ovom bitu znači da će master pisati informacije slave-u, a "jedan" znači da će master čitati informacije sa slave-a. Ako je bit smjera nula, onda drugi bajt sadrži preostalih 8 bitova 10-bitne adrese. Ako je bit smjera jedan, tada sljedeći bajt sadrži podatke koji se prenose sa slave-a na master.

U zaključku, treba napomenuti da standard sabirnice I2C prilično jednostavno implementira kolizijnu arbitražu - rješava problem istovremene inicijalizacije razmjene na sabirnici od strane nekoliko mastera, bez gubitka podataka.

Ova i druge, specifičnije karakteristike upotrebe I2C sabirnice, njene implementacije i upotrebe, mogu se pronaći direktno na web stranici Philips .

Prilikom pripreme opisa korišteni su materijali predstavljeni u članku

I2C sučelje (ili inače IIC) je prilično rasprostranjena mreža serijski interfejs, koji je izumio Philips i relativno je stekao popularnost velika brzina prijenos podataka (obično do 100 kbit/s, u modernim mikro krugovima do 400 kbit/s), niska cijena i lakoća implementacije.

1) fizika.

Fizički, mreža je dvožična sabirnica, čije se linije nazivaju PODACI I CLOCK(potrebna je i treća žica - uzemljenje, ali sučelje se obično naziva dvožičnim zbog broja signalnih žica). Shodno tome, podaci se prenose preko DATA linije, a linija CLOCK se koristi za taktiranje. Na sabirnicu se može povezati do 128 pretplatnika, svaki sa svojim jedinstveni broj. U svakom trenutku, informacije se prenose od strane samo jednog pretplatnika i to samo u jednom smjeru.

I2C uređaji imaju izlaz "otvorenog kolektora". Kada je izlazni tranzistor zatvoren, na odgovarajućoj liniji se postavlja visoki nivo preko eksternog pull-up otpornika; kada je izlazni tranzistor otvoren, on povlači odgovarajući vod na masu i na njemu se postavlja nizak nivo (vidi sliku) . Otpornici imaju vrijednost od nekoliko kiloOhma do nekoliko desetina kiloOma (što je veća brzina, to su otpornici niža, ali je veća potrošnja energije). Na slici trouglovi na ulazu pokazuju da su ulazi visoke impedancije i, shodno tome, ne utiču na nivoe signala na linijama, već samo „čitaju“ ove nivoe. Obično se koriste nivoi od 5V ili 3,3V.

2) Logika.

Svaki uređaj na I2C magistrali može biti jedan od dva tipa: Master (master) ili Slave (slave). Razmjena podataka se odvija u sesijama. “Master” uređaj u potpunosti kontroliše sesiju: ​​pokreće sesiju razmene podataka, kontroliše prenos tako što šalje impulse takta na liniju sata i završava sesiju.

Osim toga, ovisno o smjeru prijenosa podataka, i “Master” i “Slave” uređaji mogu biti “Prijemnici” ili “Odašiljači”. Kada “Master” prima podatke od “Slave”, to je “Primalac”, a “Slave” je “Odašiljač”. Kada “Slave” prima podatke od “Mastera”, tada je već “Primalac”, a “Master” je u ovom slučaju “Odašiljač”.

Nemojte brkati tip uređaja “Master” sa statusom “Transmitter”. Uprkos činjenici da kada “Master” čita informacije sa “Slave-a”, ovaj potonji stavlja podatke na sabirnicu podataka, to čini samo kada “Master” to dozvoljava postavljanjem odgovarajućeg nivoa na liniji sata. Dakle, iako “Slave” u ovom slučaju kontroliše sabirnicu podataka, samu razmjenu još uvijek kontrolira “Master”.

U standby modu (kada nema sesije razmjene podataka), obje signalne linije (podaci i sat) su u stanju visokog nivoa (privučene na napajanje).

Svaka sesija razmjene počinje tako što “Master” podnese takozvani startni uvjet. "Početni uvjet" je promjena nivoa na liniji podataka sa visokog na niski kada postoji visoki nivo na liniji sata.

Nakon podnošenja “Uslova za početak”, prvo što “Master” mora reći je s kim želi komunicirati i naznačiti šta tačno želi – da prenese podatke na uređaj ili ih očita s njega. Da bi to uradio, izdaje na sabirnici 7-bitnu adresu "Slave" uređaja (inače kažu: "adresa "Slave" uređaja") s kojim želi komunicirati, i jedan bit koji pokazuje smjer prijenosa podataka (0 - ako je sa "Master" na "Slave" i 1 - ako je sa "Slave" na "Master"). Prvi bajt nakon podnošenja uvjeta “Start” uvijek se percipira od strane svih “Slave” kao adresiranje.

S obzirom da se prilikom otvaranja sesije uz adresiranje uređaja ukazuje i smjer prijenosa podataka, da bi se promijenio ovaj smjer potrebno je otvoriti još jednu sesiju (opet dostaviti uslov “Start”, adresirati isti uređaj i naznačiti novi prijenos smjer).

Nakon što “Master” kaže kome se tačno obraća i naznači pravac prenosa podataka, počinje stvarni prenos: “Master” šalje podatke u sabirnicu za “Slave” ili ih prima od njega. Ovaj dio razmjene (koje podatke i kojim redoslijedom "Master" mora poslati na sabirnicu da bi ga uređaj razumio i uradio ono što mu je potrebno) je već određen svakim određenim uređajem.

Svaka sesija razmjene feedova od strane “Mastera” završava se takozvanim stop uslovom, koji se sastoji od promjene nivoa na liniji podataka sa niskog na visoki, opet u prisustvu visokog nivoa na liniji sata. Ako se na sabirnici generiše uslov Stop, tada se zatvaraju sve otvorene sesije razmjene.

Unutar sesije, zabranjene su bilo kakve promjene na liniji podataka dok je linija sata visoka, jer u ovom trenutku podatke čita “Primalac”. Ako dođe do takvih promjena, one će u svakom slučaju biti percipirane ili kao „Start“ uslov (koji će zaustaviti razmjenu podataka) ili kao „Stop“ uslov (što će značiti kraj trenutne sesije razmjene). Shodno tome, tokom sesije razmjene, može doći do instalacije podataka od strane “predajnika” (postavljanje željenog nivoa na liniji podataka).
samo kada je linija sata nizak.

Nekoliko riječi o tome šta je, u ovom slučaju, razlika između “prekid razmjene podataka” i “kraja sesije razmjene”. U principu, "Masteru" je dozvoljeno, bez zatvaranja prve sesije razmjene, da otvori jednu ili više sesija razmjene sa istom (na primjer, kao što je gore navedeno, da promijeni smjer prijenosa podataka) ili čak sa drugim "Slaveima" ”, podnošenje novog “Start” -uslov bez podnošenja "Stop" -uslovi za zatvaranje prethodne sesije. Kontrolišite liniju podataka kako biste odgovorili na "Master", u ovom slučaju će biti dozvoljeno uređaju na koji "Master"okrenuo zadnjimeđutim, stara sjednica se ne može smatrati završenom. I zato. Da bi ubrzali rad, mnogi uređaji (na primjer, 24Cxx eeproms) stavljaju podatke primljene od "Mastera" u međuspremnik i počinju se baviti tim primljenim podacima tek nakon što dobiju signal o završetku sesije razmjene (tj. , „Uslovi zaustavljanja“).

To je, na primjer, ako na sabirnici vise 2 eeprom 24Cxx čipa i otvorili ste sesiju snimanja na jedan čip i prenijeli podatke na njega za snimanje, a zatim, bez zatvaranja ove prve sesije, otvorili novu sesiju za pisanje drugi čip, zatim pravo snimanje i u prvo i drugo mikrokolo će se desiti tek nakon formiranja „Stop uvjeta“ na magistrali, koji će zatvoriti obje sesije. Nakon što primi podatke od “Mastera”, eeprom ih stavlja u interni bafer i čeka kraj sesije kako bi započeo stvarni proces pisanja iz svog internog bafera direktno u eeprom. To jest, ako nakon prijenosa podataka za snimanje u prvi mikrukh, niste zatvorili ovu sesiju, otvorili drugu sesiju i poslali podatke za snimanje u drugi mikrukh, a zatim, bez kreiranja „Stop uvjeta“, okrenuli isključite napajanje, tada podaci zapravo neće biti snimljeni ni u prvi, ni u drugi čip. Ili, na primjer, ako podatke pišete naizmjenično u dva mikrukha, tada u principu možete otvoriti jednu sesiju da biste pisali u prvu, zatim drugu sesiju za pisanje u drugu, zatim treću sesiju da biste ponovo pisali u prvu, itd. , ali ako ne zatvorite ove sesije, to će na kraju dovesti do prelijevanja internih međuspremnika i konačnog gubitka podataka.

Ovdje možemo dati sljedeću analogiju: učenici u razredu („robovi“) i nastavnik („gospodar“). Recimo da je nastavnik pozvao učenika (neka bude Vasya) do ploče i zamolio ga da riješi neki primjer. Nakon što je Vasja riješio ovaj primjer, učitelj je pozvao Petju na ploču i počeo ga pitati za domaći, ali nije pustio Vasju da se vrati na svoje mjesto. U ovom slučaju, čini se da je razgovor s Vasjom završen - učiteljica razgovara s Petjom, ali Vasja stoji za tablom i ne može mirno da se bavi svojim poslom (komunikacija s njim nije zatvorena).

Ako “Slave” nema vremena da obradi podatke tokom sesije razmjene, može produžiti proces razmjene držeći liniju sata na niskom nivou, tako da “Master” mora provjeriti vraćanje linije sata na visoki nivo nakon što ga pusti. Naglašavam da ne treba brkati stanje kada „Slave“ nema vremena za primanje ili slanje podataka sa stanjem kada je jednostavno zauzet obradom podataka primljenih kao rezultat sesije razmjene. U prvom slučaju (tokom razmjene podataka) može produžiti razmjenu držeći liniju sata, au drugom slučaju (kada je sesija razmjene sa njim završena) nema pravo dodirivati ​​bilo koju liniju. U potonjem slučaju, on jednostavno neće odgovoriti na "apel" koji mu je uputio "majstor".

Unutar sesije, prijenos se sastoji od paketa od devet bitova, koji se prenose u normalnoj pozitivnoj logici (to jest, visoka je 1, a niska je 0). Od toga, 8 bitova se odašilje od strane “predajnika” do “prijemnika”, a posljednji deveti bit se od “prijemnika” prenosi do “predajnika”. Bitovi u paketu se prvo prenose najvažniji bit. Poslednji, deveti bit naziva se ACK potvrdni bit (od engleske reči potvrda). Prenosi se u obrnutom obliku, odnosno 0 na liniji odgovara prisutnosti bita za potvrdu, a 1 njegovom odsustvu. Bit potvrde može signalizirati ili odsustvo ili zauzetost uređaja (ako nije postavljeno tokom adresiranja), ili da „Primalac“ želi da završi prenos ili da komanda koju je poslao „Master“ nije završena.

Svaki bit se prenosi u jednom ciklusu takta. Ta polovina ciklusa takta tokom kojeg je linija sata postavljena na nisko se koristi za postavljanje bita podataka na sabirnici od strane pretplatnika koji odašilje (ako je prethodni bit prenio drugi pretplatnik, tada on mora otpustiti sabirnicu podataka u ovom trenutku) . Tu polovinu ciklusa takta tokom kojeg je linija sata postavljena na visoko, pretplatnik prima koristi za čitanje postavljene vrijednosti bita sa magistrale podataka.

To je sve. Slike ispod prikazuju cijeli ovaj opis u grafičkom obliku.

3) Dijagrami i tajmingi.



Parametar Oznaka Min vrijednost

I 2 C je dvožični interfejs koji je razvio Philips Corporation. U originalu tehnički zahtjev na interfejs maksimalna brzina prijenos podataka je bio 100 Kbit/s. Međutim, vremenom su se pojavili standardi za brže I 2 C režime rada. Na istu magistralu I 2 C mogu se priključiti uređaji sa različitim pristupnim brzinama, jer je brzina prenosa podataka određena signalom sata.

Protokol za prenos podataka je dizajniran na način da garantuje pouzdan prijem prenetih podataka.

Prilikom prijenosa podataka, jedan uređaj je “Master”, koji inicira prijenos podataka i generiše signale sinhronizacije. Drugi uređaj “Slave” - počinje prijenos samo na komandu koja dolazi od “Mastera”.

Mikrokontroleri PIC16CXXX hardverski implementiraju “Slave” način rada uređaja u SSP modulu. “Master” mod je implementiran u softveru.

Osnovni pojmovi koji se koriste za opisivanje rada sa I 2 C sabirnicom:

Predajnik– uređaj koji prenosi podatke preko magistrale

Prijemnik– uređaj koji prima podatke sa magistrale

"majstor"- uređaj koji inicira prijenos i generiše taktni signal

"rob"- uređaj kojem se obraća "Master"

Višestruki "majstor"- I 2 C režim rada sabirnice sa više od jednog "Master"

Arbitraža– postupak koji osigurava da samo jedan “Master” kontroliše sabirnicu

Sinhronizacija– postupak za sinhronizaciju satnog signala sa dva ili više uređaja

Izlazni stupnjevi generatora sinkronizacijskog signala (SCL) i podataka (SDA) moraju biti napravljeni prema krugovima otvorenog kolektora (drena) kako bi se kombiniralo nekoliko izlaza i povezani preko vanjskog otpornika na pozitivno napajanje tako da nivo sabirnice bude “ 1” kada nijedan uređaj ne generiše “0” signal. Maksimalno kapacitivno opterećenje je ograničeno na kapacitivnost od 400 pF.

Inicijalizacija i završetak prijenosa podataka

Kada nema prijenosa podataka na magistrali, SCL i SDA signali se održavaju visokim zbog vanjskog otpornika.

Signale START i STOP generira “Master” kako bi odredio početak i kraj prijenosa podataka, respektivno.

START signal je generiran prijelazom SDA signala sa visokog na niski kada je SCL signal visok. STOP signal je definiran kao SDA koji ide od niske do visoke kada je SCL visok. Dakle, prilikom prijenosa podataka, SDA signal se može promijeniti samo kada je SCL signal nizak.

Adresiranje uređaja na I 2 C sabirnici

Postoje dva formata adresa koji se koriste za adresiranje uređaja:

Jednostavan 7-bitni format sa R/W bitom za čitanje/pisanje;

i 10-bitni format - prvi bajt sadrži dva najznačajnija bita adrese i bit za pisanje/čitanje, drugi bajt sadrži niži dio adrese.

Potvrda prihvatanja

Prilikom prijenosa podataka, nakon svakog poslanog bajta, prijemnik mora potvrditi prijem bajta ACK signalom.

Ako Slave ne potvrdi prijem adrese ili bajta podataka, Master mora prekinuti prijenos generiranjem STOP signala.

Prilikom prijenosa podataka sa “Slave” na “Master”, “Master” generiše ACK signale potvrde podataka. Ako “Master” ne potvrdi prijem bajta, “Slave” prestaje sa prijenosom podataka “oslobađanjem” SDA linije. Nakon toga, “Master” može generirati STOP signal.

Da bi odgodio prijenos podataka, “Slave” može postaviti logičku nulu, ukazujući na “Master” da čeka. Nakon što se SCL linija oslobodi, prijenos podataka se nastavlja.

Prijenos podataka sa "Master" na "Slave"

Čitanje podataka iz "Slave"

Korišćenje signala ponovnog pokretanja za pristup "Slaveu"

Multi-Master Mode

I 2 C protokol za prijenos podataka omogućava vam da imate više od jednog “Master” na sabirnici. Funkcije arbitraže i sinhronizacije koriste se za rješavanje sukoba sabirnice tokom inicijalizacije prijenosa.

Arbitraža

Arbitraža se izvodi na liniji SDA kada je linija SCL visoka. Uređaj koji generiše visok nivo na SDA liniji kada drugi odašilje niski gubi pravo da preuzme “Master” i mora se prebaciti u “Slave” mod. “Master” koji je izgubio inicijativu na magistrali može generirati impulse takta do kraja bajta u kojem je izgubio svoja glavna svojstva.

Sinhronizacija

Sinhronizacija na sabirnici se dešava nakon što se izvrši arbitraža na SCL signalu. Kada SCL signal prijeđe s visokog na niski, svi zainteresirani uređaji počinju brojati trajanje niskog nivoa. Uređaji tada počinju da prelaze nivo SCL sa niske na visoku u skladu sa potrebnom brzinom podataka. Nakon što nivo pređe sa niskog na visoki, dotični uređaji broje trajanje visokog nivoa. Prvi uređaj koji pokreće niski SCL signal određuje parametre takta.

LCD ekran– čest gost u Arduino projektima. Ali unutra složene šeme možda imamo problem nedostatka Arduino portova zbog potrebe za povezivanjem štita koji ima jako, jako mnogo pinova. Rješenje u ovoj situaciji može biti I2C/IIC adapter koji povezuje gotovo standardni Arduino 1602 štit na Uno, Nano ili Mega ploče koristeći samo 4 pina. U ovom članku ćemo vidjeti kako se možete povezati LCD ekran sa I2C interfejsom, koje biblioteke se mogu koristiti, napisaćemo kratki primer skice i analizirati tipične greške.

Displej od tečnih kristala LCD 1602 je dobar izbor za izlaz znakovnih nizova u raznim projektima. Jeftin je, postoje razne modifikacije s različitim bojama pozadinskog osvjetljenja, lako možete preuzeti gotove biblioteke za Arduino skice. Ali glavni nedostatak ovog ekrana je činjenica da ekran ima 16 digitalni izlazi, od kojih je potrebno najmanje 6. Stoga korištenje ovog LCD ekrana bez i2c dodaje ozbiljna ograničenja za Arduino Uno ili Nano ploče. Ako nema dovoljno kontakata, morat ćete kupiti Arduino ploča Mega ili sačuvajte kontakte, uključujući povezivanje ekrana preko i2c.

Kratak opis LCD 1602 pinova

Pogledajmo bliže LCD1602 pinove:

Svaka od iglica ima svoju svrhu:

  1. Ground GND;
  2. Napajanje 5 V;
  3. Podešavanje kontrasta monitora;
  4. Komanda, podaci;
  5. Pisanje i čitanje podataka;
  6. Enable;

7-14. Podatkovne linije;

  1. Plus pozadinsko osvetljenje;
  2. Minus pozadinsko osvetljenje.

Specifikacije ekrana:

  • Tip prikaza znakova, moguće je učitavanje simbola;
  • LED svjetla;
  • Controller HD44780;
  • Napon napajanja 5V;
  • Format 16x2 karaktera;
  • Raspon radne temperature od -20C do +70C, opseg temperature skladištenja od -30C do +80C;
  • Ugao gledanja 180 stepeni.

Dijagram povezivanja LCD-a na Arduino ploču bez i2C

Standardni dijagram za direktno povezivanje monitora na Arduino mikrokontroler bez I2C je sljedeći.

Zbog velikog broja spojenih kontakata možda neće biti dovoljno prostora za povezivanje potrebnih elemenata. Korištenje I2C smanjuje broj žica na 4 i zauzetih pinova na 2.

Gdje kupiti LCD ekrane i štitove za Arduino

LCD ekran 1602 (i verzija 2004) je prilično popularan, tako da ga lako možete pronaći kako u domaćim internet prodavnicama tako i na stranim sajtovima. Evo nekoliko linkova do najdostupnijih opcija:

LCD1602+I2C Modul plavog ekrana, Arduino kompatibilan Jednostavno LCD ekran 1602 (zeleno pozadinsko osvetljenje) jeftinije od 80 rubalja Veliki LCD2004 ekran sa I2C HD44780 za Arduino (plavo i zeleno pozadinsko osvetljenje)
1602 displej sa IIC adapterom i plavim pozadinskim osvetljenjem Druga verzija LCD1602 sa zalemljenim I2C modulom Port IIC/I2C/TWI/SPI adapterski modul za 1602 štit, kompatibilan sa Arduinom
RGB ekran sa pozadinskim osvetljenjem! LCD 16×2 + tastatura + zvučni štit za Arduino Štit za Arduino sa dugmadima i ekranom LCD1602 LCD 1602 LCD ekran za 3D štampač (Smart Controller za RAMPS 1.4, Text LCD 20×4), modul čitača SD i MicroSD kartica

Opis I2C protokola

Prije nego razgovaramo o povezivanju zaslona na Arduino preko i2c adaptera, hajde da ukratko govorimo o samom i2C protokolu.

I2C/IIC(Inter-Integrated Circuit) je protokol prvobitno kreiran za međusobno povezivanje integrisanih kola unutar elektronski uređaj. Razvoj pripada Philipsu. Protokol i2c baziran je na upotrebi 8-bitne magistrale, koja je potrebna za komunikaciju blokova u kontrolnoj elektronici, i sistema adresiranja, zahvaljujući kojem možete komunicirati preko istih žica sa više uređaja. Jednostavno prenosimo podatke na jedan ili drugi uređaj, dodajući identifikator željenog elementa u pakete podataka.

Najviše jednostavno kolo I2C može sadržavati jedan glavni uređaj (najčešće Arduino mikrokontroler) i nekoliko slave uređaja (na primjer, LCD zaslon). Svaki uređaj ima adresu u rasponu od 7 do 127. U istom kolu ne bi trebalo biti dva uređaja sa istom adresom.

Arduino ploča podržava i2c u hardveru. Možete koristiti pinove A4 i A5 za povezivanje uređaja pomoću ovog protokola.

Postoji nekoliko prednosti I2C rada:

  • Za rad su potrebne samo 2 linije - SDA (linija podataka) i SCL (linija za sinhronizaciju).
  • Povezivanje velikog broja vodećih uređaja.
  • Smanjeno vrijeme razvoja.
  • Za upravljanje čitavim skupom uređaja potreban je samo jedan mikrokontroler.
  • Mogući broj mikrokola povezanih na jednu magistralu ograničen je samo maksimalnim kapacitetom.
  • Visok stepen sigurnosti podataka zahvaljujući specijalnom filteru za suzbijanje prenapona ugrađenom u kola.
  • Jednostavna procedura za dijagnosticiranje novih grešaka i brzo otklanjanje grešaka.
  • Sabirnica je već integrisana u sam Arduino, tako da nema potrebe za razvojem dodatnog interfejsa sabirnice.

Nedostaci:

  • Na liniji postoji kapacitivna granica - 400 pF.
  • Teško je programirati I2C kontroler ako postoji nekoliko različitih uređaja na sabirnici.
  • At velike količine uređaji imaju poteškoća s lociranjem kvara ako jedan od njih pogrešno postavi stanje niske razine.

i2c modul za LCD 1602 Arduino

Najbrži i najprikladniji način korištenja i2c zaslona u Arduinu je kupovina gotovog ekrana s ugrađenom podrškom za protokol. Ali ovih ekrana nema mnogo i nisu jeftini. Ali veliki broj različitih standardnih ekrana je već proizveden. Stoga je danas najpovoljnija i najpopularnija opcija kupovina i korištenje zasebnog I2C modula - adaptera, koji izgleda ovako:

Na jednoj strani modula vidimo i2c pinove - uzemljenje, napajanje i 2 za prenos podataka. Na drugom adapteru vidimo eksterne konektore za napajanje. I, naravno, ploča ima mnogo pinova pomoću kojih je modul zalemljen na standardne pinove ekrana.


i2c izlazi se koriste za povezivanje na Arduino ploču. Po potrebi se povezujemo eksterno napajanje za pozadinsko osvetljenje. Sa ugrađenim trimerom možemo postaviti prilagođene vrijednosti kontrasta J

Na tržištu se mogu naći LCD 1602 moduli sa već zalemljenim adapterima, njihova upotreba je maksimalno pojednostavljena. Ako ste kupili poseban adapter, morat ćete ga prvo zalemiti na modul.

Povezivanje LCD ekrana na Arduino preko I2C

Za povezivanje vam je potrebna sama Arduino ploča, displej, matična ploča, spojne žice i potenciometar.

Ako koristite poseban poseban i2c adapter, prvo ga morate zalemiti na modul ekrana. Tu je teško pogriješiti, možete slijediti ovu šemu.


LCD monitor sa i2c podrškom je povezan na ploču pomoću četiri žice - dvije žice za podatke, dvije žice za napajanje.

  • GND pin se povezuje sa GND na ploči.
  • VCC pin je na 5V.
  • SCL se spaja na pin A5.
  • SDA je povezan na pin A.

I to je sve! Nema mreže žica, u koje se vrlo lako zapetljati. Istovremeno, svu složenost implementacije i2C protokola jednostavno možemo povjeriti bibliotekama.

Biblioteke za rad sa i2c LCD ekranom

Za interakciju sa Arduinom i LCD 1602 putem I2C magistrale, trebat će vam najmanje dvije biblioteke:

  • Wire.h biblioteka za rad sa I2C je već dostupna u standardni program Arduino IDE.
  • LiquidCrystal_I2C.h biblioteka, koja uključuje širok izbor komandi za upravljanje monitorom preko I2C magistrale i omogućava vam da skicu učinite jednostavnijom i kraćom. Potrebno je dodatno instalirati biblioteku Nakon povezivanja ekrana potrebno je dodatno instalirati biblioteku LiquidCrystal_I2C.h

Nakon povezivanja svih potrebnih biblioteka sa skicom, kreiramo objekat i možemo koristiti sve njegove funkcije. Za testiranje, učitajmo sljedeći standardni primjer skice.

#include #include // Uključujući biblioteku //#include // Povezivanje alternativne biblioteke LiquidCrystal_I2C lcd(0x27,16,2); // Odredite I2C adresu (najčešća vrijednost), kao i parametre ekrana (u slučaju LCD 1602 - 2 reda od 16 znakova svaki //LiquidCrystal_PCF8574 lcd(0x27); // Opcija za PCF8574 biblioteku void setup( ) ( lcd.init (); // Inicijalizacija ekrana lcd.backlight(); // Povezivanje pozadinskog osvjetljenja lcd.setCursor(0,0); // Postavljanje kursora na početak prvog reda lcd.print(" Zdravo"); // Upisivanje teksta u prvi red lcd.setCursor(0,1); // Postavite kursor na početak drugog reda lcd.print("ArduinoMaster"); // Upišite tekst u drugi red ) void loop() ( )

Opis funkcija i metoda biblioteke LiquidCrystal_I2C:

  • home() i clear() - prva funkcija vam omogućava da vratite kursor na početak ekrana, druga radi isto, ali istovremeno briše sve što je prije bilo na monitoru.
  • write(ch) – omogućava vam da odštampate jedan karakter ch na ekranu.
  • cursor() i noCursor() – prikazuje/sakriva kursor na ekranu.
  • blink() i noBlink() – kursor treperi/ne trepće (ako je njegov prikaz bio ranije omogućen).
  • display() i noDisplay() – omogućava vam da povežete/onemogućite ekran.
  • scrollDisplayLeft() i scrollDisplayRight() – skroluje ekran za jedan znak lijevo/desno.
  • autoscroll() i noAutoscroll() – omogućava vam da omogućite/onemogućite režim automatskog pomicanja. U ovom modu, svaki novi znak se ispisuje na istom mjestu, zamjenjujući ono što je prethodno bilo napisano na ekranu.
  • leftToRight() i rightToLeft() – Postavljanje smjera prikazanog teksta – slijeva na desno ili zdesna nalijevo.
  • createChar(ch, bitmap) – kreira karakter sa kodom ch (0 – 7), koristeći niz bitmap bitmapa za kreiranje crno-belih tačaka.

Alternativna biblioteka za rad sa i2c ekranom

U nekim slučajevima može doći do grešaka kada se koristi navedena biblioteka sa uređajima opremljenim PCF8574 kontrolerima. U ovom slučaju, biblioteka LiquidCrystal_PCF8574.h može se predložiti kao alternativa. Proširuje LiquidCrystal_I2C, tako da ne bi trebalo biti problema s korištenjem.

Problemi sa povezivanjem i2c LCD ekrana

Ako nakon učitavanja skice ne vidite nikakvu poruku na ekranu, pokušajte sljedeće korake.

Prvo, možete povećati ili smanjiti kontrast monitora. Često znakovi jednostavno nisu vidljivi zbog kontrasta i pozadinskog osvjetljenja.

Ako to ne pomogne, provjerite jesu li kontakti ispravno povezani i da li je uključeno napajanje pozadinskog osvjetljenja. Ako ste koristili zasebni i2c adapter, provjerite ponovo kvalitet lemljenja kontakata.

Još jedan čest razlog zašto nedostaje tekst na ekranu može biti netačna i2c adresa. Prvo pokušajte promijeniti adresu uređaja u skici sa 0x27 0x20 ili na 0x3F. Različiti proizvođači mogu imati različite zadane adrese. Ako to ne pomogne, možete pokrenuti skicu i2c skenera, koja skenira sve povezane uređaje i određuje njihovu adresu grubom silom. Primjer skice i2c skenera.

Ako ekran i dalje ne radi, pokušajte da odlemite adapter i povežete LCD kao i obično.

Zaključak

U ovom članku pogledali smo glavne probleme korištenja LCD ekrana u složenim Arduino projektima, kada trebamo spremiti slobodne pinove na ploči. Jednostavan i jeftin i2c adapter će vam omogućiti da povežete 1602 LCD ekran, koji zauzima samo 2 analogna pina. U mnogim situacijama to može biti veoma važno. Cijena pogodnosti je potreba za korištenjem dodatnog modula - pretvarača i biblioteke. Po našem mišljenju, nikako visoka cijena zbog njegove praktičnosti i toplo preporučujemo korištenje ove funkcije u projektima.

Sa ocjenama od 10 Ohm do 1 MOhm);

  • 2 otpornika od 4,7 kOhm (iz istog seta);
  • spojne žice (na primjer, ovdje je dobar set);
  • računar sa Arduino IDE.
  • 1 Opis I2C interfejs

    Serijski IIC (također nazvan I2C - Inter-Integrated Circuits) koristi dvije dvosmjerne komunikacijske linije koje se nazivaju serijska sabirnica podataka za prijenos podataka. SDA (serijski podaci) i sat bus SCL (serijski sat). Postoje i dva dalekovoda. SDA i SCL sabirnice se povlače na strujnu magistralu preko otpornika.

    Postoji barem jedan online glavni uređaj, koji pokreće prijenos podataka i generiše signale sinhronizacije. Mreža također ima slave uređaji, koji prenose podatke na zahtjev voditelja. Svaki slave uređaj ima jedinstvenu adresu, koju koristi master da mu pristupi. Adresa uređaja je navedena u tehničkom listu. Na jednu I2C magistralu može se povezati do 127 uređaja, uključujući nekoliko mastera. Uređaji se mogu priključiti na magistralu tokom rada, tj. podržava hot plugging.

    Pogledajmo vremenski dijagram razmjene preko I2C protokola. Postoji nekoliko različitih opcija, pogledajmo jednu od najčešćih. Koristimo logički analizator povezan na SCL i SDA magistrale.

    Master pokreće razmjenu. Da bi to učinio, počinje generirati impulse takta i šalje ih duž SCL linije u paketu od 9 komada. Istovremeno, na liniji podataka SDA koju postavlja adresa uređaja, sa kojima je potrebno uspostaviti komunikaciju, koji se taktiraju sa prvih 7 taktnih impulsa (otuda i ograničenje na raspon adresa: 2 7 = 128 minus nulta adresa). Sljedeći dio poruke je šifra operacije(čitaj ili piši) i još malo - bit potvrde(ACK) da je slave uređaj prihvatio zahtjev. Ako bit potvrde ne stigne, razmjena se završava. Ili master nastavlja slati ponovljene zahtjeve.

    Ovo je ilustrovano na donjoj slici.U prvom slučaju, na primjer, odspojimo slave uređaj sa magistrale. Vidi se da master pokušava da uspostavi komunikaciju sa uređajem sa adresom 0x27, ali ne dobija potvrdu (NAK). Razmjena se završava.


    Sada povežite slave uređaj na I2C sabirnicu i ponovite operaciju. Situacija se promijenila. Prvi paket sa adresom primio je potvrdu (ACK) od slave-a. Razmjena se nastavila. Informacije se takođe prenose u 9-bitnim paketima, ali sada je 8 bitova zauzeto podaci i 1 bit - bit potvrde slave prima svaki bajt podataka. Ako se u bilo kojem trenutku veza prekine i bit potvrde ne stigne, master će prestati s prijenosom.

    2 Implementacija I2C u Arduinu

    Arduino koristi dva porta za rad preko I2C interfejsa. Na primjer, u Arduino UNO i Arduino Nano analogni port A4 odgovara SDA, analogni port A5 odgovara SCL.


    Za ostale modele ploča, korespondencija pinova je sljedeća:

    3 Biblioteka "Žica" za rad sa IIC-om

    Da bi se olakšala razmjena podataka sa uređajima preko I2C magistrale, za Arduino je napisana standardna biblioteka Žica. Ima sljedeće funkcije:

    FunkcijaSvrha
    početak (adresa) inicijalizacija biblioteke i povezivanje na I2C sabirnicu; ako adresa nije navedena, tada se povezani uređaj smatra glavnim; Koristi se 7-bitno adresiranje;
    requestFrom() koristi ga master da zahteva određeni broj bajtova od podređenog;
    započeti prijenos (adresa) početak prijenosa podataka na slave uređaj na određenoj adresi;
    endTransmission() zaustavljanje prijenosa podataka na slave;
    pisati() snimanje podataka od slave-a kao odgovor na zahtjev;
    dostupno() vraća broj bajtova informacija dostupnih za primanje od podređenog;
    čitaj() čitanje bajta koji se prenosi sa slave-a na master ili sa glavnog na slave;
    onReceive() označava funkciju koju treba pozvati kada slave primi prijenos od mastera;
    na zahtjev() označava funkciju koju treba pozvati kada master primi prijenos od podređenog.

    4 Povezivanje I2C uređaja na Arduino

    Pogledajmo kako raditi sa I2C sabirnicom koristeći Arduino.

    Prvo, sastavite krug, kao na slici. Svjetlinu LED diode ćemo kontrolisati pomoću digitalnog potenciometra sa 64 položaja AD5171 (vidi tehnički opis), koji je povezan na I2C magistralu. Adresa na kojoj ćemo pristupiti potenciometru je 0x2c (44 u decimali).


    5 Upravljanje uređajima preko IIC sabirnice

    Razmotrimo dijagrame razmjene informacija sa digitalni potenciometar AD5171 predstavljen u tehnički opis:


    Zanima nas dijagram upisa podataka u registar RDAC. Ovaj registar se koristi za kontrolu otpora potenciometra.

    Otvorimo skicu iz primjera biblioteke "Wire": Uzorci datoteka Žica digital_potentiometer. Učitajmo ga u Arduino memoriju.

    #include // povezujemo biblioteku "Wire" bajt val = 0; // vrijednost za prijenos na potenciometar void setup() ( Wire.begin(); // povezuje se na I2C sabirnicu kao master } void loop() ( Wire.beginTransmission(44); // započinje razmjenu sa uređajem sa I2C adresom "44" (0x2C) Wire.write(byte(0x00)); // šalje instrukciju pisanja u RDAC registar Wire.write(val); // postavlja poziciju potenciometra sa 64 pozicije Wire.endTransmission(); // kompletan I2C prijenos val++; // povećaj val za 1 if (val == 63) ( // kada potenciometar dostigne svoj maksimum val = 0; // reset val ) delay(500); }

    Nakon uključivanja, vidite kako se svjetlina LED-a ciklično povećava, a zatim se gasi. U ovom slučaju potenciometar kontroliramo pomoću Arduina preko I2C magistrale.