گیتی الکترونیک مبتکر ایرانیان (گاما)

طراحی و ساخت انواع پروژه های الکترونیکی صنعتی و دانشجویی 09137291125

گیتی الکترونیک مبتکر ایرانیان (گاما)

طراحی و ساخت انواع پروژه های الکترونیکی صنعتی و دانشجویی 09137291125

آموزش جامع میکروکنترلر AVR جلسه 3

به نام خدا


آموزش جامع میکروکنترلر AVR جلسه3

آموزش جامع avr

انشا الله قراره تو این جلسه در مورد وقفه یه سری توضیح بدم.

 

 

وقفه در AVR

توجه مهم : وقفه به معنی تاخیر زمانی نیست.

بزارید با یه مثال توضیح بدم ، مثال : ما میخایم یه LED   رو با یه کلید روشن و خاموش کنیم ؟

1) روش سرکشی (Polling)
ما تو تابع MAIN   میایم و میگیم هر موقع که ما کلید رو زدیم فلان پایه ی میکرو فعال شد (یا همون 1منطقی شد) ، اون وقت جنابعالی (منظور میکروکنترلر هستش) هم فلان پایه میکرو رو فعال کن تا LED روشن بشه. حالا مشکل زمانی هستش که ما هنوز کلید رو نزدیم و جناب میکروکنترلر مجبوره که هی بره و ببینه که آیا فلان پایه فعال شده یا نه و هی میره و هی برمیگرده (بیچاره خسته نمیشه این همه راه رو میره !!! ) البته تا حالا من خودم از همین روش استفاده کردم !!! و از روش زیر استفاده نکردم.(آخه چه کاریه گره ای که با دندون باز میشه چرا با دست بازش کنی !!!)

2) روش وقفه ( Interrupt )
تو این روش برخلاف روش قبلی به جای این که ما هی بریم و برگردیم تا بفهمیم که آیا فلان پایه فعال شده یا نه میاییم یه کاری میکنیم : یه موبایل برا دو طرف میخریم و هر موقع که اون پایه هه فعال شد زنگ میزنه به میکرو و میگه دادا بدو بیا که فعال شدم !!! لپ کلوم ای که تو این روش اگه پایه فعال شد خودش ما رو خبر میکنه و دیگه لازم نیس که هی بریم و هی برگردیم و هی بریم و هی … حالا چطور میاد ما رو خبر میکنه رو بعدا یا در ادامه میگم …

 

انواع وقفه

1) وقفه داخلی :  تقریبا تمام امکانات داخلی میکرو دارای وقفه بوده مانند تایمر –کانترها و پروتکل های ارتباطی و مقایسه کننده ها و مبدل آنالوگ به دیجیتال .

2) وقفه خارجی : در میکرو پایه هایی به نام INTx وجود دارد که زمانی تحریک شوند ، میکرو به زیر برنامه وقفه پرش می کند و کار تعیین شده را انجام می دهد.این وقفه ها می توانند با یک لبه بالا رونده یا پایین رونده و یا یک منطقی تحریک شوند.

نکته : هنگامی که یک پایه به عنوان وقفه استفاده شود دیگر نمی توانیم از آن پایه به عنوان ورودی یا خروجی استفاده کنیم. این یه میکرو کنترلر avr از نوع atmega16 هستش که توش پایه های وقفه صفر-وقفه1 و وقفه 2 رو مشخص کردم.


آموزش جامع avr

 

ریجستر ها در وقفه (بازم ریجستر های دوست داشتنی خودمون !!!)

1) ریجستر SREG

ریجستر SREG

بیت 7 ( I ) :  با یک کردن این بیت ، وقفه سراسری یا کلی فعال میشود.(یعنی میتونیم از وقفه استفاده کنیم.)

توجه مهم : اگه بخواید از وقفه استفاده کنید این بیت حتما باید یک بشه.که این بیت به صورت زیر فعال/غیر فعال میشود.

 

2) ریجستر GICR

ریجستر GICR

 تو این ریجستر ما فقط با 3 بیت آخرش کار داریم (البته فعلا ! )

بیت 7 (INT1 )  : با یک کردن این بیت وقفه 1  فعال میشود.  متناظر با پایه PORTD.3 میباشد.(اون عکس  میکروکنترلر avr که در بالا هستش رو نگاه کنید)

بیت 6 (INT0 )  : با یک کردن این بیت وقفه 0 فعال میشود. متناظر با پایه PORTD.2 میباشد.(اون عکس  میکروکنترلر avr  که در بالا هستش رو نگاه کنید)

بیت 5 (INT2 )  : با یک کردن این بیت وقفه 2  فعال میشود. متناظر با پایه PORTB.2 میباشد.(اون عکس  میکروکنترلر avr  که در بالا هستش رو نگاه کنید)

 

 

3) ریجستر GIFR

ریجستر GIFR

لپ کلوم رو بگم و گیجتون نکنم :  mail

اگه وقفه مورد نظر(وقفه صفر-یک یا دو) و وقفه سراسری فعال بود و در صورت تحریک شدن (فعال شدن/غیر فعال شدن)
این ریجستر با توجه به شرایط موجود تصمیم میگیره که دستور اجرای  وقفه رو بده یا نده.

