Daftar Isi:
2025 Pengarang: John Day | [email protected]. Terakhir diubah: 2025-01-13 06:57
Posting ini bertujuan untuk menjelaskan cara yang lebih mudah untuk menggunakan Arduino Due (atau papan 3.3V lainnya) dengan Layar LCD 16x2 yang populer dengan modul adaptor I2C.
Masalah awalnya adalah LCD membutuhkan 5V agar lampu latarnya berfungsi dengan baik, tetapi pin SCL dan SDA harus beroperasi pada 3.3V untuk berkomunikasi dengan Arduino Due tanpa menyebabkan kerusakan. Untuk mengatasi ini, saya telah menemukan dua opsi:
Solusi yang paling banyak disebutkan adalah dengan menggunakan Bi-Directional Logic Level Converter, yang memang memecahkan masalah. Tapi itu juga menambahkan komponen lain ke daftar Anda dan koneksi kabel tambahan di sirkuit Anda
Cara lain yang saya temukan adalah dengan melepas 2 resistor pullup di "ransel adaptor I2C" dari LCD. Selain jauh lebih mudah, ia memiliki kelebihan lain yang dijelaskan dalam perbandingan di bagian akhir. Metode ini adalah fokus utama dari posting ini
Perlengkapan
Arduino Due
Layar LCD 16x2 dengan modul adaptor I2C
Besi solder
Pompa solder atau sumbu solder
Pinset
Langkah 1: Asal Solusi
Solusinya tidak saya temukan, saya melihat saran dan penjelasan yang cukup bagus di Forum Arduino di tautan di bawah ini, yang akan saya reproduksi di posting ini.
forum.arduino.cc/index.php?topic=553725.0
Jawaban dari: david_prentice
Saya tidak dapat menemukan tutorial lengkap di internet dan, karena ini adalah masalah yang sangat umum, saya mencoba menyajikan solusinya di sini secara rinci, menyaksikannya benar-benar berfungsi, dan menambahkan info yang mungkin mengurangi beberapa skeptisisme tentang hasilnya.
Langkah 2: Penjelasan
Perangkat
Agar komunikasi I2C berfungsi, diperlukan resistor pullup yang terhubung ke pin SDA dan SCL. Itu karena perangkat hanya mengubah pin ini menjadi RENDAH saat berkomunikasi. Untuk mewakili TINGGI, itu hanya harus tidak mengirim RENDAH, dan berkat pull-up itu menjadi TINGGI. (pemahaman ini akan sangat penting nanti)
"Ransel I2C" LCD memiliki dua resistor pull-up 4K7 yang memenuhi persyaratan I2C. Tetapi karena terhubung ke Vcc, jika Anda menggunakan 5 V, mereka akan menarik SDA dan SCL ke 5 V.
Jika Anda melihat lembar data, Anda dapat melihat bahwa, tidak seperti papan lainnya, Due sudah memiliki resistor pull-up 1K5 onboard pada pin SDA, SCL utamanya, yang menariknya ke 3,3 V.
Tes
- Tampilan LCD -> Arduino
- Gnd -> Gnd
- Vcc -> 5V
- SDA -> SDA
- SCL -> SCL
Jika Anda hanya menghubungkan LCD pada Due (mengikuti pengkabelan di atas), pullup Due 1k5 (atau 1k0) yang terhubung ke 3.3V dan pullup LCD 4K7 yang terhubung ke 5 V akan menghasilkan jalur I2C idle pada 3,7 V (3,6 V dengan 1k0). Itu tidak baik, karena datasheet Due menetapkan tegangan maksimum 3,6 V untuk saluran I/O-nya.
Dengan menguji skenario ini, hanya dengan LCD, saya mendapat 3, 56 V. Dengan menambahkan Modul EEPROM ke SDA dan SCL yang sama, naik menjadi 3,606 V. Dalam kedua kasus semuanya bekerja normal, tetapi itu jauh dari tegangan ideal tingkat mempertimbangkan 3,6 V maksimum yang ditetapkan.
Jadi ya, ada kemungkinan itu akan berfungsi seperti yang saya lakukan tanpa melakukan perubahan apa pun. Tetapi level tegangan masih jauh dari ideal dan beberapa perbedaan pada pullup Due atau LCD dapat menyebabkannya melampaui batas 3,6 V. (Akan disarankan untuk setidaknya menguji sebelumnya dengan hati-hati dengan potensiometer 20K atau 100K berapa resistansi terendah antara pin 5 V dan SCL/SDA sebelum mencapai 3,6 V, meskipun solusi lainnya jauh lebih aman dan mungkin lebih mudah)
Larutan
Solusi yang disajikan adalah cukup dengan melepas resistor pull-up dari ransel LCD, yang mencoba menarik saluran hingga 5 V. Kemudian, hanya resistor pull-up Due onboard yang tersisa, menarik jalur SCL dan SDA ke 3.3V. Ini bekerja dengan sempurna, mempertahankan pin idle di sekitar 3,262 V!
Koneksi tetap sama:
- Layar LCD -> Arduino
- Gnd -> Gnd
- Vcc -> 5V
- SDA -> SDA
- SCL -> SCL
Jika Anda bertanya-tanya apakah LCD tidak akan menarik garis ke 5 V untuk mewakili TINGGI saat berkomunikasi, ingatlah bahwa pada I2C perangkat hanya menarik garis RENDAH, menjadi sinyal TINGGI diwakili saat tidak mengganggu, yang akan menjadi 3,3 V dari pull-up bawaan Due.
Juga, 3,3 V cukup untuk ransel I2C untuk dianggap sebagai sinyal TINGGI.
Langkah 3: Identifikasi dan Lepaskan Resistor
Gambar di atas menunjukkan dengan warna merah resistor pullup yang saya temukan di modul saya.
Mengenali
Karena ransel adaptor LCD I2C mungkin berbeda, resistor mungkin tidak dalam konfigurasi yang sama. Untuk mengidentifikasi resistor pullup, Anda dapat menggunakan multimeter dengan uji kontinuitas. Setiap resistor pull-up harus memiliki satu ujung yang terhubung ke pin SCL atau SDA dan ujung lainnya ke Vcc.
Dalam kasus saya, ada tiga resistor 4K7 (472 dalam kode SMD) di papan tulis. Hanya dua dari mereka yang memenuhi persyaratan di atas, menunjukkan bahwa ini adalah pull-up yang kami cari!
Untuk tindakan pencegahan ekstra (jika karena alasan tertentu bukan 4K7), saya juga menguji resistor lain dan memastikan tidak ada yang memenuhi persyaratan untuk menjadi pull-up.
Menghapus
Sekarang, yang harus Anda lakukan adalah mematri mereka! Lebih mudah jika Anda memiliki pompa solder atau sumbu solder dan pinset untuk membantu.
Langkah 4: Perbandingan Antara Solusi
Konverter Tingkat Logika Dua Arah (LLC)
Kelebihan:
Tidak memerlukan peralatan atau kemampuan menyolder
Kontra:
Iklankan lebih banyak kabel dan LLC ke daftar komponen daftar Anda
Koneksi Messier dengan komponen tambahan
Sedikit lebih mahal
Desolder Resistor pull-up LCD
Kelebihan:
Hasil akhir lebih bersih
Anda mungkin dapat melakukannya segera, tidak harus menunggu LLC
Sangat bagus jika Anda ingin mengurangi variasi komponen dan kompleksitas perakitan dalam proyek yang kompleks atau yang ingin Anda tiru
Kontra:
Mengubah sirkuit LCD (Jika Anda ingin "siap digunakan" dengan Uno, sudah memiliki pull-up 4K7, Anda dapat membatalkan perubahan dengan menyoldernya kembali)
Langkah 5: Pertimbangan Terakhir
Saya harap tutorial ini menjelaskan masalah kompatibilitas ini dan beberapa kemungkinan solusinya.
Jika Anda memiliki ide perbaikan, penjelasan yang lebih baik, solusi baru, atau menemukan kesalahan dalam posting, beri tahu saya di komentar!:)