Totul despre autobuzul Arduino I2C

Autobuz Arduino I2C

cu Arduino poate crea un număr mare de proiecte așa cum ați văzut dacă ați citit Hwlibre, programarea microcontrolerului într-un mod simplu. Dar între conexiunile analogice și digitale ale acestei plăci hardware libre, există unele care sunt încă oarecum necunoscute pentru mulți începători, cum ar fi adevăratul potențial al conexiunilor PWM, SPI-ul, pinii RX și TX ai portului serial sau magistrala I2C în sine. Prin urmare, cu această intrare veți putea să știți cel puțin tot ce aveți nevoie despre I2C.

cu autobuzul I2C vă puteți conecta și utiliza multe dispozitive terțe care au acest tip de protocol pentru a comunica cu placa Arduino. Între ele, puteți conecta accelerometre, afișaje, contor, busole și multe alte circuite integrate datorită acestei invenții Philips.

Ce este I2C?

I2C se referă la circuitul inter-integrat, adică circuit inter-integrat. Este o magistrală de comunicație de date serială dezvoltată în 1982 de compania Philips Semiconductors, care astăzi este NXP Semiconductors după ce a scăpat de această secțiune. La început a fost creat pentru televizoarele acestui brand, pentru a comunica mai multe cipuri interne într-un mod simplu. Dar, din 1990, I2C sa răspândit și este folosit de mulți producători.

Utilizat în prezent de zeci de producători de cipuri pentru funcții multiple. Atmel, creatorul microcontrolerelor pentru plăcile Arduino, a introdus denumirea TWI (Two Wired Interface) în scopuri de licențiere, deși este identică cu I2C. Dar în 2006, brevetul original a expirat și nu mai este supus dreptului de autor, astfel încât termenul I2C a fost reutilizat (doar logo-ul continuă să fie protejat, dar implementarea sau utilizarea acestuia nu este limitată).

Detalii tehnice ale autobuzului I2C

Autobuz I2C

El Autobuzul I2C a devenit un standard industrial, iar Arduino l-a implementat pentru comunicarea cu perifericele care au nevoie de ea. Are nevoie doar de două linii sau cabluri pentru funcționarea sa, una pentru semnalul de ceas (CLK) și cealaltă pentru trimiterea de date seriale (SDA). Acest lucru este avantajos în comparație cu alte comunicații în comparație cu magistrala SPI, deși funcționarea sa este oarecum mai complexă datorită circuitelor suplimentare necesare.

În acest autobuz fiecare dispozitiv conectat la acesta are o adresă utilizate pentru a accesa aceste dispozitive individual. Această adresă este fixată de hardware, modificând ultimii 3 biți prin intermediul jumperilor sau comutatorului DIP-uri, deși se poate face și prin software. Fiecare dispozitiv va avea o adresă unică, deși mai multe dintre ele pot avea aceeași adresă și poate fi necesar să utilizați o magistrală secundară pentru a evita conflictele sau a o schimba, dacă este posibil.

În plus, autobuzul I2C are un Arhitectura tip Master-Slave, adică stăpân-sclav. Aceasta înseamnă că atunci când comunicarea este pornită de un dispozitiv master, acesta va putea trimite sau primi date de la sclavii săi. Sclavii nu vor putea iniția comunicarea, doar stăpânul poate și nici sclavii nu pot vorbi între ei direct fără intervenția stăpânului.

Dacă aveți mai mulți profesori din autobuz, doar unul poate acționa ca profesor simultan. Dar nu merită, deoarece schimbarea profesorului necesită o complexitate ridicată, deci nu este frecventă.

Rețineți că master oferă semnalul de ceas pentru a sincroniza toate dispozitivele de pe magistrală. Acest lucru elimină necesitatea ca fiecare sclav să aibă propriul ceas.

Protocolul de magistrală I2C prevede, de asemenea, utilizarea rezistențelor de tracțiune în liniile de tensiune de alimentare (Vcc), deși aceste rezistențe nu sunt de obicei utilizate cu Arduino pull-up pentru că programează biblioteci deoarece Wire activează cele interne cu valori de 20-30 k. Acest lucru poate fi prea moale pentru unele proiecte, prin urmare marginile ascendente ale semnalului vor fi mai mici, astfel încât pot fi utilizate viteze mai mici și distanțe de comunicare mai mici. Pentru a corecta acest lucru, poate fi necesar să puneți rezistențe de tragere externe de la 1k la 4k7.

