رزبری پای - Raspberry PIمطالب علمی

راه اندازی LCD کاراکتری توسط Raspberry Pi 3

کتابخانه ی wirinPi به شما این امکان را میدهد که LCD های کارکتری محبوب 1-2و 4 خط را که بر پایه ی Hitachi HD44780U طراحی شده اند را راه اندازی وکنترل کنید. از کتابخانه ی مربوط به LCD و توابع آن به سادگی میتوانید برای راه اندازی LCD در برنامه های خود استفاده کنید. اما سیم کشی LCD کاری سخت و مشکل است که باید بادقت انجام دهید تا مشکلی برای LCD و رزبری ایجاد نشود. زمانی این کار دشوارتر میشود که برای راه اندازی LCD ازمد 8 بیت استفاده کنید در این حالت تعداد GPIO های مورد نیاز بدون احتساب تغذیه ، بک لایت و کنتراست به 10GPIO در رزبری نیاز می باشد. برای کاهش تعداد سیم ها و کم کردن تعداد GPIO ها از LCD در مد 4 بیت استفاده میکنیم. در این حالت تعداد GPOI های مورد استفاده به 6 عدد میرسند.
این نوع LCD های کاراکتری با این حال که در محدوده ولتاژ 5 ولت کار می کنند، توانای کار در ولتاژ 3.3 تا 5 ولت را دارند. این امر باعث میشود که GPIO های رزبری قدرت لازم برای راه اندازی LCD ونوشتن برروی آن را داشته باشند. مشکل زمانی ایجاد میشود که بخواهیم اطلاعاتی از LCD توسط رزبری بخوانیم.با توجه به اینکه ولتاژ خروجی LCD به 5 ولت میرسد ممکن است به GPIO های رزبری آسیب برسد.به همین دلیل در کتابخانه ی مربوط به LCD تابعی برای خواند از LCD وجو ندارد(راستش نیازی هم به خواندن از روی LCD نیست). برای راه اندازی LCD این دو کتابخانه را به ابتدای پروژه اضافه کنید.

#include <wiringPi.h>
#include <lcd.h>

قبل از هر کاری ابتدا باید LCD خود را تنظیم کنید. برای تنظیم LCD از کتابخانه ی زیر استفاده میشود.
int lcdInit (int rows, int cols, int bits, int rs, int strb, int d0, int d1, int d2, int d3, int d4, int d5, int d6, int d7) ;
باید این تابع را قبل از استفاده از توابع دیگر LCD فراخوانی کرد.
در دو پارامتر اول، ورودی سطر و ستون های LCD مشخص میشوند. در ورودی سوم این تابع تعداد بیت ها قرار میگیرند، 8یا 4 بیت. rs, strb نشان دهنده ی شماره ی پین های RS وSTORB ال سی دی است و در انتها ورودی های d0 تا d7 نشان دهنده ی بیت های متصل به نمایش گر هستند. در حالتی که LCD به صورت 4 بیتی تنظیم شده باشد تنها از 4 بیت اول استفاده میشود و بقیه ورودی ها صفر خواهند شد.
خروجی این تابع که با نام ‘ handle’ شناخته میشود در تمام توابع دیگر استفاده میشود. اگر خروجی این تابع منفی باشد نشان دهنده ی خطا می باشد. معمولا خطا در این حالت ناشی از پارامتر های غلط است.
نکته ی مهم: قبل از استفاده از این تابع باید نوع شماره گذازی GPIO را با تابع wiringPiSetup() تغییر دهید.

توابع:

lcdHome (int handle)
lcdClear (int handle)

تابع اول نشان گر LCD را به ابتدای خانه ی اول میبرد.
تابع دوم تمام نوشته های روی LCD را پاک میکند.

lcdDisplay (int fd, int state) ;
lcdCursor (int fd, int state) ;
lcdCursorBlink (int fd, int state) ;

این سه تابع به ترتیب LCD را خاموش یا روشن، نشان گر را خاموش یا روشن وحالت چشمک زنی نشان گر را خاموش یا روشن میکنند. در این سه تابع اگر مقدار state صفر باشد به منزله ی خاموش و اگر یک باشد به منزله ی روشن است.

lcdPosition (int handle, int x, int y) ;

این تابع مکان نشان گر را به محلx,yمیبرد.

lcdPutchar (int handle, unsigned char data) ;
lcdPuts (int handle, const char *string) ;
lcdPrintf (int handle, const char *message, …) ;

برای کامپایل برنامه هایی که در آن از کتابخانه ی LCD استفاده میشود، باید از کامند لاین استفاده کنیم، بطوریکه ابتدا برنامه را در Geany مینویسم و برای کامپایل کردن از دستورات ترمینال استفاده میکنیم.

ابتدا به دایراکتوری مربوط به پروژه رفته، برای مثال پروژه ای نوشته شده در رزبری پای من در دایرکتوری زیر است.

cd /pi/home/projects

حالا برای کامپایل برنامه دستور زیر را در ترمینال وارد میکنیم.

gcc -o example example.c -lwiringPi -lwiringPiDev X

example نام پروژه نوشته شده است. میتواند هر نام دلخواه دیگری باشد.
سپس با دستور زیر برنامه را اجرا کنید.

sudo ./example

در اینجا یک برنامه ی ساده برای نمایش کلمه Hello, world! در دو حالت 8 بیتی و 4 بیتی آورده شده .در این مثال از دو پتانسومتر برای تنظیم کنتراس و میزان نور پشت زمینه LCD استفاده شده است.

raspberry-pi-lcd-4-bit-mode

raspberry-pi-lcd-8-bit-mode-connection-diagram

********************************************
lcd 4bit
********************************************
#include <wiringPi.h>          
#include <lcd.h>               
//USE WIRINGPI PIN NUMBERS
#define LCD_RS  25               //Register select pin
#define LCD_E   24               //Enable Pin
#define LCD_D4  23               //Data pin 4
#define LCD_D5  22               //Data pin 5
#define LCD_D6  21               //Data pin 6
#define LCD_D7  14               //Data pin 7
int main(){
    int lcd;               
    wiringPiSetup();        
    lcd = lcdInit (2, 16, 4, LCD_RS, LCD_E, LCD_D4, LCD_D5, LCD_D6, LCD_D7, 0, 0, 0, 0);          
    lcdPuts(lcd, "Hello, world!");   }
********************************************
lcd 8bit
********************************************
#include <wiringPi.h>
#include <lcd.h>
//USE WIRINGPI PIN NUMBERS
#define LCD_RS  25               //Register select pin
#define LCD_E   24               //Enable Pin
#define LCD_D0  29               //Data pin D0
#define LCD_D1  28               //Data pin D1
#define LCD_D2  27               //Data pin D2
#define LCD_D3  26               //Data pin D3
#define LCD_D4  23               //Data pin D4
#define LCD_D5  22               //Data pin D5
#define LCD_D6  21               //Data pin D6
#define LCD_D7  14               //Data pin D7
int main(){
    int lcd;
    wiringPiSetup();
    lcd = lcdInit (2, 16, 8, LCD_RS, LCD_E, LCD_D0, LCD_D1, LCD_D2, LCD_D3, LCD_D4, LCD_D5, LCD_D6, LCD_D7);
    lcdPuts(lcd, "Hello, world!");}
********************************************

نویسنده: میثم سعیدی      msimeysamsaeedi @ gmail.com

 

نوشته های مشابه

2 دیدگاه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا