Kõik Arduino I2C bussist

Arduino I2C buss

koos Arduino suudab luua palju projekte nagu olete näinud, kui loete Hwlibre'i, mikrokontrolleri programmeerimine lihtsal viisil. Aga selle plaadi analoog- ja digitaalühenduste vahel hardware libre, on mõned, mis on paljudele algajatele veel mõnevõrra teadmata, näiteks PWM-ühenduste tegelik potentsiaal, SPI, jadapordi RX- ja TX-viigud või I2C-siin ise. Seetõttu saate selle kirjega vähemalt teada kõike, mida I2C kohta vajate.

koos I2C siini Arduino tahvliga suhtlemiseks saate ühendada ja kasutada paljusid sellist tüüpi protokollidega kolmandate osapoolte seadmeid. Nende vahel saate tänu sellele Philipsi leiutisele ühendada kiirendusmõõturid, kuvarid, loenduri, kompassid ja palju muud integreeritud vooluahelat.

Mis on I2C?

I2C viitab Integreeritud vooluringile, see tähendab integreeritud vooluahel. See on 1982. aastal ettevõtte Semiconductors ettevõtte poolt välja töötatud jadandmesidebuss, mis tänapäeval on NXP Semiconductors pärast sellest jaotisest vabanemist. Alguses loodi see selle kaubamärgi telerite jaoks, et mitmel sisemisel kiibil lihtsal viisil suhelda. Kuid alates 1990. aastast on I2C levinud ja seda kasutavad paljud tootjad.

Praegu kasutavad kümned kiibitootjad mitme funktsiooni jaoks. Arduino tahvlite mikrokontrollerite looja Atmel tutvustas litsentsimise põhjustel TWI (Two Wired Interface) tähistust, ehkki see on identne I2C-ga. Kuid 2006. aastal aegus algse patendi kehtivusaeg ja see ei kuulu enam autoriõiguste alla, seega on terminit I2C taaskasutatud (ainult logo on endiselt kaitstud, kuid selle rakendamine või termini kasutamine pole piiratud).

I2C siini tehnilised üksikasjad

I2C buss

El I2C bussist on saanud tööstusharu standard ja Arduino on selle ka kasutusele võtnud suhtlemiseks seda vajavate välisseadmetega. Selle tööks on vaja ainult kahte liini või kaablit, ühte kellasignaali (CLK) ja teist seeriandmete (SDA) saatmiseks. See on võrreldes teiste sidepidamistega SPI-bussiga võrreldes kasulik, ehkki selle toimimine on nõutava lisalülituse tõttu mõnevõrra keerulisem.

Selles bussis igal sellega ühendatud seadmel on aadress kasutatakse neile seadmetele individuaalselt juurde pääsemiseks. Selle aadressi fikseerib riistvara, muutes viimased 3 bitti džemprite või DIP-de abil, ehkki seda saab teha ka tarkvara abil. Igal seadmel on ainulaadne aadress, ehkki mitmel neist võib olla sama aadress ja konfliktide vältimiseks või võimaluse korral võib osutuda vajalikuks kasutada sekundaarset siini.

Lisaks on I2C siinil a Ülema-orja tüüpi arhitektuur, see tähendab isand-ori. See tähendab, et kui põhiseade alustab sidet, saab see oma orjadelt andmeid saata või vastu võtta. Orjad ei saa sidet algatada, seda saab teha ainult peremees ja orjad ei saa ilma peremehe sekkumiseta üksteisega otse rääkida.

Kui teil on mitu õpetajat bussis, saab õpetajana tegutseda korraga ainult üks. Kuid see pole seda väärt, kuna õpetaja vahetus nõuab suurt keerukust, seega pole see sagedane.

Pidage meeles, et master annab kellasignaali kõigi siinis olevate seadmete sünkroonimiseks. See välistab vajaduse, et igal orjal oleks oma kell.

I2C siini protokoll näeb ette ka tõmbetakistite kasutamist toitepingeliinides (Vcc), kuigi neid takisteid tavaliselt Arduinoga ei kasutata üles tõmmata, sest raamatukogude programmeerimine kuna traat aktiveerib sisemisi väärtusi 20-30 k. Mõne projekti jaoks võib see olla liiga pehme, seetõttu on signaali tõususervad aeglasemad, mistõttu saab kasutada väiksemaid kiirusi ja lühemaid sidevahendeid. Selle parandamiseks peate võib-olla määrama välised tõmbetakistid vahemikus 1k kuni 4k7.

Signaal

I2C signaal

