- Kas ir I2C sakaru protokols?
- Kā darbojas I2C komunikācija?
- Kur izmantot I2C sakarus?
- I2C MSP430: AD5171 digitālā potenciometra vadība
MSP430 ir spēcīga platforma, ko Texas Instruments nodrošina iegultiem projektiem, tās daudzveidīgais raksturs ir ļāvis atrast veidus daudzās lietojumprogrammās, un fāze joprojām turpinās. Ja jūs sekojat mūsu MSP430 apmācībām, tad jūs pamanījāt, ka mēs jau esam apskatījuši plašu šī mikrokontrollera apmācību klāstu, sākot no pašiem pamatiem. Kopš šī brīža mēs esam apskatījuši pamatus, ar kuriem varam iepazīties interesantākās lietās, piemēram, saziņas portālā.
Plašajā iegulto lietojumprogrammu sistēmā neviens mikrokontrolleris nevar pats veikt visas darbības. Kādā laika posmā tai ir jāsazinās ar citām ierīcēm, lai koplietotu informāciju, šīs informācijas kopīgošanai ir daudz dažādu veidu sakaru protokolu, taču visbiežāk izmantotie ir USART, IIC, SPI un CAN. Katram sakaru protokolam ir savas priekšrocības un trūkumi. Tagad pievērsīsimies I2C daļai, jo tieši to mēs mācīsimies šajā apmācībā.
Kas ir I2C sakaru protokols?
Termins IIC nozīmē “ Inter Integrated Circuits ”. Parasti to dažās vietās apzīmē kā I2C vai I kvadrātu C, vai pat kā divu vadu interfeisa protokolu (TWI), bet tas viss nozīmē to pašu. I2C ir sinhrona sakaru protokola nozīme, abām ierīcēm, kas koplieto informāciju, ir jābūt kopīgam pulksteņa signālam. Tam ir tikai divi vadi informācijas apmaiņai, no kuriem vienu izmanto gailis signālam, bet otru - datu sūtīšanai un saņemšanai.
Kā darbojas I2C komunikācija?
Pirmo reizi I2C komunikāciju ieviesa Filipss. Kā minēts iepriekš, tam ir divi vadi, šie divi vadi tiks savienoti divās ierīcēs. Šeit vienu ierīci sauc par galveno, bet otru - par vergu. Saziņai vienmēr vajadzētu notikt un tā notiks starp diviem kapteiņiem un vergiem. I2C komunikācijas priekšrocība ir tā, ka vairāk nekā vienu vergu var savienot ar Master.
Pilnīga saziņa notiek caur šiem diviem vadiem, proti, seriālo pulksteni (SCL) un sērijas datiem (SDA).
Seriālais pulkstenis (SCL): koplieto galvenā signāla ģenerēto pulksteņa signālu ar vergu
Seriālie dati (SDA): nosūta datus uz galveno un vergu un no tā.
Jebkurā brīdī tikai kapteinis varēs sākt saziņu. Tā kā autobusā ir vairāk nekā viens vergs, kapteinim ir jāatsaucas uz katru vergu, izmantojot citu adresi. Ja uzrunā tikai vergs ar konkrēto adresi, atbildēs ar informāciju, bet pārējie turpinās iziet. Tādā veidā mēs varam izmantot to pašu kopni, lai sazinātos ar vairākām ierīcēm.
Par sprieguma līmeņi I2C nav iepriekš definēti. I2C sakari ir elastīgi, tas nozīmē, ka ierīce, kuru darbina 5 V spriegums, I2C var izmantot 5 V un 3.3 V ierīces I2C sakariem - 3 V. Bet ko tad, ja divām ierīcēm, kas darbojas ar dažādu spriegumu, ir jāsazinās, izmantojot I2C? 5V I2C autobusu nevar saistīt ar 3.3V ierīci. Šajā gadījumā sprieguma pārslēdzējus izmanto, lai saskaņotu sprieguma līmeņus starp divām I2C kopnēm.
Ir daži nosacījumu kopumi, kas veido darījumu. Pārraides inicializēšana sākas ar SDA krišanas malu, kas zemāk redzamajā diagrammā ir definēts kā “START” nosacījums, kur galvenais atstāj SCL augstu, vienlaikus nosakot SDA zemu.
Kā parādīts zemāk esošajā diagrammā, SDA krītošā mala ir aparatūras trigeris START nosacījumam. Pēc tam visas ierīces vienā autobusā nonāk klausīšanās režīmā.
Tādā pašā veidā SDA augšējā mala pārtrauc pārraidi, kas iepriekšējā diagrammā tiek parādīta kā “STOP” nosacījums, kur galvenais atstāj SCL augstu un arī atbrīvo SDA, lai ietu HIGH. Tātad pieaugošā SDA mala pārtrauc pārraidi.
R / W bits norāda nākamo baitu pārraides virzienu, ja tas ir HIGH, tas nozīmē, ka vergs pārraidīs, un, ja tas ir zems, tas nozīmē, ka galvenais raidīs.
Katrs bits tiek pārraidīts katrā pulksteņa ciklā, tāpēc baita pārsūtīšanai nepieciešami 8 pulksteņu cikli. Pēc katra nosūtītā vai saņemtā baita tiek turēts devītais pulksteņa cikls ACK / NACK (apstiprināts / nav apstiprināts). Šo ACK bitu rada vai nu vergs, vai galvenais, atkarībā no situācijas. Par ACK bit, SDA ir iestatīts zems kapteiņa vai vergu 9 th pulksteni ciklā. Tāpēc tas ir zems, to uzskata par ACK, citādi NACK.
Kur izmantot I2C sakarus?
I2C sakari tiek izmantoti tikai neliela attāluma sakariem. Tas noteikti ir uzticams zināmā mērā, jo tam ir sinhronizēts pulksteņa impulss, lai padarītu to gudru. Šo protokolu galvenokārt izmanto, lai sazinātos ar sensoru vai citām ierīcēm, kurām informācija jānosūta kapteinim. Tas ir ļoti ērti, ja mikrokontrollerim ir jāsazinās ar daudziem citiem vergu moduļiem, izmantojot vismaz tikai vadus. Ja jūs meklējat tālsatiksmes komunikāciju, jums vajadzētu izmēģināt RS232 un, ja vēlaties drošāku komunikāciju, izmēģiniet SPI protokolu.
I2C MSP430: AD5171 digitālā potenciometra vadība
Energia IDE ir viena no vienkāršākajām programmatūrām mūsu MSP430 programmēšanai. Tas ir tāds pats kā Arduino IDE. Šeit varat uzzināt vairāk par darba sākšanu ar MSP430, izmantojot Energia IDE.
Tātad, lai izmantotu I2C Energia IDE, mums vienkārši jāiekļauj wire.h galvenes fails. Piespraudes deklarācija (SDA un SCL) atrodas vadu bibliotēkā, tāpēc mums nav jādeklarē iestatīšanas funkcijā.
Paraugu paraugus var atrast IDE izvēlnē Piemērs. Viens no piemēriem ir izskaidrots zemāk:
Šis piemērs parāda, kā vadīt analogo ierīču AD5171 digitālo potenciometru, kas sazinās, izmantojot sinhrono I2C seriālo protokolu. Izmantojot MSP I2C vadu bibliotēku, digitālais katls izies cauri 64 pretestības līmeņiem, izbalējot LED.
Pirmkārt, mēs iekļausim bibliotēku, kas ir atbildīga par i2c komunikāciju, ti, vadu bibliotēku
# iekļaut
Pēc iestatīšanas funkciju, mēs sāksim stiepļu bibliotēku ar .begin () funkciju.
void setup () { Wire.begin (); }
Pēc tam inicializējiet mainīgo val, lai saglabātu potenciometra vērtības
baits val = 0;
In cilpas funkciju, mēs sāktu pārraidi uz I2C vergu ierīces (šajā gadījumā Digital potenciometru IC), norādot ierīces adreses, kas ir dots datu lapas par IC.
void loop () { Wire.beginTransmission (44); // nosūtīt uz ierīci # 44 (0x2c)
Pēc tam rindas baiti, ti, dati, kurus vēlaties nosūtīt IC nosūtīšanai, izmantojot funkciju write () .
Wire.write (baits (0x00)); // nosūta instrukciju baitu Wire.write (val); // nosūta potenciometra vērtības baitu
Tad pārsūtiet tos, izsaucot endTransmission () .
Wire.endTransmission (); // pārtraukt pārraidīt val ++; // pieauguma vērtība, ja (val == 64) {// ja sasniegta 64. pozīcija (max) val = 0; // sākt no mazākās vērtības } kavēšanās (500); }