راه اندازی lcd کاراکتری با avr در نرم افزار کدویژن – آموزش AVR جلسه چهارم

راه اندازی lcd کاراکتری با AVR

راه اندازی lcd کاراکتری با avr

از اولین ارتباط های مورد نیاز در AVR ارتباط این میکروکنترلر با LCD ها هستش تا بتونیم مثلا دما ، زمان و یا هر نوع اطلاعات دیگه ای رو به کاربر نمایش بدیم .

در این بخش در نظر داریم آموزش راه اندازی lcd کاراکتری با avr رو آموزش بدیم .پس اگر تابحال با این قطعه کار نکردین این آموزش رو حتما دنبال کنید 🙂

ال سی دی کاراکتری چیست ؟

در ابتدا باید به این سوال جواب بدیم که ال سی دی کاراکتری چیست ؟

هر ال سی دی کاراکتری دارای تعداد مشخصی سطر و ستون میباشد که ما میتوانیم جملات ، اعداد و یا نماد هایی رو در این خونه ها به نمایش بگذاریم، مثل تصویر زیر که یک lcd 16*2 رو مشاهده میکنید:

این lcd دو سطر داره و 16 ستون.

lcd کاراکتری 16*2

lcd ها از لحاظ نوع مدل های مختلفی دارن ، مثلا بجز مدل 16*2 سایز های 2*8 و یا 4*20 هم مدلهای پراستفاده بازار محسوب میشن.

lcd ها برای اتصال به میکروکنترلر 2 روش موازی و سریال دارن که ما در این آموزش از روش ارتباط سریال استفاده میکنیم چون تعداد پایه های کمتری رو درگیر میکنه.

طریقه ی اتصال پایه های LCD کاراکتری

ما در این آموزش قراره از lcd کاراکتری 16*2 استفاده کنیم .

این lcd 16 پایه داره و باید طبق جدول زیر هر پایه به تغذیه و یا میکرو وصل بشه .

پایه های دیتا و همینطور rd و en و rs رو در برنامه هامون باید مشخص کنیم که به کدوم پین های میکرو متصل بشن!

پایه های lcd16*2

توضیح روی lcd :

پایه های lcd16*2

 

نمایش متن روی lcd با avr :

برای نمایش متن روی lcd با avr با یک مثال جلو میریم و در نظر داریم روی صفحه lcd بنویسیم levinic 🙂

یک پروژه ایجاد میکنیم در کدویژن AVR و در کدویزارد در بخش alphanumeric lcd تیک فعال کردن LCD رو میزنیم و صفحه برای ما به شکل زیر در می آد:

lcd در کدویزارد

در بخش کنترلر تایپ، 2 نوع خانواده برای نوع کنترلر به کار رفته در lcd نوشته شده ، که توی دیتاشیت مربوط به lcd میتونید بفهمید از چه نوعی lcd شما هستش .

 عموم lcd های بازار دارای کنترلر HD44780 هستند!

در ارتباط از نوع سریال فقط از 4 پایه ی دیتا استفاده میشود و 4 پایه ی lcd بلااستفاده میماند!

در خط دوم تعداد ستون های lcd رو مشخص میکنیم ، که ما مقدار 16 میدیم بهش، مثلا اگر lcd 20*4 داشتیم باید مقدار 20 میذاشتیم.

و در بخش آخر پایه های دیتا رو که بالاتر باهاشون اشنا شدیم مشخص میکنیم که به کدوم پین ها متصل بشن.(هیچ محدودیتی ندارین که از پورت های مختلف استفاده کنید).

 اگه تازه کار هستید فعلا از portc استفاده نکنید برا متصل کردن lcd ، چون jtag روی این پورت فعاله و باید یه سری کارای دیگه هم انجام بدید تا بتونید از این پورت استفاده کنید ، به همین خاطر برای افراد تازه کار توصیه میشه که فعلا از Portc برا متصل کردن lcd استفاده نکنند تا جلسات آتی..

بعد از اعمال تغییرات کد رو generate میکنیم!

 

کد خروجی :

 

دانلود کد + شبیه سازی

 

قبل از اینکه مثالهای بیشتری برای آموزش راه اندازی lcd کاراکتری با کدویژن بزنیم بریم سراغ دستورات lcd در کدویژن تا شاید دستور های بهتری رو هم برای نمایش متن پیدا کنیم .

 

دستورات lcd در کدویژن

 

دستور lcd_clear

شکل دستور:

دستور lcd_clear تمامی اطلاعات نمایش داده روی lcd رو پاک میکنه و مکان نما رو روی خونه 0و0 میبره.

 

دستور lcd_gotoxy

شکل دستور:

دستور lcd_gotoxy مکان نما رو به خونه ی x,y تعیین شده میبره. مثلا اگر بخوایم متنی از سطر دوم نوشته بشه با تغییر x,y میتونیم مکان نما رو به اونجا ببریم و از خونه ی مورد عمل نوشتن رو انجام بدیم.

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

 