برای این که این قدرت تصمیم گیری رو به این ریجستر بدیم باید بیت های لازم و مورد نیازمون از یان ریجستر رو یک کنیم.
مثلا اگه دارید از وقفه صفر استفاده میکنید باید بیت 6 رو یک کنید.

بیت 5 این ریجستر مربوط به وقفه 2»»»بیت 6 این ریجستر مربوط به وقفه 0»»»»بیت 7 این ریجستر مربوط به وقفه 1

 

4) ریجستر MCUCR

ریجستر MCUCR

این ریجستر هم ریجستر مهمی هستش O_o

ما با نحوه مقدار دهی این ریجستر (که در ادامه میگم) میتونیم نحوه فعال و غیر فعال شدن (نحوه تحریک شدن) وقفه رو تعیین کنیم.
مثلا طوری تعیین کنیم که اگه صفر منطقی شد(0 ولت) فعال بشه (Falling Edge)
یا طوری تعین کنیم که با یک منطقی (5 ولت) فعال بشه (Rising Edge)

توجه مهم : این ریجستر برا دو وقفه صفر و یک هستش و ریجستر بعدی برای وقفه دو هستش.
(یکی از علش هم اینه که اگه تو کد ویژن تو قسمت کد ویزاردش و تو قسمت!
تعیین وقفه ها و تو قسمت MODE رو نگاه کرده باشید
وقفه صفر و یک 4 تا حالت داره  اما وقفه 2 ، فقط دو حالت داره.)

نحوه مقدار دهی ریجستر MCUCR

جدول زیر که انواع  مقدار دهی بیت های ISC01   و  ISC00   رو نشون داده که مربوط به وقفه صفر هستش.

فعلا فقط دوتای آخر  رو توضیح میدم و بقیه برای بعدا :
3) اگه 1=ISC01   و  0=ISC00  شد یعنی : با صفر منطقی (همون 0 ولت خودمون)  فعال میشه.
4) اگه 1=ISC01   و  1=ISC00  شد یعنی :  با یک منطقی (همون 5 ولت خودمون)  فعال میشه.

isc00-01

 جدول زیر هم مربوط به وقفه یک هستش.
که دیگه من توضیح نمیدم ، چون مثل حالت بالا هستش.

ریجستر MCUCR

5) ریجستر MCUCSR

ریجستر MCUCSR

با توجه به توضیحاتی که در بالا دادم ، نحوه تحریک این وقفه که وقفه 2 هست بر خلاف وقفه 1 و 0 که 4 تا حالت داشت ولی وقفه 2 فقط دو حالت دارد لذا دیگر از جدول مدول خبری نیست.

اگه بیت 6 (ISC2) این ریجستر رو صفر کنی   با صفر منطقی (همون 0 ولت خودمون)  فعال میشه.
اگه بیت 6 (ISC2) این ریجستر رو یک  کنی   با  یک  منطقی (همون 5  ولت خودمون)  فعال میشه.

 

 

فعال کردن وقفه در کدویژن

تو کد ویژن وقتی یه پروژه جدید ایجاد میکنی و میری تو قسمت کد ویزارد ، میتونی وقفه رو از همون جا فعال کنی و دیگه کد مد ننویسی.

با توجه به عکس زیر وقفه ها رو میبینید (وقفه 0 ،  وقفه 1   ،   وقفه2)  که با تیک زدنشون فعال میشن.
تو قسمت mode 4 تا حالت داریم که در بالا توضیح دادمش.
فعال کردن وقفه در کدویژن
این کدی که در زیر میبینید من با کد ویزارد ایجاد کردم.
سه تا وقفه رو فعال کردم و حالت MODE هر سه رو گزاشتم رو گزینه آخر و بعد …
توجه : البته کدهایی که برنامه تولید کرد خیلی بیشتر از این بود که من کد های اضافه و غیر مربوط به این موضوع (وقفه) رو حذف کردم تا مرتب تر بشه.

 

 

آموزش کد نویسی تابع وقفه

یه توضیحی در مورد کد نویسی وقفه بدم و اون این که به صورت زیر نوشته میشه
همون طور که اگه کد های قسمت “فعال کردن وقفه در کدویژن” رو دیده باشین ، یه تابع برا وقفه نوشته شده که بعد از تعریف کتاب خانه اومده و …
حالت کلی این تابع به صورت زیر هستش:
کد EXT_INT0 یعنی این تابع مربوط به وقفه صفر هستش. ( EXT_INT1 یعنی   وقفه 1—–EXT_INT2  هم یعنی  وقفه 2 )

البته به جای EXT_INT0  میتونستیم عدد 2 رو قرار بدیم .
و به جای EXT_INT1  میتونستیم عدد 3 رو قرار بدیم .
و به جای EXT_INT2  میتونستیم عدد 19 رو قرار بدیم .

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

نام تابع هم اختیاری هستش.هر چی خواستین بزارین.  smile



سایر منابع : سایت دمرچیلو

نظرات 0 + ارسال نظر
برای نمایش آواتار خود در این وبلاگ در سایت Gravatar.com ثبت نام کنید. (راهنما)
ایمیل شما بعد از ثبت نمایش داده نخواهد شد