آموزش Atmel studio اتصال کلید به میکروکنترلر
بالاخره بعد از مدت ها قسمت جدید آموزش اتمل استدیو را در الکترولب منتشر می کنم. در قسمت قبلی آموزش Atmel studio با روش ایجاد پروژه و تعریف های اولیه برای کار با رجیستر ها در اتمل استدیو آشنا شدید. در این آموزش کوتاه به نحوه ی اتصال کلید به میکروکنترلر ATmega32 می پردازیم.
در هر پروژه ای که نیاز به میکروکنترولر است معمولا نیاز به کلید هم داریم تا به عنوان ورودی میکرو به کار رود برای استفاده از کلید بر روی میکرو کافی است پین متصل به کلید را به صورت ورودی تنظیم کنیم. و بعد وضعیت این پین را بخوانیم. و بر اساس آن تصمیمات لازم برای تغییر را اعمال کنیم. در این آموزش از کلید برای روشن شدن led برای 3 ثانیه استفاده می کنیم.
مدار اتصال کلید به میکروکنترلر
شرح مدار اتصال کلید به میکروکنترلر:
- کریستال ۱۶ مگاهرتز کلاک میکرو را تامین می کند از خازن های ۲۲P برای پایداری عملکرد کریستال استفاده شده است. از خازن ۱۰p و مقاومت ۱۰K اهم برای ریست شدن دستگاه هنگام روشن شدن یا POR مخفف Power On Reset استفاده شده است. وقتی که منبع تغذیه وصل می شود ولتاژ پایه ی ریست از طریق خازن صفر خواهد شد و میکروکنترلر ریست خواهد شد. وقتی که خازن تا VCC شارژ شد میکرو از حالت ریست خارج خواهد شد.
- کلید به پایه 0 پورت D وصل شده است و به وسیله ی یک مقاومت 10k اهم pull down شده است. به این معنی که وقتی کلید فشار داده نشده باشد وضعیت منطقی پایه همیشه روی صفر باقی بماند. این مقاومت باعث عملکرد صحیح کلید در محیط های پر نویز می شود.
- led به پایه صفر پورت C متصل است و برای محدود کردن جریان از یک مقاومت 680 اهمی استفاده شده است.
برنامه اتصال کلید به میکروکنترلر:
#include <avr/io.h> #include <util/delay.h> int main(void) { DDRC |= (1<<PC0); //Nakes first pin of PORTC as Output // OR DDRC = 0x01; DDRD &= ~(1<<PD0);//Makes firs pin of PORTD as Input // OR DDRD = 0x00; //Makes all pins of PORTD input while(1) //infinite loop { if(PIND & (1<<PD0) == 1) //If switch is pressed { PORTC |= (1<<PC0); //Turns ON LED _delay_ms(3000); //3 second delay PORTC &= ~(1<<PC0); //Turns OFF LED } } }
توجه کنید که اگر با نحوه تغییر رجیستر ها به روش بالا آشنا نیستید بهتره آموزش قبلی رو که کامل در این مورد توضیح دادم رو بخونید با یاد گرفتن این روش هنگام کار با سایر میکروکنترلر ها نیز به مشکل بر نمی خورید حتی کدویژن نیز در نسخه جدید از این نوع تعریف کردن رجیستر ها پشتیبانی می کند.
شرح عملکرد برنامه اتصال کلید به میکروکنترلر:
- در خط 6 پین PC0 به صورت خروجی تعریف می شود.
- در خط 8 پین PD0 به صورت وردوی تعریف می شود.
- در خط 12 وضعیت پین PC0 بررسی می شود در صورت یک بودن led متصل به پورت PC0 به مدت 3 ثانیه روشن می شود.
منبع:electrosome
باز اگر توضیح اضافی لازم بود در کامنت بگید تا بیشتر توضیح بدم.
در قسمت بعدی آموزش به نحوه راه ندازی LCD کاراکتری در Atmel studio را بررسی می کنیم.
اگر به برد های رزبری پای علاقه دارید می تونید وبلاگ رزبری پای من رو دنبال کنید.
متشکرم دوست عزیز
سلام لطفا ادامه بدید ما هم میخواهیم atmel studio رو یاد بگیریم
حتما ادامه خواهد داشت
سلام.
لطفا اموزش ال سی دی گرافیکی KS0108 را در atmel studio بگزارید.
در لیست آموزش ها قرار میدم
تو این متن مشکل تایپی هست اصلاح فرمایید.
در خط 12 وضعیت پین PC0 بررسی می شود در صورت یک بودن led متصل به پورت PC0 به مدت 3 ثانیه روشن می شود.
ورودی پین PD0 هست که اشتباه تایپ شده
مورد دیگ اینکه جناب عزتی این کد دوتا باگ بزرگ داره.
اول اینکه باید به این صورت نوشته بشهif((PINA & (1<<PD0)) == 1) یعنی یک پرانتز هم باید اضافه بشه. که اولویت با محاسبات داخل پرانتز باشه و حاصل اون با 1 مقایسه بشه.
اینجا چون کلید رو با VCC مقایسه کردید اون پرانتز اگه نباشه مشکلی پیش نمیاد اما اگه بخواید کلید رو با GND مقایسه کنید یعنی داخل شرط ==0 بذارید ، اگه این پرانتز که گفتم نذارید کلا کار نمیکنه.
باگ بعدی اینکه حتی اگه این پرانتز هم بذارید بازم این دستور فقط برای پین 0 کار میکنه یعنی A.0 ، B.0 ،C.0 و روی پین های دیگه کار نمیکنه این دستوری که شما نوشتید .
ممنون از نظر مفیدتون ویرایش و اصلاح میکنم