Pergeseran level I2C

11

Saat ini saya sedang merancang sirkuit yang dapat merekam data dari sensor dan menyimpan data yang direkam ke dalam EEPROM. Dua perangkat saya (EEPROM dan untuk tujuan pengujian RTC) terhubung melalui bus I2C ke PIC16F887 μC. Namun, rentang pengoperasian tegangan kedua perangkat tidak sama (5v untuk EEPROM, 3,3 untuk RTC), dan baterai saya adalah baterai 9V.

Oleh karena itu saya merancang sirkuit elektronik dengan level shifter yang terdiri dari MOSFET untuk kabel SDA / SDL. Selain itu saya menambahkan dua regulator tegangan LM317 untuk memberi daya pada perangkat (9V-> 3.3V dan 9V-> 5V). Karena saya bukan ahli dalam mendesain hal-hal seperti itu, saya akan sangat menghargai jika Anda dapat melihat apa yang saya buat dan memberi tahu saya jika saya melakukan sesuatu yang sangat salah!

masukkan deskripsi gambar di sini

Al_th
sumber
Hanya untuk referensi: electronics.stackexchange.com/q/708/4950
PetPaulsen

Jawaban:

3

Terlepas dari komentar lain, solusinya sendiri baik-baik saja Saya melihat beberapa masalah kecil.

  1. Resistor pull-up 10k pada bus hampir tidak cukup kaku, terutama jika Anda ingin menggunakan kecepatan bus yang lebih tinggi.

  2. Anda membutuhkan kapasitor decoupling input dan output pada regulator linier dan IC digital Anda. 100nF adalah awal yang baik untuk IC digital, dan untuk regulator linier, 100nF pada input dan 1μF pada output.

Adam Lawrence
sumber
Terima kasih atas tip kapasitor decoupling, sebenarnya ini ditunjukkan pada kebanyakan skema linear regulator tapi saya benar-benar melewatkan bagian ini! Untuk kapasitor decoupling untuk IC digital, maksud Anda satu kapasitor antara tegangan input dan arde, tidak apa-apa? (Hanya untuk memastikan saya mengerti apa yang Anda maksudkan!) Hal terakhir, Anda mengatakan bahwa resistor pull-up 10k jauh dari cukup kaku, tetapi pada lembar data mereka merekomendasikan nilai-nilai ini untuk kecepatan bus 400kHz. Apakah ada masalah dengan level shifter? Ngomong-ngomong, nasihat itu luar biasa!
Al_th
1
Benar - jaga kapasitor decoupling sedekat mungkin dengan daya dan kembalikan pin. Jika ada kapasitansi yang signifikan pada jalur I2C, Anda harus menurunkan pullup tersebut untuk menjaga ujungnya tetap tajam. Saya biasanya mulai dengan 1.8k dan mengevaluasi dari sana.
Adam Lawrence
Oke, terima kasih untuk semuanya, saya harap ini akan membantu orang-orang bermain-main dengan perangkat I2C yang berbeda!
Al_th
-4

Ya, Anda telah melakukan hal-hal pada skema Anda yang sangat salah. Untuk menggeser level tegangan Anda dengan benar, lihat alamat budak I2C yang tidak diakui (terkadang) IC MAX3373E digunakan untuk pemindahan level. Harap dicatat bahwa, pull up resistor ditunjukkan pada garis SDA & SCK. Namun, ketika menggunakan MAX3373E, resistor pull up tidak diperlukan karena MAX3373E telah membangun pull-up di kedua sisi garis I / O. Ada IC lain yang tersedia untuk pengalihan level juga. Anda dapat pergi ke Digi Key atau Mouser dan mencari.

Suirnder
sumber
5
Pendekatan OP baik-baik saja! NXP bahkan memiliki catatan aplikasi tentang topik tersebut. Jangan terlalu cepat menghakimi.
Adam Lawrence
Saya melihat kesalahan saya. Simbol untuk FET tidak ditampilkan dengan benar, dioda hilang.
Suirnder
1
@Suirnder Ada risiko yang melekat karena terlalu kuat dengan pengetahuan yang terbatas. Saya yakin bukan pos pertama seperti itu.
Anindo Ghosh
1
@ Astaga, saya sedang belajar pelajaran saya. Saya harus memeriksa datasheet pada FETs terlebih dahulu.
Suirnder