Connessione a SDA/SCL

Ciao ragazzi,
sono un principiante di Arduino (ma gia in fase di evoluzione :D). Ho programmato un giroscopio LG3D20H e ho deciso di comprarmi anche un accelerometro così da combinarli insieme.
La mia domanda è questa:
ma se ho un giroscopio che usa i pin SDA e SCL... come faccio a collegarci sopra anche un accelerometro che usa gli stessi pins? Esistono degli sdoppiatori o degli shield fatti appositamente per sdoppiare questi pins?
Qualcuno (su altri forum internazionali) mi ha detto di collegare l'accelerometro ai pins analogici... ma non penso di farlo per due ragioni: uno perchè ho letto in piu di una guida che l'accelerometro aumenta in offset con l'analog e poi perchè per le mie conoscenze sarebbe chiedere troppo (per ora).

SDA e SCL sono i pin usati dall'implementazione hardware del protocollo i2c. Per come funziona questo puoi semplicemente collegare tutti i dispositivi insieme agli stessi pin. La differenziazione tra i dispositivi avviene basandosi su di un indirizzo unico che ognuno di essi ha, ma in prima approssimazione dovresti poter ignorare la cosa, dato che l'indirizzo è già stabilito nell'hardware.

I pin SDA e SCL su Arduino Uno (e su tutte le schede basate su ATmega328) sono condivisi con i pin A4 e A5, forse per questo ti hanno detto di usare i pin analogici, ma puoi usare solo quei due.

SukkoPera:
ma in prima approssimazione dovresti poter ignorare la cosa, dato che l'indirizzo è già stabilito nell'hardware.

E' vero che solitamente l'address I2C è predeterminato dal produttore del device, spesso è possibile impostare uno, o più, valori alternativi tramite dei pin di selezione, più raramente è possibile modificarlo da software tramite appositi comandi, però in tutti i casi devi conoscere l'indirizzo e fornirlo al software per poter utilizzare il device.
Se l'indirizzo non è noto, o dubbio, c'è lo sketch I2C scanner che fa un ping su tutti i possibili address e fornisce quelli su cui è presente un device I2C.

Non Ti sei ancora presentato Ti invitiamo a presentarti QUI
(dicci quali conoscenze hai di elettronica e di programmazione) e a leggere il regolamento QUI
se non lo hai già fatto.

Ricordati che la presentazione è soprattutto una cortesia nei confronti degli altri utenti del forum. :wink:

Comunque benvenuto sul forum.

Attilio

astrobeed:
E' vero che solitamente l'address I2C è predeterminato dal produttore del device, spesso è possibile impostare uno, o più, valori alternativi tramite dei pin di selezione, più raramente è possibile modificarlo da software tramite appositi comandi, però in tutti i casi devi conoscere l'indirizzo e fornirlo al software per poter utilizzare il device.

Ovviamente, ma spesso i sensori hanno l'indirizzo di default, che è anche quello impostato di default nelle librerie, per cui ci sono ottime probabilità che con due soli sensori diversi non vi sia alcun conflitto e le librerie individuino "magicamente" i sensori da gestire :).

SukkoPera:
Ovviamente, ma spesso i sensori hanno l'indirizzo di default, che è anche quello impostato di default nelle librerie

In linea di massima si, però non è insolito trovarsi con Arduino apparentemente in freeze perché l'address di default usato dalla libreria non è quello realmente in uso sul device, sopratutto con i sensori mems che hanno sempre almeno un address alternativo per poterne usare due identici in parallelo.

ultimo_53:
Non Ti sei ancora presentato Ti invitiamo a presentarti QUI
(dicci quali conoscenze hai di elettronica e di programmazione) e a leggere il regolamento QUI
se non lo hai già fatto.

Ricordati che la presentazione è soprattutto una cortesia nei confronti degli altri utenti del forum. :wink:

Comunque benvenuto sul forum.

Attilio

Scusatemi :smiley: pensavo di esseremi gia presentato (ma quello era il forum internazionale di arduino...)

SukkoPera:
SDA e SCL sono i pin usati dall'implementazione hardware del protocollo i2c. Per come funziona questo puoi semplicemente collegare tutti i dispositivi insieme agli stessi pin. La differenziazione tra i dispositivi avviene basandosi su di un indirizzo unico che ognuno di essi ha, ma in prima approssimazione dovresti poter ignorare la cosa, dato che l'indirizzo è già stabilito nell'hardware.

I pin SDA e SCL su Arduino Uno (e su tutte le schede basate su ATmega328) sono condivisi con i pin A4 e A5, forse per questo ti hanno detto di usare i pin analogici, ma puoi usare solo quei due.

Quindi come prova iniziale potrei collegare SDA/SCL ad una basetta e per ognuno di questi due pin faccio partire cavi che vanno a ciascun dispositivo. In teoria cosi dovrebbe funzionare?

Male che vada riaggiornerò questo topic o ne aprirò un altro per dirvi com'è andata.

Se ho capito quel che scrivi, NO.
I dispositivi I2C vogliono DUE fili con segnali SDA e SCL. Poi Dai pin SDA e SCL puoi anche collegare più dispositivi I2C a patto che abbiano indirizzi (interni al dispositivo) diversi.

Credo che abbia capito bene, "sdoppierà" sia SDA e SCL e collegherà ciascuno di essi ad ogni sensore.

Potrebbero esserci problemi con le eventuali resistenze di pull-up integrate nei sensori, ma ci sono buone probabilità che funzioni :).

Per le pullup è caldamente consigliato usare delle 1.5 K esterne, le specifiche I2C richiedono una disponibilità di 3 mA sulle pullup al fine di consentire una rapida ricarica della capacità parassita del bus i2c, questa capacità è data dalla sommatoria di quella dei cavi e quella dei device collegati.
Da notare che i classici cavetti usati in ambito amatoriale hanno una capacità parassita molto alta, se poi si passa tramite breadboard le cose peggiorano notevolmente.

nid69ita:
Se ho capito quel che scrivi, NO.
I dispositivi I2C vogliono DUE fili con segnali SDA e SCL. Poi Dai pin SDA e SCL puoi anche collegare più dispositivi I2C a patto che abbiano indirizzi (interni al dispositivo) diversi.

Sisi intendevo proprio una cosa simile a quel disegno

astrobeed:
Per le pullup è caldamente consigliato usare delle 1.5 K esterne, le specifiche I2C richiedono una disponibilità di 3 mA sulle pullup al fine di consentire una rapida ricarica della capacità parassita del bus i2c, questa capacità è data dalla sommatoria di quella dei cavi e quella dei device collegati.
Da notare che i classici cavetti usati in ambito amatoriale hanno una capacità parassita molto alta, se poi si passa tramite breadboard le cose peggiorano notevolmente.

Cosa si intende per 1.5 K esterne?

Per 1.5k esterne si intende esattamente quello che vedi nel disegno e cioè 2 resistenze di pull-up (una per SDA e una per SCL), del valore di 1.5 K Ohm (ovvero 1500 Ohm), esterne ai moduli che collegherai al bus I2C.

Ciao

Attilio

Sì, ma occhio che molti sensori di quelli che si trovano in giro hanno già delle resistenze di pull-up integrate sul PCB. Infatti il problema a cui accennavo è quello del caso in cui siano presenti su entrambi i sensori che colleghi, in tal caso la resistenza potrebbe ridursi troppo.

Prova senza farti troppe seghe mentali, poi se ci sono problemi vediamo cosa fare.