I2C LCD Adaptör Modülüne Giriş

Sorunları Ortadan Kaldırmak Için Enstrümanımızı Deneyin





Bu yazıda, Arduino ile LCD ekran arasındaki kablo bağlantılarını sadece 2 kabloya indirecek ve ayrıca tonlarca GPIO pini tasarrufu sağlayacak 'I2C' veya 'IIC' veya 'I square C' tabanlı LCD adaptör modülüne bir göz atacağız. diğer sensörler / sürücüler vb.

I2C LCD adaptör modülü hakkında konuşmadan önce, I2C veriyolunun ne olduğunu ve nasıl çalıştığını anlamak önemlidir.



Ancak yine de, bu söz konusu LCD adaptörüyle çalışmak için I2C protokolü konusunda uzman olmanıza gerek yok.

I2C bağlantısının çizimi:

I2C bağlantısının çizimi:

I2C veya IIC, 'Inter-Integrated Circuit' anlamına gelen, günümüzde NXP yarı iletkenleri olarak bilinen Philips yarı iletkenleri tarafından icat edilen bir seri bilgisayar veri yoludur. Bu otobüs sistemi 1982'de icat edildi.



Otobüs nedir?

Veriyolu, bir çipten diğerine / bir devre kartından başka bir devre kartına veri taşıyan bir kablo / tel grubudur.

I2C veri yolu protokolünün ana avantajı, desteklenen mikro denetleyici veya sensörlerin veya yongaların yalnızca iki kabloyla birbirine bağlanabilmesidir. Bu protokolün akıllara durgunluk veren avantajı, 127 farklı yongayı veya sensörü / sürücüyü, genellikle sadece 2 telli bir mikro denetleyici olan bir ana cihaza bağlayabilmemizdir.

İki I2C kablosu nedir?

İki tel, sırasıyla Seri Veri ve Seri saat olan SDA ve SCL'dir.

Seri saat veya SCL, I2C veriyolu üzerinden veri iletişimini senkronize etmek için kullanılır. SDA veya Seri Veri, asıl verilerin ana bilgisayardan bağımlıya veya tam tersi şekilde aktarıldığı veri hattıdır. Ana cihaz, Seri saati kontrol eder ve hangi bağımlı cihaz için iletişim kurması gerektiğine karar verir. Hiçbir bağımlı cihaz önce bir iletişimi başlatamaz, yalnızca ana cihaz yapabilir.

Seri veri hattı çift yönlü ve sağlamdır, her 8 bitlik veri seti gönderildikten sonra alıcı cihaz bir onay biti gönderir.

I2C protokolü ne kadar hızlı?

1982'de geliştirilen I2C protokolünün orijinal versiyonu 100 Kbps'yi destekliyordu. Sonraki sürüm 1992'de standartlaştırıldı ve 400Kbps (Hızlı mod) ve 1008 cihaza kadar desteklendi. Bir sonraki sürüm 1998'de 3.4 Mbps (Yüksek hız modu) ile geliştirildi.

Diğer I2C versiyonları 2000, 2007, 2012 yıllarında (5Mbps Ultra-Fast modu ile) geliştirildi ve I2C'nin en son versiyonu 2014'te geliştirildi.

Neden I2C veriyolunda kaldırma dirençleri?

SDA ve SCL 'açık tahliye' dir, yani her iki hat da DÜŞÜK gidebilir ancak hatları YÜKSEK süremez, bu nedenle hatların her birine bir çekme direnci bağlanır.

Ancak LCD veya RTC gibi I2C modüllerinin çoğunda yerleşik çekme dirençleri vardır, bu nedenle belirtilmedikçe birini bağlamamıza gerek yoktur.

Çekme / Çekme direnci: Çekme direnci, hat ne yüksek ne de düşükse bir hattın mantık seviyesini YÜKSEK olarak tutmak için kaynağın + Ve hattına bağlanan bir dirençtir.

Aşağı çekme direnci, hat ne yüksek ne de düşükse, bir hattın mantık seviyesini DÜŞÜK olarak tutmak için kaynağın –Ve hattına bağlı bir dirençtir.

Bu aynı zamanda hatlara gürültü girmesini de önler.

I2C protokolünün yüzeyini kazıdığımızı umuyoruz, I2C protokolü hakkında daha fazla bilgiye ihtiyacınız varsa, lütfen sörf yapın

YouTube ve Google.

Şimdi I2C LCD modülüne bir göz atalım:

I2C LCD modülü pin çıkışı

Doğrudan 16 X 2 LCD modülün arkasına lehimlenebilen LCD ekran için 16 çıkış pini vardır.

