‫‪ LCD‬های کاراکتری‬ و ‫ ارتباط با‬ ‫میکرو کنترلر ‪AVR‬‬

در بیشتر مدارهای میکروکنترلری ما نیاز به نمایش اطلاعات برای کاربر داریم، برای این کار راه های‬ ‫مختلفی وجود دارد از جمله استفاده از چند ‪، LED‬استفاده از ‪، 7segment‬استفاده از ‪ LCD‬ و …،اما ‪ LCD‬ها‬ ‫به علت داشتن قابلیتهای بیشتر نمایش،ابعاد مختلف و برنامه ریزی آسان اغلب مورد توجه قرار می‬ ‫گیرند.‬

‫‪ LCD‬ها شامل انواع کاراکتری و گرافیکی هستند که در اینجا نوع کاراکتری آن را معرفی و طرز استفاده‬ ‫آن را شرح می دهیم.‬

‫‪ LCD‬های کاراکتری نیز خود از نظر نحوه تبادل اطلاعات به دو دسته سریال و موازی تقسیم می شوند،از‬ ‫مزایای نوع سریال استفاده کمتر از پین های میکروکنترلر است.‬

‫از نظر اندازه،این ‪ LCD‬ها دارای تنوع مختلفی هستنداز جمله ‪ 16×4،40×2،32×2،16×2‬و … که منظور از‬ ‫این اعداد تعداد کاراکترهای قابل نمایش در یک سطر و تعداد سطرهای آن است،به عنوان مثال نوع‬ ‫‪ 16×2‬دارای 2 سطر است و در هر سطر تعداد 61 کاراکتر را نمایش می دهد.‬

‫ما در این مقاله در مورد نوع 16×2 ‬که بسیار پرکاربرد است صحبت می کنیم با این توضیح که سایر انواع‬ ‫موازی نیز مشابه همین نوع هستند.

این نوع ‪ LCD‬ ها بسته به اینکه دارای نور پشت زمینه باشند یا نه دارای 14 یا 16 پایه هستندکه در‬ ‫جدول زیر این پایه ها معرفی شده اند.

توضیحI/Oسمبولپایه
زمین منبع تغذیه—-VSS1
ولتاژ ۵ ولت منبع تغذیه—-VDD2
ولتاژ کنترل شدت نور صفحه—-VEE3
اگر RS=0 باشد رجیستر دستور انتخاب می شود.
اگر RS=1 باشد رجیستر دستور انتخاب می شود.
/RS4
R/W=0 برای نوشتن اطلاعات
R/W=1 برای خواندن اطلاعات
—-R/W5
فعال سازIE6
بیت ۰ باس دادهI/OD07
بیت ۱ باس دادهI/OD18
بیت ۲ باس دادهI/OD29
بیت ۳ باس دادهI/OD310
بیت ۴ باس دادهI/OD411
بیت ۵ باس دادهI/OD512
بیت ۶ باس دادهI/OD613
بیت ۷ باس دادهI/OD714
آنود LED پشت زمینه LCDBLA15
کاتود LED پشت زمینه LCDBLK16

‫توضیح مختصری راجع به پایه ها

پایه ‪ :RS‬ در داخل ‪ LCD‬دو رجیستر وجود دارد،که توسط پایه ‪  RS‬انتخاب می شوند.اگر 0=‪ RS‬شود‬ ‫رجیستر دستور (‪ (Instruction Register ‬انتخاب می شود تا فرمانهای مانند پیکره بندی ‪،LCD‬پاک کردن‬ ‫آن،جابجایی مکان نما و … برای ‪  LCD‬ارسال شود.‬
‫در صورتی که اگر 1=‪ RS‬شود،رجیستر داده )‪(Data Register‬انتخاب می شود،تا کاربر بتواند اطلاعاتی را‬ ‫که می خواهد روی ‪ LCD‬ بنویسد برای ‪ LCD‬ارسال کند.‬

پایه ‪  :R/W‬به کمک این پایه کاربر مشخص می کند که می خواهد اطلاعات را روی ‪  LCD‬بنویسد یا از‬ ‫روی آن بخواند.اگر این پایه یک شود اطلاعات از روی ‪ LCD‬ خوانده می شود و در صورتی که صفر شود‬ ‫اطلاعات روی آن نوشته می شود.‬

پایه ‪  :E‬اگر در این پایه پالسی از یک به صفر قرار داده شود،اطلاعاتی که روی پایه های ‪ D0‬ تا ‪ D7‬ قرار‬ ‫دارد درون یکی از رجیسترهایی که توسط پایه ‪ (Register Select) RS‬ مشخص می شود،جای می‬ ‫گیرد.حداقل زمانی که این پایه باید صفر باشد 450 نانو ثانیه است.‬

‫نحوه اتصال ‪ LCD‬ به میکروکنترلر

‫با اینکه این نوع ‪  LCD‬های کاراکتری دارای 8 پایه برای تبادل اطلاعات هستند(ارتباط 8 بیتی) اما دارای‬ ‫قابلیت ارتباط با 4 پایه را نیز دارند(ارتباط 4 بیتی0) که این امر باعث صرفه جویی در استفاده از پایه های‬ ‫میکروکنترلر می شود.‬

‫کتابخانه موجود برای ‪  LCD‬کاراکتری در نرم افزار ‪  Codevision‬نیز برای ارتباط 4 بیتی نوشته شده است.‬

نحوه اتصال ‪ LCD‬به میکروکنترلر‬


‫البته بهتر است که پایه های آزاد ‪  LCD‬توسط 4 عدد مقاومت به زمین متصل شوند.‬

توجه
این نحوه اتصال با توجه به برنامه ای است که درون کتابخانه نرم افزار ‪  Codevision‬نوشته شده‬ ‫است.‬

برنامه نویسی برای ‪LCD‬‬

‫آسان ترین روش برای پیکره بندی ‪ LCD‬در نرم افزار ‪  Codevision‬استفاده از ‪ CodeWizard‬ آن است.بعد‬‫از اجرای برنامه ‪  Codevision‬با زدن کلیدهای ‪ Shift+F2‬ منوی ‪  CodeWizard‬نمایش داده می‬ ‫شود.همانطور که در شکل زیر نمایش داده شده است،زبانه ‪  LCD‬را انتخاب کنید،سپس از قسمت مربوطه‬ ‫پورتی را که ‪  LCD‬با آن متصل است را مشخص کنید،همچینین نوع ‪) LCD‬تعداد کاراکترها برای هر‬ ‫سطر) را مشخص کنید.همانطور که مشاهده می کنید نحوه اتصال پایه های ‪ LCD‬ به میکروکنترلر در زیر‬ ‫این قسمت برای شما نمایش داده می شود.‬

سپس از منوی ‪ File‬گزینه ‪ Generate,Save and Exit‬انتخاب کنید(شکل زیر).‬

‫بعد از طی مراحلی که برای مشخص مردن محل ذخیره فایلهای برنامه است،محیط برنامه نویسی که‬ ‫شامل چند خط برنامه است ظاهر می شود،این برنامه ها در واقع همان تنظیماتی است که در‬ ‫‪ CodeWizard‬ انجام داده اید.‬

‫توجه کنید اگر از ‪  CodeWizard‬استفاده نمی کنید،باید قسمت های زیر را خودتان به برنامه اضافه کنید.‬

‫ ‫‬مشخص کردن پورتی که ‪ LCD‬به آن متصل است و همچنین اضافه کردن کتابخانه ‬‫‪  LCD‬این قسمتها باید در ابتدای برنامه اضافه شوند.‬
‫خطی از برنامه که بین دو عبارت ‪ #asm‬و ‪ #endasm‬آمده است یک دستور اسمبلی است و‬ ‫مشخص کننده پورتی است که ‪  LCD‬به آن متصل است،به عنوان مثال در شکل زیر‬ ‫‪LCD‬‬ ‫به پورت ‪  D‬متصل شده است و عدد ox12 ‬مشخص کننده آدرس این پورت است.‬ ‫

توجه
اگر میخواهید این پورت را تغییر بدهید باید حتما این آدرس را عوض کنید.‬

// Alphanumeric LCD Module Functions

#asm
.equ __lcd _port=0x12 ;PORTD
#endasm #include

نام پورتآدرس پورت
PORTA >ox1b
PORTBox18
PORTCox15
PORTDox12

‫اگر از پورت دیگری استفاده میکنید آدرس آن را میتوانید از جدول مربوط به آدرس‬ ‫رجیسترها در دیتاشیت میکروکنترلر مورد نظر بیابید.‬

‫‫•‬پیکره بندی ‪LCD‬‬:‫برای پیکره بندی ‪ LCD‬ در تابع ‪  main‬برنامه و قبل از عبارت (1)‪ While‬این عبارت را اضافه‬ ‫کنید:‬

//LCD module initialization
lcd_init(16) ;‫عدد 16 به معنای این است که ‪  LCD‬دارای 16 کاراکتر در هر سطر است،پس اگر از نوع‬ ‫دیگری استفاده میکنید این عدد را تغییر دهید.‬

