16×2 LCD Modülünü Bağladık!

'iMuh@fiz

Özel Üye
11 Ağu 2012
11,010
4
31
Bakü
cover-300x154.jpg

Merhaba arkadaşlar, öncelikle baya gecikmeli olan bu yazımdan ötürü sizlerden özür dilerim. İşlerimin yoğunluğundan dolayı anca yazabiliyorum.
Bu yazımda 16×2 bir LCD Modülü Raspberry Pi’ye nasıl bağladığımdan ve çalıştırdığımdan bahsedeceğim.
Gerekenler:


  • Raspberry Pi
  • 16×2 LCD Modülü. Ben mavi üstü beyaz yazılı olanı edindim.
  • 2 Tane 5K Ayarlı Direnç (Biri ekran arka plan parlaklığı, diğeri ekran kontrastını ayarlamak için, hoşunuza giden değer için sabit direnç de bağlayabilirsiniz)
  • Breadboard
  • Breadboard üzerinde pinleri birleştirmek için Jumper Kit kullandım, siz tabi tek damarlı kablo da kullanabilirsiniz.
  • Erkek-Erkek ve ayarlı dirençleri bağlayabilmem için Dişi-Erkek Jumper Kablo kullandım.
  • Ben kolaylık olsun diye GPIO Breakout Kit kullandım, siz tabi bunu kullanmak zorunda değilsiniz.
