در این پست از سایت اِمیک, یک پروژه بسیار جالب و آموزشی به نام پروژه AVR تاس الکترونیکی قرار داده شده است. همانطور که از نام پروژه مشخص است این پروژه یک تاس یا منچ الکترونیکی می باشد که با استفاده از میکروکنترلر ATmega16 انجام شده است. این پروژه جنبه آموزشی دارد, همچنین شما می توانید برای بازی و سرگرمی و غیره از این پروژه استفاده کنید. در ادامه در مورد پروژه بیشتر توضیح خواهم داد. در زیر شماتیک این پروژه را مشاهده می کنید:
همانطور که مشاهده می کنید, ما در این پروژه از میکروکنترلر ATmega16 استفاده کرده ایم. از یک سون سگمنت تکی کاتد مشترک نیز استفاده کرده ایم که این سون سگمنت به پورت C میکروکنترلر (پایه های 22 تا 28 میکرو) متصل شده است. نحوه اتصال سون سگمنت به پایه های میکروکنترلر در شماتیک بالا کاملاً مشخص شده است. پایه های سون سگمنت از طریق 7 عدد مقاومت 220 اهم به میکروکنترلر متصل شده اند. این مقاومت ها برای محدود کردن جریان و جلوگیری از سوختن سون سگمنت می باشند. یک کلید فشاری نیز به پایه 40 میکروکنترلر (پین 0 از پورت A) متصل شده است.
عملکرد پروژه به این صورت است که با هر بار فشار دادن کلید S1 عددی بین 1 تا 6 به صورت تصادفی و شانسی روی سون سگمنت نمایش داده می شود. که در واقع عدد تاس انداختن ما را مشخص می کند. کلید S1 باید از نوع فشاری باشد که با هر بار فشار دادن و رها کردن کلید, یک عدد بین 1 تا 6 روی سون سگمنت نمایش داده شود.
توجه کنید که پایه های تغذیه میکروکنترلر (پایه 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 |
////////// WWW.EMIC.IR ////////// #include <mega16a.h> //ATmega16A فراخواني کتابخانه ميکروکنترلر// #include <delay.h> //delay فراخواني کتابخانه// void main(void) { int i=0 ; //با مقدار اوليه صفر int معرفي يک متغير از نوع// unsigned char seg[6]={0x06,0x5B,0x4F,0x66,0x6D,0x7D}; //معرفي يک ارايه داراي 6 عضو که شامل معادل هگز اعداد 1 تا 6 براي سون سگمنت کاتد مشترک مي باشد// //ميکروکنترلر براي اتصال به سون سگمنت خروجي شده است 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); //ميکروکنترلر ورودي شده است و مقاومت پول اپ نيز براي اين پين فعال شده است A در زير پين 0 از پورت// DDRA=(0<<DDA7) | (0<<DDA6) | (0<<DDA5) | (0<<DDA4) | (0<<DDA3) | (0<<DDA2) | (0<<DDA1) | (0<<DDA0); PORTA=(0<<PORTA7) | (0<<PORTA6) | (0<<PORTA5) | (0<<PORTA4) | (0<<PORTA3) | (0<<PORTA2) | (0<<PORTA1) | (1<<PORTA0); while (1) { if(PINA.0==0) //مي شويم if ميکرو که کليد به ان متصل است برابر صفر شد يا در واقع کليد فشار داده شد وارد اين شرط A در صورتي که پين 0 از پورت// { if(i==6) i=0; //برابر 6 شد دوباره ان را 0 مي کند i دستور روبرو در صورتي که متغير// PORTC=seg[i]; //مي ريزد C قرار مي دهد و اعضاي اين ارايه را يکي يکي روي پورت seg ميکرو را برابر ارايه C دستور روبرو پورت// delay_ms(10); //ايجاد تاخير// i++; //يکي اضافه مي شود while با هر بار اجراي حلقه i متغير// } } } |
توضیحات قسمت های مهم برنامه نوشته شده, اگر سوالی داشتید می توانید در قسمت نظرات مطرح کنید. فایل های کدویژن و شبیه سازی پروتئوس را هم می تونید از انتهای مطلب دانلود کنید.
پسورد فایل زیپ : www.emic.ir
نظر یادتون نره…