Semnal

Semnal I2C

La cadru de comunicare dintre care un semnal de magistrală I2C constă din biți sau stări (cele utilizate în Arduino, deoarece standardul I2C permite altora):

  • 8 biți, 7 dintre ei adresa a dispozitivului sclav la care doriți să accesați pentru a trimite sau primi date de la acesta. Cu 7 biți, pot fi create până la 128 de adrese diferite, astfel încât 128 de dispozitive ar putea fi accesate teoretic, dar numai 112 pot fi accesate, deoarece 16 sunt rezervate pentru utilizări speciale. Și bitul suplimentar care indică dacă doriți trimite sau primește informații despre dispozitivul sclav.
  • Există, de asemenea, un bit de validare, dacă nu este activă, comunicarea nu va fi validă.
  • Apoi octeți de date care urmează să fie trimise sau primite de către sclavi. Fiecare octet, după cum știți, este alcătuit din 8 biți. Rețineți că pentru fiecare 8 biți sau 1 octet de date trimise sau primite, sunt necesari încă 18 biți de validare, adresă etc., ceea ce înseamnă că magistrala are o viteză foarte limitată.
  • Un ultim pic de validare a comunicării.

În plus, frecvența ceasului pentru transmisiile sunt 100 Mhz ca standard, deși există un mod mai rapid la 400 Mhz.

Avantajele și dezavantajele autobuzului I2C

Las avantaj sunet:

  • simplitate folosind doar două linii.
  • Are mecanisme pentru a ști dacă semnalul a sosit comparativ cu alte protocoale de comunicare.

Las dezavantaje sunet:

  • Viteză transmisie destul de redusă.
  • Nu este un duplex complet, adică nu puteți trimite și primi simultan.
  • Nu folosește paritatea nici orice alt tip de mecanism de verificare pentru a ști dacă biții de date primiți sunt corecți.

I2C pe Arduino

Autobuz Arduino I2C

En Arduino, în funcție de model, pinii care pot fi activați pentru a utiliza această magistrală I2C variază. De exemplu:

  • Arduino UNO, Nano, MiniPro: A4 este utilizat pentru SDA (date) și A5 pentru SCK (ceas).
  • arduino mega: pinul 20 pentru SDA și 21 pentru SCK.

Amintiți-vă că, pentru ao utiliza, trebuie folosiți biblioteca Sârmă.h pentru codurile dvs. IDE Arduino, deși există și altele de genul I2C y i2cdevlib. Puteți citi documentele acestor biblioteci sau articolele noastre despre proiectele care vă interesează pentru a obține coduri despre modul în care ar fi programat.

Cum să știți adresa unui dispozitiv pentru al utiliza cu I2C?

Doar un ultim avertisment, și anume că atunci când cumperi circuite integrate de la producători europeni, japonezi sau americani, tu indicați direcția ar trebui să utilizați pentru dispozitiv. Pe de altă parte, chinezii uneori nu îl detaliază sau nu este corect, deci nu va funcționa. Acest lucru poate fi rezolvat cu ușurință cu un scaner de adrese pentru a ști la ce direcție ar trebui să vă referiți în schiță.

La comunitate arduino a creat acest lucru cod pentru a scana adresa și a o identifica Într-un mod simplu. Deși vă arăt codul chiar aici:

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


Fii primul care comenteaza

Lasă comentariul tău

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *

*

*

  1. Responsabil pentru date: Miguel Ángel Gatón
  2. Scopul datelor: Control SPAM, gestionarea comentariilor.
  3. Legitimare: consimțământul dvs.
  4. Comunicarea datelor: datele nu vor fi comunicate terților decât prin obligație legală.
  5. Stocarea datelor: bază de date găzduită de Occentus Networks (UE)
  6. Drepturi: în orice moment vă puteți limita, recupera și șterge informațiile.