جلسه CV,1.5 : فلاشر 8 کاناله LED با AVR – اتصال کلید به میکروکنترلر

دوره آموزشی برنامه نویسی میکروکنترلر AVR با کامپایلر CodeVision ، فصل 1 : برنامه نویسی ساده با Codevision ، جلسه 5 : فلاشر 8 کاناله LED با AVR – اتصال کلید به میکروکنترلر

در این آموزش به کمک نرم افزار های Proteus و CodeVision-AVR یک فلشر 8کاناله با استفاده از میکروکنترلر ATmega8 و 4کلید  برای تغییر حالت های فلش زدن LED ها استفاده میکنیم.

میکروکنترلر را می توان یک کامپیوتر کامل نامید که در ابعاد کوچکتر دارای حافظه موقت، پردازنده و ورودی / خروجی هایی است. به کمک این ورودی خروجی ها که پایه های میکروکنترلر نامیده می شوند، می توان قطعات دیگر را کنترل نمود. میکروکنترلر ها انواع مختلفی دارند که ما در این آموزش از نوع ATmega8 استفاده می کنیم.

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

قبل از شروع حتما این آموزش را مطالعه نمایید.

 آموزش راه اندازی LED و کلید در میکروکنترلر AVR

دانلود فایل سورس فلاشر 8 کاناله

دانلود

نرم افزار پروتئوس

ابتدا برای شروع طراحی فلاشر 8 کاناله در نرم افزار پروتئوس،کمک تصویر زیر میکروکنترلر را به مدار اضافه می کنیم.

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

به همین ترتیب عبارت Button را جست و جو کرده و به لیست قطعات خود وارد میکنیم و 4 کلید به مدار اضافه میکنیم.دقت کنید که پس از اضافه شدن هر قطعه به لیست قطعات به هر تعداد دلخواه می توان از ان قطعه در مدار استفاده کرد و لازم به جست و جوی دوباره ی ان قطعه نیست.برای مثال پس از جست و جو و اضافه کردن LED به لیست قطعات می توان با انتخاب LED از لیست قطعات به هر تعداد دلخواه از ان در مدار استفاده کرد و لازم به جست و جو و اضافه کردن دوباره نیست.

و مدار را بدین صورت طراحی می کنیم.

در مدار بایستی تمامی 4 مقاومت 10 کیلو اهم (10k) باشند.(با دوبار چپ کلیک روی مقاومت می توان مقدار مقاومت را تغییر داد)

 

فلاشر 8 کاناله در نرم افزار پروتئوس

سپس از قسمت terminals mode گزینه power انتخاب می کنیم.(طبق تصویر زیر) و به مدار اضافه می کنیم.

سپس ground را از قسمت terminals mode را انتخاب می کنیم.(طبق تصویر) و به مدار اضافه می کنیم.

 

قسمت کد نویسی

ابتدا برای شروع کد نویسی فلاشر 8کاناله وارد نرم افزار CodeVision شده و یک پروژه جدید ایجاد کنید.برای ایجاد پروژه جدید مطابق شکل زیر عمل کنید؛

برنامه نویسی فلاشر 8 کاناله با AVR

بعد از انجام تنظیمات مربوطه باید کتابخانه delay را فراخوانی کنیم،برای اینکار کافی است قبل از تابع void main عبارت <include<delay.h# را تایپ کنیم. حال قبل از آغاز کدنویسی،یک متغیر از نوع integer تعریف کنیم هدف از ایجاد این عبارت در دست داشتن متغیری است که به اقتضای شرایط میتواند مقدارهای متفاوتی را در خود ذخیره کند.همانند قبل برای ایجاد این متغیر به قسمت قبل از تابع void main مراجعه میکنیم و عبارت ( ;int a ) تایپ میکنیم.

دقت کنید تمامی دستورات در داخل حلقه همیشه صحیح (while (1 قرار می گیرند.

می خواهیم برنامه ای بنویسیم که وقتی در فلاشر 8کاناله کلید شماره 1 را می زنیم , LED ها با حالت اول روشن شوند .

با زدن کلید شماره 2 در فلاشر 8کاناله , LED های فلاشر 8 کاناله با حالت دوم روشن می شوند و به همین ترتیب , کلید شماره 3  LED های فلاشر 8 کاناله را با حالت سوم روشن می کند .

بنابر توضیحات قبلی , برای اینکه حالت های مختلف روشن و خاموش شدن  LED های فلاشر 8 کاناله را مشخص کنیم , از یک متغیر به نام a استفاده کردیم.

می خواهیم سه حالت مختلف برای چشمک زدن LED ها تعریف کنیم .

اگر متغیر a را مساوی 1 قرار دهیم , LED های فلاشر 8 کاناله به حالت اول روشن می شوند .

اگر متغیر a را مساوی 2 قرار دهیم , LED های فلاشر 8 کاناله به حالت دوم چشمک می زنند.

و به همین ترتیب اگر متغیر a را مساوی 3 قرار دهیم ,  LED های فلاشر 8 کاناله با حالت سوم چشمک می زنند.

زمانی که کلید اول فلاشر 8 کاناله زده شود و PINC.0=1 شود متغیر a مساوی 1 می شود .

و زمانی که کلید دوم فلاشر 8 کاناله زده شود و PINC.1=1 شود متغیر a مساوی 2 می شود .

و زمانی که کلید سوم فلاشر 8 کاناله زده شود و PINC.2=1 شود متغیر a مساوی 3 می شود.

while (1)
{
if (PINC.0==1) a=1;
if (PINC.1==1) a=2;
if (PINC.2==1) a=3;

نکته : دلیل اینکه در شرط های بالا ( کد های قرمز داخل پرانتز ) دو مساوی قرار می دهیم این است که یک مساوی به معنای دستور است و دو مساوی به معنای شرط است.

برای اینکه برنامه بنابر شرط عمل کند باید دو مساوی قرار داد.

if(a==1)
{
PORTB.0=1;
PORTB.1=1;
delay_ms(75);
PORTB=0b01010101;
delay_ms(75);
}
if(a==2)
{
PORTB=0b11110000;
delay_ms(75);
PORTB=0b00001111;
delay_ms(75);
}
if(a==3)
{
PORTB=0b10101010;
delay_ms(75);
PORTB=0b01010101;
delay_ms(75);
}
}

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

کد نویسی به روش باینری

برای روشن یا خاموش کردن هر یک از پورت هایی که به LED متصلند می توان از کد دیگری استفاده کرد که در این حالت کد های بسیار خلاصه تری خواهیم داشت برای روشن تر شدن مطلب به مثال زیر توجه کنید:

فرض کنید به پورت D میکروکنترلر ATMEGA8, هشت LED وصل شده است می خواهیم کدی را بنویسیم که LED های متصل به PORTD.0 و PORTD.4 روشن و بقیه خاموش باشند.به شکل زیر عمل می کنیم:

PORTD=0b00010001;

در عبارت بالا 0b نشان دهنده باینری بودن کد است. سپس 8 رقم صفر یا یک خواهیم داشت که هر رقم وضعیت یکی از پایه های PORTD را مشخص می کند.

با نوشتن این کد پایه های شماره 0 و 4 پورت D روشن خواهند بود. عدد باینری صفر برای یک پایه به معنی خاموش بودن آن پایه و عدد باینری یک به معنی روشن بودن آن است.

اگر می خواهیم پایه 3 از PORTD را روشن کنیم، کد را به صورت زیر می نویسیم:

PORTD=0b00001000;

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

PORTD=0b00000000;

 

مطالعه بیشتر: همچنین کد زیر تمامی پایه های پورتD را خاموش خواهد کرد:

PORTD=0;

پس اگر بخواهیم برای PORTD کدی بنویسیم که پایه های 0 و 4 روشن و بقیه پایه ها خاموش باشند باید 8 کد باینری را به شکل زیر برای 8 پایه مختلف بنویسیم:

PORTD=0b00010001;

بعد از 0b هشت عدد نوشته شده که اولین عدد از سمت راست مربوط به پایه D.0 و دومین عدد مربوط به پایه D.1 و به همین ترتیب هشتمین عدد از سمت راست که اولین عدد بعد از 0b خواهد بود مربوط به پایه D.7 می باشد.

 

سپس برنامه را ذخیره کرده و از مسیر Debug > Exe فایل hex. مربوط را در میکرو کنترلر وارد می کنیم و برنامه را اجرا میکنیم.

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

موفق باشید.


برچسب‌ها:

دیدگاه‌ها

2 پاسخ به “جلسه CV,1.5 : فلاشر 8 کاناله LED با AVR – اتصال کلید به میکروکنترلر”

  1. امید آقابالازاده نیم‌رخ

    عالی بود کاملا ساده و مفهومی و کامل

  2. mpj نیم‌رخ
    mpj

    به اشتباه در شماتیک ال ای دی ها را به پرت d وصل کرده بودید

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

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