Przesunięcie poziomu I2C

11

Obecnie projektuję obwód, który może rejestrować dane z czujnika i zapisywać dane zapisane w pamięci EEPROM. Moje dwa urządzenia (EEPROM i do celów testowych RTC) są połączone magistralą I2C z PIC16F887 µC. Jednak zakres działania napięcia dwóch urządzeń nie jest taki sam (5 V dla EEPROM, 3.3 dla RTC), a moja bateria to bateria 9 V.

Dlatego zaprojektowałem obwód elektroniczny z manetką składającą się z tranzystorów MOSFET dla okablowania SDA / SDL. Do tego dodałem dwa regulatory napięcia LM317 do zasilania urządzeń (9 V -> 3,3 V i 9 V -> 5 V). Ponieważ nie jestem ekspertem w projektowaniu takich rzeczy, byłbym wdzięczny, gdybyś mógł rzucić okiem na to, co zrobiłem i powiedzieć, czy zrobiłem coś strasznie złego!

wprowadź opis zdjęcia tutaj

Al_th
źródło
Tylko dla odniesienia: electronics.stackexchange.com/q/708/4950
PetPaulsen

Odpowiedzi:

3

Pomimo innych uwag samo rozwiązanie jest w porządku. Widzę jednak kilka drobnych problemów.

  1. 10-kilogramowe rezystory podciągające w autobusie nie są wystarczająco sztywne, szczególnie jeśli chcesz użyć wyższych prędkości magistrali.

  2. Potrzebujesz wejściowych i wyjściowych kondensatorów odsprzęgających na liniowych regulatorach i cyfrowych układach scalonych. 100nF to dobry początek dla cyfrowych układów scalonych i dla regulatorów liniowych, 100nF na wejściach i 1μF na wyjściach.

Adam Lawrence
źródło
Dzięki za końcówkę kondensatora odsprzęgającego, tak naprawdę jest pokazana na większości schematów regulatora liniowego, ale całkowicie pominąłem tę część! W przypadku kondensatora odsprzęgającego dla cyfrowych układów scalonych masz na myśli jeden kondensator między napięciem wejściowym a masą, w porządku? (Aby się upewnić, że zrozumiałem, co masz na myśli!) Ostatnią rzeczą jest to, że rezystory podciągające 10k są dalekie od wystarczającej sztywności, ale w arkuszu danych zalecają te wartości dla prędkości magistrali 400 kHz. Czy występuje problem ze zmianą poziomu? W każdym razie ta rada była świetna!
Al_th
1
Prawidłowo - trzymaj kondensatory odsprzęgające jak najbliżej styków zasilania i powrotu. Jeśli występuje jakaś znaczna pojemność na liniach I2C, musisz obniżyć te podciągnięcia, aby zachować ostre krawędzie. Zwykle zaczynam od 1,8 km i stamtąd oceniam.
Adam Lawrence,
Ok, dzięki za wszystko, mam nadzieję, że pomoże to ludziom bawić się różnymi urządzeniami I2C!
Al_th
-4

Tak, zrobiłeś na swoim schemacie rzeczy, które są strasznie złe. Aby prawidłowo przesunąć poziom napięcia, zobacz Adres Slave I2C nie potwierdzony (czasami) Do zmiany poziomu służy układ MAX3373E. Należy pamiętać, że rezystory podciągające są pokazane na liniach SDA i SCK. Jednak w przypadku korzystania z MAX3373E rezystory podciągające nie są wymagane, ponieważ MAX3373E ma wbudowane podciągnięcia po obu stronach linii we / wy. Istnieją również inne układy scalone do zmiany poziomu. Możesz przejść do Digi Key lub Mouser i wyszukać.

Suirnder
źródło
5
Podejście OP jest w porządku! NXP ma nawet notatkę dotyczącą aplikacji na ten temat. Nie bądź taki szybki w osądzaniu.
Adam Lawrence,
Widzę, gdzie popełniłem błąd. Symbol FET nie wyświetla się poprawnie, brakuje diody.
Suirnder,
1
@ Suirnder Istnieje ryzyko nieodłącznie związane ze zbyt silną i ograniczoną wiedzą. Uważam, że nie jest to pierwszy taki post.
Anindo Ghosh,
1
@Gosh, uczę się swoich lekcji. Najpierw powinienem był sprawdzić arkusz danych na FET.
Suirnder