I2C seviye kaydırma


11

Şu anda bir sensörden veri kaydedebilen ve kaydedilen verileri bir EEPROM'a kaydedebilen bir devre tasarlıyorum. İki cihazım (EEPROM ve test amaçlı bir RTC) bir I2C veri yolu üzerinden bir PIC16F887 µC'ye bağlanır. Ancak, iki cihazın voltaj çalışma aralığı aynı değildir (EEPROM için 5v, RTC için 3.3) ve pilim 9V'luk bir pildir.

Bu nedenle, SDA / SDL kabloları için MOSFET'lerden oluşan seviye değiştiricili bir elektronik devre tasarladım. Bunun üzerine cihazlara güç sağlamak için iki LM317 voltaj regülatörü ekledim (9V-> 3.3V ve 9V-> 5V). Bu tür şeyleri tasarlama konusunda uzman olmadığım için, yaptığım şeye bir göz atabilirseniz ve korkunç bir şekilde yanlış bir şey yapıp yapmadığımı söyleyebilir misiniz?

resim açıklamasını buraya girin


Yanıtlar:


3

Diğer yorumlara rağmen, çözümün kendisi iyi. Yine de birkaç küçük sorun görüyorum.

  1. Özellikle daha yüksek veri yolu hızları kullanmak istiyorsanız, veri yolundaki 10k çekme dirençleri neredeyse yeterince sert değildir.

  2. Doğrusal regülatörlerinizde ve dijital IC'lerinizde giriş ve çıkış ayırma kapasitörlerine ihtiyacınız vardır. 100nF, dijital IC'ler ve lineer regülatörler için, girişlerde 100nF ve çıkışlarda 1μF için iyi bir başlangıçtır.


Dekuplaj kondansatör ucu için teşekkürler, aslında çoğu doğrusal regülatör şemasında gösterilir, ancak bu kısmı tamamen atladım! Dijital IC'ler için ayırma kapasitörü için, giriş voltajı ile toprak arasında bir kapasitör kastediyorsunuz, sorun değil mi? (Ne demek istediğinizi anladığımdan emin olmak için!) Son olarak, 10k çekme dirençlerinin yeterince sert olmaktan çok uzak olduğunu söylüyorsunuz, ancak veri sayfasında bu değerleri 400kHz veri yolu hızı için tavsiye ediyorlar. Seviye değiştiriciyle ilgili bir sorun var mı? Neyse, bu tavsiye harikaydı!
Al_th

1
Doğru - ayırma kapasitörlerini güç ve dönüş pimlerine mümkün olduğunca yakın tutun. I2C hatlarında önemli bir kapasitans varsa, kenarları keskin tutmak için bu çekmeleri azaltmanız gerekir. Genellikle 1.8k ile başlıyorum ve oradan değerlendiriyorum.
Adam Lawrence

Tamam, her şey için teşekkürler, umarım farklı I2C cihazlarıyla oynayan insanlara yardımcı olur!
Al_th

-4

Evet, şemanızda korkunç derecede yanlış olan şeyler yaptınız. Voltaj seviyelerinizi düzgün bir şekilde kaydırmak için, bkz. I2C bağımlı adres onaylanmadı (bazen) MAX3373E IC, seviye değiştirme için kullanılır. SDA ve SCK hatlarında çekme dirençlerinin gösterildiğini lütfen unutmayın. Ancak, MAX3373E kullanılırken, MAX3373E I / O hatlarının her iki tarafında da yukarı çekmeler oluşturduğu için çekme dirençlerine gerek yoktur. Seviye kaydırma için başka IC'ler de mevcuttur. Digi Key veya Mouser'a gidip arama yapabilirsiniz.


5
OP'nin yaklaşımı iyi! NXP'nin konuyla ilgili bir uygulama notu bile var . Yargılamak için bu kadar hızlı olma.
Adam Lawrence

Nerede yanlış yaptığımı görüyorum. FET'lerin sembolü doğru şekilde gösterilmiyor, diyot eksik.
Suirnder

1
@Suirnder Sınırlı bilgi birikimi ile çok güçlü karşılaşmanın doğasında var olan riskler var. Bu ilk gönderi değil, inanıyorum.
Anindo Ghosh

1
@ Tanrım derslerimi öğreniyorum. Önce FET'lerin veri sayfasını kontrol etmeliydim.
Suirnder
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.