در این پست از سایت اِمیک, یک پروژه نسبتاً ساده ولی بسیار جالب به نام تشخیص نفر اول در فشار دادن دکمه با استفاده از میکروکنترلر AVR قرار داده شده است. پس از ساخت این پروژه می توانید از ان در بازی و مسابقه برای فهمیدن اینکه چه کسی ابتدا دکمه را فشار داده است, استفاده کنید. در ادامه در مورد این پروژه بیشتر توضیح خواهم داد. در زیر شماتیک این پروژه را مشاهده می کنید.

همانطور که مشاهده می کنید, ما در این پروژه از میکروکنترلر ATmega16 استفاده کرده ایم. عملکرد این پروژه به این صورت است که ما دارای چهار عدد کلید فشاری به نام های BUTTON1 تا BUTTON4 هستیم. همچنین دارای چهار عدد چراغ (در این پروژه از LED استفاده شده است) به نام های LED1 تا LED4 می باشیم. این پروژه دارای یک بازر نیز می باشد.
با فشار دادن هر کدام از کلیدها, چراغ یا LED مربوط به ان کلید روشن می شود و دیگر کلیدها غیرفعال می شود و در صورت فشار دادن دیگر کلیدها هیچ اتفاقی نمی افتد. همچنین با فشار دادن کلید, بازر نیز یک صدای زنگ تولید می کند که بیانگر فشار داده شدن یکی از کلیدها می باشد.
از این پروژه می توان در مسابقات و بازی ها استفاده کرد به این صورت که هر کدام از شرکت کننده ها که زودتر کلید را فشار داد چراغ ان شرکت کننده روشن می شود و کلیدهای دیگر شرکت کننده ها غیرفعال می شود.
این پروژه دارای یک کلید فشاری به نام RESET نیز می باشد که با فشار دادن ان پروژه دوباره با حالت اولیه بر می گردد و شرکت کننده ها می توانند دوباره اقدام به فشار دادن دکمه های خود کنند.
ما در این پروژه از LED به عنوان چراغ استفاده کرده ایم. همانطور که مشاهده می کنید LED ها از طریق چهار عدد مقاومت 270 اهم به پین های میکرو متصل شده اند. این مقاومت ها برای محدود کردن جریان و جلوگیری از سوختن LED ها می باشند. بازر نیز از طریق یک مدار راه انداز شامل ترانزیستور Q1 و مقاومت R5 به پین میکرو متصل شده است. همانطور که می دانید جریان خروجی پین های میکروکنترلر محدود است به همین دلیل از مدار راه انداز برای اتصال بازر به میکرو استفاده شده است. در انتهای مطلب می توانید کلیپ تست عملی پروژه را مشاهده کنید.

توجه کنید که پایه های تغذیه میکروکنترلر (پایه 10 و 11) را که در شماتیک بالا نیست, فراموش نکنید به تغذیه 5 ولت متصل کنید.
برنامه کدویژن:
در این پروژه فرکانس میکروکنترلر 1 مگاهرتز تنظیم شده است. در زیر برنامه نوشته شده به زبان C و کامپایلر کدویژن را مشاهده می کنید:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
////////// WWW.EMIC.IR ////////// #include <mega16a.h> #include <delay.h> void main(void) { int i; //تعريف متغير براي استفاده در برنامه// //ميکرو ورودي شده اند و مقاومت بالاکش انها نيز فعال شده است A در زير پين هاي 0 تا 4 از پورت// DDRA=(0<<DDA7) | (0<<DDA6) | (0<<DDA5) | (0<<DDA4) | (0<<DDA3) | (0<<DDA2) | (0<<DDA1) | (0<<DDA0); PORTA=(0<<PORTA7) | (0<<PORTA6) | (0<<PORTA5) | (1<<PORTA4) | (1<<PORTA3) | (1<<PORTA2) | (1<<PORTA1) | (1<<PORTA0); //ميکرو خروجي شده اند D در زير پين هاي 0 تا 4 از پورت// DDRD=(0<<DDD7) | (0<<DDD6) | (0<<DDD5) | (1<<DDD4) | (1<<DDD3) | (1<<DDD2) | (1<<DDD1) | (1<<DDD0); PORTD=(0<<PORTD7) | (0<<PORTD6) | (0<<PORTD5) | (0<<PORTD4) | (0<<PORTD3) | (0<<PORTD2) | (0<<PORTD1) | (0<<PORTD0); while (1) { PORTD=0; //ميکرو را صفر مي کنيم D در ابتداي برنامه تمام پين هاي پورت// if(PINA.0==0) { //روبرو مي شويم if فشار داده شده وارد شرط A در صورتي که کليد يا شستي متصل به پين 0 از پورت// PORTD.0=1; //به ان متصل است يک مي شود LED1 ميکرو که D پين 0 از پورت// for(i=1;i<=10;i++){PORTD.4=1; delay_ms(100);PORTD.4=0; delay_ms(50);} //دستور روبرو بازر را براي مدت 1.5 ثانيه به صورت صداي زنگ فعال مي کند// while(PINA.4); //روبرو اجراي برنامه را متوقف مي کند تا زماني که شستي ريست فشار داده شود while حلقه// } //بالا مي باشد if زير براي سه شستي ديگر مي باشند و توضيحات انها مانند شرط if سه شرط// if(PINA.1==0) { PORTD.1=1; for(i=1;i<=10;i++){PORTD.4=1; delay_ms(100);PORTD.4=0; delay_ms(50);} while(PINA.4); } if(PINA.2==0) { PORTD.2=1; for(i=1;i<=10;i++){PORTD.4=1; delay_ms(100);PORTD.4=0; delay_ms(50);} while(PINA.4); } if(PINA.3==0) { PORTD.3=1; for(i=1;i<=10;i++){PORTD.4=1; delay_ms(100);PORTD.4=0; delay_ms(50);} while(PINA.4); } } } |
توضیحات قسمت های مهم برنامه نوشته شده, اگر سوالی داشتید می توانید در قسمت نظرات مطرح کنید. فایل های کدویژن و شبیه سازی پروتئوس را هم می تونید از انتهای مطلب دانلود کنید.
کلیپ تست عملی پروژه :
پسورد فایل زیپ : www.emic.ir
نظر یادتون نره…




