Wszystko o magistrali Arduino I2C

Magistrala Arduino I2C

z Arduino może tworzyć wiele projektów jak widzieliście, czytając Hwlibre, programowanie mikrokontrolera w prosty sposób. Ale pomiędzy analogowymi i cyfrowymi połączeniami tej płyty hardware libre, są pewne, które są wciąż nieco nieznane wielu początkującym, takie jak prawdziwy potencjał połączeń PWM, SPI, piny RX i TX portu szeregowego lub sama magistrala I2C. Dlatego dzięki temu wpisowi będziesz mógł przynajmniej dowiedzieć się wszystkiego, czego potrzebujesz na temat I2C.

z magistrala I2C można podłączyć i używać wielu urządzeń innych firm, które mają ten typ protokołu do komunikacji z płytą Arduino. Pomiędzy nimi można łączyć akcelerometry, wyświetlacze, liczniki, kompasy i wiele innych układów scalonych dzięki temu wynalazkowi firmy Philips.

Co to jest I2C?

I2C odnosi się do obwodu zintegrowanegoczyli układ scalony. Jest to szeregowa magistrala komunikacyjna danych opracowana w 1982 roku przez firmę Philips Semiconductors, którą dziś jest NXP Semiconductors po pozbyciu się tej sekcji. Początkowo został stworzony z myślą o telewizorach tej marki, aby w prosty sposób komunikować kilka wewnętrznych chipów. Ale od 1990 roku I2C rozprzestrzenił się i jest używany przez wielu producentów.

Obecnie używany przez dziesiątki producentów chipów dla wielu funkcji. Atmel, twórca mikrokontrolerów dla płyt Arduino, wprowadził dla celów licencyjnych oznaczenie TWI (Two Wired Interface), choć jest ono identyczne z I2C. Jednak w 2006 roku oryginalny patent wygasł i nie podlega już prawom autorskim, więc termin I2C został ponownie użyty (chronione jest tylko logo, ale jego implementacja lub użycie tego terminu nie jest ograniczone).

Szczegóły techniczne magistrali I2C

Magistrala I2C

El Magistrala I2C stała się standardem branżowym i firma Arduino ją wdrożyła do komunikacji z urządzeniami peryferyjnymi, które tego potrzebują. Do jego działania potrzebne są tylko dwie linie lub kable, jedna dla sygnału zegarowego (CLK), a druga dla przesyłania danych szeregowych (SDA). Jest to korzystne w porównaniu z innymi rodzajami komunikacji w porównaniu z magistralą SPI, chociaż jej działanie jest nieco bardziej złożone ze względu na wymagane dodatkowe obwody.

W tym autobusie każde podłączone do niego urządzenie ma adres używany do uzyskiwania dostępu do tych urządzeń indywidualnie. Ten adres jest ustalany sprzętowo, modyfikując ostatnie 3 bity za pomocą zworek lub przełączników DIP, chociaż można to również zrobić programowo. Każde urządzenie będzie miało unikalny adres, chociaż kilka z nich może mieć ten sam adres i może być konieczne użycie dodatkowej magistrali, aby uniknąć konfliktów lub zmienić go, jeśli to możliwe.

Ponadto magistrala I2C ma rozszerzenie Architektura typu Master-Slave, to znaczy pan-niewolnik. Oznacza to, że gdy komunikacja zostanie rozpoczęta przez urządzenie nadrzędne, będzie mogło wysyłać lub odbierać dane od swoich urządzeń podrzędnych. Niewolnicy nie będą w stanie zainicjować komunikacji, tylko mistrz może to zrobić, podobnie jak niewolnicy nie mogą rozmawiać ze sobą bezpośrednio bez interwencji pana.

Jeśli masz kilku nauczycieli w autobusie, tylko jeden może być jednocześnie nauczycielem. Ale to nie jest tego warte, ponieważ zmiana nauczyciela wymaga dużej złożoności, więc nie jest częsta.

Pamiętaj, że master dostarcza sygnał zegarowy do synchronizacji wszystkich urządzeń na magistrali. To eliminuje potrzebę posiadania własnego zegarka przez każdego niewolnika.

