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

جلسه CV,1.3 : کلید و میکروکنترلر، پایه ورودی و دستور شرطی IF

 

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

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

میکروکنترلر استفاده شده در این آموزش ATmega8 می باشد.

میکروکنترلر ATmega8 همانطور که تصویر می بینید دارای ۲۸ پایه و سه پورت به نام های B،C،D است. هر یک از این پورت ها دارای ۸ پایه می باشند که ما در این آموزش از دو پایه PB0 و PB1 استفاده خواهیم کرد.

فایل های برنامه

می توانید سورس فایل های پروتئوس و کدویژن را از لینک زیر دانلود کنید.

دانلود

 

طراحی مدار در نرم افزار پروتئوس

ابتدا در نرم افزار پروتئوس به کمک تصویر زیر میکروکنترلر را به مدار اضافه می کنیم.

و سپس در قسمت Keywords (مرحله ۳ تصویر قبل) عبارت LED-RED را جستو جو کرده و led را به مدار اضافه می کنیم.

به همین ترتیب عبارت Button را جستو جو کرده و طبق روش قبلی کلید به مدار اضافه میکنیم و اتصالات را طبق تصویر زیر انجام می دهیم.

همانطور که در تصویر می بینید به پایه PB0 میکروکنترلر یک مقاومت با مقدار ۱۰کیلو اهم وصل کرده ایم تا پایه در حالتی که کلید قطع است مقدار صفر داشته باشد و هنگامی که کلید را وصل می کنیم مقدار پایه یک شود. اگر مقاومت را از مدار حذف کنیم، هنگام قطع کردن کلید پایه هیچ مقداری نخواهد داشت، زیرا پایه های میکروکنترلر فقط می توانند مقدار های صفر ( صفر ولت ) و یک (۵ ولت) را شناسایی کنند. در غیر اینصورت میکروکنترلر به درستی عمل نخواهد کرد.

برا کسب اطاعات بیشتر در این باره این آموزش را ببینید:

Pull down پول دان و Pull up پول آپ چیست ؟

تنظیمات بخش CodeWizard

ابتدا وارد نرم افزار CodeVision شده و یک پروژه جدید ایجاد کنید. بدین منظور به مسیر زیر بروید:

File > New > Project

اکنون از شما سوال می کند که آیا میخواهید از CodeWizard استفاده کنید؟ دکمه Yes را زده و در صفحه بعد تیک گزینه ATmega را انتخاب کرده و دکمه OK را بزنید.

در قسمت Chip آی سی ATmega8 را انتخاب می کنیم و سرعت کار میکرو را روی ۱MHz تنظیم می کنیم.

سپس در پنجره باز شده طبق تصویر زیر پورت های خروجی و ورودی را مشخص کنید.

طبق تصویر بالا از پورت B میکروکنترلر بیت ۰ را به صورت پیش فرض یعنی ورودی یا in انتخاب می کنیم. تمامی پایه هایی که به صورت ورودی تنظیم می شوند توانایی اتصال به کلید را دارا خواهند بود.

اما بیت ۱ از همان پورت را به صورت خروجی یا Out تنظیم می کنیم. با انجام این کار میکروکنترلر توانایی ارسال اطلاعات از این پایه را به صورت ۰ یا ۱ خواهد داشت. برای اتصال LED به میکروکنترلر از پایه های خروجی استفاده می کنیم.

بعد در همان پنجره از قسمت Program گزینه Generat,Save and Exit را انتخاب کنید تا برنامه کد های لازم برای تنظیمات انجام شده را بسازد. اکنون در سه مرحله برنامه باید ذخیره شود، پس از تعیین محل ذخیره سازی هر سه فایل را با نام های دلخواه ذخیره کنید تا تمامی فایل های مربوط به برنامه و تنظیمات شما تشکیل شوند.

 

بررسی الگورتیم برنامه

هدف ما در این برنامه روشن و خاموش کردن یک عدد LED توسط یک عدد کلید می باشد. این کار در دنیای آنالوگ و بدون میکروکنترلر به سادگی امکان پذیر است. اما در این آموزش برای یاد گیری بهتر نحوه راه اندازی کلید با میکروکنترلر، از میکروکنترلر ATmega8 استفاده خواهیم کرد.

در تصویر زیر کلید متصل شده به میکروکنترلر خاموش است. همانطور که مشاهده می کنید میکروکنترلر نیز LED را خاموش کرده است:

اما در این تصویر کلید روشن شده و میکروکنترلر LED را روشن کرده است:

به طور کللی ساده ترین الگروتیم برای این کار به صورت زیر است:

  • اگر کلید روشن بود LED را روشن کن
  • اگر کلید خاموش بود LED را خاموش کن

اما همانطور که در گزشته متوجه شده اید یک بار بررسی کلید و اعمال دستورات برای ما کافی نیست. در الگوریتم بالا میکروکنترلر یک بار کلید را بررسی خواهد کرد و نتیجه را اعمال خواهد کرد و پس از آن اگر وضعیت کلید تغییر دهد دیگر دستوری را اجرا نخواهد داد و اگر دستورات به پایان برسد در نهایت میکوکنترلر خاموش شده و از نو روشن می شود.

برای این که میکروکنترلر را وادار کنیم دائما حواسش به کلید باشد و تغییرات کلید را در LED اعمال کند باید الگوریتمی به صورت زیر نوشته شود:

  1. بررسی را شروع کن
  2. اگر کلید روشن بود LED را روشن کن
  3. اگر کلید خاموش بود LED را خاموش کن
  4. دوباره به ابتدای برنامه برگرد و بررسی را شروع کن