La suhtlusraam millest I2C siinisignaal koosneb bitidest või olekutest (neist, mida kasutatakse Arduinos, kuna I2C standard lubab teisi):

  • 8 bitti, neist 7 aadress sellele orja seadmele, millele soovite juurde pääseda, et sealt andmeid saata või vastu võtta. Seitsme bitiga saab luua kuni 7 erinevat aadressi, nii et teoreetiliselt pääseb ligi 128 seadmele, kuid juurdepääs on ainult 128-le, kuna 112 on reserveeritud erikasutuseks. Ja lisabitt, mis näitab, kui soovite saata või vastu võtta teave orjaseadme kohta.
  • On olemas ka valideerimisbitt, kui see pole aktiivne, ei kehti suhtlus.
  • Siis andmebaidid mida nad soovivad orjade poolt saata või vastu võtta. Iga bait, nagu teate, koosneb 8-bitisest. Pange tähele, et iga saadetud või vastuvõetud 8-bitise või 1-baidise andme kohta on vaja täiendavalt 18 bitti valideerimist, aadressi jne, mis tähendab, et siin on kiiruse osas väga piiratud.
  • Viimane natuke valideerimine kommunikatsiooni.

Lisaks kella sagedus ülekanne on standardis 100 Mhz, kuigi 400 Mhz juures on kiirem režiim.

I2C siini eelised ja puudused

The eelis Heli:

  • Lihtsus kasutades ainult kahte rida.
  • Sellel on mehhanismid, et teada saada, kas signaal on saabunud võrreldes teiste sideprotokollidega.

The puudused Heli:

  • Kiirus üsna madal ülekanne.
  • See ei ole täisdupleksSee tähendab, et te ei saa samaaegselt saata ja vastu võtta.
  • Ei kasuta pariteeti ega muud tüüpi kontrollimehhanisme, et teada saada, kas saadud andmebitid on õiged.

I2C Arduinos

Arduino I2C buss

En Arduino, olenevalt mudelist, tihvtid, mida saab lubada selle I2C-siini kasutamiseks, varieeruvad. Näiteks:

  • Arduino UNO, Nano, MiniPro: A4 kasutatakse SDA (andmed) ja A5 SCK (kell) jaoks.
  • arduino mega: tihvt 20 SDA jaoks ja 21 SCK jaoks.

Pidage meeles, et selle kasutamiseks peate kasutada raamatukogu Traat.h teie Arduino IDE-koodide jaoks, kuigi on ka teisi sarnaseid I2C y i2cdevlib. Võite lugeda nende raamatukogude dokumente või meie artikleid teid huvitavate projektide kohta, et saada koode selle programmeerimise kohta.

Kuidas teada saada seadme aadressi, et seda I2C-ga kasutada?

Vaid üks viimane hoiatus ja see on see, et kui ostate Euroopa, Jaapani või Ameerika tootjate IC-sid, siis ka teie näidata suunda peaksite seadme jaoks kasutama. Teiselt poolt ei tee hiinlased seda mõnikord üksikasjalikult või see pole õige, nii et see ei toimi. Selle saab aadressiskanneriga hõlpsasti lahendada, et teada saada, millisele suunale peaksite oma visandis viitama.

La arduino kogukond on selle loonud kood aadressi skannimiseks ja selle tuvastamiseks Lihtsal viisil. Kuigi ma näitan teile koodi siin:

#include "Wire.h"
 
extern "C" { 
    #include "utility/twi.h"
}
 
void scanI2CBus(byte from_addr, byte to_addr, void(*callback)(byte address, byte result) ) 
{
  byte rc;
  byte data = 0;
  for( byte addr = from_addr; addr <= to_addr; addr++ ) {
    rc = twi_writeTo(addr, &data, 0, 1, 0);
    callback( addr, rc );
  }
}
 
void scanFunc( byte addr, byte result ) {
  Serial.print("addr: ");
  Serial.print(addr,DEC);
  Serial.print( (result==0) ? " Encontrado!":"       ");
  Serial.print( (addr%4) ? "\t":"\n");
}
 
 
const byte start_address = 8;
const byte end_address = 119;
 
void setup()
{
    Wire.begin();
 
    Serial.begin(9600);
    Serial.print("Escaneando bus I2C...");
    scanI2CBus( start_address, end_address, scanFunc );
    Serial.println("\nTerminado");
}
 
void loop() 
{
    delay(1000);
}


Ole esimene kommentaar

Jäta oma kommentaar

Sinu e-postiaadressi ei avaldata. Kohustuslikud väljad on tähistatud *

*

*

  1. Andmete eest vastutab: Miguel Ángel Gatón
  2. Andmete eesmärk: Rämpsposti kontrollimine, kommentaaride haldamine.
  3. Seadustamine: teie nõusolek
  4. Andmete edastamine: andmeid ei edastata kolmandatele isikutele, välja arvatud juriidilise kohustuse alusel.
  5. Andmete salvestamine: andmebaas, mida haldab Occentus Networks (EL)
  6. Õigused: igal ajal saate oma teavet piirata, taastada ja kustutada.