Giriş pinleri + 5V, GND, SDA ve SCL'dir. Arduino Uno'daki SDA ve SCL pinleri sırasıyla A4 ve A5 pinleridir. Arduino için mega SDA pin # 20 ve SCL pin # 21'dir.

LCD'yi Arduino'ya I2C adaptörü olmadan ve adaptörle bağladığımızda nasıl göründüğünü karşılaştıralım.

I2C Adaptörü olmadan:

I2C Adaptörsüz Arduino

I2C adaptörüyle:

I2C Adaptör kullanarak Arduino

Adaptör, LCD ekranın arkasına lehimlenmiştir ve diğer görevler için bir sürü GPIO pini kaydettiğimizi ve ayrıca A4 ve A5 pinlerine 126 tane daha I2C cihazı eklemeye devam edebileceğimizi görebildiğimiz gibi.

Lütfen standart Liquid Crystal kitaplığının bu I2C LCD adaptörüyle çalışmayacağını unutmayın, bunun için özel bir kitaplık var, yakında ele alınacak ve bu modülün nasıl kullanılacağını kodlama örneği ile göstereceğiz.

I2C Adaptörünü 16 x 2 Ekrana Bağlama

Makalenin yukarıdaki bölümlerinde I2C protokolünün temellerini öğrendik ve I2C LCD adaptör modülüne temel bir genel bakış yaptık. Bu yazımızda I2C LCD adaptör modülünü 16 x 2 LCD ekrana nasıl bağlayacağımızı öğreneceğiz ve nasıl programlandığını bir örnekle göreceğiz.

I2C protokolünün en büyük avantajı, desteklenen sensörleri / giriş / çıkış cihazlarını sadece iki hatta bağlayabilmemiz ve sınırlı GPIO pinlerine sahip olduğu için Arduino'ya yardımcı olmasıdır.

Şimdi modülü LCD'ye nasıl bağlayacağımızı görelim.

Modülün 16 çıkış pini ve 4 giriş pini vardır. Adaptörü 16 x 2 LCD ekranın arkasına lehimleyebiliriz. 4 giriş pininden ikisi + 5V ve GND, geri kalanı SDA ve SCL'dir.

Arduino'da diğer giriş / çıkış görevleri için çok sayıda pin kaydettiğimizi görebiliriz.

Potansiyometreyi küçük tornavidayla (kırmızı kutuda vurgulanır) ayarlayarak ekranın kontrastını ayarlayabiliriz.

Arka aydınlatma artık program kodunun kendisinde kontrol edilebilir:

lcd.backlight ()

Bu, LCD ekrandaki arka ışığı AÇACAKTIR.

lcd.noBacklight ()

Bu, LCD ekrandaki arka ışığı KAPATACAKTIR.

Bağlanan bir jumper olduğunu görebiliriz ve bu kırmızı kutu ile vurgulanır, eğer jumper çıkarılırsa arka ışık program komutundan bağımsız olarak KAPALI kalır.

Şimdi donanım kurulumu tamamlandı, şimdi nasıl kodlayacağımızı görelim. Lütfen I2C LCD modülünün özel

kitaplık ve önceden yüklenmiş 'sıvı kristal' kitaplığı çalışmayacaktır.

I2C LCD kütüphanesini buradan indirebilir ve Arduino IDE'ye ekleyebilirsiniz:

github.com/marcoschwartz/LiquidCrystal_I2C

Önceki gönderiden, I2C cihazlarının ana veya mikro denetleyicinin cihazı tanımlayabileceği ve iletişim kurabileceği bir adrese sahip olduğunu öğrendik.

Çoğu durumda, I2C LCD modülü için adres '0x27' olacaktır. Ancak farklı imalatların farklı adresleri olabilir. Programa doğru adresi girmemiz gerekir ancak bu durumda LCD ekranınız çalışacaktır.

Adresi bulmak için 5V'yi Vcc'ye ve GND'yi Arduino'nun GND'sine ve I2C modülünün SCL pinini A5'e ve SDA'yı A4'e bağlayın ve aşağıdaki kodu yükleyin.

Bu, bağlı I2C cihazlarını tarayacak ve adreslerini gösterecektir.

// -------------------------------- //
#include
void setup()
{
Wire.begin()
Serial.begin(9600)
while (!Serial)
Serial.println('-----------------------')
Serial.println('I2C Device Scanner')
Serial.println('-----------------------')
}
void loop()
{
byte error
byte address
int Devices
Serial.println('Scanning...')
Devices = 0
for (address = 1 address <127 address++ )
{
Wire.beginTransmission(address)
error = Wire.endTransmission()
if (error == 0)
{
Serial.print('I2C device found at address 0x')
if (address <16)
{
Serial.print('0')
}
Serial.print(address, HEX)
Serial.println(' !')
Devices++
}
else if (error == 4)
{
Serial.print('Unknown error at address 0x')
if (address <16)
Serial.print('0')
Serial.println(address, HEX)
}
}
if (Devices == 0)
{
Serial.println('No I2C devices found ')
}
else
{
Serial.println('-------------- done -------------')
Serial.println('')
}
delay(5000)
}
// -------------------------------- //

