İçindekiler:

Arduino Due 3.3V I2C ile 5V LCD Ekran: 5 Adım
Arduino Due 3.3V I2C ile 5V LCD Ekran: 5 Adım

Video: Arduino Due 3.3V I2C ile 5V LCD Ekran: 5 Adım

Video: Arduino Due 3.3V I2C ile 5V LCD Ekran: 5 Adım
Video: Using a 5 Volt LCD1602 Display with 3.3 Volt Microcontrollers #Shorts 2024, Temmuz
Anonim
Arduino Due 3.3V I2C ile 5V LCD Ekran
Arduino Due 3.3V I2C ile 5V LCD Ekran

Bu gönderi, I2C adaptör modülü ile popüler LCD 16x2 Ekran ile Arduino Due (veya diğer 3.3V kartı) kullanmanın daha kolay bir yolunu açıklamayı amaçlamaktadır.

İlk problem, LCD'nin arka ışığının düzgün çalışması için 5V'a ihtiyaç duymasıdır, ancak Arduino Due ile zarar vermeden iletişim kurmak için SCL ve SDA pinlerinin 3.3V'da çalışması gerekir. Bunu çözmek için iki seçenek buldum:

En çok bahsedilen çözüm, sorunu gerçekten çözen bir Çift Yönlü Mantık Seviyesi Dönüştürücü kullanmaktır. Ancak listenize başka bir bileşen ve devrenizdeki ek kablo bağlantılarını da ekler

Bulduğum diğer yol, LCD'den "I2C adaptör sırt çantasındaki" 2 çekme direncini basitçe sökmek. Çok daha kolay olmasının yanı sıra, sondaki karşılaştırmada açıklanan başka avantajları da var. Bu yöntem, bu yazının ana odak noktasıdır

Gereçler

Arduino Ödenmesi

I2C adaptör modülü ile LCD 16x2 Ekran

Havya

Lehim pompası veya lehim fitili

Cımbız

Adım 1: Çözümün Kökeni

Çözüm benim tarafımdan icat edilmedi, aşağıdaki linkte Arduino Forum hakkında oldukça güzel bir öneri ve açıklama gördüm, bu yazıda çoğaltacağım.

forum.arduino.cc/index.php?topic=553725.0

Cevap: david_prentic

İnternette tam bir öğretici bulamadım ve bu çok yaygın bir sorun olduğu için çözümü burada ayrıntılı olarak sunmaya, gerçekten işe yaradığına tanık olmaya ve sonuçları hakkında bazı şüpheleri azaltabilecek bilgiler eklemeye çalışıyorum.

2. Adım: Açıklama

Cihazlar

I2C iletişiminin çalışması için SDA ve SCL pinlerine bağlı pullup dirençleri gerekir. Bunun nedeni, cihazların iletişim sırasında sadece bu pinleri LOW (DÜŞÜK) konuma getirmesidir. YÜKSEK'i temsil etmek için, yalnızca DÜŞÜK göndermemesi gerekir ve çekmeler sayesinde YÜKSEK'e gider. (bu anlayış daha sonra oldukça önemli olacaktır)

LCD "I2C sırt çantası", I2C gereksinimini karşılayan iki adet 4K7 çekme direncine sahiptir. Fakat Vcc'ye bağlı oldukları için 5 V kullanırsanız SDA ve SCL'yi 5 V'a çekerler.

Veri sayfasına bakarsanız, diğer kartların aksine, Due'nin ana SDA'sı, SCL pinleri üzerinde onları 3,3 V'a çeken yerleşik 1K5 çekme dirençlerine sahip olduğunu görebilirsiniz.

testler

  • Ekran LCD -> Arduino
  • Gnd -> Gnd
  • Vcc -> 5V
  • SDA -> SDA
  • SCL -> SCL

LCD'yi Due'a bağlarsanız (yukarıdaki kablolamayı izleyerek), 3,3V'ye bağlı 1k5 (veya 1k0) Due çekmeleri ve 5 V'a bağlı 4K7 LCD çekmeleri 3,7 V'ta (3,6 V) boşta I2C hatlarına neden olur 1k0) ile). Bu iyi değil, çünkü Due veri sayfası G/Ç hatları için maksimum 3,6 V voltajı şart koşuyor.

Bu senaryoyu sadece LCD ile test ederek 3,56 V elde ettim. Aynı SDA ve SCL'ye bir EEPROM Modülü ekleyerek 3.606 V'a çıktı. Her iki durumda da her şey normal çalıştı ama bunlar ideal voltajdan uzak. 3,6 V öngörülen maksimumu dikkate alan seviyeler.

