در این پست از سایت اِمیک, یک پروژه ساده به نام پروژه AVR شمارنده LED با کلید افزایشی و کاهشی قرار داده شده است. در واقع این پروژه یک شمارنده با استفاده از LED می باشد که روشن و خاموش شدن این LED ها توسط دو کلید فشاری انجام می شود. این پروژه با استفاده از میکروکنترلر AVR انجام شده و در ادامه در مورد این پروژه بیشتر توضیح خواهم داد. در زیر شماتیک این پروژه ساده ولی بسیار جالب و آموزنده را مشاهده می کنید:
همانطور که مشاهده می کنید, ما در این پروژه از میکروکنترلر ATmega16 استفاده کرده ایم. از دو عدد کلید فشاری نیز استفاده شده که به پایه های شماره 1 و 2 میکروکنترلر (پین 0 و 1 از پورت B میکرو) متصل شده اند. در این پروژه شمارنده, ما از 8 عدد LED استفاده کرده ایم که این LED ها به پایه های 22 تا 29 میکروکنترلر (پین های 0 تا 7 از پورت C میکرو) متصل شده اند. هر کدام از LED ها با یک مقاومت سری شده است, این مقاومت ها برای محدود کردن جریان LED ها و جلوگیری از اسیب به انها می باشند.
این پروژه دارای دو کلید افزایشی و کاهشی به نام های Up و Down می باشد. با هر بار فشار دادن کلید Up ال ای دی های شماره 1 تا 8 متصل به میکرو, یک به یک و به ترتیب روشن می شوند. با هر بار فشار دادن کلید Down ال ای دی های شماره 1 تا 8 متصل به میکرو, یک به یک و به ترتیب خاموش می شوند. در انتهای مطلب می توانید کلیپ شبیه سازی این پروژه را مشاهده کنید.
توجه کنید که پایه های تغذیه میکروکنترلر (پایه 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 |
////////// WWW.EMIC.IR ////////// #include <mega16a.h> #include <delay.h> #define Up PINB.0 //ميکروکنترلر B با پين 0 از پورت Up برابر قرار دادن عبارت// #define Down PINB.1 //ميکروکنترلر B با پين 1 از پورت Down برابر قرار دادن عبارت// void main(void) { //ميکروکنترلر ورودي شده است B در زير پورت// DDRB=(0<<DDB7) | (0<<DDB6) | (0<<DDB5) | (0<<DDB4) | (0<<DDB3) | (0<<DDB2) | (0<<DDB1) | (0<<DDB0); PORTB=(0<<PORTB7) | (0<<PORTB6) | (0<<PORTB5) | (0<<PORTB4) | (0<<PORTB3) | (0<<PORTB2) | (1<<PORTB1) | (1<<PORTB0); //ميکروکنترلر خروجي شده است C در زير پورت// DDRC=(1<<DDC7) | (1<<DDC6) | (1<<DDC5) | (1<<DDC4) | (1<<DDC3) | (1<<DDC2) | (1<<DDC1) | (1<<DDC0); PORTC=(0<<PORTC7) | (0<<PORTC6) | (0<<PORTC5) | (0<<PORTC4) | (0<<PORTC3) | (0<<PORTC2) | (0<<PORTC1) | (0<<PORTC0); PORTC=0; //ها را خاموش مي کندLED دستور روبرو در ابتدا که کليدي هنوز فشار داده نشده است همه ي// while (1) { if (Up == 0) //روبرو مي شود if فشار داده شود وارد شرط Up در صورتي که کليد// { PORTC=(PORTC*2)+1; //ميکرو به ترتيب روشن مي شود C هاي متصل به پورتLED با هر بار اجراي دستور روبرو يکي از// delay_ms(500); //ايجاد تاخير به مدت 0.5 ثاتيه// } if(Down == 0) //روبرو مي شود if فشار داده شود وارد شرط Down در صورتي که کليد// { PORTC=(PORTC-1)/2; //ميکرو به ترتيب خاموش مي شود C هاي متصل به پورتLED با هر بار اجراي دستور روبرو يکي از// delay_ms(500); //ايجاد تاخير به مدت 0.5 ثاتيه// } } } |
توضیحات قسمت های مهم برنامه نوشته شده, اگر سوالی داشتید می توانید در قسمت نظرات مطرح کنید. فایل های کدویژن و شبیه سازی پروتئوس را هم می تونید از انتهای مطلب دانلود کنید.
کلیپ شبیه سازی پروژه :
پسورد فایل زیپ : www.emic.ir
نظر یادتون نره…