Vše o sběrnici Arduino I2C

Sběrnice Arduino I2C

s Arduino může vytvářet velké množství projektů jak jste viděli, když čtete Hwlibre, programování mikrokontroléru jednoduchým způsobem. Ale mezi analogovým a digitálním připojením této desky hardware libre, existují některé, které jsou pro mnoho začátečníků stále poněkud neznámé, jako je skutečný potenciál PWM připojení, SPI, RX a TX piny sériového portu nebo samotná I2C sběrnice. Proto se s tímto vstupem budete moci alespoň dozvědět vše, co potřebujete o I2C.

s sběrnici I2C ke komunikaci s deskou Arduino můžete připojit a používat mnoho zařízení třetích stran, která mají tento typ protokolu. Mezi ně můžete díky tomuto vynálezu společnosti Philips připojit akcelerometry, displeje, počítadla, kompasy a mnoho dalších integrovaných obvodů.

Co je I2C?

I2C označuje Inter-Integated Circuit, tj. vzájemně integrovaný obvod. Jedná se o sériovou datovou komunikační sběrnici vyvinutou v roce 1982 společností Philips Semiconductors, která je dnes po odstranění této části společností NXP Semiconductors. Nejprve byl vytvořen pro televizory této značky, aby mohly jednoduchým způsobem komunikovat s několika interními čipy. Ale od roku 1990 se I2C rozšířil a je používán mnoha výrobci.

V současné době je využíván desítkami výrobců čipů pro více funkcí. Atmel, tvůrce mikrokontrolérů pro desky Arduino, představil z licenčních důvodů označení TWI (Two Wired Interface), i když je identické s I2C. V roce 2006 však původní patent vypršel a již nepodléhá autorským právům, takže termín I2C byl znovu použit (chráněno je pouze logo, ale jeho implementace nebo použití tohoto výrazu není omezeno).

Technické podrobnosti sběrnice I2C

I2C autobus

El Sběrnice I2C se stala průmyslovým standardem a Arduino jej implementovalo pro komunikaci s periferními zařízeními, které to potřebují. K provozu potřebuje pouze dvě linky nebo kabely, jeden pro hodinový signál (CLK) a druhý pro odesílání sériových dat (SDA). To je výhodné ve srovnání s jinou komunikací ve srovnání se sběrnicí SPI, i když její provoz je poněkud složitější kvůli požadovaným dalším obvodům.

V tomto autobuse každé zařízení k němu připojené má adresu slouží k individuálnímu přístupu k těmto zařízením. Tato adresa je opravena hardwarem a upravuje poslední 3 bity pomocí propojek nebo přepínání DIP, i když to lze provést také softwarem. Každé zařízení bude mít jedinečnou adresu, i když několik z nich může mít stejnou adresu a může být nutné použít sekundární sběrnici, aby nedocházelo ke konfliktům nebo pokud je to možné, změňte ji.

Sběrnice I2C má navíc Architektura typu Master-Slave, to je pán-otrok. To znamená, že když komunikaci zahájí hlavní zařízení, bude moci odesílat nebo přijímat data od svých podřízených. Otroci nebudou moci zahájit komunikaci, může to udělat pouze nadřízený a také nemohou navzájem přímo komunikovat bez zásahu nadřízeného.

Pokud ano několik učitelů v autobuse, pouze jeden může působit jako učitel současně. Ale nestojí to za to, protože změna učitele vyžaduje velkou složitost, takže to není časté.

Mějte na paměti, že Master poskytuje hodinový signál pro synchronizaci všech zařízení na sběrnici. To vylučuje potřebu, aby každý otrok měl vlastní hodinky.

Protokol sběrnice I2C také předpokládá použití pull-up rezistorů v napájecích napěťových vedeních (Vcc), i když se tyto rezistory s Arduino obvykle nepoužívají pull-up, protože programování knihoven jako Wire aktivuje interní s hodnotami 20-30 k. To může být pro některé projekty příliš měkké, proto budou stoupající hrany signálu pomalejší, takže lze použít nižší rychlosti a kratší komunikační vzdálenosti. Abyste to napravili, možná budete muset nastavit externí pull-up rezistory od 1k do 4k7.

