Come collegare più dispositivi con interfaccia i2c in un singolo pin A4 (SDA) e A5 (SCL) su Arduino?


32

Voglio aggiungere un modulo orologio in tempo reale nel mio piccolo progetto. Voglio visualizzare sia l'ora che la data sul mio modulo LCD i2c 2x16 esistente.

Sia il modulo orologio in tempo reale con interfaccia i2c che il modulo LCD 2x16 utilizzano lo stesso pin A4 (SDA) e A5 (SCL) su Arduino Uno. Dopo ore di ricerche in rete, il bus i2c può effettivamente prendere molti dispositivi seriali. Questo è possibile perché ogni dispositivo ha il suo indirizzo univoco.

La mia domanda è: come collegare fisicamente i due dispositivi con interfaccia i2c in un singolo A4 e A5? Grazie.


3
Risposta breve: collegarli in parallelo. Collega gli SDA e connettili ad A4 e gli SCL ad A5. Quindi ovviamente c'è il problema del pull-up che a volte aiuta.
SDsolar

Risposte:


32

Alcune persone hanno difficoltà a visualizzare le cose collegate tra loro, quindi ecco un'immagine:

(Suggerimento sulle porzioni)

schematic

simula questo circuito - Lo schema creato usando CircuitLab I2C è un bus, quindi i segnali simili vengono collegati insieme. Lo schema di indirizzamento consente al microcontrollore di selezionare con quale dispositivo sta parlando. Su Arduino i resistori pull-up da 10k vanno "VDD", ovvero i pin 5V o 3,3V.


Ciao, questo può essere molto semplice, ma sono nuovo di elettronica e sono arrivato a questa pagina dalla ricerca di Google, a cosa ti riferisci?
Ciasto piekarz,

Credo che il riferimento sia a qualsiasi uC, poiché lo schema di connessione dovrebbe essere lo stesso, se non diversamente specificato.
KingsInnerSoul

uC può essere un Arduino. SDA è pin A4 e SCL è pin A5.
SDsolar

9
@Ciastopiekarz, μC è l'abbreviazione di "microcontrollore". La lettera greca μ è l'abbreviazione di micro. Poiché μ ti assomiglia, molte persone scrivono semplicemente "uC".
foobaremade

9

Per I2C, se tutti i dispositivi slave hanno indirizzi di dispositivo diversi, tutti i pin SDA devono essere collegati insieme e tutti i pin SCL devono essere collegati insieme. E 'così semplice.

Ovviamente, dovresti includere anche resistenze di pull-up su entrambe le linee, come richiesto per I2C. Come scegliere i valori dei resistori è stato discusso qui prima .


Ho scoperto che fino a quando uno dei dispositivi è il DS3231 RTC, non sono necessari pullup esterni.
SDsolar,

3
@SDsolar, questo probabilmente significa che il DS3231 ha pull-up interni, quindi usando quel dispositivo, stai fornendo pull-up per il bus. Non è necessariamente una buona cosa, perché limita la tua libertà di regolare la resistenza di pull-up in base al numero di dispositivi sul bus.
Il fotone

I miei pensieri esattamente. L'aggiunta di pullup esterni sarebbe in parallelo con qualsiasi cosa sia nel DS3231, e quindi potrebbe non essere sufficiente per I2C per essere felice.
SDsolar

@SDsolar, cosa c'entra questo con la domanda di OP o la mia risposta? Questo non è un sito di discussione generale. Se vuoi solo parlare di cose, puoi unirti alla nostra chat room .
Il fotone

3

Collegare due pin A4-sda a A5-scl (su entrambe le schede uno-uno) e collegare la resistenza da 5v da ciascuna linea sda-scl corrispondente.

inserisci qui la descrizione dell'immagine


ha votato verso il basso perché la risposta non risponde alla domanda originale, vale a dire "collegare fisicamente i due dispositivi di interfaccia i2c in un unico A4 e A5".
Oleg Mazurov,

Non ho potuto cancellare, quindi modifico in una (forse) risposta più soddisfacente
daedalucian

La condivisione della tensione non è necessaria, giusto?
clankill3r

0

I2C è un protocollo di trasferimento dati sviluppato da Philips. Conosciuto anche come interfaccia a due fili poiché utilizza due fili per la comunicazione. Linea orologio seriale SCL. Linea dati seriale SDL. Quindi è necessario collegare i pin corrispondenti dei dispositivi i2c, che si tratti di eeprom o lcd, ai pin SCL e SDL del micro controller che si sta utilizzando con un resistore pullup su VDD. Poiché si tratta di un protocollo di indirizzi con indirizzo a 7 bit per ciascun dispositivo collegato, è possibile indirizzare fino a 2 ^ 7 dispositivi diversi. Ma normalmente l'indirizzo I2C di un dispositivo slave è predefinito con alcuni bit che devono essere cablati dallo sviluppatore. Questo aiuta a collegare lo stesso tipo di dispositivi con una parte di indirizzo cablata diversa sullo stesso bus.


1
Tutto vero, ma fa schifo se ne vuoi più di uno, come l'unità di intensità luminosa BH1750. Ne voglio 4 e non voglio occuparmi della commutazione I2C dual-bus .. Inoltre, alcuni dispositivi come il DS3231 hanno pullup interni, quindi eventuali pullup esterni sono in parallelo con loro.
SDsolar,

0

Inoltre, è necessario controllare le resistenze di pull up. Se usi schede già realizzate, non solo il chip, quelle schede hanno solitamente resistori pull up a bordo tra buss e vcc. Quindi quando si collega tutto in parallelo, anche i resistori sono in parallelo, quindi il valore totale del resistore diminuisce e la comunicazione potrebbe fallire.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.