I2C con device 5.0v e 3.3v

Ciao a tutti... mi sono appasionato ad arduino da poco, grazie ad un progetto di un "orchidario" che sto portando avanti con un amico.
Ho acquistato da vari siti un po' di cose per arduino, tra cui dei sensori di luminosità, sensori di umidità, LCD, circuiti real time, ecc...
Con i sensori digitali o analogici, nessun problema... ma adesso mi trovo ad affrontare il problema conseesione I2C.
Ho collegato ai pin 4 e 5 di Arduino uno rev.3, per la comunicazione I2C, un schermo lcd 20x40 linee e questo funziona egregiamente.
Poi ho collegato in parallelo anche un piccolo circuito per il real time clock che ha già nel suo piccolo circuito 2 resistenze pull-up, entrambi funzionano con una alimentazione di 5.0v.
Ora però dovrei collegare, sempre in I2C, 2 sensori per misurare la luce, Ma questi sono alimentati a 3.3v e anchessi (mi sembra di aver visto nella basetta, perchè non ho schemi) hanno già delle resistenze pull-up.
Essendo che vedo per la prima volta questo tipo di comunicazione, ho letto in vari forum che non è possibile collegare devices da 5v e 3.3v assieme nello stesso bus, anche se nel sito dove ho acquistato i sensori della luce e del real time clock odicono che togliendo le resistenze pull-up nel modulino real time clock (5.0v) e possibile collegarli assieme perchè inteveranno le resistenze nel modulini dei sensori di luce... ma io ho anche LCD a 5.0v e per cui non mi fido... non vorrei bruciare qualche cosa.
Quindi vi chiedo: Come posso fare per collegare anche questi sensori della luce in I2C ? se ho ben capito c'è la possibilità di convertire la tensione, ma non ho schemi e lista componenti o altro...
Spero ci sia qualcuno mi aiuti a far convivere tutti questi device assieme.

Questi i link dei vari componenti in questione

  1. http://arduino-direct.com/sunshop/index.php?l=product_detail&p=333 ( I know that in this sensor need to remove the pull-up resistor)
  2. DS1307 Real Time Clock breakout board kit : ID 264 : $7.95 : Adafruit Industries, Unique & fun DIY electronics and kits
  3. Adafruit TSL2561 Digital Luminosity/Lux/Light Sensor Breakout : ID 439 : $5.95 : Adafruit Industries, Unique & fun DIY electronics and kits

Grazie a tutti

Credo ti serva un convertitore di livello logico --> http://www.robot-italy.com/product_info.php?products_id=2508
oppure --> http://www.robot-italy.com/product_info.php?cPath=52_71&products_id=2276
Naturalmente li trovi anche in altri negozi online. :smiley:

L'idea di PaoloP è buona, in genere sappi che:
puoi inviare un livello logico 3,3V ad un ingresso 5V direttamente, sarà riconosciuto correttamente
se invii un livello logico 5V ad un ingresso 3,3V devi mettere un partitore di tensione altrimenti fai danno
esistono degli integrati, logiche TTL/CMOS, che effettuano facilmente questa traslazione di livelli. Un ottimo esempio lo trovi sullo schema del data logger di Adafruit

Tutto chiaro, infatti mi stavo spostando nei convertitori di segnale bidirezionali.
Ma mi viene spontanea una domanda:
Questi convertitori, ho visto che usano già le pull-up, ma le ho anche nei block dove sono i sensori (almeno sono sicuro per il real time clock, che tra l' altro è della adafuit assieme ai sensori di luce) quindi non è che avere più resistori pull-up possa dare disturbi nella comunicazione I2C ?
Vi chiedo questo perchè, dopo alcuni test fatti con LCD e il real time clock (leggo data e ora e la scrivo nel LCD) dopo un po' di tempo quello che esce nel LCD è un po' strano. Diciamo che inizia a uscire ora del tipo 12:00:73 secondi o date un po' strane (45/13/2012) ecc... spegni l' arduino e lo riaccendi e per un 15 min tutto funziona a meraviglia. A parte che devo ancora fare indagini per capire... ma non vorrei che i due device hanno tutti e due le resistenze pull-up e questo "sporchi" la comunicazione.

Grazie a tutti

Ciao,
in questo pdf http://ics.nxp.com/support/documents/interface/pdf/an97055.pdf c'è lo schema per realizzare un convertitore di livello 3 / 5 volt per i2c, è lo stesso schema usato per i convertitori in vendita nei vari siti, a pagina 13 sono elencati i mosfet da utilizzare, non c'è nessuno che ci può indicare degli equivalenti magari Sgs o di altri produttori, di facile reperimento nei negozi?
lo schema e molto semplice per cui di facile realizzazione casereccia.
Grazie.

Alberto

?BSN10 min. 0.4V max. 1.8V 25 Ohm (typ) 15 pF TO-92
BSN20 min. 0.4V max. 1.8V 25 Ohm (typ) 15 pF SOT23
BSS83 min. 0.1V max. 2.0V 70 Ohm (typ) 1.5 pF (typ) SOT143
BSS88 min. 0.4V max. 1.2V 15 Ohm 50 pF (typ) TO-92

Questi sono indicati nell'AN, sono "equivalenti", nel senso che vanno tutti bene, non N-Mosfet, il primo ed il quarto hanno contenitore TO-92 quello plastico piccolo tipo transistor, invece i SOT sono modelli smd.
Sono caratteristiche standard, credo proprio si possano sostituire con qualsiasi modello più noto, senza troppi sbattimenti. Una ricerca MOSFET N su RS e ne escono un'infinità, restringi al case TO-92, cercati i più economici e confrontali con questi dati, se sono similari vai tranquillo. Oppure fatti dire dal tuo negoziante che modelli ha e fai il percorso opposto.
Comunque i classici IRF sono troppo grossi e rappresentano uno spreco inutile, mentre quelli in TO-92 penso si trovino difficilmente in negozi di città.

Benissimo, grazie a tutti... Ultima cosa.. visto che mi sto avvicinando da poco a questa cosa..
I valori delle resistenze, vanno bene le solite per un 5.0v o cambiano nella parte 3.3v ?

Grazie a tutti

superzaffo:
Benissimo, grazie a tutti... Ultima cosa.. visto che mi sto avvicinando da poco a questa cosa..
I valori delle resistenze, vanno bene le solite per un 5.0v o cambiano nella parte 3.3v ?

Grazie a tutti

dovresti chiarire a che servono; se parli di pull-up/down 10k è un valore standard per entrambe, se devi limitare la corrente ovvio che quelle per 3.3V devono essere più piccole di quelle per 5V

si effetivamente mi ero spiegato male.. volevo dire pull-up.
Grazie

ciao io sto usando dei convertitore di livello I2C .
sono semplici da usare , da un lato l'alimentazione a 3.3 V con relativo bus I2C , dall'altra le stesse cose per i 5V .
Ho costruito un hub I2C per interfacciare Arduino Due con diversi dispositivi che funzionano a 5 V , per esempio I/O expander MCP23017 , DS3231 rela time clock , barometro ,accelerometro ect
I traslatori funzionano egregiamente senza perdere un colpo :wink:

Bene saperlo :slight_smile:
Riesci a postare qualche informazione su quello che hai fatto o su quello che usi ?
(schemi, foto, etc.. ) Tanto per dare una mano anche a tutti quelli che leggeranno il post

Grazie

:wink: