- Što je I2C komunikacijski protokol?
- Kako I2C Komunikacija radi?
- Gdje koristiti I2C komunikaciju?
- I2C u MSP430: Upravljanje AD5171 digitalnim potenciometrom
MSP430 je moćna platforma koju Texas Instruments pruža za ugrađene projekte, a njezina je svestrana priroda pronalaženje mnogih aplikacija, a faza još uvijek traje. Ako ste slijedili naše vodiče za MSP430, tada biste primijetili da smo na ovom mikrokontroleru već pokrili širok raspon vodiča, počevši od samih osnova. Od sada smo pokrili osnove kako bismo mogli ući u zanimljivije stvari poput komunikacijskog portala.
U velikom sustavu ugrađenih aplikacija niti jedan mikrokontroler ne može sam obavljati sve aktivnosti. U nekoj fazi vremena mora komunicirati s drugim uređajima za razmjenu informacija, postoji mnogo različitih vrsta komunikacijskih protokola za dijeljenje tih podataka, ali najčešće korišteni su USART, IIC, SPI i CAN. Svaki komunikacijski protokol ima svoju prednost i nedostatak. Usredotočimo se zasad na I2C dio jer ćemo to naučiti u ovom vodiču.
Što je I2C komunikacijski protokol?
Izraz IIC označava " Inter integrirani krugovi ". Obično se na nekim mjestima označava kao I2C ili I na kvadrat C ili čak kao protokol dvožilnog sučelja (TWI), ali sve to znači isto. I2C je sinkroni komunikacijski protokol što znači da oba uređaja koji dijele informacije moraju dijeliti zajednički signal sata. Ima samo dvije žice za razmjenu informacija od kojih se jedna koristi za signal pijetla, a druga za slanje i primanje podataka.
Kako I2C Komunikacija radi?
I2C komunikaciju prvi je predstavio Phillips. Kao što je ranije rečeno, ima dvije žice, te dvije žice bit će povezane preko dva uređaja. Ovdje se jedan uređaj naziva master, a drugi uređaj slave. Komunikacija bi se trebala i uvijek će se odvijati između dvoje Učitelja i Roba. Prednost I2C komunikacije je u tome što se na Master može povezati više od jednog slave.

Kompletna komunikacija odvija se kroz ove dvije žice, naime, serijski sat (SCL) i serijski podatak (SDA).
Serijski sat (SCL): Dijeli signal sata koji generira master s podređenim uređajem
Serijski podaci (SDA): šalje podatke glavnom i pomoćnom uređaju i iz njega.
U bilo kojem trenutku samo će zapovjednik moći započeti komunikaciju. Budući da je u sabirnici više od jednog podređenog uređaja, master mora uputiti svakog podređenog koristeći drugu adresu. Kad im se obrati samo rob s tom određenom adresom, odgovorit će s informacijama, dok ostali nastavljaju s prestankom. Na taj način možemo koristiti istu sabirnicu za komunikaciju s više uređaja.
Razine napona I2C nisu unaprijed definirane. I2C komunikacija je fleksibilna, znači uređaj koji se napaja naponom od 5v, može koristiti 5v za I2C, a uređaji od 3.3v mogu koristiti 3v za I2C komunikaciju. Ali što ako dva uređaja koji rade na različitim naponima trebaju komunicirati pomoću I2C? 5V I2C sabirnice ne može biti povezan sa 3.3V uređaja. U tom se slučaju mjenjači napona koriste za usklađivanje nivoa napona između dvije I2C sabirnice.
Postoje neki uvjeti koji uokviruju transakciju. Inicijalizacija prijenosa započinje padajućim rubom SDA, što je definirano kao uvjet 'START' na donjem dijagramu gdje master ostavlja SCL visok, a SDA nisko.

Kao što je prikazano na gornjem dijagramu u nastavku, Pad SDA je hardverski okidač za stanje START. Nakon toga svi uređaji na istoj sabirnici prelaze u način slušanja.
Na isti način, uzlazni rub SDA zaustavlja prijenos koji je prikazan kao uvjet 'STOP' na gornjem dijagramu, gdje master ostavlja SCL visoko i također pušta SDA da ide VISOKO. Dakle, uzlazni rub SDA zaustavlja prijenos.

R / W bit označava smjer prijenosa sljedećih bajtova, ako je HIGH, znači da će slave prenositi, a ako je nizak, znači da će master prenositi.
Svaki se bit prenosi na svakom taktu, pa je potrebno 8 ciklusa takta da bi se prenio bajt. Nakon svakog poslanog ili primljenog bajta, održava se deveti ciklus takta za ACK / NACK (potvrđeno / neprihvaćeno). Ovaj ACK bit generira slave ili master, ovisno o situaciji. Za ACK bit, SDA je postavljen na najnižu razinu od strane glavni ili podređeni u 9 -og sat ciklusa. Dakle, nisko se smatra ACK, inače NACK.

Gdje koristiti I2C komunikaciju?
I2C komunikacija koristi se samo za kratku udaljenost. Svakako je pouzdan u određenoj mjeri jer ima sinkronizirani impuls sata koji ga čini pametnim. Ovaj se protokol uglavnom koristi za komunikaciju sa senzorom ili drugim uređajima koji moraju slati informacije glavnom računaru. Vrlo je zgodno kada mikrokontroler mora komunicirati s mnogim drugim pomoćnim modulima koristeći najmanje samo žice. Ako tražite komunikaciju na daljinu, probajte RS232, a ako tražite pouzdaniju komunikaciju isprobajte SPI protokol.
I2C u MSP430: Upravljanje AD5171 digitalnim potenciometrom
Energia IDE je jedan od najlakših programa za programiranje našeg MSP430. To je isto kao i Arduino IDE. Ovdje možete saznati više o tome kako započeti s radom s MSP430 koristeći Energia IDE.
Dakle, da bismo koristili I2C u Energia IDE, moramo samo uključiti datoteku zaglavlja wire.h. Deklaracija pin-a (SDA i SCL) nalazi se unutar knjižnice žica, tako da ne moramo deklarirati u funkciji postavljanja .
Primjeri primjera mogu se naći u izborniku Primjera IDE-a. U nastavku je objašnjen jedan od primjera:
Ovaj primjer pokazuje kako kontrolirati analogni uređaj AD5171 digitalni potenciometar koji komunicira putem sinkronog serijskog protokola I2C. Koristeći MSP-ovu knjižnicu žica I2C, digitalni lonac proći će kroz 64 razine otpora, blijedeći LED.
Prvo ćemo uključiti knjižnicu odgovornu za i2c komunikaciju, tj. Žičanu knjižnicu
#include
U funkciji postavljanja pokrenut ćemo knjižnicu žica pomoću funkcije.begin () .
void setup () { Wire.begin (); }
Zatim inicijalizirajte varijablu val za pohranu vrijednosti potenciometra
bajt val = 0;
U funkciji petlje započet ćemo prijenos na i2c slave uređaj (u ovom slučaju Digitalni potenciometar IC) određivanjem adrese uređaja koja je navedena u tablici podataka IC.
petlja void () { Wire.beginTransmission (44); // prenos na uređaj # 44 (0x2c)
Nakon toga stavite bajtove u red, odnosno podatke koje želite poslati na IC za prijenos pomoću funkcije write () .
Wire.write (bajt (0x00)); // šalje bajt instrukcije Wire.write (val); // šalje bajt vrijednosti potenciometra
Zatim ih prenesite pozivom endTransmission () .
Wire.endTransmission (); // zaustavljanje odašiljanja val ++; // vrijednost prirasta if (val == 64) {// ako je dosegnuta 64. pozicija (max) val = 0; // započnite ispočetka od najniže vrijednosti } delay (500); }
