Alles oor die Arduino I2C-bus

Arduino I2C bus

met Arduino kan 'n groot aantal projekte skep soos u gesien het as u Hwlibre gelees het, programmering van die mikrobeheerder op 'n eenvoudige manier. Maar onder die analoge en digitale verbindings van hierdie gratis hardewarekaart, is daar sommige wat nog baie onbekend is vir baie beginners, soos die ware potensiaal van die PWM-verbindings, die SPI, die RX- en TX-penne van die seriële poort of die eie I2C bus. Daarom kan u met hierdie inskrywing ten minste alles weet wat u van die I2C benodig.

met die I2C-bus U kan baie toestelle van derdepartye wat hierdie tipe protokol het, koppel en gebruik om met die Arduino-bord te kommunikeer. Tussen hulle kan u versnellingsmeters, skerms, toonbank, kompasse en nog vele meer geïntegreerde stroombane verbind, danksy hierdie uitvinding van Philips.

Wat is I2C?

I2C verwys na 'n geïntegreerde stroombaan, dit wil sê inter-geïntegreerde stroombaan. Dit is 'n seriële datakommunikasiebus wat in 1982 ontwikkel is deur die Philips Semiconductors-maatskappy, wat vandag NXP Semiconductors is nadat hy van hierdie afdeling ontslae geraak het. Aanvanklik is dit geskep vir televisies van hierdie handelsmerk om verskeie interne skyfies op 'n eenvoudige manier te kommunikeer. Maar sedert 1990 het die I2C versprei en word deur baie vervaardigers gebruik.

Word tans deur tientalle skyfievervaardigers gebruik vir verskeie funksies. Atmel, die skepper van die mikrobeheerders vir Arduino-borde, het die TWI (Two Wired Interface) -aanwysing vir lisensiedoeleindes bekendgestel, hoewel dit identies is aan I2C. Maar in 2006 het die oorspronklike patent verval en is dit nie meer onderhewig aan kopiereg nie, dus is die term I2C hergebruik (slegs die logo word steeds beskerm, maar die implementering of gebruik van die term word nie beperk nie).

I2C bus tegniese besonderhede

I2C bus

El I2C-bus het 'n bedryfstandaard geword, en Arduino het dit geïmplementeer vir kommunikasie met randapparatuur wat dit benodig. Dit benodig net twee lyne of kabels vir die werking daarvan, een vir die kloksein (CLK) en die ander vir die stuur van seriële data (SDA). Dit is voordelig in vergelyking met ander kommunikasies in vergelyking met die SPI-bus, alhoewel die werking daarvan ietwat ingewikkelder is as gevolg van die ekstra stroombane wat benodig word.

Op hierdie bus elke toestel wat daaraan gekoppel is, het 'n adres gebruik om individueel toegang tot hierdie toestelle te kry. Hierdie adres word deur hardeware vasgestel, deur die laaste 3 stukkies deur springers te verander of DIP's te skakel, alhoewel dit ook deur sagteware gedoen kan word. Elke toestel sal 'n unieke adres hê, alhoewel verskeie van hulle dieselfde adres kan hê en dit kan nodig wees om 'n sekondêre bus te gebruik om konflik te vermy of dit moontlik te verander.

Daarbenewens het die I2C-bus 'n Meester-slaaf tipe argitektuur, dit wil sê meester-slaaf. Dit beteken dat wanneer kommunikasie deur 'n meestertoestel begin word, dit data van sy slawe kan stuur of ontvang. Die slawe sal nie in staat wees om kommunikasie te begin nie, net die meester kan dit doen, en die slawe kan ook nie direk met mekaar praat sonder die meester se ingryping nie.

As jy het verskeie onderwysers op die bus, slegs een kan gelyktydig as onderwyser optree. Maar dit is nie die moeite werd nie, aangesien die verandering van onderwyser 'n hoë kompleksiteit vereis, en dit dus nie gereeld voorkom nie.

Hou in gedagte dat die master verskaf die kloksein om alle toestelle op die bus te sinkroniseer. Dit hoef nie elke slaaf sy eie horlosie te hê nie.

Die I2C-busprotokol voorsien ook die gebruik van optrekweerstande in die voedingspanningslyne (Vcc), alhoewel hierdie weerstande gewoonlik nie met Arduino gebruik word nie optrek omdat programmeringsbiblioteke aangesien Wire die interne met 20-30 k waardes aktiveer. Dit kan vir sommige projekte te sag wees, daarom sal die stygende rande van die sein stadiger wees, dus kan laer snelhede en korter kommunikasie-afstande gebruik word. Om dit reg te stel, moet u eksterne optrekweerstande dalk van 1k tot 4k7 stel.

sein

I2C sein

 

La kommunikasie raam waarvan 'n I2C-bussein bestaan ​​uit die stukkies of toestande (wat in Arduino gebruik word, aangesien die I2C-standaard ander toelaat):

  • 8 stukkies, waarvan 7 van dirección van die slawetoestel waartoe u toegang wil hê om data daaruit te stuur of te ontvang. Met 7 bisse kan tot 128 verskillende adresse geskep word, dus teoreties is toegang tot 128 toestelle verkry, maar slegs 112 kan verkry word, aangesien 16 gereserveer is vir spesiale gebruike. En die bykomende bietjie wat aandui of u wil stuur of ontvang inligting oor slawe-toestelle.
  • Daar is ook ' 'n bekragtigingsbit, as dit nie aktief is nie, is die kommunikasie nie geldig nie.
  • Dan die data grepe wat deur die slawe gestuur of ontvang moet word. Elke byte bestaan, soos u weet, uit 8-bis. Let daarop dat vir elke 8-bis of 1 byte data wat gestuur of ontvang word, 'n addisionele 18-stukkie validering, adres, ens. Benodig word, wat beteken dat die bus baie vinnig beperk is.
  • 'N laaste bietjie van bekragtiging van die kommunikasie.

Daarbenewens het die klok frekwensie vir uitsendings is standaard 100 Mhz, hoewel daar 'n vinniger modus teen 400 Mhz is.

Voordele en nadele van die I2C-bus

die voordeel klank:

  • eenvoud deur slegs twee lyne te gebruik.
  • Raak ontslae van meganismes om te weet of die sein aangebreek het in vergelyking met ander kommunikasieprotokolle.

die nadele klank:

  • Spoed redelik lae transmissie.
  • Dit is nie 'n volledige dupleks nie, dit wil sê, u kan nie gelyktydig stuur en ontvang nie.
  • Gebruik nie pariteit nie ook geen ander verifikasiemeganisme om te weet of die databitse wat ontvang is, korrek is nie.

 

 

I2C op Arduino

Arduino I2C bus

En Arduino, afhangende van die model, die penne waarmee hierdie I2C-bus gebruik kan word, wissel. Byvoorbeeld:

  • Arduino UNO, Nano, MiniPro: A4 word gebruik vir SDA (data) en A5 vir SCK (klok).
  • Mega Arduino: pen 20 vir SDA en 21 vir SCK.

Onthou dat u dit moet gebruik om dit te gebruik gebruik die biblioteek Draad.h vir u Arduino IDE-kodes, hoewel daar ander is soos I2C y i2cdevlib. U kan die dokumente van hierdie biblioteke lees of ons artikels oor die projekte wat u interesseer om kodes te kry oor hoe dit geprogrammeer sou word.

Hoe weet u die adres van 'n toestel om dit saam met I2C te gebruik?

Net 'n laaste waarskuwing, en dit is dat wanneer u IC's van Europese, Japannese of Amerikaanse vervaardigers koop dui die rigting aan wat u vir die toestel moet gebruik. Aan die ander kant stel die Chinese dit soms nie uiteen nie, of dit is nie korrek nie, dus sal dit nie werk nie. Dit kan maklik met 'n adresskandeerder opgelos word om te weet na watter rigting u in u skets moet verwys.

La arduino gemeenskap het dit geskep kode om die adres te skandeer en te identifiseer Op 'n eenvoudige manier. Alhoewel ek u die kode hier wys:

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


Die inhoud van die artikel voldoen aan ons beginsels van redaksionele etiek. Klik op om 'n fout te rapporteer hier.

Wees die eerste om te kommentaar lewer

Laat u kommentaar

Jou e-posadres sal nie gepubliseer word nie. Verpligte velde gemerk met *

*

*

  1. Verantwoordelik vir die data: Miguel Ángel Gatón
  2. Doel van die data: Beheer SPAM, bestuur van kommentaar.
  3. Wettiging: U toestemming
  4. Kommunikasie van die data: Die data sal nie aan derde partye oorgedra word nie, behalwe deur wettige verpligtinge.
  5. Datastoor: databasis aangebied deur Occentus Networks (EU)
  6. Regte: U kan u inligting te alle tye beperk, herstel en verwyder.