LCD

مطمئنم که همه شما با LCD آشنا هستید .LCD در بیشتر وسایل الکترونیکی کم مصرف وجود دارد از ساعت , وسایل اندازه گیری الکترونیکی و ماشین حساب گرفته تا موبایل و تلویزیون و رایانه قابل حمل و غیره که یکی از اجزای اصلی عصر دیجیتال محسوب میشود .

LCD مخفف کلمات Liquid Crystal ِِDisplay است .شاید این سوال برای شما هم پیش آمده باشد که چرا این کلمات کنار هم جمع شده اند .اصولا کریستال به نوع خاصی از آرایش ملکولها در مواد جامد گفته میشود پس کریستال مایع یعنی چی ؟
من در ابتدا یه توضیح ساده و مختصر در مورد نحوه عملکرد LCD میدهم بعد به کار خودمون میپردازیم .

ساختار اصلی یک LCD نوع TN از یک مایع کریستالی محصور بین دو لایه تشکیل شده . سطح داخلی بین این صفحات از یک ماده پلیمری شیار دار پوشیده شده که کریستال مایع را به صورت منظم در می آورد .این دو صفحه پلیمری نسبت به هم 90 درجه اختلاف دارند و باعث این میشود که ملکولها به صورت مارپیچی از بالا به پایین قرار گیرند . دو عدد صافیPolarizer در بالا و پایین هر سلول قرار گرفته و این صافی ها هم 90 درجه با هم اختلاف دارند و هر کدام فقط یکی از مولفه های نور را از خود عبور میدهند . در صورتی که کریستال مایع وجود نداشته باشد به دلیل این اختلاف 90 درجه ای هیچ نوری از آنها عبور نمی کند اما ساختار حلزونی مایع بین آنها باعث شکست نور میشود و نور را میچرخاند در نتیجه نور از هر دو عبور می کند اما در انتها نور به یک Reflector میرسد وبازتاب پیدا میکند و ناظر یک ضمینه نقره ای خاکستری رنگ را میبیند .
به دلیل ساختار قطبی ملکولهای مایع با اعمال یک ولتاژ به Electrode ها یک میدان الکتریکی در سلول ایجاد میشود و همه ملکولها جهت گیری میکنند و به صورت قائم نسبت به سطح صافی ها قرار میگیرند در این وضعیت نور بدون تغییر از صافی اول عبور میکند و تغییر زاویه نمی دهد و در نتیجه از صافی دوم عبور نمیکند و بازتاب نمیشود و ناظر یک منطقه تیره رنگ را میبیند .

فکر میکنم دیگه جواب سوال رو گرفته باشید . ملکولهای این نوع مایع هم خواص مواد جامد کریستالی را دارد هم خواص مواد مایع .

حالا میرسیم به ارتباط AVR و LCD . در بازار سه نوع LCD میتوان پیدا کرد :

Glass LCD
Graphic LCD
Alphanumeric LCD

نوع Glass همان LCD ی هست که در ماشین حساب میبینید و نیاز به چیپِDriver دارد .بعضی مدل های AVR در داخل خودشان این درایور را به صورت توکار دارند (مثلاًATMEGA 169) . نوع گرافیکی همان طور که از نام آن هم مشخص است برای ترسیم اشکال گرافیکی و متن به کار میرود برای مثال هم در تلفن های عمومی نمونه ای از آنها را میبینیم . اما موضوع بحث ما LCD کاراکتری هست که کاراکتر ها و اعداد را نمایش میدهد .این دو نوع آخر برخلاف Glass به صورت ماژول هستند و در داخل خودشان درایور دارند تنها کاری که باید انجام شود فرستادن Command ها ست تا کنترولر داخل LCD آنها را اجرا کند .

LCD کاراکتری دو نوع Interface دارد . 4bit و 8bit .نمیدونم پروسسور چهار بیتی هنوز پیدا میشود یا نه فکر میکنم در بعضی ماشین حساب ها بکار رود ولی چون من به فکر استفاده بهینه از پایه ها هستم از اینترفیس چهار بیتی استفاده میکنم با این حال باز هم یک پورت به LCD اختصاص می یابد در صورتی که با یک شیفت رجیستر میتوان دیتا ها رو به صورت سریال فرستاد و فقط سه پین از میکرو به عنوان Clock , Data و Latch اشغال میشود.در هنگام ریست شدن LCD باید نوع اینترفیسِ ارتباطی مشخص شود بعد از مشخص شدن نوع ارتباط نمی توان آنرا عوض کرد مگر اینکه دوباره ریست شود .برای نمایش یک کارکتر کد اسکی آن از طریق Data bus به وسیله میکرو به LCD فرستاده میشود . یکی از انواع رایج , LCD 16×2 هستش به این معنا که دارای دو خط است و میتواند 16 کاراکتر را در هر خط نشان دهد .

در جدول پایه های LCD و عملکرد هر یک را میبینید .

Function Name
Register select RS
Read/Write select R/W
Opration enabel signal E
High-order lines of data bus DB4-DB7
Low-order lines of data bus DB0-DB3
Power supply Vdd:+5v , Vss:GND Vdd,Vss
Contrast adjustment voltage Vo

دستوراتی که از میکرو به LCD ارسال میشود :

Code Instruction
D0 D1 D2 D3 D4 D5 D6 D7 R/w RS
1 0 0 0 0 0 0 0 0 0 Display Clear
x 1 0 0 0 0 0 0 0 0

