- Hva er I2C kommunikasjonsprotokoll?
- Hvordan fungerer I2C-kommunikasjon?
- Hvor skal jeg bruke I2C-kommunikasjon?
- I2C i MSP430: Styring av AD5171 Digital potensiometer
MSP430 er en kraftig plattform levert av Texas Instruments for innebygde prosjekter, dens allsidige natur har gjort det mulig å finne veier til mange applikasjoner, og fasen fortsetter. Hvis du har fulgt MSP430-opplæringene våre, ville du ha lagt merke til at vi allerede har dekket et bredt spekter av opplæringsprogrammer på denne mikrokontrolleren, helt fra det grunnleggende. Siden nå har vi dekket det grunnleggende vi kan komme inn på mer interessante ting som kommunikasjonsportalen.
I det enorme systemet med innebygde applikasjoner kan ingen mikrokontroller utføre alle aktivitetene av seg selv. På et tidspunkt av tiden må den kommunisere til andre enheter for å dele informasjon, det er mange forskjellige typer kommunikasjonsprotokoller for å dele denne informasjonen, men de mest brukte er USART, IIC, SPI og CAN. Hver kommunikasjonsprotokoll har sin egen fordel og ulempe. La oss fokusere på I2C-delen for nå, siden det er det vi skal lære i denne opplæringen.
Hva er I2C kommunikasjonsprotokoll?
Begrepet IIC står for " Inter Integrated Circuits ". Det er vanligvis betegnet som I2C eller jeg kvadratisk C eller til og med som 2-leder grensesnittprotokoll (TWI) noen steder, men alt betyr det samme. I2C er en synkron kommunikasjonsprotokoll som betyr at begge enhetene som deler informasjonen må dele et vanlig klokkesignal. Den har bare to ledninger for å dele informasjon hvorav den ene brukes til cocksignalet og den andre brukes til å sende og motta data.
Hvordan fungerer I2C-kommunikasjon?
I2C-kommunikasjon ble først introdusert av Phillips. Som sagt tidligere har den to ledninger, disse to ledningene vil være koblet på tvers av to enheter. Her kalles den ene enheten en mester og den andre enheten kalles slave. Kommunikasjon skal og vil alltid skje mellom to en mester og en slave. Fordelen med I2C-kommunikasjon er at mer enn en slave kan kobles til en Master.
Den komplette kommunikasjonen skjer gjennom disse to ledningene, nemlig Serial Clock (SCL) og Serial Data (SDA).
Serial Clock (SCL): Deler kloksignalet som genereres av mesteren med slaven
Serial Data (SDA): Sender dataene til og fra mellom Master og slave.
Til enhver tid er det bare mesteren som kan starte kommunikasjonen. Siden det er mer enn en slave i bussen, må mesteren henvise til hver slave ved hjelp av en annen adresse. Når bare slaven med den aktuelle adressen er adressert, vil svare tilbake med informasjonen mens de andre slutter. På denne måten kan vi bruke den samme bussen til å kommunisere med flere enheter.
De spenningsnivåer på I2C ikke er forhåndsdefinert. I2C-kommunikasjon er fleksibel, betyr at enheten som drives av 5v volt, kan bruke 5v for I2C og 3.3v-enhetene kan bruke 3v for I2C-kommunikasjon. Men hva om to enheter som kjører på forskjellige spenninger, trenger å kommunisere ved hjelp av I2C? En 5V I2C-buss kan ikke kobles til 3.3V-enheten. I dette tilfellet brukes spenningsskiftere til å matche spenningsnivåene mellom to I2C-busser.
Det er noen sett med betingelser som rammer en transaksjon. Initialisering av overføring begynner med en fallende kant av SDA, som er definert som 'START' -tilstand i diagrammet nedenfor der master forlater SCL høyt mens SDA er lavt.
Som vist i diagrammet ovenfor, Den fallende kanten av SDA er maskinvareutløseren for START-tilstanden. Etter dette går alle enheter på samme buss i lyttemodus.
På samme måte stopper stigende kant av SDA transmisjonen som er vist som 'STOPP' -tilstand i diagrammet ovenfor, der masteren forlater SCL høyt og også frigjør SDA for å gå HØY. Så stigende kant av SDA stopper overføringen.
R / W-bit indikerer overføringsretningen for følgende byte, hvis den er HØY betyr slaven at den vil sende, og hvis den er lav, vil mesteren sende.
Hver bit overføres på hver klokkesyklus, så det tar åtte klokkesykluser å overføre en byte. Etter hver byte som er sendt eller mottatt, holdes den niende klokkesyklusen for ACK / NACK (kvittert / ikke kvittert). Denne ACK-biten genereres av enten slave eller master, avhengig av situasjonen. For ACK kronen, SDA satt til lavt ved master- eller slave ved ni th klokkesyklus. Så det er lavt, det regnes som ACK ellers NACK.
Hvor skal jeg bruke I2C-kommunikasjon?
I2C-kommunikasjon brukes bare for kortdistansekommunikasjon. Det er absolutt pålitelig til en viss grad siden det har en synkronisert klokkepuls for å gjøre det smart. Denne protokollen brukes hovedsakelig til å kommunisere med sensor eller andre enheter som må sende informasjon til en master. Det er veldig praktisk når en mikrokontroller må kommunisere med mange andre slave-moduler ved å bruke minimum bare ledninger. Hvis du er ute etter kommunikasjon over lang rekkevidde, bør du prøve RS232, og hvis du leter etter mer pålitelig kommunikasjon, bør du prøve SPI-protokollen.
I2C i MSP430: Styring av AD5171 Digital potensiometer
Energia IDE er en av de enkleste programmene for å programmere MSP430. Det er det samme som Arduino IDE. Du kan lære mer om Komme i gang med MSP430 ved hjelp av Energia IDE her.
Så for å bruke I2C i Energia IDE må vi bare inkludere wire.h header-fil. Pinnedeklarasjon (SDA og SCL) er inne i trådbiblioteket, så vi trenger ikke å erklære i oppsettfunksjonen .
Eksempeleksempler finner du i Eksempel-menyen i IDE. Et av eksemplene er forklart nedenfor:
Dette eksemplet viser hvordan du styrer et analogt utstyr AD5171 digitalt potensiometer som kommuniserer via den synkroniserte I2C- protokollen. Ved å bruke MSPs I2C Wire Library, vil den digitale potten gå gjennom 64 nivåer av motstand og falme en LED.
Først vil vi inkludere biblioteket som er ansvarlig for i2c-kommunikasjon, dvs. trådbibliotek
#inkludere
I oppsettfunksjonen vil vi starte ledningsbiblioteket med .begin () -funksjonen.
ugyldig oppsett () { Wire.begin (); }
Initialiser deretter en variabel val for å lagre potensiometerets verdier
byte val = 0;
I loop- funksjon vil vi starte overføring til i2c-slaveenheten (i dette tilfellet Digital potensiometer IC) ved å spesifisere enhetsadressen som er gitt i databladet til IC.
void loop () { Wire.beginTransmission (44); // overføre til enhet # 44 (0x2c)
Deretter købyte dvs. data du vil sende til IC for overføring med skriv () -funksjonen.
Wire.write (byte (0x00)); // sender instruksjon byte Wire.write (val); // sender potensiometerverdibyte
Send dem deretter ved å ringe til endTransmission () .
Wire.endTransmission (); // stopp overføring av val ++; // økningsverdi hvis (val == 64) {// hvis nådd 64. posisjon (maks) val = 0; // start på nytt fra laveste verdi } forsinkelse (500); }