Kodu yükleyin ve seri monitörü açın.

Gördüğümüz gibi iki cihaz algılandı ve adresleri görüntülendi, ancak yalnızca I2C LCD modülünün adresini bulmak istiyorsanız, tarama sırasında başka herhangi bir I2C cihazı bağlamamalısınız.
Sonuç olarak '0x27' adresini aldık.

Şimdi örnek olarak bir dijital saat yapacağız çünkü iki I2C cihazı var, LCD modülü ve RTC veya gerçek zamanlı saat modülü. Her iki modül iki kabloyla bağlanacaktır.

Aşağıdaki kitaplığı indirin:
RTC kitaplığı: github.com/PaulStoffregen/DS1307RTC
TimeLib.h: github.com/PaulStoffregen/Time

RTC'ye saat nasıl ayarlanır

• Arduino IDE'yi açın ve Dosya> Örnek> DS1307RTC> zamanı ayarla'ya gidin.
• Kodu tamamlanmış donanımla yükleyin ve seri monitörü açın ve bitirdiniz.

Devre şeması:

Program:

//------------Program Developed by R.Girish-------//
#include
#include
#include
#include
LiquidCrystal_I2C lcd(0x27, 16, 2)
void setup()
{
lcd.init()
lcd.backlight()
}
void loop()
{
tmElements_t tm
lcd.clear()
if (RTC.read(tm))
{
if (tm.Hour >= 12)
{
lcd.setCursor(14, 0)
lcd.print('PM')
}
if (tm.Hour <12)
{
lcd.setCursor(14, 0)
lcd.print('AM')
}
lcd.setCursor(0, 0)
lcd.print('TIME:')
if (tm.Hour > 12)
{
if (tm.Hour == 13) lcd.print('01')
if (tm.Hour == 14) lcd.print('02')
if (tm.Hour == 15) lcd.print('03')
if (tm.Hour == 16) lcd.print('04')
if (tm.Hour == 17) lcd.print('05')
if (tm.Hour == 18) lcd.print('06')
if (tm.Hour == 19) lcd.print('07')
if (tm.Hour == 20) lcd.print('08')
if (tm.Hour == 21) lcd.print('09')
if (tm.Hour == 22) lcd.print('10')
if (tm.Hour == 23) lcd.print('11')
}
else
{
lcd.print(tm.Hour)
}
lcd.print(':')
lcd.print(tm.Minute)
lcd.print(':')
lcd.print(tm.Second)
lcd.setCursor(0, 1)
lcd.print('DATE:')
lcd.print(tm.Day)
lcd.print('/')
lcd.print(tm.Month)
lcd.print('/')
lcd.print(tmYearToCalendar(tm.Year))
} else {
if (RTC.chipPresent())
{
lcd.setCursor(0, 0)
lcd.print('RTC stopped!!!')
lcd.setCursor(0, 1)
lcd.print('Run SetTime code')
} else {
lcd.clear()
lcd.setCursor(0, 0)
lcd.print('Read error!')
lcd.setCursor(0, 1)
lcd.print('Check circuitry!')
}
}
delay(1000)
}
//------------Program Developed by R.Girish-------//

Not:

LiquidCrystal_I2C lcd (0x27, 16, 2)

'0x27', tarayarak bulduğumuz adrestir ve 16 ve 2, LCD ekrandaki satır ve sütunların sayısıdır.

RTC için adresi bulmamıza gerek yok, ancak '0x68' i tararken bulduk, ancak yine de RTC kitaplığı bunu halledecektir.

Şimdi kablo tıkanıklığını ne kadar azalttığımızı ve Arduino'da GPIO pinlerini ne kadar kurtardığımızı görelim.

Kırmızı kutu ile vurgulanan LCD ekrana yalnızca 4 kablo bağlanır.

Ayrıca Arduino'dan sadece 4 kablo bağlanır ve RTC modülü aynı hatları paylaşır.

Şimdiye kadar I2C ve I2C LCD adaptör modülünün nasıl kullanılacağı hakkında temel bilgiler edindiniz.
Bu gönderiyi beğendin mi? Sormak istediğiniz bir şey var mı? Lütfen yorum bölümünde ifade edin, hızlı bir cevap alabilirsiniz.




Önceki: Basit Transistör Diyot Test Devresi Sonraki: Bu IR Uzaktan Kumanda Menzil Genişletici Devresini Yapın