Gjithçka rreth autobusit Arduino I2C

Autobusi Arduino I2C

me Arduino mund të krijojë një numër të madh të projekteve siç e keni parë nëse lexoni Hwlibre, programimin e mikrokontrolluesit në një mënyrë të thjeshtë. Por midis lidhjeve analoge dhe dixhitale të këtij bordi hardware libre, ka disa që janë ende disi të panjohura për shumë fillestarë, të tilla si potenciali i vërtetë i lidhjeve PWM, SPI, kunjat RX dhe TX të portës serike ose vetë autobusi I2C. Prandaj, me këtë hyrje do të jeni në gjendje të dini të paktën gjithçka që ju nevojitet për I2C.

me autobusi I2C mund të lidhni dhe përdorni shumë pajisje të palëve të treta që kanë këtë lloj protokolli për të komunikuar me bordin Arduino. Midis tyre, ju mund të lidhni akseleometra, ekranë, njehsor, busulla dhe shumë qarqe të integruar falë kësaj shpikjeje të Philips.

Çfarë është I2C?

I2C i referohet Qarkut Ndër-Integruar, që është, qark ndër-integruar. Shtë një autobus komunikimi i të dhënave serike i zhvilluar në 1982 nga kompania Philips Semiconductors, e cila sot është NXP Semiconductors pasi u shpëtoj nga kjo pjesë. Në fillim u krijua për televizionet e kësaj marke, për të komunikuar disa patate të skuqura të brendshme në një mënyrë të thjeshtë. Por që nga viti 1990 I2C është përhapur dhe përdoret nga shumë prodhues.

Përdoret aktualisht nga dhjetëra prodhues të çipave për funksione të shumëfishta. Atmel, krijuesi i mikrokontrolluesve për bordet Arduino, prezantoi përcaktimin TWI (Dy Wired Interface) për qëllime licencimi, megjithëse është identik me I2C. Por në vitin 2006, patenta origjinale skadoi dhe nuk i nënshtrohet më të drejtave të kopjimit, kështu që termi I2C është ripërdorur (vetëm logo vazhdon të mbrohet, por zbatimi i tij ose përdorimi i termit nuk është i kufizuar)

Detajet teknike të autobusit I2C

Autobusi I2C

El Autobusi I2C është bërë një standard i industrisë dhe Arduino e ka zbatuar atë për komunikim me pajisjet periferike që kanë nevojë për të. Për funksionimin e tij nevojiten vetëm dy linja ose kabllo, njëra për sinjalin e orës (CLK) dhe tjetra për dërgimin e të dhënave serike (SDA). Kjo është e dobishme krahasuar me komunikimet e tjera krahasuar me autobusin SPI, megjithëse funksionimi i tij është disi më kompleks për shkak të qarqeve shtesë të kërkuara.

Në këtë autobus secila pajisje e lidhur me të ka një adresë përdoret për të hyrë në këto pajisje individualisht. Kjo adresë është e fiksuar nga hardueri, duke modifikuar 3 bitët e fundit me anë të kërcuesve ose kalimit të DIP, megjithëse mund të bëhet edhe nga softueri. Çdo pajisje do të ketë një adresë unike, megjithëse disa prej tyre mund të kenë të njëjtën adresë dhe mund të jetë e nevojshme të përdorni një autobus dytësor për të shmangur konfliktet ose për ta ndryshuar atë nëse është e mundur.

Përveç kësaj, autobusi I2C ka një Arkitektura e tipit Master-Slave, domethënë zotëri-skllav. Kjo do të thotë që kur fillon komunikimi nga një pajisje kryesore, ajo do të jetë në gjendje të dërgojë ose marrë të dhëna nga skllevërit e saj. Skllevërit nuk do të jenë në gjendje të fillojnë komunikimin, vetëm zotëria mund ta bëjë këtë, dhe as skllevërit nuk mund të flasin me njëri-tjetrin drejtpërdrejt pa ndërhyrjen e zotit.

Nëse keni disa mësues në autobus, vetëm një do të jetë në gjendje të veprojë si mësues njëkohësisht. Por nuk ia vlen, pasi ndryshimi i mësuesit kërkon një kompleksitet të lartë, kështu që nuk është i shpeshtë.

Mbani në mend se master siguron sinjalin e orës për të sinkronizuar të gjitha pajisjet në autobus. Kjo eliminon nevojën që secili skllav të ketë orën e vet.

Protokolli i autobusit I2C parashikon gjithashtu përdorimin e rezistencave tërheqëse në linjat e tensionit të furnizimit (Vcc), megjithëse këto rezistenca nuk përdoren zakonisht me Arduino tërheqje sepse programimi i bibliotekave pasi Wire aktivizon pjesët e brendshme me vlera 20-30 k. Kjo mund të jetë shumë e butë për disa projekte, prandaj skajet në rritje të sinjalit do të jenë më të ngadalta, kështu që mund të përdoren shpejtësi më të ulëta dhe distanca më të shkurtra të komunikimit. Për të korrigjuar që mund t'ju duhet të vendosni rezistenca të jashtme tërheqëse nga 1k në 4k7.

