Raspberry Pi Pico LCD Ekran Kullanımı
Bu içeriğimizde Micropython kullanarak Raspberry Pi Pico LCD modülü ile arabirim oluşturacağız. Bu eğitimin sonunda, Micropython’u kullanarak LCD’de dizeleri, karakterleri görüntüleyebileceksiniz. Bu eğitime başlamadan önce, Raspberry Pi Pico ile ilgili eğitim serimizi zaten takip ettiğinizi varsayıyoruz. Daha önce bir OLED ekranla çalıştık ve Raspberry Pi Pico’da I2C ve ADC’yi gördük. Şimdi bir LCD ekran modülünün pico kartıyla nasıl arayüzleneceğini görelim.
16×2 LCD Modülü
16×2 LCD, adını 16 sütun ve 2 satır içermesinden alır. Sonuç olarak, her biri 5×8 Piksel Noktalarından oluşan toplam (16×2=32) 32 karakter içerir. Aşağıdaki resim, tüm pikselleriyle tek bir karakteri göstermektedir.
Her karakterin (5×8=40) 40 piksel boyutu vardır, bu da bize 32 karakter için toplam (32×40) 1280 piksel verir. Ek olarak, LCD talimatlarında piksellerin nerede olduğu söylenmelidir. Sonuç olarak, bir mikrodenetleyici kullanarak her şeyi kontrol etmek zor olacaktır. Bu nedenle, LCD Modülünün arka tarafında HD44780 gibi bir arabirim entegresi kullanılır. HD44780 Veri Sayfasında daha fazla bilgi mevcuttur.
Bu entegrenin görevi, mikrodenetleyici’den komutlar ve veriler almak ve bunları, ilgili bilgilerin LCD ekranda gösterilebilmesi için işlemek. Arka ışık olmadan, LCD’nin çalışma voltajı 4,7 ila 5,3 volt arasında değişir ve mevcut kullanımı 1mA’dır. Hem 8 bit hem de 4 bit modlarında çalışabilir. Bu LCD’ler yeşil veya mavi arka ışıkla gelir ve kullanıcı tarafından oluşturulan karakterleri de gösterebilir.
16×2 LCD Modülün Pin Yapısı ve Pin Açıklamaları
LCD ekranda 16 Pin olacaktır. 16×2 LCD Modülün Pin Düzeni ve Pin Açıklamaları aşağıdaki tabloda belirtilmiştir. LCD pin çıkışları hakkında daha fazla ayrıntı için Arduino için hazırladığımız 16×2 LCD Ekran Modülü ile ilgili bu makaleye başvurabilirsiniz.
Sr. No | Pin No. | Pin Adı | Pin Tipi | Pin Açıklaması | Pin Bağlantısı |
1 | Pin 1 | Ground | Kaynak Pini | LCD, GND pini | Mikrodenetleyici/Güç kaynağının GND hattına bağlı |
2 | Pin 2 | VCC | Kaynak Pini | LCD’nin besleme voltajı pinidir. | Güç kaynağının besleme pinine bağlı |
3 | Pin 3 | V0/VEE | Kontrol Pini | LCD’nin kontrastını ayarlar. | 0-5V kaynak sağlayabilen değişken bir POT’a bağlı |
4 | Pin 4 | Register Select | Kontrol Pini | Komut/Veri Kaydı arasında geçiş yapar | Mikrodenetleyici pinine bağlanır ve 0 veya 1 alır. 0 -> Komut Modu 1-> Veri Modu |
5 | Pin 5 | Read/Write | Kontrol Pini | LCD’yi Okuma/Yazma İşlemi arasında değiştirir | Mikrodenetleyici pinine bağlanır ve 0 veya 1 alır. 0 -> Yazma İşlemi 1-> Okuma İşlemi |
6 | Pin 6 | Enable | Kontrol Pini | Okuma/Yazma İşlemini gerçekleştirmek için yüksek tutulmalıdır | Mikrodenetleyiciye bağlı ve her zaman yüksek tutulur. |
7 | Pin 7-14 | Data Bits (0-7) | Veri/Kontrol Pini | LCD’ye Komut veya veri göndermek için kullanılan pinler. | 4-Wire Modunda mikrodenetleyiciye yalnızca 4 pin (0-3) bağlıdır 8-Wire Modunda 8 pinin tamamı (0-7) mikrodenetleyiciye bağlıdır |
8 | Pin 15 | LED Positive | LED Pini | LCD’yi aydınlatmak için normal LED benzeri çalışma | +5V’a bağlı |
9 | Pin 16 | LED Negative | LED Pini | LCD’yi aydınlatmak için normal LED benzeri çalışma | GND’ye bağlı |
Pico LCD Bağlantı Şeması
Aşağıdaki devre şeması, LCD’nin Raspberry Pi Pico’ya bağlantısını temsil etmektedir. LCD ekranın parlaklığını kontrol etmek için bir potansiyometre kullandık. 4 bit veri pinleri (yani D4 – D7) sırasıyla 18,19,20,21 GPIO’larına bağlanır. LCD’nin Rs pini GPIO 16’ya ve E pini GPIO 17’ye bağlanır. Potansiyometrenin çıkışı LCD’nin V0 pinine ve VBUS pini potansiyometrenin giriş terminaline bağlanır. Pico’nun bu VBUS pini, LCD’ye LCD’nin VDD pini aracılığıyla güç sağlamak için kullanılır. LCD’nin 15 numaralı pini, 5V’luk güç kaynağı sağlamak için LCD’nin VDD pinine bağlanır ve LCD’nin 16 numaralı pini, LCD’nin RW pininin ardından GND pinine bağlanır.
MicroPython Kullanarak Raspberry Pi Pico ile LCD’yi Programlama
LCD’yi Micropython kullanarak Raspberry Pi Pico ile programlamak için Raspberry Pi Pico Eğitim Serisinin GitHub deposundan ilgili kitaplığı ve kod dosyalarını indirmeniz gerekir. Klasörü açtığınızda “lcd_pico.py” ve “main.py” isimli iki python dosyası göreceksiniz. “lcd_pico”, Micropython kullanarak Raspberry Pi Pico ile LCD ekranı programlamak için bir kütüphane olarak kullanılabilir. LCD’de bazı dizileri görüntülemek için “main.py” dosyasında “lcd_pico.py” dosyasındaki bazı işlevleri kullandık. Her iki python dosyasını da tek tek tartışalım.
lcd_pico.py dosyası
“lcd_pico.py” dosyasında, “machine.py” ve “utime.py” adlı iki kitaplığı içe aktardık. machine kitaplığı, pinleri, GPIO’ları vb. tanımlamak için yerleşik işlevleri içerir. “utime” kitaplığı, koddaki gecikmeyi sağlamak için kullanılır. Ardından, LCD’nin 4 bitlik veri pinleri ve LCD’nin RS ve E pinleri için GPIO pinlerini tanımladık. GPIO21’i ÇIKIŞ olarak ayarladık ve bunu “rs” değişkenine atamak için “machine.Pin(16,machine.Pin.OUT)” kullanıdık. Benzer şekilde, 17 ila 21 arası GPIO’lar ÇIKIŞ pinleri olarak ayarlandı ve sırasıyla “e”, “d4”, “d5”, “d6” ve “d7” değişkenlerine atandılar.
import machine
import utime
rs= machine.Pin(16,machine.Pin.OUT)
e = machine.Pin(17,machine.Pin.OUT)
d4 = machine.Pin(18,machine.Pin.OUT)
d5 = machine.Pin(19,machine.Pin.OUT)
d6 = machine.Pin(20,machine.Pin.OUT)
d7 = machine.Pin(21,machine.Pin.OUT)
İmlecin konumunu ayarlamak için aşağıdaki “setCursor(line,pos)” işlevi kullanılır. “line” ve “pos” olmak üzere iki parametreyi eklememiz gerekiyor.
def setCursor(line, pos):
b = 0
if line==1:
b=0
elif line==2:
b=40
returnHome()
for i in range(0, b+pos):
moveCursorRight()
clearScreen() işlevi, ekranı temizlemek için kullanılır ve setupLCD() işlevi, LCD’yi başlatmak için kullanılır. Ana kodumuzun başlangıcında setupLCD() işlevini kullanmamız gerekiyor. DisplayString(), herhangi bir String verisini görüntülemek için kullanılır. Bu işlev “row”, “col” ve “input_string” olmak üzere üç parametre alır. “row” ve “col” imleç konumunu ayarlamak için kullanılır ve “input_string”, LCD’de yazdırılması gereken dizeyi iletmek için kullanılır.
def clearScreen():
rs.value(0)
send2LCD8(0b00000001)#clear screen
longDelay(2)#clear screen needs a long delay
rs.value(1)
def setupLCD():
rs.value(0)
send2LCD4(0b0011)
send2LCD4(0b0011)
send2LCD4(0b0011)
send2LCD4(0b0010)
send2LCD8(0b00101000)
send2LCD8(0b00001100)#lcd on, blink off, cursor off.
send2LCD8(0b00000110)#increment cursor, no display shift
send2LCD8(0b00000001)#clear screen
longDelay(2)#clear screen needs a long delay
rs.value(1)
def displayString(row, col, input_string):
setCursor(row,col)
for x in input_string:
send2LCD8(ord(x))
longDelay(10)
main.py dosyası
main.py dosyasında “lcd_pico” kitaplığını içe aktardık ve ardından “setupLCD()” işlevini çağırdık. Sonra aşağıdaki dizeleri yazdırmak için “displayString()” işlevini kullandık. Bu fonksiyonda imleç konumunu ayarlamak için “satır” ve “sütun”u geçtik ve ardından LCD’de görüntülenecek dizileri yazdık. longDelay() işlevi, gecikmeyi mikrosaniye cinsinden sağlamak için kullanılır.
from lcd_pico import *
setupLCD()
displayString(1,0,"Merhaba")
displayString(2,0,"Dunya")
longDelay(4000)
displayString(2,0,"devreyakan.com")
longDelay(4000)
Aşağıdaki while döngüsünde, 1,5 saniyelik aralıklarla “devreyakan.com”u görüntülemek için displayString() kullandık. clearScreen() görüntü ekranını her 1,5 Saniyede bir temizlemek için kullanılır.
while(True):
displayString(1,0,"devreyakan.com")
longDelay(1000)
clearScreen()
longDelay(500)
Thonny IDE’de “main.py” ve “lcd_pico.py” dosyalarını açın. Başlamak için klavyenizdeki “ctrl+shift+s” tuşlarına basarak “lcd_pico.py” dosyasını Pico kartına kaydedin. Dosyaları kaydetmeden önce Pico kartınızın bilgisayarınıza bağlı olduğundan emin olun. Kodu kaydettiğinizde, aşağıdaki resimde gösterildiği gibi bir açılır pencere görünecektir. Önce Raspberry Pi Pico’yu seçmeli, ardından dosyayı “lcd_pico.py” olarak adlandırmalı ve kaydetmelisiniz. Ardından, “main.py” dosyası için işlemi tekrarlayın. Bu prosedür, Pico açıkken programı çalıştırmanızı sağlar.
Kodu pico kartınıza yükleyip çalıştırdığınızda, ilk görüntü, LCD’nin ilk satırında “Merhaba” dizesini ve LCD’nin ikinci satırında “Dunya” dizesini gösteriyor. Ardından 4 saniyelik gecikmenin ardından LCD’nin 1. satırında “devreyakan.com” dizesini gösteriyor.
Kodun Tamamı
def pulseE():
e.value(1)
utime.sleep_us(40)
e.value(0)
utime.sleep_us(40)
def longDelay(t):
utime.sleep_ms(t)
def shortDelay(t):
utime.sleep_us(t)
def send2LCD4(BinNum):
d4.value((BinNum & 0b00000001) >>0)
d5.value((BinNum & 0b00000010) >>1)
d6.value((BinNum & 0b00000100) >>2)
d7.value((BinNum & 0b00001000) >>3)
pulseE()
def send2LCD8(BinNum):
d4.value((BinNum & 0b00010000) >>4)
d5.value((BinNum & 0b00100000) >>5)
d6.value((BinNum & 0b01000000) >>6)
d7.value((BinNum & 0b10000000) >>7)
pulseE()
d4.value((BinNum & 0b00000001) >> 0)
d5.value((BinNum & 0b00000010) >> 1)
d6.value((BinNum & 0b00000100) >> 2)
d7.value((BinNum & 0b00001000) >> 3)
pulseE()
def setCursor(line, pos):
b = 0
if line==1:
b=0
elif line==2:
b=40
returnHome()
for i in range(0, b+pos):
moveCursorRight()
def returnHome():
rs.value(0)
send2LCD8(0b00000010)
rs.value(1)
longDelay(2)
def moveCursorRight():
rs.value(0)
send2LCD8(0b00010100)
rs.value(1)
def setupLCD():
rs= machine.Pin(16,machine.Pin.OUT)
e = machine.Pin(17,machine.Pin.OUT)
d4 = machine.Pin(18,machine.Pin.OUT)
d5 = machine.Pin(19,machine.Pin.OUT)
d6 = machine.Pin(20,machine.Pin.OUT)
d7 = machine.Pin(21,machine.Pin.OUT)
rs.value(0)
send2LCD4(0b0011)
send2LCD4(0b0011)
send2LCD4(0b0011)
send2LCD4(0b0010)
send2LCD8(0b00101000)
send2LCD8(0b00001100)#lcd on, blink off, cursor off.
send2LCD8(0b00000110)#increment cursor, no display shift
send2LCD8(0b00000001)#clear screen
longDelay(2)#clear screen needs a long delay
rs.value(1)
def displayString(row, col, input_string):
setCursor(row,col)
for x in input_string:
send2LCD8(ord(x))
utime.sleep_ms(100)
from lcd_pico import *
setupLCD()
displayString(1,0,"Merhaba")
displayString(2,0,"Dunya")
longDelay(4000)
displayString(1,0,"devreyakan.com")
displayString(2,0,"DIGEST")
longDelay(4000)
while(True):
displayString(1,0,"devreyakan.com")
longDelay(1000)
clearScreen()
longDelay(500)
Yorum yapma özelliği, forum tarafından gelen istek sebebiyle kapatılmıştır. Lütfen tartışmalar ve sorularınız için topluluk forumumuza katılın.