- Hvad er I2C kommunikationsprotokol?
- Hvordan fungerer I2C-kommunikation?
- Hvor skal jeg bruge I2C-kommunikation?
- I2C i MSP430: Styring af AD5171 Digital Potentiometer
MSP430 er en kraftfuld platform leveret af Texas Instruments til indlejrede projekter, dens alsidige natur har gjort det muligt at finde veje ind i mange applikationer, og fasen fortsætter stadig. Hvis du har fulgt vores MSP430-tutorials, ville du have bemærket, at vi allerede har dækket en lang række tutorials på denne mikrocontroller, der starter med det grundlæggende. Siden nu har vi dækket det grundlæggende, vi kan komme ind i mere interessante ting som kommunikationsportalen.
I det store system af integrerede applikationer kan ingen mikrokontroller udføre alle aktiviteterne alene. På et tidspunkt er det nødvendigt at kommunikere til andre enheder for at dele information, der er mange forskellige typer kommunikationsprotokoller til at dele disse oplysninger, men de mest anvendte er USART, IIC, SPI og CAN. Hver kommunikationsprotokol har sin egen fordel og ulempe. Lad os fokusere på I2C-delen for nu, da det er det, vi skal lære i denne vejledning.
Hvad er I2C kommunikationsprotokol?
Udtrykket IIC står for " Inter Integrated Circuits ". Det betegnes normalt som I2C eller I kvadrat C eller endda som 2-leder interface-protokol (TWI) nogle steder, men det hele betyder det samme. I2C er en synkron kommunikationsprotokol, der betyder, at begge enheder, der deler informationen, skal dele et fælles ursignal. Den har kun to ledninger til at dele information, hvoraf den ene bruges til cocksignalet, og den anden bruges til at sende og modtage data.
Hvordan fungerer I2C-kommunikation?
I2C-kommunikation blev først introduceret af Phillips. Som sagt tidligere har den to ledninger, disse to ledninger forbindes på tværs af to enheder. Her kaldes en enhed en master, og den anden enhed kaldes slave. Kommunikation skal og vil altid forekomme mellem to en mester og en slave. Fordelen ved I2C-kommunikation er, at mere end en slave kan forbindes til en Master.
Den komplette kommunikation finder sted gennem disse to ledninger, nemlig Serial Clock (SCL) og Serial Data (SDA).
Serielt ur (SCL): Deler det ursignal, der genereres af masteren, med slaven
Serial Data (SDA): Sender dataene til og fra mellem Master og slave.
På ethvert givet tidspunkt er det kun mesteren, der er i stand til at starte kommunikationen. Da der er mere end en slave i bussen, skal mesteren henvise til hver slave ved hjælp af en anden adresse. Når kun slave med den pågældende adresse adresseres, svarer de tilbage med informationen, mens de andre holder op. På denne måde kan vi bruge den samme bus til at kommunikere med flere enheder.
De spændingsniveauer I2C er ikke prædefineret. I2C-kommunikation er fleksibel, betyder enheden, der får strøm fra 5V volt, kan bruge 5V til I2C, og 3.3V-enhederne kan bruge 3V til I2C-kommunikation. Men hvad hvis to enheder, der kører på forskellige spændinger, har brug for at kommunikere ved hjælp af I2C? En 5V I2C-bus kan ikke tilsluttes en 3.3V-enhed. I dette tilfælde bruges spændingsskiftere til at matche spændingsniveauerne mellem to I2C-busser.
Der er nogle sæt betingelser, der rammer en transaktion. Initialisering af transmission begynder med en faldende kant af SDA, der er defineret som 'START' -tilstand i nedenstående diagram, hvor master efterlader SCL høj, mens SDA laves.
Som vist i ovenstående diagram nedenfor, Den faldende kant af SDA er hardwaretriggeren til START-tilstanden. Herefter går alle enheder på den samme bus i lyttetilstand.
På samme måde stopper den stigende kant af SDA transmissionen, der er vist som 'STOP'-tilstand i ovenstående diagram, hvor masteren efterlader SCL høj og også frigiver SDA for at gå HØJ. Så stigende kant af SDA stopper transmissionen.
R / W-bit angiver transmissionsretningen for de følgende bytes, hvis den er HIGH betyder slaven at sende, og hvis den er lav, vil masteren sende.
Hver bit transmitteres på hver urcyklus, så det tager 8 urcykler at sende en byte. Efter hver byte, der er sendt eller modtaget, holdes den niende urcyklus for ACK / NACK (kvitteret / ikke kvitteret). Denne ACK-bit genereres af enten slave eller master afhængigt af situationen. For ACK-bit er SDA indstillet til lav af master eller slave ved 9. urcyklus. Så det er lavt, det betragtes som ACK ellers NACK.
Hvor skal jeg bruge I2C-kommunikation?
I2C-kommunikation bruges kun til kortdistancekommunikation. Det er bestemt pålideligt i et omfang, da det har en synkroniseret urpuls for at gøre det smart. Denne protokol bruges hovedsageligt til at kommunikere med sensorer eller andre enheder, der skal sende information til en master. Det er meget praktisk, når en mikrocontroller skal kommunikere med mange andre slave-moduler ved hjælp af et minimum af kun ledninger. Hvis du leder efter langkommunikation, skal du prøve RS232, og hvis du leder efter mere pålidelig kommunikation, skal du prøve SPI-protokollen.
I2C i MSP430: Styring af AD5171 Digital Potentiometer
Energia IDE er en af de nemmeste software til at programmere vores MSP430. Det er det samme som Arduino IDE. Du kan lære mere om Kom godt i gang med MSP430 ved hjælp af Energia IDE her.
Så for at bruge I2C i Energia IDE skal vi bare medtage wire.h header-fil. Pin-erklæring (SDA og SCL) er inde i trådbiblioteket, så vi behøver ikke at erklære i installationsfunktionen .
Eksempeleksempler kan findes i menuen Eksempel på IDE. Et af eksemplerne forklares nedenfor:
Dette eksempel viser, hvordan man styrer et analogt udstyr AD5171 Digital Potentiometer, der kommunikerer via den synkron I2C serielle protokol. Ved hjælp af MSPs I2C Wire Library, vil den digitale pot gå igennem 64 modstandsniveauer og falme en LED.
Først inkluderer vi det bibliotek, der er ansvarlig for i2c-kommunikation, dvs. trådbibliotek
#omfatte
I installationsfunktionen starter vi ledningsbiblioteket ved hjælp af .begin () -funktionen.
ugyldig opsætning () { Wire.begin (); }
Initialiser derefter en variabel val for at gemme potentiometerets værdier
byte val = 0;
I loop- funktion starter vi transmission til i2c-slaveenheden (i dette tilfælde Digital potentiometer IC) ved at specificere enhedsadressen, der er angivet i databladet til IC.
ugyldig sløjfe () { Wire.beginTransmission (44); // send til enhed # 44 (0x2c)
Efterfølgende købyte, dvs. data, du vil sende til IC'en til transmission med skrivfunktionen () .
Wire.write (byte (0x00)); // sender instruktionsbyte Wire.write (val); // sender potentiometer værdi byte
Send dem derefter ved at ringe til endTransmission () .
Wire.endTransmission (); // stop transmission af val ++; // stigningsværdi hvis (val == 64) {// hvis den er nået til 64. position (max) val = 0; // start forfra fra laveste værdi } forsinkelse (500); }