Signál

Signál I2C

La komunikační rámec z nichž signál sběrnice I2C sestává z bitů nebo stavů (ty, které se používají v Arduinu, protože standard I2C umožňuje ostatním):

  • 8 bitů, z toho 7 adresa podřízeného zařízení, ke kterému chcete přistupovat k odesílání nebo přijímání dat z něj. Se 7 bity lze vytvořit až 128 různých adres, takže teoreticky lze přistupovat k 128 zařízením, ale lze přistupovat pouze k 112, protože 16 je vyhrazeno pro speciální použití. A další bit, který označuje, jestli chcete odesílat nebo přijímat informace o podřízeném zařízení.
  • Je zde také ověřovací bit, pokud není aktivní, komunikace nebude platná.
  • Pak datové bajty že chtějí posílat nebo přijímat otroci. Každý bajt, jak víte, je tvořen 8 bity. Všimněte si, že pro každý 8bitový nebo 1 bajt odeslaných nebo přijatých dat je zapotřebí dalších 18 bitů ověření, adresa atd., Což znamená, že rychlost sběrnice je velmi omezená.
  • Poslední kousek ověření komunikace.

Kromě toho taktovací frekvence pro přenos je standardně 100 Mhz, ačkoli tam je rychlejší režim na 400 Mhz.

Výhody a nevýhody sběrnice I2C

the výhoda Zvuk:

  • Jednoduchost pouze pomocí dvou řádků.
  • mechanismy pro zjištění, zda signál dorazil ve srovnání s jinými komunikačními protokoly.

the desventajas Zvuk:

  • Rychlost poměrně nízký přenos.
  • Není to plný duplex, to znamená, že nemůžete odesílat a přijímat současně.
  • Nepoužívá paritu ani žádný jiný typ ověřovacího mechanismu, který by věděl, zda jsou přijaté datové bity správné.

I2C na Arduinu

Sběrnice Arduino I2C

En Arduino, v závislosti na modelu, kolíky, které lze povolit pro použití této sběrnice I2C, se liší. Například:

  • Arduino UNO, Nano, MiniPro: A4 se používá pro SDA (data) a A5 pro SCK (hodiny).
  • arduino mega: pin 20 pro SDA a 21 pro SCK.

Nezapomeňte, že k jeho použití musíte využívat knihovnu drát.h pro vaše Arduino IDE kódy, i když existují i ​​jiné podobné I2C y i2cdevlib. Můžete si přečíst dokumenty těchto knihoven nebo naše články o projektech, které vás zajímají, a získat kódy, jak by to bylo naprogramováno.

Jak zjistit adresu zařízení pro použití s ​​I2C?

Jen poslední varování, a to je, že když kupujete integrované obvody od evropských, japonských nebo amerických výrobců, vy uveďte směr byste měli použít pro zařízení. Na druhou stranu, Číňané to někdy neuvádějí podrobně nebo to není správné, takže to nebude fungovat. To lze snadno vyřešit pomocí skeneru adres, abyste věděli, kterým směrem byste se měli ve své skice obrátit.

La Arduino komunita vytvořil toto kód pro skenování adresy a její identifikaci Jednoduchým způsobem. I když vám ukážu kód právě zde:

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


Buďte první komentář

Zanechte svůj komentář

Vaše e-mailová adresa nebude zveřejněna. Povinné položky jsou označeny *

*

*

  1. Odpovědný za údaje: Miguel Ángel Gatón
  2. Účel údajů: Ovládací SPAM, správa komentářů.
  3. Legitimace: Váš souhlas
  4. Sdělování údajů: Údaje nebudou sděleny třetím osobám, s výjimkou zákonných povinností.
  5. Úložiště dat: Databáze hostovaná společností Occentus Networks (EU)
  6. Práva: Vaše údaje můžete kdykoli omezit, obnovit a odstranit.