Spostamento di livello I2C


11

Attualmente sto progettando un circuito in grado di registrare i dati da un sensore e salvare i dati registrati in una EEPROM. I miei due dispositivi (EEPROM e a scopo di test un RTC) sono collegati tramite un bus I2C a un PIC16F887 µC. Tuttavia, l'intervallo operativo della tensione dei due dispositivi non è lo stesso (5 v per EEPROM, 3,3 per RTC) e la mia batteria è una batteria da 9 V.

Pertanto ho progettato un circuito elettronico con un variatore di livello composto da MOSFET per il cablaggio SDA / SDL. Inoltre ho aggiunto due regolatori di tensione LM317 per alimentare i dispositivi (9V-> 3.3V e 9V-> 5V). Dato che non sono un esperto nel progettare cose del genere, apprezzerei se tu potessi dare un'occhiata a ciò che ho fatto e dirmi se ho fatto qualcosa di orribilmente sbagliato!

inserisci qui la descrizione dell'immagine


Risposte:


3

Nonostante altri commenti, la soluzione stessa va bene. Vedo alcuni problemi minori però.

  1. Le resistenze pull-up da 10k sul bus non sono abbastanza rigide, soprattutto se si desidera utilizzare velocità del bus più elevate.

  2. Sono necessari condensatori di disaccoppiamento in ingresso e in uscita sui regolatori lineari e sui circuiti integrati digitali. 100nF è un buon inizio per i circuiti integrati digitali e per i regolatori lineari, 100nF sugli ingressi e 1μF sulle uscite.


Grazie per la punta del condensatore di disaccoppiamento, in realtà è mostrato sulla maggior parte dello schema del regolatore lineare ma ho completamente saltato questa parte! Per il condensatore di disaccoppiamento per i circuiti integrati digitali, intendi un condensatore tra la loro tensione di ingresso e la terra, va bene? (Solo per essere sicuro di aver capito cosa volevi dire!) Ultima cosa, dici che i resistori pull-up 10k sono ben lungi dall'essere abbastanza rigidi, ma sul foglio dati raccomandano questi valori per la velocità del bus 400kHz. C'è un problema con il cambio di livello? Comunque, quel consiglio è stato fantastico!
Al_th

1
Corretto: mantenere i condensatori di disaccoppiamento il più vicino possibile ai pin di alimentazione e di ritorno. Se c'è una significativa capacità sulle linee I2C, dovrai abbassare quei pullup per mantenere i bordi nitidi. Di solito inizio con 1.8k e valuto da lì.
Adam Lawrence,

Ok, grazie di tutto, spero che possa aiutare le persone a giocare con diversi dispositivi I2C!
Al_th

-4

Sì, hai fatto cose sul tuo schema che sono terribilmente sbagliate. Per spostare correttamente i livelli di tensione, consultare l' indirizzo slave I2C non riconosciuto (a volte) L'IC MAX3373E viene utilizzato per lo spostamento di livello. Si noti che le resistenze di pull-up sono visualizzate sulle linee SDA e SCK. Tuttavia, quando si utilizza MAX3373E, non sono necessarie resistenze di pull up poiché MAX3373E ha pull up integrati su entrambi i lati delle linee I / O. Ci sono altri circuiti integrati disponibili anche per il cambio di livello. Puoi andare su Digi Key o Mouser e cercare.


5
L'approccio di OP va bene! NXP ha anche una nota app sull'argomento. Non essere così veloce da giudicare.
Adam Lawrence,

Vedo dove ho sbagliato. Il simbolo per i FET non viene visualizzato correttamente, il diodo è mancante.
Suirnder,

1
@Suirnder Ci sono rischi insiti nel trovarti troppo forte con una conoscenza limitata. Credo che non sia il primo post di questo tipo da te.
Anindo Ghosh,

1
@ Accidenti sto imparando le mie lezioni. Avrei dovuto controllare prima la scheda tecnica sui FET.
Suirnder,
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.