Tutto sul bus I2C di Arduino

Bus Arduino I2C

Con Arduino può creare un gran numero di progetti come hai visto leggendo Hwlibre, programmare il microcontrollore in modo semplice. Ma tra le connessioni analogiche e digitali su questa scheda hardware libre, ce ne sono alcuni che sono ancora un po' sconosciuti a molti principianti, come il vero potenziale delle connessioni PWM, dell'SPI, dei pin RX e TX della porta seriale o dello stesso bus I2C. Pertanto, con questo articolo potrai sapere almeno tutto ciò di cui hai bisogno su I2C.

Con il bus I2C È possibile connettere e utilizzare molti dispositivi di terze parti che dispongono di questo tipo di protocollo per comunicare con la scheda Arduino. Tra di loro, puoi collegare accelerometri, display, contatore, bussole e molti altri circuiti integrati grazie a questa invenzione Philips.

Cos'è I2C?

I2C si riferisce a Inter-Integated Circuit, cioè circuito inter-integrato. È un bus di comunicazione dati seriale sviluppato nel 1982 dalla società Philips Semiconductors, che oggi è NXP Semiconductors dopo aver eliminato questa sezione. In un primo momento è stato creato per i televisori di questo marchio, per comunicare in modo semplice diversi chip interni. Ma dal 1990 l'I2C si è diffuso ed è utilizzato da molti produttori.

Attualmente utilizzato da dozzine di produttori di chip per più funzioni. Atmel, il creatore dei microcontrollori per schede Arduino, ha introdotto la designazione TWI (Two Wired Interface) per scopi di licenza, sebbene sia identica a I2C. Ma nel 2006, il brevetto originale è scaduto e non è più soggetto a copyright, quindi il termine I2C è stato riutilizzato (solo il logo continua ad essere protetto, ma la sua implementazione o l'uso del termine non è limitato).

Dettagli tecnici del bus I2C

Bus I2C

El Il bus I2C è diventato uno standard del settore e Arduino lo ha implementato per la comunicazione con le periferiche che ne hanno bisogno. Necessita solo di due linee o cavi per il suo funzionamento, uno per il segnale di clock (CLK) e l'altro per l'invio di dati seriali (SDA). Ciò è vantaggioso rispetto ad altre comunicazioni rispetto al bus SPI, sebbene il suo funzionamento sia leggermente più complesso a causa della circuiteria aggiuntiva richiesta.

Su questo autobus ogni dispositivo ad esso connesso ha un indirizzo utilizzato per accedere a questi dispositivi individualmente. Questo indirizzo viene fissato dall'hardware, modificando gli ultimi 3 bit tramite ponticelli o switch DIP, anche se può essere fatto anche da software. Ogni dispositivo avrà un indirizzo univoco, sebbene molti di essi possano avere lo stesso indirizzo e potrebbe essere necessario utilizzare un bus secondario per evitare conflitti o modificarlo se possibile.

Inoltre, il bus I2C ha un'estensione Architettura di tipo Master-Slave, cioè padrone-schiavo. Ciò significa che quando la comunicazione viene avviata da un dispositivo master, sarà in grado di inviare o ricevere dati dai suoi slave. Gli schiavi non saranno in grado di avviare la comunicazione, solo il master può farlo e gli schiavi non possono parlare tra loro direttamente senza l'intervento del master.

Se si diversi insegnanti sull'autobus, solo uno può agire contemporaneamente come insegnante. Ma non ne vale la pena, poiché il cambio di insegnante richiede un'elevata complessità, quindi non è frequente.

Tieni presente che il master fornisce il segnale di clock per sincronizzare tutti i dispositivi sul bus. Ciò elimina la necessità per ogni schiavo di avere il proprio orologio.

Il protocollo bus I2C prevede anche l'utilizzo di resistenze pull-up nelle linee di tensione di alimentazione (Vcc), sebbene queste resistenze non siano normalmente utilizzate con Arduino pull-up perché le librerie di programmazione as Wire attiva gli interni con valori di 20-30 k. Questo potrebbe essere troppo debole per alcuni progetti, quindi i fronti di salita del segnale saranno più lenti, quindi è possibile utilizzare velocità inferiori e distanze di comunicazione più brevi. Per correggere ciò potrebbe essere necessario impostare resistori di pull-up esterni da 1k a 4k7.

segnale

Segnale I2C

La cornice di comunicazione di cui un segnale del bus I2C è costituito dai bit o stati (quelli usati in Arduino, visto che lo standard I2C ne consente altri):

  • 8 bit, 7 dei quali di indirizzo del dispositivo slave a cui si desidera accedere per inviare o ricevere dati da esso. Con 7 bit, è possibile creare fino a 128 indirizzi diversi, quindi teoricamente si potrebbe accedere a 128 dispositivi, ma solo a 112 è possibile accedervi, poiché 16 sono riservati per usi speciali. E il bit aggiuntivo che indica se lo desideri inviare o ricevere informazioni sul dispositivo slave.
  • Vi è anche un bit di convalida, se non è attivo la comunicazione non sarà valida.
  • Poi il byte di dati che vogliono inviare o ricevere dagli schiavi. Ogni byte, come sai, è composto da 8 bit. Si noti che per ogni 8 bit o 1 byte di dati inviati o ricevuti, sono necessari 18 bit aggiuntivi di convalida, indirizzo, ecc., Il che significa che il bus è molto limitato in termini di velocità.
  • Un ultimo pezzo di convalida della comunicazione.

Inoltre, la frequenza di clock per le trasmissioni sono di 100 Mhz di serie, anche se esiste una modalità più veloce a 400 Mhz.

Vantaggi e svantaggi del bus I2C

Le Vantaggi sono:

  • semplicità utilizzando solo due righe.
  • Ha meccanismi per sapere se il segnale è arrivato rispetto ad altri protocolli di comunicazione.

Le svantaggi sono:

  • Velocità trasmissione abbastanza bassa.
  • Non è un full duplexCioè, non puoi inviare e ricevere contemporaneamente.
  • Non usa la parità né qualsiasi altro tipo di meccanismo di verifica per sapere se i bit di dati ricevuti sono corretti.

I2C su Arduino

Bus Arduino I2C

En Arduino, a seconda del modello, i pin che possono essere abilitati per utilizzare questo bus I2C variano. Per esempio:

  • Arduino UNO, Nano, MiniPro: A4 è utilizzato per SDA (dati) e A5 per SCK (orologio).
  • Arduino Mega: pin 20 per SDA e 21 per SCK.

Ricorda che per usarlo devi fare uso della libreria Filo.h per i tuoi codici IDE Arduino, anche se ce ne sono altri come I2C y i2cdevlib. Puoi leggere i documenti di queste biblioteche oi nostri articoli sui progetti che ti interessano per ottenere codici di come sarebbe programmato.

Come conoscere l'indirizzo di un dispositivo per utilizzarlo con I2C?

Solo un ultimo avvertimento, ed è che quando acquisti circuiti integrati da produttori europei, giapponesi o americani, tu indicare la direzione che dovresti usare per il dispositivo. D'altra parte, i cinesi a volte non lo descrivono in dettaglio o non è corretto, quindi non funzionerà. Questo può essere facilmente risolto con uno scanner di indirizzi per sapere a quale direzione dovresti fare riferimento nel tuo schizzo.

La comunità arduino ha creato questo codice per scansionare l'indirizzo e identificarlo In modo semplice. Anche se ti mostro il codice proprio qui:

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


Puoi essere il primo a lasciare un commento

Lascia un tuo commento

L'indirizzo email non verrà pubblicato. I campi obbligatori sono contrassegnati con *

*

*

  1. Responsabile dei dati: Miguel Ángel Gatón
  2. Scopo dei dati: controllo SPAM, gestione commenti.
  3. Legittimazione: il tuo consenso
  4. Comunicazione dei dati: I dati non saranno oggetto di comunicazione a terzi se non per obbligo di legge.
  5. Archiviazione dati: database ospitato da Occentus Networks (UE)
  6. Diritti: in qualsiasi momento puoi limitare, recuperare ed eliminare le tue informazioni.