دستور lcd_putchar

شکل دستور:

این دستور کاراکتر c رو در مکان نمای فعلی نشون میده.

 

دستور lcd_puts

شکل دستور:

این دستور رشته ی str رو که در حافظه Sram ذخیره شده نمایش میده.

برای استفاده از این دستور باید کتابخونه ی stdio.h فراخوانی بشه.

 

دستور lcd_putsf

شکل دستور:

این دستور رشته ی str رو که در حافظه flash ذخیره شده نمایش میده.

 

دستور sprintf

این دستور متغیر x رو به رشته ی str تبدیل میکنه.

 

اگر در درک توابع lcd در codevision مشکل دارین و متوجه نشدین چه کاری انجام میدن ، چند پروژه ی ساده برای آشنایی شما با توابع lcd آماده کردیم :

پروژه های راه اندازی lcd کاراکتری با avr

فکر میکنم بین این توابع درک sprintf یکم از بقیه سخت تر باشه ، پس اول یک مثالی میزنم که این تابع هم در اون استفاده شده باشه.

مثال 2 : برنامه ای بنویسید که یک متغیر صحیح برابر 32 را با نام L روی صفحه نمایش دهد.

در بخش کدویزارد همانند برنامه قبلی عمل میکنیم و در حلقه while کدمون به شکل زیر در میاد:

در این برنامه ما میخوایم برای راه اندازی lcd کاراکتری با avr از دستور lcd_puts استفاده کنیم ، که برای استفاده از این دستور باید کتابخونه ی stdio.h معرفی بشه.

 

 

این برنامه رو که در پروتئوس یا عملی تست کنید میبینید که خروجی به شکل زیره:

آموزش کار با lcd در کدویژن

در این برنامه 2 متغیر تعریف کردیم:

مقدار صحیح رو که برنامه در سوال خواسته بود اما متغیر رشته رو برای تبدیل کردن و ریختن اطلاعات در اون نیاز داریم.

اگر با آرایه ها در زبان C ، آشنایی ندارید : آرایه ها در زبان C

در خروجی مشاهده میکنید که مقدار L =  در کنار مقدار 23 کنار هم قرار گرفتن .در حالی که مقدار L =  یک مقدار کاراکتری هستش و مقدار 23 یک متغیر .

برای اینکه ما بتونیم همزمان مقدار یک متغیر و یک کاراکتر رو باهم نشون بدیم از دستور sprintf استفاده کردیم.دستور sprintf متغیر ها و کاراکتر هارو میگیره و تبدیل به رشته میکنه و در کنار هم آماده نمایش دادن میکنه!

توضیحات برنامه :

در خط اول از حلقه ی بی نهایت فرمان دادیم تا به نقطه 0 و 0 مکان نما انتقال داده بشه.

و در خط بعد

در بخش اول str رو مشخص کردیم، مکانی برای ذخیره ی رشته ای که ایجاد میشه.

در بخش دوم عبارتی که میخوایم در رشته ریخته بشه رو نوشتیم ، و در بخش سوم باید نام متغیر مورد نظر رو بنویسیم. (ما نمیتونیم در بخش دوم بیایم و نام متغیر رو بنویسیم چون اگر بنویسیم L کامپایلر فکر میکنه منظور ما کاراکتر L هستش و خودِ L رو چاپ میکنه ، پس بجاش از کد فرمت %d استفاده میکنیم و در بخش سوم میگیم منظور ما متغیر L هستش و حالا هر مقداری در متغیر L تعریف شده باشه رو به نمایش میذاره)

اگر با کدهای فرمت در C آشنا نیستید مطالعه کنید :(مخصوصا مثال 2) کد فرمت در C

تا این بخش اطلاعاتی که باید نمایش داده بشه آماده شدن اما نمایش داده نشدن !

در خط آخر ، چون یک رشته در اختیار ما قرار داره از دستور lcd_puts برای نمایش در خروجی استفاده کردیم.

 

پروژه 3: اعداد یک تا 50 را بر روی LCD با تاخیر نیم ثانیه نمایش دهید.

 

 

تقریبا همه ی برنامه ها در آینده نیاز به LCD دارند و تمرینی خواهند بود برای آشنایی بیشتر با LCD ها!پس از توضیح یا مثال بیشتر هم میگذریم..

البته توضیحاتی هم برای فارسی نویسی و همچنین متن متحرک روی lcd وجود داره که در جلسات پیشرفته از سری آموزش Avr به اون ها هم میپردازیم.

راه اندازی lcd کاراکتری با avr هم همینجا به پایان رسید 🙂

موفق باشید.

حمیدرضا مودت

یک مهندس الکترونیک ، علاقه مند به یاد دادن و یاد گرفتن پیرامون دانش برق و الکترونیک

مطالب مرتبط