Bagaimana cara menghubungkan beberapa perangkat antarmuka i2c ke dalam pin tunggal A4 (SDA) dan A5 (SCL) di Arduino?


32

Saya ingin menambahkan modul jam waktu nyata ke dalam proyek kecil saya. Saya ingin menampilkan waktu dan tanggal pada modul LCD i2c 2x16 yang ada.

Kedua modul jam waktu nyata i2c-antarmuka dan modul LCD 2x16 menggunakan pin A4 (SDA) dan A5 (SCL) yang sama pada Arduino Uno. Setelah berjam-jam mencari di internet, bus i2c sebenarnya dapat mengambil banyak perangkat serial. Ini dimungkinkan karena setiap perangkat memiliki alamat uniknya sendiri.

Pertanyaan saya adalah bagaimana cara menghubungkan kedua perangkat i2c-interface secara fisik menjadi satu A4 dan A5? Terima kasih.


3
Jawaban singkat: Hubungkan mereka secara paralel. Ikat SDA bersama-sama dan sambungkan ke A4, dan SCLs ke A5. Maka tentu saja ada masalah pull-up yang terkadang membantu.
SDsolar

Jawaban:


32

Beberapa orang mengalami kesulitan memvisualisasikan hal-hal yang terhubung bersama, jadi inilah gambarannya:

(Saran Penyajian)

skema

mensimulasikan rangkaian ini - Skema yang dibuat menggunakan CircuitLab I2C adalah bus, sehingga sinyal yang dinamai saling terhubung. Skema pengalamatan memungkinkan mikrokontroler untuk memilih perangkat mana yang ia ajak bicara. Pada Arduino, resistor pull-up 10k kebagian "VDD", yang merupakan pin 5V atau 3.3V.


Hai, ini mungkin sangat mendasar tetapi saya baru mengenal barang elektronik dan mendapatkan halaman ini dari pencarian google, apa yang dimaksud dengan UC?
Ciasto piekarz

Saya percaya rujukannya adalah untuk UC apapun, karena skema koneksi harus sama, kecuali disebutkan sebaliknya.
KingsInnerSoul

UC bisa menjadi Arduino. SDA adalah pin A4 dan SCL adalah pin A5.
SDsolar

9
@Ciastopiekarz, μC adalah kependekan dari "mikrokontroler." Huruf Yunani μ adalah singkatan untuk mikro. Karena μ terlihat seperti kamu, banyak orang hanya menulis "uC".
foobarbecue

9

Untuk I2C, jika semua perangkat slave memiliki alamat perangkat yang berbeda, semua pin SDA harus dihubungkan bersama, dan semua pin SCL harus terhubung bersama. Sesederhana itu.

Tentu, Anda juga harus menyertakan resistor pull-up di kedua garis, seperti yang diperlukan untuk I2C. Cara memilih nilai-nilai resistor telah dibahas di sini sebelumnya .


Saya telah menemukan bahwa selama salah satu perangkat adalah DS3231 RTC maka tidak diperlukan pullup eksternal.
SDsolar

3
@ SDsolar, itu mungkin berarti DS3231 memiliki pull-up internal, jadi dengan menggunakan perangkat itu, Anda menyediakan pull-up untuk bus. Itu tidak selalu merupakan hal yang baik, karena membatasi kebebasan Anda untuk mengatur resistensi pull up tergantung pada jumlah perangkat di bus.
The Photon

Pikiranku persis. Menambahkan pullup eksternal akan sejajar dengan apa pun yang ada di DS3231, dan mungkin berakhir tidak cukup bagi I2C untuk bahagia.
SDsolar

@ SDsolar, Apa hubungannya dengan pertanyaan OP atau jawaban saya? Ini bukan situs diskusi umum. Jika Anda hanya ingin membicarakan hal-hal, Anda dapat bergabung dengan ruang obrolan kami .
The Photon

3

Hubungkan dua pin A4-sda ke A5-scl (pada kedua papan uno-uno) dan hubungkan resistor dari 5v dari masing-masing jalur sda-scl yang sesuai.

masukkan deskripsi gambar di sini


ditolak karena jawabannya tidak menjawab pertanyaan awal, yaitu "secara fisik menyambungkan dua perangkat antarmuka i2c menjadi satu A4 dan A5".
Oleg Mazurov

Saya tidak bisa menghapus, jadi saya edit ke (mungkin) jawaban yang lebih memuaskan
daedalucian

Membagi tegangan tidak diperlukan, kan?
clankill3r

0

I2C adalah protokol transfer data yang dikembangkan oleh Philips. Juga dikenal sebagai antarmuka dua kawat karena menggunakan dua kabel untuk komunikasi. SCL-Jalur Jam Serial. SDL-Serial Data Line. Jadi Anda perlu menghubungkan pin yang sesuai dari perangkat i2c baik itu eeprom atau lcd ke SCL dan pin SDL dari pengontrol mikro yang Anda gunakan dengan resistor pullup ke VDD. Karena ini adalah protokol alamat yang memiliki alamat 7-bit untuk setiap perangkat yang terhubung, Anda dapat menangani hingga 2 ^ 7 perangkat yang berbeda. Tapi biasanya alamat I2C dari perangkat slave sudah ditentukan sebelumnya dengan beberapa bit untuk di-bawaan oleh pengembang. Ini membantu menghubungkan jenis perangkat yang sama dengan bagian alamat bawaan yang berbeda pada bus yang sama.


1
Semua benar, tetapi menyebalkan jika Anda menginginkan lebih dari satu, seperti unit intensitas cahaya BH1750. Saya ingin 4 dari mereka dan tidak ingin berurusan dengan I2C dual-bus switching .. Juga, beberapa perangkat seperti DS3231 memiliki pullup internal sehingga setiap pullup eksternal sejajar dengan mereka.
SDsolar

0

Anda juga harus memeriksa resistor pull up. Jika Anda menggunakan papan yang sudah dibuat, tidak hanya chip, papan itu biasanya memiliki menarik resistor di papan antara buss dan vcc. Jadi ketika Anda menghubungkan segala sesuatu secara paralel, resistor juga paralel, sehingga nilai total resistor turun dan komunikasi Anda mungkin gagal.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.