Display/Cursor Home

S I/D 1 0 0 0 0 0 0 0

Entery
Mode Set

B C D 1 0 0 0 0 0 0

Display
ON/OFF

x x 0 N DL 1 0 0 0 0 Function Set
Acg 1 0 0 0

CG RAM
Address Set

Add 1 0 0

DD RAM
Address set

AC BF 1 0

Busy
Flag/Address
Counter Read

Write data 0 1

CG RAM/
DD RAM
Data Write

Read data 1 1

CG RAM/
DD RAM
Data Read

DD RAM: Display Data RAM
CG RAM:Character Generator RAM
Acg:Character Generator RAM Address
Add: Display Data RAM Address
AC:Addrass Counter
I/D=1:Increment ,I/D=0:Decrement
S=1: Display Shift On
S/C=1:Shift Display ,S/C=0:Move Cursor
R/L=1:Shift Right ,R/L=0:Shift Left
DL=1:8bit ,DL=0:4bit
N=1: Dual Line ,N=0:Single Line
BF=1:internal Opration ,BF=0:Ready for Instruction

از مزایای Codevision نسبت به دیگر کامپایلرها وجود CodeWizard است که میتوان به صورت ویژوال و با چند کلیک تنظیمات اولیه مربوط به میکرو را انجام داد . کدها به طور خودکار به پروژه اضافه میشود ولی من خودم ترجیح میدم که از کد ویزارد استفاده نکنم و کدها را خودم بنویسم .یکی از زبانه های آن مربوط به تنظیمات LCD میشود . کافیه پورت LCD را انتخاب کنید .نحوه اتصال پایه های میکرو به پایه های LCD نمایش داده میشود . بعد از انجام تنظیمات از منوی File گزینه Generate,Save and Exit را انتخاب کنید و پروژه را ذخیره کنید .

بقیه کد هایی که نیازی به آنها نیست را پاک کنید و فقط کد های زیر را باقی بگذارید .

 

 

#include <mega8.h>

// Alphanumeric LCD Module functions
#asm
   .equ __lcd_port=0x18 ;PORTB
#endasm
#include <lcd.h>

// Declare your global variables here

void main(void)
{
// Declare your local variables here

// Input/Output Ports initialization
// Port B initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTB=0x00;
DDRB=0x00;

// LCD module initialization
lcd_init(16);

while (1)
      {
      // Place your code here

      };
}

چند تا از توابعی که به صورت کتابخانه در کد ویژن وجود دارد به صورت زیر است:

unsigned char lcd_init(unsigned char lcd_columns)

initializes the LCD module, clears the display and sets the printing character position at row 0 and column 0. The numbers of columns of the LCD must be specified (e.g. 16). No cursor is displayed.
The function returns 1 if the LCD module is detected and 0 if it is not.
This is the first function that must be called before using the other high level LCD Functions.

void lcd_clear(void)

clears the LCD and sets the printing character position at row 0 and column 0.

void lcd_gotoxy(unsigned char x, unsigned char y)

sets the current display position at column x and row y. The row and column numbering starts from 0.

void lcd_putchar(char c)

displays the character c at the current display position.

void lcd_puts(char *str)

displays at the current display position the string str, located in RAM.

void lcd_putsf(char flash *str)

displays at the current display position the string str, located in FLASH.

برای نوشتن یک String که در Flash ذخیره شده از تابع lcd_putsf استفاده میکنیم و متن دلخواه را به عنوان پارامتر مثلاً به صورت «Hello AVR Word» بعد از تابع lcd_init مینویسیم .

برنامه بالا به صورت زیر میشود .

#include <mega8.h> 
#asm
   .equ __lcd_port=0x18 ;PORTB
#endasm
#include <lcd.h> 

void main(void)
{
PORTB=0x00;
DDRB=0x00;

lcd_init(16);
lcd_putsf("Hello AVR world!");
while (1){ };
}

این عکس رو چون قبلاً گرفتم و آپلود کردم LCD به پورت D وصل شده شما به بزرگی خودتون ببخشید و فکر کنید به پورت B وصلش کردم .

یک نمونه Datasheet هم براتون گذاشتم میتونید از اینجا دانلود کنید .

پایان!

Advertisements

دربارهٔ DeltaCode

Somewhere near the sky Far away from people Far away from noise Somewhere near yourself

Posted on فوریه 6, 2011, in AVR and tagged , , . Bookmark the permalink. بیان دیدگاه.

پاسخی بگذارید

در پایین مشخصات خود را پر کنید یا برای ورود روی شمایل‌ها کلیک نمایید:

نشان‌وارهٔ وردپرس.کام

شما در حال بیان دیدگاه با حساب کاربری WordPress.com خود هستید. بیرون رفتن / تغییر دادن )

تصویر توییتر

شما در حال بیان دیدگاه با حساب کاربری Twitter خود هستید. بیرون رفتن / تغییر دادن )

عکس فیسبوک

شما در حال بیان دیدگاه با حساب کاربری Facebook خود هستید. بیرون رفتن / تغییر دادن )

عکس گوگل+

شما در حال بیان دیدگاه با حساب کاربری Google+ خود هستید. بیرون رفتن / تغییر دادن )

درحال اتصال به %s

%d وب‌نوشت‌نویس این را دوست دارند: