راه‌اندازی نمایشگر کاراکتری ۱۶۰۲ توسط رزبری پای (رسپبری پای)

الکترونیک و رباتیک -> برد های توسعه 1379 سجاد میابی

مروری بر ویژگی‌های نمایشگر کاراکتری ۱۶۰۲

در برخی از پروژه‌ها نیاز به نمایش اطلاعات توسط نمایشگر است. نمایشگر کاراکتری ۱۶۰۲ نمایشگری ایده‌آل و مقرون به صرفه جهت نمایش متون کوتاه به شمار می‌رود. راه اندازی و تنظیمات مربوط به این نمایشگر با تمامی پردازنده بسیار ساده است.در این پروژه نحوه‌ی اتصال و تنظیم این نمایشگر با رزبری پای و زبان پایتون آموزش داده خواهد شد.

تجهیزات مورد نیاز جهت انجام این پروژه شامل موارد زیر است:

تنظیمات سخت افزاری نمایشگر ۱۶۰۲

به منظور راه اندازی نمایشگر ۱۶۰۲ لازم است دو مدل دیتا ارسال شود. ۱) کاراکترها، حروف و اعداد ۲) دستورالعمل‌های راه‌اندازی برای اینکه متن مورد نظر در چه حالتی نمایش داده شود.

این دیتاها از طریق خطوط دیتا (Data Lines) فرستاده می‌شوند. هر کاراکتر و دستور ۸ بیت دیتا را به خود اختصاص می‌دهد.

به منظور کاهش اتصالات ترجیح داده می‌شود این نمایشگر به صورت ۴ سیمه راه اندازی شود. یعنی فقط از خطوط D4 ، D5 ، D6 و D7 به منظور ارسال داده استفاده می‌شود. در داخل برنامه پایتون نیز ۴ بیت به طور همزمان برای ارسال کاراکترها و دستورالعمل ها استفاده می‌شود. طریقه اتصالات پین‌های نمایشگر و رزبری پای در جدل زیر نشان داده شده است.

پین (Read/Write (RW مشخص می‌کند که نمایشگر ۱۶۰۲ در چه حالتی اعم از خواندن و یا نوشتن قرار بگیرد . ما در اینجا فقط از حالت نوشتن آن استفاده می‌کنیم. بنابراین این پین به زمین متصل شده تا نمایشگر در این مود قرار بگیرد. توجه داشته باشید که فقط می‌توان نمایشگر را در حالت نوشتن قرار داد. میزان ولتاژ خروجی نمایشگر ۵ ولت است. در حالیکه میزان ولتاژ پین‌های GPIO رزبری پای ۳٫۳ ولت است. در صورت قرار گرقتن در حالت خواندن ، دیتا با میزان ۵ ولت به رزبری پای ارسال شده و باعث آسیب دیدن آن می‌شود.

  • پین  (Register Select (RS پینی است که به نمایشگر می‌گوید در کدام قسمت حافظه اطلاعات ذخیره شود. اعمال مقدار ولتاژ ۳٫۳ ولت از طریق رزبری پای باعث ذخیره‌ی اطلاعات در رجیستر داده و با زمین کردن این پین (RS) اطلاعات در رجیستر دستور ذخیره می‌شود.
  • پین (Enable (E قابلیت نوشتن دیتا در رجیستر در حالت آماده بودن فعال می‌کند.
  • پین VO برای تنظیم کنتراست نمایشگر به کار گرفته می‌شود. این پین به یک پتانسیومتر متصل شده است.
  • پین A  پایه‌ی مثبت بک لایت یا پین تنظیم نور پس زمینه بوده و به ۵ ولت متصل می‌شود.
  • پین K  پایه‌ی منفی بک لایت یا پین تنظیم نور پس زمینه بوده و به صفر ولت نیز متصل می‌شود.

همانطور که در تصویر زیر مشاهده می‌کنید پین ورودی/ خروجی (GPIO) رزبری برای ارسال دیتا به صورت ۴ بیتی ، کنترل پین RS و فعال‌سازی نمایشگر (E) استفاده می‌شود.

دو پین آبی رنگ برای پایه‌های RS و E استفاده شده است. ۴ پین سبز رنگ برای ارسال دیتا ، پین مشکی رنگ زمین و پین قرمز رنگ میزان تغذیه‌ی نمایشگر (۵v) است. در شکل زیر شماتیک اتصالات نشان داده شده است. در این میان از برد بورد به منظور انشعابات تغذیه و اتصال پتانسیومتر نیز استفاده شده است.

کد سورس پروژه

کد پایتون این پروژه در ادامه قرار داده شده است. از دو راه می‌توانید آن را نصب کنید.

  • سورس کد را در داخل ویرایشگر متنی کپی و با نام py ذخیره کنید.
  • در صورتیکه رزبری پای به اینترنت متصل است میتوانید از وب سایت ما دانلود کنید. به این صورت که در داخل

(Terminal program (command line interface آدرس زیر را قرار داده سپس دانلود و نصب کنید.

 

 

# Partineh.com 2019

# Control an LCD 1602 display from Raspberry Pi with Python programming

#!/usr/bin/python

# Pinout of the LCD:

# ۱ : GND

# ۲ : ۵V power

# ۳ : Display contrast – Connect to middle pin potentiometer

# ۴ : RS (Register Select)

# ۵ : R/W (Read Write) – Ground this pin (important)

# ۶ : Enable or Strobe

# ۷ : Data Bit 0 – data pin 0, 1, 2, 3 are not used

# ۸ : Data Bit 1 –

# ۹ : Data Bit 2 –

# ۱۰: Data Bit 3 –

# ۱۱: Data Bit 4

# ۱۲: Data Bit 5

# ۱۳: Data Bit 6

# ۱۴: Data Bit 7

# ۱۵: LCD Backlight +5V

# ۱۶: LCD Backlight GND

import RPi.GPIO as GPIO

import time

# GPIO to LCD mapping

LCD_RS = 7 # Pi pin 26

LCD_E = 8 # Pi pin 24

LCD_D4 = 25 # Pi pin 22

LCD_D5 = 24 # Pi pin 18

LCD_D6 = 23 # Pi pin 16

LCD_D7 = 18 # Pi pin 12

# Device constants

LCD_CHR = True # Character mode

LCD_CMD = False # Command mode

LCD_CHARS = 16 # Characters per line (16 max)

LCD_LINE_1 = 0x80 # LCD memory location for 1st line

LCD_LINE_2 = 0xC0 # LCD memory location 2nd line

# Define main program code

def main():

  GPIO.setwarnings(False)

 GPIO.setmode(GPIO.BCM) # Use BCM GPIO numbers

 GPIO.setup(LCD_E, GPIO.OUT) # Set GPIO’s to output mode

 GPIO.setup(LCD_RS, GPIO.OUT)

 GPIO.setup(LCD_D4, GPIO.OUT)

 GPIO.setup(LCD_D5, GPIO.OUT)

 GPIO.setup(LCD_D6, GPIO.OUT)

 GPIO.setup(LCD_D7, GPIO.OUT)

# Initialize display

 lcd_init()

# Loop – send text and sleep 3 seconds between texts

# Change text to anything you wish, but must be 16 characters or less

while True:

 lcd_text(“Hello World!”,LCD_LINE_1)

 lcd_text(“”,LCD_LINE_2)

lcd_text(“Rasbperry Pi”,LCD_LINE_1)

 lcd_text(“16×2 LCD Display”,LCD_LINE_2)

time.sleep(3) # 3 second delay

lcd_text(“ABCDEFGHIJKLMNOP”,LCD_LINE_1)

 lcd_text(“1234567890123456”,LCD_LINE_2)

 time.sleep(3) # 3 second delay

 lcd_text(“I love my”,LCD_LINE_1)

 lcd_text(“Raspberry Pi!”,LCD_LINE_2)

 time.sleep(3)

lcd_text(“MBTechWorks.com”,LCD_LINE_1)

 lcd_text(“For more R Pi”,LCD_LINE_2)

time.sleep(3)

# End of main program code

# Initialize and clear display

def lcd_init():

 lcd_write(0x33,LCD_CMD) # Initialize

 lcd_write(0x32,LCD_CMD) # Set to 4-bit mode

 lcd_write(0x06,LCD_CMD) # Cursor move direction

 lcd_write(0x0C,LCD_CMD) # Turn cursor off

 lcd_write(0x28,LCD_CMD) # 2 line display

 lcd_write(0x01,LCD_CMD) # Clear display

 time.sleep(0.0005) # Delay to allow commands to process

def lcd_write(bits, mode):

# High bits

 GPIO.output(LCD_RS, mode) # RS

 GPIO.output(LCD_D4, False)

 GPIO.output(LCD_D5, False)

 GPIO.output(LCD_D6, False)

 GPIO.output(LCD_D7, False)

 if bits&0x10==0x10:

 GPIO.output(LCD_D4, True)

 if bits&0x20==0x20:

 GPIO.output(LCD_D5, True)

 if bits&0x40==0x40:

 GPIO.output(LCD_D6, True)

 if bits&0x80==0x80:

 GPIO.output(LCD_D7, True)

 

# Toggle ‘Enable’ pin

 lcd_toggle_enable()

 

# Low bits

 GPIO.output(LCD_D4, False)

 GPIO.output(LCD_D5, False)

 GPIO.output(LCD_D6, False)

 GPIO.output(LCD_D7, False)

 if bits&0x01==0x01:

 GPIO.output(LCD_D4, True)

 if bits&0x02==0x02:

 GPIO.output(LCD_D5, True)

 if bits&0x04==0x04:

 GPIO.output(LCD_D6, True)

 if bits&0x08==0x08:

 GPIO.output(LCD_D7, True)

 

# Toggle ‘Enable’ pin

 lcd_toggle_enable()

def lcd_toggle_enable():

 time.sleep(0.0005)

 GPIO.output(LCD_E, True)

 time.sleep(0.0005)

 GPIO.output(LCD_E, False)

 time.sleep(0.0005)

def lcd_text(message,line):

 # Send text to display

 message = message.ljust(LCD_CHARS,” “)

lcd_write(line, LCD_CMD)

 for i in range(LCD_CHARS):

 lcd_write(ord(message[i]),LCD_CHR)

#Begin program

try:

 main()

 except KeyboardInterrupt:

 pass

 finally:

 lcd_write(0x01, LCD_CMD)

 lcd_text(“So long!”,LCD_LINE_1)

 lcd_text(“MBTechWorks.com”,LCD_LINE_2)

 GPIO.cleanup()