Yapılacaklar


  • Öncelikle LCD Modülünün pinlerinden bahsetmek istiyorum:
    1. Ground
    2. VCC (5V)
    3. Contrast adjustment (VO)
    4. Register Select (RS) (RS=0: Command, RS=1: Data)
    5. Read/Write (R/W) R/W=0: Write, R/W=1: Read
    6. Enable
    7. Bit 0 (Not required in 4-bit operation)
    8. Bit 1 (Not required in 4-bit operation)
    9. Bit 2 (Not required in 4-bit operation)
    10. Bit 3 (Not required in 4-bit operation)
    11. Bit 4
    12. Bit 5
    13. Bit 6
    14. Bit 7
    15. LED Backlight Anode (+)
    16. LED Backlight Catode (-)
  • Pi’yi şu şekilde bağladım ben:
    LCD Pin Function Pi Function Pi Pin 01 GND GND P1-06 02 +5V +5V P1-02 03 Contrast GND P1-06 04 RS GPIO7 P1-26 05 RW GND P1-06 06 E GPIO8 P1-24 07 Data 0 08 Data 1 09 Data 2 10 Data 3 11 Data 4 GPIO25 P1-22 12 Data 5 GPIO24 P1-18 13 Data 6 GPIO23 P1-16 14 Data 7 GPIO18 P1-12 15 +5V via 560ohm 16 GND P1-06
  • Cihaz 4 Bit moduna geçirildiği için Gerekli GPIO sayısı da azaldığından hem bağlaması hem işlemesi daha kolay oluyor. Bu sebeple böyle bağladık. Ben ayrıca 16. pin (resimde en sağdaki pin olarak kalıyor) ve 3. pin arasına 2 adet ayarlı direnç bağladım, bu sayede ekranın parlaklık ve kontrastını kolayca ayarlayabildim kendimce (ayarlı direnç bağlamazsanız full kontrasttan çalışmıyor (hepsi yanıyor) gibi görüyorsunuz).
    Ayrıca aşağıdaki resimden de bağlamayı daha görsel olarak inceleyebilirsiniz:
    devre-300x300.png
  • Daha sonra Raspberry Pi Python GPIO kütüphanesini kurdum. Bunun için aşağıdaki yolları izledim:
    1. Önce Raspberry Pi Python GPIO Proje sayfasına girip downloads kısmından en güncel versiyonun linkini aldım.
    2. Daha sonra .deb paketini şu komutla indirip kurdum (Bu yazıyı okuduğunuzda daha güncel sürüm çıkmış olabilir, lütfen kontrol edin indirmeden önce de komuttaki linki ona göre güncelleyin) (06.06.2013 tarihli en güncel python2, pthon3 ve kaynak kodu dosyalarını alternatif link olarak buradan indirebilirsiniz) 1cd $HOME
      2wget https://raspberry-gpio-python.googlecode.com/files/python-rpi.gpio_0.5.2a-1_armhf.deb
      3sudo dpkg -i python-rpi.gpio_0.5.2a-1_armhf.deb
      4rm -R python-rpi.gpio_0.5.2a-1_armhf.deb
  • Şimdi ise aşağıdaki kodu home klasörüne deneme.py olarak kaydettim ve root olarak çalıştırdım (alternatif olarak kodu buradan da indirebilirsiniz.): 1#!/usr/bin/python
    2#
    3# HD44780 LCD Test Script for
    4# Raspberry Pi
    5#
    6# Author : Matt Hawkins
    7# Site : Raspberry Pi Spy | Raspberry Pi tutorials, scripts, help and downloads
    8#
    9# Date : 26/07/2012
    10#
    11
    12# The wiring for the LCD is as follows:
    13# 1 : GND
    14# 2 : 5V
    15# 3 : Contrast (0-5V)*
    16# 4 : RS (Register Select)
    17# 5 : R/W (Read Write) - GROUND THIS PIN
    18# 6 : Enable or Strobe
    19# 7 : Data Bit 0 - NOT USED
    20# 8 : Data Bit 1 - NOT USED
    21# 9 : Data Bit 2 - NOT USED
    22# 10: Data Bit 3 - NOT USED
    23# 11: Data Bit 4
    24# 12: Data Bit 5
    25# 13: Data Bit 6
    26# 14: Data Bit 7
    27# 15: LCD Backlight +5V**
    28# 16: LCD Backlight GND
    29
    30#import
    31import RPi.GPIO as GPIO
    32import time
    33
    34# Define GPIO to LCD mapping
    35LCD_RS = 7
    36LCD_E = 8
    37LCD_D4 = 25
    38LCD_D5 = 24
    39LCD_D6 = 23
    40LCD_D7 = 18
    41
    42# Define some device constants
    43LCD_WIDTH = 16 # Maximum characters per line
    44LCD_CHR = True
    45LCD_CMD = False
    46
    47LCD_LINE_1 = 0x80 # LCD RAM address for the 1st line
    48LCD_LINE_2 = 0xC0 # LCD RAM address for the 2nd line
    49
    50# Timing constants
    51E_PULSE = 0.00005
    52E_DELAY = 0.00005
    53
    54def main():
    55 # Main program block
    56
    57GPIO.setmode(GPIO.BCM) # Use BCM GPIO numbers
    58 GPIO.setup(LCD_E, GPIO.OUT) # E
    59 GPIO.setup(LCD_RS, GPIO.OUT) # RS
    60 GPIO.setup(LCD_D4, GPIO.OUT) # DB4
    61 GPIO.setup(LCD_D5, GPIO.OUT) # DB5
    62 GPIO.setup(LCD_D6, GPIO.OUT) # DB6
    63 GPIO.setup(LCD_D7, GPIO.OUT) # DB7
    64
    65# Initialise display
    66 lcd_init()
    67
    68# Send some test
    69 lcd_byte(LCD_LINE_1, LCD_CMD)
    70 lcd_string("Rasbperry Pi")
    71 lcd_byte(LCD_LINE_2, LCD_CMD)
    72 lcd_string("Model B")
    73
    74time.sleep(3) # 3 second delay
    75
    76# Send some text
    77 lcd_byte(LCD_LINE_1, LCD_CMD)
    78 lcd_string("Raspberrypi")
    79 lcd_byte(LCD_LINE_2, LCD_CMD)
    80 lcd_string(".gen.tr")
    81
    82time.sleep(20)
    83
    84def lcd_init():
    85 # Initialise display
    86 lcd_byte(0x33,LCD_CMD)
    87 lcd_byte(0x32,LCD_CMD)
    88 lcd_byte(0x28,LCD_CMD)
    89 lcd_byte(0x0C,LCD_CMD)
    90 lcd_byte(0x06,LCD_CMD)
    91 lcd_byte(0x01,LCD_CMD)
    92
    93def lcd_string(message):
    94 # Send string to display
    95
    96message = message.ljust(LCD_WIDTH," ")
    97
    98for i in range(LCD_WIDTH):
    99 lcd_byte(ord(message),LCD_CHR)
    100
    101def lcd_byte(bits, mode):
    102 # Send byte to data pins
    103 # bits = data
    104 # mode = True for character
    105 # False for command
    106
    107GPIo_Output(LCD_RS, mode) # RS
    108
    109# High bits
    110 GPIo_Output(LCD_D4, False)
    111 GPIo_Output(LCD_D5, False)
    112 GPIo_Output(LCD_D6, False)
    113 GPIo_Output(LCD_D7, False)
    114 if bits&0x10==0x10:
    115 GPIo_Output(LCD_D4, True)
    116 if bits&0x20==0x20:
    117 GPIo_Output(LCD_D5, True)
    118 if bits&0x40==0x40:
    119 GPIo_Output(LCD_D6, True)
    120 if bits&0x80==0x80:
    121 GPIo_Output(LCD_D7, True)
    122
    123# Toggle 'Enable' pin
    124 time.sleep(E_DELAY)
    125 GPIo_Output(LCD_E, True)
    126 time.sleep(E_PULSE)
    127 GPIo_Output(LCD_E, False)
    128 time.sleep(E_DELAY)
    129
    130# Low bits
    131 GPIo_Output(LCD_D4, False)
    132 GPIo_Output(LCD_D5, False)
    133 GPIo_Output(LCD_D6, False)
    134 GPIo_Output(LCD_D7, False)
    135 if bits&0x01==0x01:
    136 GPIo_Output(LCD_D4, True)
    137 if bits&0x02==0x02:
    138 GPIo_Output(LCD_D5, True)
    139 if bits&0x04==0x04:
    140 GPIo_Output(LCD_D6, True)
    141 if bits&0x08==0x08:
    142 GPIo_Output(LCD_D7, True)
    143
    144# Toggle 'Enable' pin
    145 time.sleep(E_DELAY)
    146 GPIo_Output(LCD_E, True)
    147 time.sleep(E_PULSE)
    148 GPIo_Output(LCD_E, False)
    149 time.sleep(E_DELAY)
    150
    151if __name__ == '__main__':
    152 main()


    1cd $HOME
    2nano test.py


    (SSHdan bağlanıyorsanız masaüstünüzde kopyaladığınız metni putty den sağ tık ile yapıştırır)
    CTRL+X ve Y ile kaydettim

    [*]Daha sonra kodu root olarak çalıştırdım: 1sudo python test.py
    [*]Afiyet olsun
    icon_wink.gif

 
Üst

Turkhackteam.org internet sitesi 5651 sayılı kanun’un 2. maddesinin 1. fıkrasının m) bendi ile aynı kanunun 5. maddesi kapsamında "Yer Sağlayıcı" konumundadır. İçerikler ön onay olmaksızın tamamen kullanıcılar tarafından oluşturulmaktadır. Turkhackteam.org; Yer sağlayıcı olarak, kullanıcılar tarafından oluşturulan içeriği ya da hukuka aykırı paylaşımı kontrol etmekle ya da araştırmakla yükümlü değildir. Türkhackteam saldırı timleri Türk sitelerine hiçbir zararlı faaliyette bulunmaz. Türkhackteam üyelerinin yaptığı bireysel hack faaliyetlerinden Türkhackteam sorumlu değildir. Sitelerinize Türkhackteam ismi kullanılarak hack faaliyetinde bulunulursa, site-sunucu erişim loglarından bu faaliyeti gerçekleştiren ip adresini tespit edip diğer kanıtlarla birlikte savcılığa suç duyurusunda bulununuz.