توجه : اگر ‪  LCD‬به پورت مشخص شده در اول برنامه متصل نباشد،میکروکنترلر کار نخواهد کرد!!! زیرا‬ ‫این تابع منتظر خواندن اطلاعات از ‪ LCD‬می ماند و چون ‪ LCD‬به آن متصل نیست میکروکنترلر بقیه‬ ‫کدهای برنامه را اجرا نمی کند.‬

توجه: ممکن است بعد از اتصال ‪  LCD‬به میکروکنترلر،با اینکه همه موارد به درستی رعایت شده‬ ‫است،‪ LCD‬کار نکند!!! در نظر داشته باشید که بعضی از مدلهای میکروکنترلرهای ‪ AVR‬ دارای قابلیتی به‬ ‫نام ‪ JTAG‬ هستند. پایه های ‪ TMS،TDO،TDI‬و ‪ TCK‬مربوط به ‪ JTAG‬ هستند.مثلا برای مدلهای‬ ‫ ATMEGA16‬ و  ATMEG32 ‬این پایه ها روی پورت ‪ C‬ قرار دارند.برای اینکه بتوانید از این پایه ها به‬ ‫عنوان ورودی و خروجی استفاده کنید باید قابلیت ‪ JTAG‬را غیر فعال کنید.برای کار باید فیوزبیت‬ ‫‪  JTAGEN‬را از حالت برنامه ریزی شده خارج کرد)برای این کار باید عدد یک را در آن نوشت.

‬ ‫برای اینکه فیوزبیت ‪  JTAG‬را غیر فعال کنیم ابتدا باید فیوز بیتها را بخوانیم.برای این کار ابتدا وارد‬ ‫محیط ‪ Chip Programmer‬ می شویم(‪،(Shift+F4‬سپس از منوی ‪ Read‬گزینه (‪ Fuse Bit(s‬را انتخاب می‬ ‫کنیم.‬

‫بعد از اینکه فیوزبیتها خوانده شوند،پیغام زیر نمایش داده می شود.‬

‫همانطور که در شکل بالا دیده می شود مقابل عبارت ‪  JTAG‬عدد صفر نوشته شده است،این بدان معنی‬ ‫است که قابلیت ‪ JTAG‬ فعال است و نمی توان ‪ LCD‬ را به پورتی که ‪ JTAG‬ روی آن قرار دارد متصل کرد.‬ ‫برای ادامه روی گزینه ‪ Yes‬ کلیک می کنیم تا تغییرات خوانده شده را روی جدول فیوزبیتها در صفحه‬ ‫اصلی محیط ‪ Chip Programmer‬ اعمال شود.در شکل زیر وضعیت فیوزبیتهای خوانده شده نمایش داده‬ ‫شده است.

اکنون با کلیک کردن بر روی علامت کنار گزینه ‪،JTAG‬این علامت را حذف می کنیم.‬

‫اکنون باید مقادیر جدید فیوز بیت ها را روی میکروکنترلر ‪ Program‬ کنیم.برای این کار از منوی‬ ‫‪ Program‬گزینه (‪ Fuse Bit(s‬را انتخاب می کنیم.اکنون قابلیت ‪ JTAG‬غیر فعال شده است.‬

توابع ارتباط با ‪ LCD‬در ‪ Codevision‬‬

‫کتابخانه نوشته شده در ‪  Codevision‬برای ارتباط با ‪  LCD‬مدلهای زیر را پشتیبانی می کند:
‬40 ‫‪1×8, 2×12, 3×12, 1×16, 2×16, 2×20, 4×20, 2×24 , 2x‬‬

‫اما توابع این کتابخانه به دو دسته سطح پایین (‪ (Low Level‬و سطح بالا (‪ (High Level‬تقسیم می شوند.‬

‫توابع سطح پایین ارتباط با ‪:LCD‬‬

Void_lcd_ready(void
این تابع منتظر می ماند تا LCD آماده دریافت اطلاعات شود.این تابع باید همیشه قبل از تابع lcd_write_data فراخوانی شود.
‫ (Void_lcd_write_data(unsigned char data
این تابع محتویات data را درون رجیستر دستور LCD می نویسد.
‫Void cld_write _byte(unsigned char addr , unsigned char data)
‫این تابع محتویات ‪ dataرا در آدرس مشخص شده در ‪ addrدرون ‫حافظه ‪Display )DDRAM ‫‪ (Data RAMیا ‪ (Character Generator RAM) CGRAMمی نویسد.  
‫این تابع محتویات آدرس مشخص شده در ‪ addrدرون حافظه ‪(Display Data RAM)DDRAM ‫یا ‪ (Character Generator RAM) CGRAMرا می خواند  

مقالات مشابه

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

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

Fill out this field
Fill out this field
لطفاً یک نشانی ایمیل معتبر بنویسید.
You need to agree with the terms to proceed

پر بازدید ترین مقالات