Alles iwwer den Arduino I2C Bus

Arduino I2C Bus

Con Arduino kann eng grouss Zuel vu Projeten erstellen wéi Dir gesinn hutt wann Dir Hwlibre liest, de Microcontroller op eng einfach Manéier programméieren. Awer ënner den analogen an digitale Verbindunge vun dësem gratis Hardware Board, sinn et e puer déi fir vill Ufänger nach ëmmer onbekannt sinn, wéi zum Beispill de richtege Potenzial vun de PWM Verbindungen, de SPI, d'RX an TX Pins vum Serialport, oder de eegenen I2C Bus. Dofir, mat dësem Entrée kënnt Dir op d'mannst alles wësse wat Dir braucht vum I2C.

Con den I2C Bus Dir kënnt vill Drëtt-Partei Geräter verbannen a benotzen déi dës Aart Protokoll hunn fir mam Arduino Board ze kommunizéieren. Zwëschen hinnen kënnt Dir Accelerometer, Displays, Comptoir, Kompassen a vill méi integréiert Circuiten dank dëser Philips Erfindung verbannen.

Wat ass I2C?

I2C bezitt sech op den Inter-Integated Circuit, dat ass, interintegréiert Circuit. Et ass e seriellen Datekommunikatiounsbus, deen 1982 vun der Philips Semiconductors Firma entwéckelt gouf, déi haut NXP Semiconductors ass nodeems se dës Sektioun lass sinn. Fir d'éischt gouf et fir Fernseher vun dëser Mark erstallt, fir verschidden intern Chips op eng einfach Manéier ze vermëttelen. Awer zënter 1990 ass den I2C verbreet a gëtt vu villen Hiersteller benotzt.

Momentan vun Dosende vu Chipmaker benotzt fir verschidde Funktiounen. Atmel, de Grënner vun de Mikrokontroller fir Arduino Boards, huet d'TWI (Two Wired Interface) Bezeechnung fir Lizenzzwecker agefouert, och wann et identesch mat I2C ass. Awer am 2006 ass den originale Patent ofgelaf an ass net méi dem Copyright ënnerworf, sou datt de Begrëff I2C weiderbenotzt gouf (nëmmen de Logo gëtt weider geschützt, awer seng Ëmsetzung oder d'Benotzung vum Begrëff ass net limitéiert).

I2C Bus technesch Detailer

I2C Bus

El Den I2C Bus ass en Industriestandard ginn, an den Arduino huet en ëmgesat fir Kommunikatioun mat Peripheriegeräter déi et brauchen. Et brauch nëmmen zwou Zeilen oder Kabel fir seng Operatioun, eng fir d'Auer Signal (CLK) an déi aner fir Serial Daten (SDA) ze verschécken. Dëst ass avantagéis am Verglach mat anere Kommunikatiounen am Verglach zum SPI Bus, obwuel seng Operatioun e bësse méi komplex ass wéinst der zousätzlecher Circuit néideg.

Op dësem Bus all Apparat mat deem verbonnen huet eng Adress benotzt fir Zougang zu dësen Apparater individuell ze kréien. Dës Adress gëtt mat Hardware fixéiert, déi lescht 3 Bits duerch Sprénger geännert oder DIPe gewiesselt, och wann et och vu Software ka gemaach ginn. All Apparat wäert eng eenzeg Adress hunn, och wa verschidde vun hinnen déiselwecht Adress hunn an et kann néideg sinn e Sekundärbus ze benotzen fir Konflikter ze vermeiden oder z'änneren wa méiglech.

Zousätzlech huet den I2C Bus e Master-Slave Typ Architektur, dat ass Meeschter-Sklave. Dëst bedeit datt wann d'Kommunikatioun vun engem Masterapparat gestart gëtt, et fäeg ass Daten aus senge Sklaven ze schécken oder ze kréien. D'Sklaven wäerten net fäeg sinn d'Kommunikatioun ze initiéieren, nëmmen de Meeschter kann dat maachen, an d'Sklaven kënnen net direkt matenee schwätzen ouni d'Interventioun vum Meeschter.

Wann Dir hutt verschidden Enseignanten am Bus, nëmmen ee kann als Enseignant gläichzäiteg handelen. Awer et ass et net wäert, well de Changement vum Enseignant eng héich Komplexitéit verlaangt, sou datt et net heefeg ass.

Bedenkt datt de Master stellt d'Auer Signal fir all Geräter am Bus ze synchroniséieren. Dat eliminéiert de Besoin fir all Sklave seng eege Auer ze hunn.

Den I2C Busprotokoll gesäit och d'Benotzung vu Pull-Up Widerstänn an de Versuergungsspannungslinnen (Vcc) vir, och wann dës Widderstänn normalerweis net mat Arduino benotzt ginn zéien-up well programméiere Bibliothéiken wéi Wire aktivéiert déi intern mat Wäerter vun 20-30 k. Dëst ka fir verschidde Projeten ze mëll sinn, dofir ginn déi opsteigend Kante vum Signal méi lues, sou datt méi niddreg Geschwindegkeeten a méi kuerz Kommunikatiounsofstänn kënne benotzt ginn. Fir dat ze korrigéieren musst Dir eventuell extern Pull-Up Widderstänn vun 1k bis 4k7 astellen.

Signal

I2C Signal

 

La Kommunikatioun Frame vun deenen en I2C Bus Signal aus de Bits oder Staaten besteet (déi an Arduino benotzt ginn, well den I2C Standard erlaabt anerer):

  • 8 Bits, 7 dovun vun Adress vum Sklave-Gerät, op deen Dir zougräife wëllt fir Daten dovun ze schécken oder ze kréien. Mat 7 Bits kënne bis zu 128 verschidden Adressen erstallt ginn, sou datt 128 Geräter theoretesch zougänglech sinn, awer nëmmen 112 kann zougänglech sinn, well 16 si fir speziell Utilisatioune reservéiert. An den zousätzleche Bit deen uginn ob Dir wëllt schécken oder kréien Sklaven Apparat Informatioun.
  • Et gëtt och e Confirmatiounsbit, wann et net aktiv ass ass d'Kommunikatioun net gëlteg.
  • Dann den Daten Bytes datt se vun de Sklaven wëlle schécken oder empfänken. All Byte, wéi Dir wësst, besteet aus 8-Bits. Bedenkt datt fir all 8-Bit oder 1 Byte un Daten, déi verschéckt oder kritt ginn, zousätzlech 18 Stéck Validatioun, Adress, asw.
  • E leschte Stéck vun Confirmatioun vun der Kommunikatioun.

Zousätzlech, d'Auer Frequenz fir Transmissiounen ass 100 Mhz als Standard, obwuel et e méi schnelle Modus bei 400 Mhz ass.

Virdeeler an Nodeeler vum I2C Bus

der Virdeeler sinn:

  • Einfachheet andeems Dir nëmmen zwou Zeilen benotzt.
  • Et huet Mechanismen fir ze wëssen ob d'Signal ukomm ass am Verglach mat anere Kommunikatiounsprotokollen.

der Nodeeler sinn:

  • Speed zimlech niddereg Iwwerdroung.
  • Et ass net eng voll Duplex, dat ass, Dir kënnt net gläichzäiteg schécken a kréien.
  • Benotzt keng Paritéit och keng aner Aart vu Verifikatiounsmechanismus fir ze wëssen ob d'Datenbits déi kritt sinn korrekt sinn.

 

 

I2C op Arduino

Arduino I2C Bus

En Arduino, ofhängeg vum Modell, d'Stifter déi aktivéiert kënne ginn fir dësen I2C Bus ze benotzen, variéieren. Zum Beispill:

  • Arduino UNO, Nano, MiniPro: A4 gëtt fir SDA (Daten) an A5 fir SCK (Auer) benotzt.
  • Arduino Mega: PIN 20 fir SDA an 21 fir SCK.

Denkt drun datt Dir et benotze musst Benotzung vun der Bibliothéik maachen Drot.h fir Är Arduino IDE Coden, och wann et anerer sinn wéi I2C y I2Cdevlib. Dir kënnt d'Dokumenter vun dëse Bibliothéiken liesen oder eis Artikelen iwwer d'Projeten déi Iech interesséieren Coden ze kréien wéi et programméiert wier.

Wéi weess ech d'Adress vun engem Apparat fir se mat I2C ze benotzen?

Just eng lescht Warnung, an dat ass datt wann Dir ICe vun europäeschen, japaneschen oder amerikanesche Produzente kaaft, Dir uginn d'Richtung datt Dir fir den Apparat benotze sollt. Op der anerer Säit hunn d'Chinese heiansdo net detailléiert oder et ass net richteg, sou datt et net funktionnéiert. Dat kann einfach mat engem Adressscanner geléist ginn fir ze wëssen a wéi eng Richtung Dir an Ärer Skizz bezitt.

La Arduino Gemeinschaft huet dëst erstallt Code fir d'Adress ze scannen an z'identifizéieren Op eng einfach Manéier. Och wann ech Iech de Code hei direkt weisen:

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


Den Inhalt vum Artikel hält sech un eis Prinzipie vun redaktionnell Ethik. Fir e Feeler ze mellen klickt hei.

Gitt d'éischt fir ze kommentéieren

Gitt Äre Kommentar

Är Email Adress gëtt net publizéiert ginn. Néideg Felder sinn markéiert mat *

*

*

  1. Responsabel fir d'Daten: Miguel Ángel Gatón
  2. Zweck vun den Donnéeën: Kontroll SPAM, Kommentarmanagement.
  3. Legitimatioun: Är Zoustëmmung
  4. Kommunikatioun vun den Donnéeën: D'Donnéeë ginn net un Drëttubidder matgedeelt ausser duerch legal Verpflichtung.
  5. Datenspeicher: Datebank gehost vun Occentus Networks (EU)
  6. Rechter: Zu all Moment kënnt Dir Är Informatioun limitéieren, recuperéieren an läschen.