Protokół magistrali I2C przewiduje również zastosowanie rezystorów podciągających w liniach napięcia zasilającego (Vcc), chociaż rezystory te zwykle nie są używane z Arduino pull-up, ponieważ biblioteki programistyczne as Wire aktywuje wewnętrzne o wartościach 20-30 k. Może to być zbyt miękkie dla niektórych projektów, dlatego narastające zbocza sygnału będą wolniejsze, więc można zastosować niższe prędkości i krótsze odległości komunikacyjne. Aby to naprawić, może być konieczne ustawienie zewnętrznych rezystorów podciągających od 1k do 4k7.

Sygnał

Sygnał I2C

La ramka komunikacyjna z których sygnał magistrali I2C składa się z bitów lub stanów (tych używanych w Arduino, gdyż standard I2C dopuszcza inne):

  • 8 bitów, 7 z nich Ulica urządzenia slave, do którego chcesz uzyskać dostęp, aby wysyłać lub odbierać z niego dane. Za pomocą 7 bitów można utworzyć do 128 różnych adresów, więc teoretycznie można uzyskać dostęp do 128 urządzeń, ale można uzyskać dostęp tylko do 112, ponieważ 16 jest zarezerwowanych do specjalnych zastosowań. I dodatkowy bit, który wskazuje, czy chcesz wysłać lub odebrać informacje o urządzeniu podrzędnym.
  • Istnieje również bit walidacji, jeśli nie jest aktywna, komunikacja nie będzie ważna.
  • A później bajty danych że chcą wysłać lub odebrać niewolnikom. Jak wiecie, każdy bajt składa się z 8 bitów. Należy zauważyć, że na każde 8-bitowe lub 1 bajt wysyłanych lub odbieranych danych wymagane jest dodatkowe 18 bitów walidacji, adresu itp., Co oznacza, że ​​prędkość magistrali jest bardzo ograniczona.
  • Ostatnia część walidacja komunikacji.

Ponadto częstotliwość taktowania dla transmisje 100 Mhz w standardzie, chociaż istnieje szybszy tryb przy 400 MHz.

Zalety i wady magistrali I2C

Te zaleta dźwięk:

  • Prostota używając tylko dwóch linii.
  • Ma mechanizmy, aby wiedzieć, czy sygnał dotarł w porównaniu z innymi protokołami komunikacyjnymi.

Te wady dźwięk:

  • Prędkość dość niska transmisja.
  • Nie jest to pełny dupleksOznacza to, że nie możesz jednocześnie wysyłać i odbierać.
  • Nie używa parzystości ani żadnego innego rodzaju mechanizmu weryfikacji, aby wiedzieć, czy otrzymane bity danych są poprawne.

I2C na Arduino

Magistrala Arduino I2C

En Arduino, w zależności od modelu, piny, które można włączyć, aby używać tej magistrali I2C, są różne. Na przykład:

  • Arduino UNO, Nano, MiniPro: A4 jest używane dla SDA (dane) i A5 dla SCK (zegar).
  • Arduino Mega: pin 20 dla SDA i 21 dla SCK.

Pamiętaj, że aby z niego skorzystać, musisz korzystać z biblioteki Drut.h dla twoich kodów Arduino IDE, chociaż są inne podobne I2C y i2cdevlib. Możesz przeczytać dokumenty tych bibliotek lub nasze artykuły na temat interesujących Cię projektów, aby uzyskać kody, jak by to zaprogramować.

Jak poznać adres urządzenia, aby używać go z I2C?

Jeszcze tylko jedno ostrzeżenie: kupując układy scalone od producentów europejskich, japońskich lub amerykańskich, to Ty wskaż kierunek którego należy używać dla urządzenia. Z drugiej strony Chińczycy czasami nie wyszczególniają tego lub jest to nieprawidłowe, więc nie zadziała. Można to łatwo rozwiązać za pomocą skanera adresów, aby wiedzieć, do którego kierunku należy się odnieść na szkicu.

La społeczność Arduino stworzył to kod do zeskanowania adresu i zidentyfikowania go W prosty sposób. Chociaż pokazuję kod tutaj:

#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ądź pierwszym który skomentuje

Zostaw swój komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *

*

*

  1. Odpowiedzialny za dane: Miguel Ángel Gatón
  2. Cel danych: kontrola spamu, zarządzanie komentarzami.
  3. Legitymacja: Twoja zgoda
  4. Przekazywanie danych: Dane nie będą przekazywane stronom trzecim, z wyjątkiem obowiązku prawnego.
  5. Przechowywanie danych: baza danych hostowana przez Occentus Networks (UE)
  6. Prawa: w dowolnym momencie możesz ograniczyć, odzyskać i usunąć swoje dane.