sinjal

Sinjali I2C

La korniza e komunikimit prej të cilave një sinjal i autobusit I2C përbëhet nga bitët ose gjendjet (ato të përdorura në Arduino, pasi standardi I2C lejon të tjerët):

  • 8 bit, 7 prej tyre adresë të pajisjes skllav në të cilën dëshironi të përdorni, për të dërguar ose marrë të dhëna nga ajo. Me 7 bit, mund të krijohen deri në 128 adresa të ndryshme, kështu që teorikisht mund të arrihen 128 pajisje, por vetëm 112 mund të aksesohen, pasi që 16 janë të rezervuara për përdorime të veçanta. Dhe biti shtesë që tregon nëse dëshironi dërgoni ose merrni informacione për pajisjet e skllavit.
  • Ka gjithashtu një bit vërtetimi, nëse nuk është aktiv komunikimi nuk do të jetë i vlefshëm.
  • Pastaj bajte të të dhënave që ata duan të dërgojnë ose marrin nga skllevërit. Secili bajt, siç e dini, përbëhet nga 8-bit. Vini re se për çdo 8-bit ose 1 bajt të të dhënave të dërguara ose të marra, kërkohen 18 bit shtesë të vlefshmërisë, adresës, etj., Që do të thotë se autobusi është shumë i kufizuar në shpejtësi.
  • Një grimë e fundit e sanksionim të bashkimit.

Përveç kësaj, frekuenca e orës për transmetimet janë 100 Mhz si standard, megjithëse ekziston një mënyrë më e shpejtë me 400 Mhz.

Avantazhet dhe disavantazhet e autobusit I2C

L avantazh shëndoshë:

  • thjeshtësi duke përdorur vetëm dy linja.
  • Disponojeni mekanizmat për të ditur nëse sinjali ka mbërritur krahasuar me protokollet e tjera të komunikimit.

L disavantazhet shëndoshë:

  • Shpejtësi transmetim mjaft i ulët.
  • Nuk është një dupleks i plotëKjo është, ju nuk mund të dërgoni dhe merrni njëkohësisht.
  • Nuk përdor barazi as ndonjë lloj tjetër i mekanizmit të verifikimit për të ditur nëse bitët e të dhënave të marra janë të sakta.

I2C në Arduino

Autobusi Arduino I2C

En Arduino, në varësi të modelit, këmbët që mund të aktivizohen për të përdorur këtë autobus I2C ndryshojnë. Për shembull:

  • Arduino UNO, Nano, MiniPro: A4 përdoret për SDA (të dhëna) dhe A5 për SCK (orë).
  • Mega Arduino: pin 20 për SDA dhe 21 për SCK.

Mos harroni se për ta përdorur atë duhet përdorni bibliotekën Tela.h për kodet tuaja Arduino IDE, megjithëse ka të tjera si këto I2C y i2cdevlib. Ju mund të lexoni dokumentet e këtyre bibliotekave ose artikujt tonë mbi projektet që ju interesojnë për të marrë kode se si do të programohej.

Si të dini adresën e një pajisje për ta përdorur atë me I2C?

Vetëm një paralajmërim i fundit, dhe ai është se kur bleni IC nga prodhuesit evropianë, japonezë ose amerikanë, ju tregoni drejtimin duhet të përdorni për pajisjen. Nga ana tjetër, kinezët ndonjëherë nuk e detajojnë atë ose nuk është e saktë, kështu që nuk do të funksionojë. Kjo mund të zgjidhet lehtësisht me një skaner adresash për të ditur se në cilin drejtim duhet të referoheni në skicën tuaj.

La komuniteti arduino e ka krijuar këtë kod për të skanuar adresën dhe për ta identifikuar atë Në një mënyrë të thjeshtë. Edhe pse unë ju tregoj kodin këtu:

#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);
}


Bëhu i pari që komenton

Lini komentin tuaj

Adresa juaj e emailit nuk do të publikohet. Fusha e kërkuar janë shënuar me *

*

*

  1. Përgjegjës për të dhënat: Miguel Ángel Gatón
  2. Qëllimi i të dhënave: Kontrolloni SPAM, menaxhimin e komenteve.
  3. Legjitimimi: Pëlqimi juaj
  4. Komunikimi i të dhënave: Të dhënat nuk do t'u komunikohen palëve të treta përveç me detyrim ligjor.
  5. Ruajtja e të dhënave: Baza e të dhënave e organizuar nga Occentus Networks (BE)
  6. Të drejtat: Në çdo kohë mund të kufizoni, rikuperoni dhe fshini informacionin tuaj.