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.

Raspberry Pi Pico LCD Ekran Kullanımı pico lcd,Pico LCD Ekran Kullanımı,Raspberr Pi Pico LCD Ekran Kullanımı

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ı

Raspberry Pi Pico LCD Ekran Kullanımı pico lcd,Pico LCD Ekran Kullanımı,Raspberr Pi Pico LCD Ekran Kullanımı

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. NoPin No.Pin AdıPin TipiPin AçıklamasıPin Bağlantısı
1Pin 1GroundKaynak PiniLCD, GND piniMikrodenetleyici/Güç kaynağının GND hattına bağlı
2Pin 2VCCKaynak PiniLCD’nin besleme voltajı pinidir.Güç kaynağının besleme pinine bağlı
3Pin 3V0/VEEKontrol PiniLCD’nin kontrastını ayarlar.0-5V kaynak sağlayabilen değişken bir POT’a bağlı
4Pin 4Register SelectKontrol PiniKomut/Veri Kaydı arasında geçiş yaparMikrodenetleyici pinine bağlanır ve 0 veya 1 alır. 0 -> Komut Modu 1-> Veri Modu
5Pin 5Read/WriteKontrol PiniLCD’yi Okuma/Yazma İşlemi arasında değiştirirMikrodenetleyici pinine bağlanır ve 0 veya 1 alır. 0 -> Yazma İşlemi 1-> Okuma İşlemi
6Pin 6EnableKontrol PiniOkuma/Yazma İşlemini gerçekleştirmek için yüksek tutulmalıdırMikrodenetleyiciye bağlı ve her zaman yüksek tutulur.
7Pin 7-14Data Bits (0-7)Veri/Kontrol PiniLCD’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
8Pin 15LED PositiveLED PiniLCD’yi aydınlatmak için normal LED benzeri çalışma+5V’a bağlı
9Pin 16LED NegativeLED PiniLCD’yi aydınlatmak için normal LED benzeri çalışmaGND’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.

Raspberry Pi Pico LCD Ekran Kullanımı pico lcd,Pico LCD Ekran Kullanımı,Raspberr Pi Pico LCD Ekran Kullanımı

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.

Raspberry Pi Pico LCD Ekran Kullanımı pico lcd,Pico LCD Ekran Kullanımı,Raspberr Pi Pico LCD Ekran Kullanımı

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.