معماری
خانه / آموزش مجازی / میکروکنترلر / دوره آموزشی برنامه نویسی میکروکنترلر AVR با کامپایلر CodeVision / جلسه CV,1.12 : راه اندازی کی پد توسط میکروکنترلر AVR با روش ماتریس

جلسه CV,1.12 : راه اندازی کی پد توسط میکروکنترلر AVR با روش ماتریس

یکی از راه های ساده ای برای انتقال اطلاعات به میکروکنترلر استفاده از کلیدها می باشد. اما هر کلید یک پین از میکروکنترلر را مصرف می کند. تصور کنید که بخواهید با استفاده از ۱۶ کلید اطلاعات را به میکرو وارد کنید. در این صورت دو پورت ۸ بیتی کاملا مصرف می شود و اگر پروژه ی شما به ادوات جانبی زیادی نیاز داشته باشد احتمالا با مشکل کمبود پورت مواجه خواهید شد. گذشته از این ۱۶ کلید جدا از هم فضای زیادی روی بورد مصرف می کند. پس باید به فکر راه کاری بهتر بود. چنین مشکلاتی باعث ابداع صفحه کلید های ماتریسی(کی پد ها) شد.

ساختمان داخلی کی پد

صفحه کلید ها در پایین ترین سطح خود به صورت ماتریسی از سطر ها و ستون ها تشکیل شده اند که keypad نام دارند. میکروکنترلر از طریق پورت ها می تواند به این سطرها و ستون ها دسترسی داشته باشد. یعنی ما می توانیم با استفاده از یک پورت هشت بیتی یک ماتریس ۴*۴ از کلید ها را به میکرو متصل کنیم.

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

وقتی یک کلید فشار داده می شود یک سطر و ستون به هم متصل می شوند.در غیر این صورت هیچ گونه اتصالی بین سطرها و ستون ها وجود ندارد. همان طور که در شکل زیر مشاهده می کنید. ۴ سطر و ۴ ستون وجود دارد که هیچ گونه اتصالی به هم دیگر ندارند. برای مثال اگر کلید s1 فشرده شود. سطر ۱ و ستون ۱ به هم دیگر وصل می شوند. برای اتصال این صفحه کلید کوچک به میکروکنترلر در بدترین حالت ۸ پین مصرف می شود. یعنی تا این جا توانستیم نصف پین ها را آزاد کنیم.

اگر با دقت به شکل داخلی کی پد نگاه کنید ملاحظه می کنید که چهار تا از پین های پورت A به عنوان خروجی وچهارتا ی دیگر به عنوان ورودی تعریف شده اند .دلیل این کار چیست؟

طریقه اسکن کی پد

تا این جا نحوه اتصال کی پد به میکروکنترلر مشخص شد. اما برای مشخص شدن کلید فشرده شده باید از روشی استاندارد استفاده کرد که به روش اسکن معروف است. یعنی میکروکنترلر به صورت پیوسته صفحه کلید را اسکن می کند تا کلید فشرده شده را تشخیص دهد.اگر سطرهارا به خروجی و ستون ها را به ورودی وصل کنیم و و مقدار خروجی را ۱ تعریف کرده باشیم به طوری که هر چند میلی ثانیه یکی ازپین های خروجی را ۱ و بقیه را ۰ کند در این صورت  میکروکنترلر به صورت پیوسته صفحه کلید را اسکن می کند تا کلید فشرده شده را تشخیص دهد.

بعد اطلاع از فشرده شدن کلید باید شماره کلید تشخیص داده شود. برای این منظور بسته به نیاز به هر کلید یک شماره یا کد اختصاص داده شده و در یک آرایه در ابتدای برنامه ذخیره می شود.

در ادامه برای فهم بهتر وارد فاز کد نویسی و کار با برنامه  پروتئوس میشویم:

راه اندازی

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

سپس طبق شکل زیر کی پد را به میکرو وصل می کنیم:

برای مشاهده عملکرد کی پد ۸ عدد led  به عنوان خروجی پروژه به پورت B وصل می کنیم

