- Mikä on I2C Communication Protocol?
- Kuinka I2C-viestintä toimii?
- Missä käyttää I2C-viestintää?
- I2C MSP430: ssa: AD5171-digitaalisen potentiometrin hallinta
MSP430 on Texas Instrumentsin tarjoama tehokas alusta sulautetuille projekteille, sen monipuolinen luonne on tehnyt siitä mahdollisuuden löytää tapoja moniin sovelluksiin ja vaihe on edelleen kesken. Jos olet seurannut MSP430-opetusohjelmiamme, olisit huomannut, että olemme jo käsittäneet laajan valikoiman tämän mikrokontrollerin opetusohjelmia aivan perusasioista alkaen. Tästä lähtien olemme käsitelleet perusasiat, joista voimme päästä mielenkiintoisempiin juttuihin, kuten viestintäportaaliin.
Suuressa sulautettujen sovellusten järjestelmässä mikään mikro-ohjain ei voi suorittaa kaikkia toimintoja itse. Jossain vaiheessa sen on kommunikoitava muiden laitteiden kanssa tietojen jakamiseksi, näiden tietojen jakamiseksi on olemassa monia erityyppisiä yhteyskäytäntöjä, mutta eniten käytetyt ovat USART, IIC, SPI ja CAN. Jokaisella tiedonsiirtoprotokollalla on omat etunsa ja haittansa. Keskitymme nyt I2C-osaan, koska aiomme oppia tässä opetusohjelmassa.
Mikä on I2C Communication Protocol?
Termi IIC tarkoittaa ” integroituja piirejä ”. Sitä kutsutaan yleensä I2C: ksi tai I-neliöksi C tai jopa 2-johdinliitäntäprotokollaksi (TWI) joissakin paikoissa, mutta se kaikki tarkoittaa samaa. I2C on synkroninen tietoliikenneprotokolla, mikä tarkoittaa, että molemmilla laitteilla, jotka jakavat tietoa, on oltava yhteinen kellosignaali. Siinä on vain kaksi johtoa tietojen jakamiseksi, joista toista käytetään kukkosignaaliin ja toista datan lähettämiseen ja vastaanottamiseen.
Kuinka I2C-viestintä toimii?
I2C-viestinnän otti ensimmäisen kerran käyttöön Phillips. Kuten aiemmin mainittiin, sillä on kaksi johtoa, nämä kaksi johtoa kytketään kahden laitteen yli. Tällöin yhtä laitetta kutsutaan isännäksi ja toista laitetta orjaksi. Viestinnän tulisi tapahtua ja tapahtuu aina kahden isännän ja orjan välillä. I2C-tiedonsiirron etuna on, että Masteriin voidaan liittää useampi kuin yksi orja.
Täydellinen tiedonsiirto tapahtuu näiden kahden johdon, nimittäin sarjakellon (SCL) ja sarjatietojen (SDA), kautta.
Sarjakello (SCL): Jakaa isännän tuottaman kellosignaalin orjan kanssa
Sarjatiedot (SDA): Lähettää tietoja isännälle ja orjalle.
Milloin tahansa vain päällikkö voi aloittaa viestinnän. Koska väylässä on useampi kuin yksi orja, isännän on viitattava kuhunkin orjaan eri osoitteella. Kun osoitetaan vain orja, jolla on kyseinen osoite, vastaa takaisin tietoihin, kun taas muut pitävät lopettaa. Tällä tavalla voimme käyttää samaa väylää kommunikoimaan useiden laitteiden kanssa.
Jännitetasot I2C ei ole määritetty valmiiksi. I2C-tiedonsiirto on joustavaa, tarkoittaa, että laite, joka saa virtansa 5 voltin jännitteestä, voi käyttää 5 voltin jännitettä I2C: ssä ja 3,3 voltin laitteet voivat käyttää 3v: tä I2C-viestinnässä. Entä jos kahden eri jännitteellä toimivan laitteen täytyy kommunikoida I2C: n avulla? 5V I2C bus ei voida liittää 3.3V laitteeseen. Tässä tapauksessa jännitteensiirtimiä käytetään kahden I2C-väylän jännitetasojen sovittamiseen.
On joitain ehtoja, jotka muodostavat tapahtuman. Lähetyksen alustus alkaa SDA: n putoavalla reunalla, joka määritetään START-ehdoksi alla olevassa kaaviossa, jossa isäntä jättää SCL: n korkeaksi asettamalla SDA: n matalaksi.
Kuten yllä olevassa kaaviossa on esitetty, SDA: n putoava reuna on START-tilan laitteistolaite. Tämän jälkeen kaikki saman väylän laitteet siirtyvät kuuntelutilaan.
Samalla tavalla SDA: n nouseva reuna pysäyttää lähetyksen, joka näkyy STOP-tilana yllä olevassa kaaviossa, jossa isäntä jättää SCL: n korkealle ja vapauttaa myös SDA: n siirtymään HIGH. Joten SDA: n nouseva reuna pysäyttää lähetyksen.
R / W-bitti ilmaisee seuraavien tavujen lähetyssuunnan, jos se on KORKEA, orja lähettää ja jos se on matala, master lähettää.
Jokainen bitti lähetetään jokaisella kellojaksolla, joten tavun lähettäminen kestää 8 kellosykliä. Jokaisen lähetetyn tai vastaanotetun tavun jälkeen ACK / NACK: lle pidetään yhdeksäs kellosykli (kuitattu / ei kuitattu). Tämän ACK-bitin tuottaa joko orja tai isäntä tilanteen mukaan. ACK bitti, SDA asetetaan matalaksi master tai slave 9 th kellojaksossa. Joten se on matala, sitä pidetään ACK: na muuten NACK.
Missä käyttää I2C-viestintää?
I2C-viestintää käytetään vain lyhyen matkan viestintään. Se on varmasti jossain määrin luotettava, koska sillä on synkronoitu kellopulssi, joka tekee siitä älykkään. Tätä protokollaa käytetään pääasiassa kommunikoimaan anturin tai muiden laitteiden kanssa, joiden on lähetettävä tietoja päällikölle. On erittäin kätevää, kun mikro-ohjaimen on oltava yhteydessä moniin muihin orjamoduuleihin käyttämällä vähintään vain johtoja. Jos etsit pitkän kantaman tiedonsiirtoa, kokeile RS232: ta ja jos etsit luotettavampaa tiedonsiirtoa, kokeile SPI-protokollaa.
I2C MSP430: ssa: AD5171-digitaalisen potentiometrin hallinta
Energia IDE on yksi helpoimmista ohjelmistoista ohjelmoida MSP430. Se on sama kuin Arduino IDE. Saat lisätietoja MSP430: n käytön aloittamisesta Energia IDE: n avulla täältä.
Joten I2C: n käyttämiseksi Energia IDE: ssä meidän on vain sisällytettävä wire.h- otsikkotiedosto. Pin-ilmoitus (SDA ja SCL) on lankakirjastossa, joten meidän ei tarvitse ilmoittaa asetustoiminnossa .
Esimerkkiesimerkkejä löytyy IDE: n esimerkkivalikosta. Yksi esimerkistä selitetään alla:
Tämä esimerkki osoittaa, kuinka ohjataan analogista laitetta AD5171 -digitaalista potentiometriä, joka kommunikoi synkronisen I2C- sarjaliikenneprotokollan kautta. Käyttämällä MSP: n I2C Wire Library -kirjastoa digitaalinen potti astuu läpi 64 vastustasoa ja häivyttää LEDin.
Ensin sisällytetään i2c-viestinnästä vastaava kirjasto eli langallinen kirjasto
#sisältää
In setup toiminto, aloitamme viiran kirjaston .begin () funktio.
void setup () { Wire.begin (); }
Alusta sitten muuttuja val potentiometrin arvojen tallentamiseksi
tavu val = 0;
In silmukka toiminto, me aloittamaan lähetykset I2C orjalaite (tässä tapauksessa digitaalinen potentiometri IC) määrittämällä laitteen osoite, joka annetaan tekninen IC.
void loop () { Wire.beginTransmission (44); // lähetä laitteelle # 44 (0x2c)
Tämän jälkeen jonotavut eli tiedot, jotka haluat lähettää IC: lle lähetystä varten kirjoitus () -toiminnolla.
Wire.write (tavu (0x00)); // lähettää käskytavu Wire.write (val); // lähettää potentiometrin arvon tavun
Lähetä ne sitten soittamalla endTransmission () .
Wire.endTransmission (); // lopettaa val ++: n lähettäminen ; // lisäysarvo if (val == 64) {// jos saavutetaan 64. asento (max) val = 0; // aloita alhaisimmasta arvosta } viive (500); }