Arduino ile I2C LCD kullanımı
Daha önce bir Arduino ile bir LCD ekran bağlamayı denediyseniz, Arduino'da çok fazla pin tükettiğini fark etmiş olabilirsiniz. 4-bit modunda bile, Arduino hala toplam yedi bağlantıya ihtiyaç duyar - bu, Arduino'nun mevcut dijital I / O pinlerinin yarısıdır.
Çözüm, bir I2C LCD Ekran kullanmaktır. Bir dizi dijital G / Ç pini bile olmayan yalnızca iki G / Ç pini tüketir ve diğer I2C aygıtlarıyla da paylaşılabilir.
I2C LCD Donanımına Genel Bakış
Tipik bir I2C LCD ekranı, HD44780 tabanlı karakterli bir LCD ekran ve bir I2C LCD adaptöründen oluşur. Onları tek tek tanıyalım.
Karakter LCD Ekran
Adına sadık kalarak, bu LCD'ler yalnızca metinleri / karakterleri görüntülemek için idealdir. Örneğin 16 × 2 karakterli bir LCD, bir LED arka ışığına sahiptir ve her satırda 16 karakter olmak üzere iki satırda 32 ASCII karakter görüntüleyebilir.
Yakından bakarsanız, ekrandaki her karakterin küçük dikdörtgenlerini ve bir karakteri oluşturan pikselleri gerçekten görebilirsiniz. Bu dikdörtgenlerin her biri 5 × 8 piksellik bir ızgaradır.
I2C LCD Adaptörü
Adaptörün kalbinde 8-Bit G / Ç Genişletici çipi - PCF8574 bulunur. Bu çip, I2C verilerini bir Arduino'dan LCD ekranın gerektirdiği paralel verilere dönüştürür.
Kart ayrıca, ekranın kontrastına ince ayar yapmak için küçük bir trimpot ile birlikte gelir.
Ek olarak, kart üzerinde arka ışığa güç sağlayan bir jumper vardır. Arka ışığın yoğunluğunu kontrol etmek için, atlama telini çıkarabilir ve 'LED' olarak işaretlenen başlık pimine harici bir voltaj uygulayabilirsiniz.
LCD I2C Adresi
Aynı I2C veriyolunda birden fazla cihaz kullanıyorsanız, başka bir I2C cihazıyla çakışmaması için kart için farklı bir I2C adresi ayarlamanız gerekebilir.
Bunu yapmak için, kartta üç adet lehim köprüsü (A0, A1 ve A2) veya lehim pedleri bulunur.
Bunların her biri adresi sabit kodlamak için kullanılır. Bir jumper bir lehim bloğu ile kısaltılmışsa, adresi belirler.
Burada önemli bir nokta, birçok şirketin aynı PCF8574 yongasını üretmesidir: Texas Instruments ve NXP Semiconductors bunlardan birkaçıdır. Ve LCD'nizin I2C adresi çip üreticisine bağlıdır.
LCD'nizde Texas Instruments'tan bir PCF8574 yongası varsa:
Göre Texas Instruments veri sayfası , üç adres seçim bitleri (A0, A1 ve A2) 7 bit I2C adresi kayıttaki ucuna yerleştirilir.
YÜKSEK / DÜŞÜK olmak üzere 2 durum alabilen 3 adres girişi olduğundan, 8 (2 3 ) farklı kombinasyon (adres) oluşturabiliriz.
Varsayılan olarak, 3 adres girişinin tümü, yerleşik pullups kullanılarak YÜKSEK çekilir ve PCF8574'e varsayılan olarak 0100111 Binary veya 0x27 Hex I2C adresi verir.
Lehim atlama tellerini kısaltarak, adres girişlerine DÜŞÜK atılır. Üç jumper'ı da kısa devre yaparsanız, adres 0x20 olacaktır. Olası tüm adreslerin aralığı 0x20 ile 0x27 arasındadır. Lütfen aşağıdaki resme bakın.
LCD'nizde NXP Semiconductors'dan bir PCF8574 yongası varsa:
Göre NXP yarı iletkenler veri sayfası , üç adres seçim bitleri (A0, A1 ve A2), aynı zamanda, 7 bit I2C adresi kayıttaki ucuna yerleştirilir. Ancak Adres Kaydındaki diğer bitler farklıdır.
Tekrar! 3 adres girişi, bize 8 (2 3 ) farklı kombinasyon veren YÜKSEK / DÜŞÜK olmak üzere 2 duruma sahip olabilir .
Varsayılan olarak, 3 adres girişinin tümü, yerleşik pullups kullanılarak YÜKSEK çekilir ve PCF8574'e varsayılan 0111111 İkili veya 0x3F Hex I2C adresi verir.
Lehim atlama tellerini kısaltarak, adres girişlerine DÜŞÜK atılır. Üç jumper'ı da kısa devre yaparsanız, adres 0x38 olacaktır. Olası tüm adreslerin aralığı 0x38 ile 0x3F arasındadır. Lütfen aşağıdaki resme bakın.
I2C LCD ekran Pinout
Bir I2C LCD, kendisini dış dünyaya arayüzleyen yalnızca 4 pime sahiptir. Bağlantılar aşağıdaki gibidir:
GND bir toprak pimidir ve Arduino'nun toprağına bağlanmalıdır.
VCCmodüle ve LCD'ye güç sağlar. Arduino'nun 5V çıkışına veya ayrı bir güç kaynağına bağlayın.
SDASeri Veri pinidir. Bu hat hem gönderme hem de alma için kullanılır. Arduino'daki SDA pinine bağlayın.
SCLbir Seri Saat pinidir. Bu, Bus Master cihazı tarafından sağlanan bir zamanlama sinyalidir. Arduino'daki SCL pinine bağlayın.
Arduino Uno'yu bir I2C LCD ekrana bağlama
Bir I2C LCD bağlamak, standart bir LCD bağlamaktan çok daha kolaydır. Sadece 12 yerine 4 pin bağlamanız gerekir. VIN pinini Arduino'daki 5V çıkışa bağlayarak başlayın ve GND'yi toprağa bağlayın.
Şimdi I2C iletişimi için kullanılan pinlerde kaldık. Her Arduino Board'un uygun şekilde bağlanması gereken farklı I2C pinlerine sahip olduğunu unutmayın. R3 düzenine sahip Arduino kartlarında, SDA (veri hattı) ve SCL (saat hattı), AREF pinine yakın pin başlıkları üzerindedir. A5 (SCL) ve A4 (SDA) olarak da bilinirler.
Farklı bir Arduino kartı kullanıyorsanız, lütfen aşağıdaki tabloya bakın.
Aşağıdaki şema, her şeyi nasıl bağlayacağınızı gösterir.
LCD Kontrastını Ayarlama
LCD'yi bağladıktan sonra, ekranın kontrastını ayarlamanız gerekecektir. I2C modülünde, küçük bir tornavidayla çevirebileceğiniz bir potansiyometre bulacaksınız.
LCD'ye güç sağlamak için Arduino'nun USB konektörünü takın. Arka ışığın yandığını görmelisiniz. Şimdi potansiyometreyi dikdörtgenin ilk satırı görünene kadar döndürün.
Bu yapıldıktan sonra, LCD'yi programlamaya başlayabiliriz.
Kütüphane Kurulumu
Sonraki çizimleri çalıştırmak için LiquidCrystal_I2C adlı bir kitaplık kurmanız gerekir. Bu kitaplık, Arduino IDE'nizle birlikte gelen LiquidCrystal kitaplığının geliştirilmiş bir sürümüdür.
Kitaplığı kurmak için Sketch> Dahil Et> Kitaplıkları Yönet'e gidin … Kitaplık Yöneticisinin kitaplıklar dizinini indirmesini ve kurulu kitaplıkların listesini güncellemesini bekleyin.
Aramanızı 'liquidcrystal' yazarak filtreleyin . Birkaç giriş olmalı. Frank de Brabander'in LiquidCrystal I2C kitaplığını arayın . Bu girişe tıklayın ve ardından Yükle'yi seçin.
I2C Adresinin Belirlenmesi
LCD'nizin I2C adresi, daha önce belirtildiği gibi üreticiye bağlıdır. LCD Texas Instruments bir PCF8574 yongası varsa, varsayılan I2C adresi 0x27 olan Hex . LCD NXP yarı iletkenler bir PCF8574 yongası varsa, varsayılan I2C adresi 0x3F olan Hex .
Dolayısıyla, LCD'nizin muhtemelen bir I2C adresi 0x27 Hex veya 0x3F Hex vardır . Yine de kullanmadan önce LCD'nin gerçek I2C'sini bulmanız önerilir. Neyse ki, Nick Gammon'un harika çalışması sayesinde bunu yapmanın basit bir yolu var.
Nick, I2C veriyolunuzu tarayan ve bulduğu her I2C cihazının adresini size geri veren basit bir I2C tarayıcı taslağı yazdı.
Bu çizimi Arduino'nuza yükleyin ve ardından seri monitörünüzü açın. I2C LCD ekranınızın I2C adresini göreceksiniz.
Lütfen bu adresi not edin. Sonraki çizimlerde ihtiyacınız olacak.
Temel Arduino Sketch - Hello World
Aşağıdaki test taslağı "Merhaba Dünya!" LCD'nin ilk satırında ve ikinci satırda 'LCD eğitimi'.
Ancak, taslağı yüklemeye başlamadan önce, işinize yaraması için bazı değişiklikler yapmanız gerekir. LCD'nizin I2C adresini ve ekranın boyutlarını (ekranın sütunları ve satırları) girmeniz gerekir. 16 × 2 karakter LCD kullanıyorsanız, 16 ve 2; 20 × 4 LCD kullanıyorsanız, 20 ve 4 parametrelerini iletin.
İşiniz bittiğinde, devam edin ve taslağı deneyin.
Her şey yolunda giderse, ekranda aşağıdaki çıktıyı görmelisiniz.
Kod Açıklaması:
Taslak, LiquidCrystal_I2C kitaplığını dahil ederek başlar.
Daha sonra LiquidCrystal_I2C sınıfının bir nesnesi oluşturulur. Bu nesne 3 parametre kullanır LiquidCrystal_I2C(address,columns,rows)
. Bu, farklı olması durumunda daha önce bulduğunuz adresle varsayılan adresi ve ekranın boyutlarını değiştirmeniz gereken yerdir.
LiquidCrystal_I2C nesnesi bildirildikten sonra, LCD'ye özgü özel yöntemlere erişebilirsiniz.
'Kurulum' fonksiyonunda: init()
fonksiyon, lcd nesnesini başlatmak için çağrılır. Ardından clear()
işlev çağrılır. Bu işlev, LCD ekranı temizler ve imleci sol üst köşeye hareket ettirir. backlight()
Fonksiyonlu LCD arka ışığını açmak için kullanılır.
Daha sonra, fonksiyon çağırılarak imleç konumu üçüncü sütuna ve LCD'nin ilk satırına ayarlanır lcd.setCursor(2,0)
. İmleç konumu, yeni metnin LCD'de görüntülenmesini istediğiniz konumu belirtir. Sol üst köşe col = 0, row = 0 olarak kabul edilir.
Ardından, 'Merhaba Dünya!' print()
işlevi çağırarak yazdırılır .
Benzer şekilde, sonraki iki satır, imleç konumunu üçüncü sütunda ve ikinci satırda ayarlayacak ve LCD'de 'LCD Eğitimi' yazdıracaktır.
Kitaplığın diğer yararlı işlevleri
LiquidCrystal_I2C nesnesiyle kullanabileceğiniz birkaç yararlı işlev vardır. Bunlardan birkaçı aşağıda listelenmiştir:
home()
- ekranı temizlemeden imleci LCD'nin sol üst köşesine konumlandırır.cursor()
- LCD imlecini, yazdırılacak sonraki karakterin konumunda bir alt çizgi (satır) görüntüler.noCursor()
- LCD imlecini gizler.blink()
- Yanıp sönen blok stilinde bir LCD imleç oluşturur: yazdırılacak sonraki karakterin konumunda 5 × 8 piksellik yanıp sönen bir dikdörtgen.noBlink()
- yanıp sönen blok tarzı LCD imlecini devre dışı bırakır.display()
- LCD ekranı açar ve ekranda daha önce yazdırılan karakterleri görüntüler.noDisplay()
- LCD ekranı kapatır. Sadece LCD ekranın kapatılması, LCD hafızasındaki verileri temizlemez. Bu, display () işlevi çağrıldığında yeniden gösterileceği anlamına gelir.scrollDisplayLeft()
- ekranın içeriğini bir boşluk sola kaydırır. Metni sürekli olarak kaydırmak istiyorsanız, bu işlevi bir döngü içinde kullanmanız gerekir.scrollDisplayRight()
- ekranın içeriğini bir boşluk sağa kaydırır.autoscroll()
- LCD'nin otomatik kaydırılmasını açar. Mevcut metin yönü soldan sağa (varsayılan) ise, ekran sola kayar, mevcut yön sağdan sola ise ekran sağa kayar.noAutoscroll()
- otomatik kaydırmayı kapatır.
Özel Karakterler Oluşturun ve Gösterin
Ekrandaki karakterleri donuk ve heyecan verici bulmuyorsanız, LCD'niz için kendi özel karakterlerinizi (glif) ve sembollerinizi oluşturabilirsiniz. Standart ASCII karakter kümesinin parçası olmayan bir karakteri görüntülemek istediğinizde son derece kullanışlıdırlar .
CGROM ve CGRAM
Hitachi HD44780 kontrol cihazına dayalı tüm LCD ekranlar, CGROM ve CGRAM (Karakter Üreteci ROM ve RAM) adı verilen tanımlanmış karakterleri depolayan iki tür belleğe sahiptir. CGROM belleği uçucu değildir ve değiştirilemez, oysa; CGRAM belleği uçucudur ve herhangi bir zamanda değiştirilebilir.
CGROM, ASCII kodu kullanılarak görüntülenebilen tüm kalıcı yazı tiplerini depolamak için kullanılır. Örneğin, 0x41 yazarsak, LCD'de 'A' karakterini alırız. CGRAM, kullanıcı tanımlı karakterleri saklamak için kullanılabilen başka bir bellektir.
Bu RAM 64 bayt ile sınırlıdır. Anlamı, 5 × 8 piksel tabanlı LCD için; CGRAM'da en fazla 8 kullanıcı tanımlı karakter saklanabilir. Ve 5 × 10 piksel tabanlı LCD için sadece 4 kullanıcı tanımlı karakter saklanabilir.
createChar()
işlev kullanılır. Bu işlev 8 baytlık bir diziyi kabul eder. Dizideki her bayt (yalnızca 5 bit dikkate alınır), 5 × 8 matristeki karakterin bir satırını tanımlar. Oysa bayttaki 0'lar ve 1'ler, satırdaki hangi piksellerin kapalı ve hangilerinin açılması gerektiğini belirtir.Özel Karakter Üreticisi
Özel karakter oluşturmak şimdiye kadar kolay değildi! Özel karakterlerinizi oluşturmanıza yardımcı olacak küçük bir uygulama oluşturduk. Belirli bir pikseli ayarlamak / temizlemek için aşağıdaki 5 × 8 pikselden herhangi birine tıklayabilirsiniz. Piksellere tıkladığınızda, karakterin kodu ızgaranın yanında oluşturulur. Bu kod doğrudan Arduino taslağınızda kullanılabilir.
Aşağıdaki çizim, özel karakterleri nasıl oluşturabileceğinizi ve bunları LCD'de nasıl yazdırabileceğinizi gösterir.
LCD'de aşağıdaki çıktıyı görmelisiniz:
Kod Açıklaması:
Kitaplığı dahil edip LCD nesnesini oluşturduktan sonra, özel karakter dizileri tanımlanır. Her dizi, 5 × 8 ledli matrisin her satırı için 1 bayt olmak üzere 8 bayttan oluşur. Bu taslakta 8 özel karakter oluşturulmuştur.
Heart[8]
Örnek olarak diziyi inceleyelim . Bitlerin gerçekte 0'lar ve 1'ler olan bir kalp şeklini nasıl oluşturduğunu görebilirsiniz. Bir 0 pikseli kapatır ve bir 1 pikseli açar.
Kurulumda, özel karakter createChar()
işlev kullanılarak oluşturulur . Bu işlev iki parametre alır. İlki, desteklenen 8 özel karakterden birini ayırmak için 0 ile 7 arasında bir sayıdır. İkinci parametre, bayt dizisinin adıdır.
Bir sonraki döngüde, kullandığımız özel karakteri görüntülemek için write()
işlevi ve bir parametre olarak görüntülemek istediğimiz karakterin numarasını kullanıyoruz.
lcd.setCursor(0, 1);
lcd.write(0);
Bahadır ÖZGEN
Electronic Robotic Coding Research and Development 1975 - ∞
Learn Forever
If you want, let's learn together...
https://roboticcode2020.blogspot.com/
bahadirozgen1975@gmail.com
facebook robotic.code
instagram @roboticcode
Sayfalarımı ziyaret ettiğiniz için teşekkür ederim.Bu sitede mevcut olan içerikler kendi oluşturduğum projeler yazı,resim ve videolardan oluşmaktadır.İçerik oluşturmak çok uzun sürdüğü için bazı projelerde yurtdışı kaynaklardan faydalandım.Buradaki amacım ticari değildir.Kaynağı belli olan ve bizim kaynağına ulaşabildiğimiz materyal (yazı, fotoğraf, resim, video v.b.) için ilgili konularda fotoğraflarda logo varsa v.b. not olarak gösterilecektir.Sitemizde yayınlanan tüm içerik, bizim tarafımızdan ve internet üzerinden youtube, facebook ve blog gibi paylaşıma sunulmuş kaynak sitelerden alındığı için, sitemiz yasal yükümlülüğe tabi tutulamaz. Sitemizde telif haklarının size ait olduğu bir içerik varsa ve bunu kaldırmamızı isterseniz, iletişim sayfamızdan bizimle iletişime geçtiğiniz takdirde içerik yayından kaldırılacaktır.Bu konu ve modüller ile uğraşarak, ileride çok güzel makine ve elektronik aletler yapabilirsiniz.
Hiç yorum yok:
Yorum Gönder
Yorum yazdığınız ve üye olduğunuz için Size teşekkür ederim.Burada olduğunuza göre hepimizin ilgi alanı Elektronik ve Programlama sonsuz bir dünyadayız.Hepimize Başarılar...
Not: Yalnızca bu blogun üyesi yorum gönderebilir.