در برنامه فوق میکروکنترلر تا زمانی که روشن باشد وضعیت کلید را دائما بررسی خواهد کرد و در صورت تغییر در وضعیت کلید آن تغییرات را در LED اعمال خواهد کرد.

حال همین الگوریتم را به کد های برنامه نویسی شبیه تر می کنیم:

  1. شروع حلقه بینهایت
  2. اگر پایه B.0 (کلید) روشن بود:
  3. پایه B.1 یا LED را روشن کن.
  4. اگر پایه B.0 (کلید) خاموش بود:
  5. پایه B.1 یا LED را خاموش کن.
  6. تکرار حلقه بینهایت

به جای خط ۴ الگوریتم نوشته شده می توانید از “در غیر این صورت” هم استفاده کنید. بدین معنا که اگر پایه B.0 روشن بود یک کاری را انجام دهد و در غیر این صورت کاری دیگر را. در این حالت برنامه به صورت زیر نوشته می شود:

  1. شروع حلقه بینهایت
  2. اگر پایه B.0 (کلید) روشن بود:
  3. پایه B.1 یا LED را روشن کن.
  4. در غیر این صورت:
  5. پایه B.1 یا LED را خاموش کن.
  6. تکرار حلقه بینهایت

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

در این حالت برای پرسش مقدار یک پایه از دو مساوی کنار هم به صورت “==” و برای اعمال یک دستور در یک پایه خروجی از یک مساوی “=” استفاده می کنیم.

  • شروع حلقه بینهایت
  • اگر B.0==1
  • پایه B.1=1
  • در غیر این صورت:
  • پایه B.1=0
  • تکرار حلقه بینهایت

در جلسات قبلی با نحوه نوشتن دستور حلقه بینهایت و نحوه روشن و خاموش کردن یک پایه را آموختید.

لذا دستوراتی که تا به حال آموخته اید را در الگوریتم نوشته شده جایگزاری میکنیم:

while (1)

{

اگر B.0==1

PORTB.1=1;

در غیر این صورت

PORTB.1=0;

}

نکته: در برنامه نویسی میکروکنترلر های AVR پایه های خروجی به صورت PORT تعریف می شود. برای مثال برای روشن کردن پایه B.1 از دستور روبرو استفاده می کنیم: PORTB=1

اما رجیستر های پایه های ورودی دیگر به صورت PORT نشاخته نمی شوند. مقدار پایه های ورودی میکروکنترلر در رجیستر PIN ذخیره می شود. بنا بر این برای بررسی این که آیا مقدار ورودی در یک پایه ۱ است یا نه از عبارت روبرو استفاده می کنیم: PINB.0==1

پس فعلا نسخه نهایی الگورتیم شما به صورت روبرو تغییر خواهد کرد:

while (1)

{

اگر PINB.0==1

PORTB.1=1;

در غیر این صورت

PORTB.1=0;

}

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

دستور شرطی IF

در الگورتیم نوشته شده از عبارت “اگر” برای بررسی یک داده ورودی و اعمال دستورات مرتبط با آن استفاده کردیم.

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

شکل کللی دستور شرطی یا IF به صورت زیر است:

if (شرط  یا شرط ها)

{

دستورات مربوط به شرط

}

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

همچنین می توانید یک سری دستورات را برای زمانی که شرط شما صحیح نباشد در نظر بگیرید تا پردازنده در صورتیک شرط شما صحیح نبود فقط آن دستورات را اجرا کند. برای این کار دستور else را به عنوان یک دستور مکمل برای if استفاده می کنیم.

if (شرط  یا شرط ها)

{

اگر شرط صحیح باشد این دستورات اجرا می شوند

}

else

{

اگر شرط اشتباه باشد این دستورات اجرا می شوند

}

در زبان برنامه نویسی C زمانی از علامت های ” { } ” استفاده می کنیم که تعداد دستورات در یک محدوده مشخص بیشتر از یک مورد باشد. بدین صورت که اگر دستور شما فقط یک دستور باشد می توانید کد های خود را به صورت زیر بنویسید:

if (شرط  یا شرط ها)

اگر شرط صحیح باشد این دستور اجرا می شود

else

اگر شرط اشتباه باشد این دستور اجرا می شود

از الگوریتم تا برنامه نویسی

حال که با دستور if آشنا شده اید الگوریتم نوشته شده را به صورت کامل به کد ها تبدیل می کنیم. در الگوریتم نوشته شده به جای عبارت “اگر” از عبارت یا دستور “if” و به جای شرط از PINB.0==1 استفاده می کنیم. در این حالت صحیح بودن شرط به این معناست که مقدار ورودی در پایه B.0 برابر یا ۱ باشد.

همچنین به جای عبارت “در غیر این صورت” که به دستور شرطی “اگر” اشاره دارد از دستور else استفاده می کنیم.

دقت کنید که شروط دستور if باید داخل پرانتز نوشته شود و چون دستورات مربوط به شرط تنها یک دستور می باشد نیازی به استفاده از  ” { } ” در دستور if نیست. اما به دلیل زیاد بودن دستورات داخل while ، برای این دستور از ” { } ” استفاده شده است:

while (1)

{

if (PINB.0==1)

PORTB.1=1;

else

PORTB.1=0;

}

برنامه شما نوشته شده و آماده است. برنامه نوشته شده و حلقه بینهایت خود را در کد های تولید شده توسط خود نرم افزار به صورت زیر جایگزاری کنید:

در صورتی که برای دستورات مربوط به شرط if از ” { } ” استفاده کرده باشید کد های شما به این صورت خواهد بود:

نتیجه کار در دو حالت ذکر شده هیچ تفاوتی نخواهد کرد.

 

این آموزش در حال تکمیل است.

 

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

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

قالب وردپرس