میدانیم که برای خواندن وضعیت یک پورت باید همیشه یک سطح منطقی معین روی آن باشد. به همین جهت باید چهار پین پورت D را که به عنوان ورودی تعریف کرده ایم pull down کنیم چون وقتی کلید فشرده نیست منطق صفر روی پایه میکرو قرار گیرد طبق شکل زیر:

 

برنامه نویسی

حال نرم افزار Codevision AVR را باز و پروژه جدید ایجاد کرده و از پنجره Codewizard در قسمت چیپ  Atmega 8 را انتخاب مینماییم و در قسمت port تمام بیتهای پورت B را خروجی می کنیم و برای پورت D طبق شکل زیر ورودی وخروجی را مشخص میکنیم:

کی پد

سپس از قسمتprogramگزینهGenerate ,save and exit را انتخاب نموده وفایل خود را ایجاد میکنیم

حال میتوانیم کدهای خود را بنویسیم

برای نوشتن کدها پس از includ mega8.h و includ delay.h باید یک متغیر از نوع char تعریف کرده و در داخل حلقه while (1) کدهای زیر را مینویسیم:

کدهای اصلی

PORTD.0=1;PORTD.1=0;PORTD.2=0;PORTD.3=0;delay_ms(10);
if (PIND.4==1) a=1;
if (PIND.5==1) a=2;
if (PIND.6==1) a=3;
if (PIND.7==1) a=4;
PORTD.0=0;PORTD.1=1;PORTD.2=0;PORTD.3=0;delay_ms(10);
if (PIND.4==1) a=5;
if (PIND.5==1) a=6;
if (PIND.6==1) a=7;
if (PIND.7==1) a=8;
PORTD.0=0;PORTD.1=0;PORTD.2=1;PORTD.3=0;delay_ms(10);
if (PIND.4==1) a=9;
if (PIND.5==1) a=10;
if (PIND.6==1) a=11;
if (PIND.7==1) a=12;
PORTD.0=0;PORTD.1=0;PORTD.2=0;PORTD.3=1;delay_ms(10);
if (PIND.4==1) a=13;
if (PIND.5==1) a=14;
if (PIND.6==1) a=15;
if (PIND.7==1) a=16;
if (a==9) PORTB.0=1; else PORTB.0=0;
if (a==10) PORTB.1=1; else PORTB.1=0;
if (a==11) PORTB.2=1; else PORTB.2=0;
if (a==5) PORTB.3=1; else PORTB.3=0;
if (a==6) PORTB.4=1; else PORTB.4=0;
if (a==7) PORTB.5=1; else PORTB.5=0;
if (a==1) PORTB.6=1; else PORTB.6=0;
if (a==2) PORTB.7=1; else PORTB.7=0;
}

بعد را نوشتن  وکامپایل کردن کدها آن را در برنامه پروتئوس اجرا میکنیم که با فشار دادن هر یک از کلید های ۱ تا ۸ هر کدام از LED ها ی ۱ تا ۸ روشن خواهد شد.

3 دیدگاه

  1. سلام.
    لطفا یه برنامه ساده برای ایجاد menu با mega16 و lcd تو سایت خوبتون بزارید.
    اگه کلید (button) برای ok وexit و چهار کلید دیگه هم برای حرکت در منو و کم و زیاد کردن داشته باشه دیگه عالی میشه.
    تو اینترنت همچین چیزی با کدویژن پیدا نکردم.

  2. سلاام من ی سوالی داشتم ی برنامه نوشتم با codevision که قسمت اولش کیپد اجرا بشه و تا زمانی که کلید اینترو نزدیم(کلید مربع)نره مرحله ی بعد کیپدم ۳*۴ و به سه تا ستون مقاوت ۵k وصل کردم پول دان کردم برنامه تو شبیه سازی کاملن درسته ولی وختی تو عمل بستم کیپد کار نمکنه ینی بدون اینکه اینترو بزنم میره مرحله ی بعد و اصن کیپد کار نمکنه بره ساختش هم مث شبیه سازی مقاومتارو وصل کردم نمدونم مشکل کجاس ممنون میشم کمکم کنین

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

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

قالب وردپرس