Yani evet, herhangi bir değişiklik yapmadan benimki gibi çalışma şansı var. Ancak voltaj seviyesi hala ideal olmaktan uzaktır ve Due veya LCD pullup'taki bazı tutarsızlıklar, 3,6 V sınırının üzerine çıkmasına neden olabilir. (Çözümün geri kalanı çok daha güvenli ve muhtemelen daha kolay olsa da, 5 V ve SCL/SDA pinleri arasındaki en düşük direncin 3,6 V'a ulaşmadan önce en azından 20K veya 100K potansiyometre ile dikkatlice test edilmesi tavsiye edilir)

Çözüm

Sunulan çözüm, hattı 5 V'a kadar çekmeye çalışan LCD sırt çantasından çekme dirençlerini basitçe çıkarmaktır. Ardından, SCL ve SDA hatlarını 3,3 V'a çekerek yalnızca Due onboard çekme dirençleri kalacaktır.. Boşta kalan pimleri yaklaşık 3.262 V'de tutarak mükemmel çalıştı!

Bağlantılar aynı kalır:

  • LCD Ekran -> Arduino
  • Gnd -> Gnd
  • Vcc -> 5V
  • SDA -> SDA
  • SCL -> SCL

LCD'nin iletişim sırasında YÜKSEK'i temsil etmek için hattı 5 V'a çekip çekmediğini merak ediyorsanız, I2C'de cihazların yalnızca DÜŞÜK çizgileri çektiğini unutmayın; bu, karışmadığında temsil edilen YÜKSEK sinyaldir; bu, 3.3 V olacaktır. Due'nin yerleşik pull-up'ları.

Ayrıca 3,3 V, I2C sırt çantasının YÜKSEK sinyal olarak kabul etmesi için yeterlidir.

Adım 3: Dirençleri Tanımlayın ve Çıkarın

Dirençleri Tanımlayın ve Çıkarın
Dirençleri Tanımlayın ve Çıkarın
Dirençleri Tanımlayın ve Çıkarın
Dirençleri Tanımlayın ve Çıkarın

Yukarıdaki resim, modülümde bulduğum çekme dirençlerini kırmızı olarak gösteriyor.

Tanımlamak

LCD I2C adaptör sırt çantası değişebileceğinden dirençler aynı konfigürasyonda olmayabilir. Çekme dirençlerini tanımlamak için süreklilik testi olan bir multimetre kullanabilirsiniz. Her pull-up direncinin bir ucu SCL veya SDA pinine ve diğer ucu Vcc'ye bağlı olmalıdır.

Benim durumumda, kartta 4K7 (SMD kodunda 472) dirençlerinden üçü vardı. Yalnızca ikisi yukarıdaki gereksinimleri karşıladı ve bunların aradığımız pullup'lar olduğuna dikkat çekti!

Ekstra önlem olarak (eğer herhangi bir nedenle 4K7 değillerse), diğer dirençleri de test ettim ve hiçbirinin pull-up olma gereksinimlerini karşılamadığını doğruladım.

Kaldırmak

Şimdi tek yapman gereken onları sökmek! Lehimleme pompanız veya lehim fitiliniz ve yardımcı olacak cımbızınız varsa daha kolaydır.

Adım 4: Çözümler Arası Karşılaştırma

Çift Yönlü Mantık Seviyesi Dönüştürücüsü (LLC)

Artıları:

Herhangi bir lehimleme ekipmanı veya yeteneği gerektirmez

Eksileri:

Liste bileşenleri listenize daha fazla kablo ve LLC reklamı yapar

Ekstra bileşenlerle daha karmaşık bağlantılar

biraz daha pahalı

LCD pull-up Dirençlerini sökün

Artıları:

Daha temiz nihai sonuç

LLC'yi beklemek zorunda kalmadan muhtemelen hemen yapabilirsiniz

Karmaşık bir projede bileşen çeşitliliğini ve montaj karmaşıklığını azaltmak veya çoğaltmak istiyorsanız özellikle iyi

Eksileri:

LCD devresini değiştirir (Halihazırda 4K7 pullup'larına sahip olan Uno ile "kullanıma hazır" olmasını istiyorsanız, bunları yeniden lehimleyerek değişiklikleri geri alabilirsiniz)

Adım 5: Son Hususlar

Umarım bu eğitim, bu uyumluluk sorununa ve olası çözümlerinden bazılarına ışık tutar.

Herhangi bir iyileştirme fikriniz, daha iyi açıklamalarınız, yeni çözümleriniz varsa veya gönderide herhangi bir hata bulduysanız, lütfen yorumlarda bana bildirin!:)

Önerilen: