الکترونیک، رباتیک و مکانیک

آموزش به زبان بسیار ساده و روان (از صفر تا بینهایت)

الکترونیک، رباتیک و مکانیک

آموزش به زبان بسیار ساده و روان (از صفر تا بینهایت)

الکترونیک، رباتیک و مکانیک

با سلام و عرض ادب خدمت هموطنان عزیز
در این سایت قصد داریم موضوعاتی که در حیطه الکترونیک ،مکانیک و برنامه نویسی ربات ها دارای جذابیت خاصی می باشد رو آموزش بدیم. امیدواریم که با نظرات شما عزیزان شاهد آموزشهای جامعی در این زمینه باشیم.
با تشکر

نویسندگان
پیوندهای روزانه
طبقه بندی موضوعی
آخرین نظرات

سه شنبه, ۱ دی ۱۳۹۴، ۰۶:۳۵ ب.ظ

۳

در این بخش از آموزش به بررسی تایمر/کانتر شماره صفر در میکروکنترلرهای AVR میپردازیم.

 

پس با ما در ادامه مطلب همراه باشید ...

به نام خدا

سلام،حالتون خوبه ؟

خدا به داد هممون برسه ! امتحانات داره شروع میشه و نمیدونم واقعیتش که پست بعدی رو کی میتونم بزارم !

آقایون و خانوما التماس دعای خیر جهت قبولی در امتحانات با نمره بالا !!!

بخش بعدی آموزش رو شروع میکنیم.

آنچه گذشت ... :

 

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

یادتون نمیاد لطفا برگردید و یه بار دیگه دوره کنید ...

 

خدمتتون عرض کردم که میکروکنترلرهای AVR دارای سه تایمر/کانتر :

 

1.تایمر/کانتر 0 ==> 8 بیتی

2.تایمر/کانتر 1 ==> 16 بیتی

3.تایمر/کانتر 2 ==> 8 بیتی

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

 

بررسی تایمر/کانتر شماره صفر در میکروکنترلرهای AVR :

 

لازم بذکره که تایمر/کانتر شماره صفر خود بر 3 نوع تقسیم بندی میشه :

 

1.ساده 8 بیتی ==> مثلا ATmega8

2.پیشرفته 8 بیتی ==> مثلا ATmega16 , 32

3.پیشرفته 16 بیتی ==> مثلا ATTiny13

پس دقت داشته باشید که تقسیم بندی پیشین ما یک تقسیم بندی کلی بوده و میکروکنترلرهای مختلف دارای خصوصیات متفاوت میباشند.

اما چون بررسی رو برای ATmega32 فرض کردیم،در این بخش نوع "پیشرفته 8 بیتی" رو مورد بحث قرار می دهیم.

منتهی چون بحث طولانیه،مجبورم که در چندین قسمت موضوع رو کامل کنم !

 

طرح یک مثال؛

برای اینکه مباحثمون بهتر و ملموس تر پیش بره میایم و یک مثال طرح میکنیم و فرض رو بر این میگیریم که میخواهیم این مثال رو عملی کنیم :

 

قصد داریم یک فلاشر بسازیم که هر 6 میلی ثانیه یکبار چشمک بزنه !

همچنین فرکانس کاری میکرو رو 32 کیلوهرتز در نظر میگیریم (توجه داشته باشید که این فقط یک مثاله !)

 

تو این مثال فرکانس کاری میکرو رو بسیار پایین در نظر گرفتیم.میدونید که میکرو در فرکانس هایی در حد مگاهرتز کار میکنه !

اما چون قصد داریم که مثال در ساده ترین شکل ممکن باشه و نیازی به استفاده از ضریب تقسیم نباشه،فرکانس رو پایین فرض کردیم.

خب ...

میریم سراغ محاسباتی که نیاز داریم :

 

جلسه قبل یه فرمول دادم خدمتتون به این قرار :

توضیحات رو هم بصورت کامل در مورد پارامترهای فرمول دادم !

 

تایمر شماره صفر همونظور که گفتم 8 بیتیه و میتونه حداکثر تا عدد 255 شمارش کنه و تاخیری حداکثر به اندازه 8 میلی ثانیه برامون بسازه !

 

برای ساختن مدت زمان 6 میلی ثانیه نیاز هست که 191 شمارش انجام بشه.(طبق فرمول !)

 

بررسی رجیسترهای مربوط به تایمر/کانتر شماره صفر در میکروکنترلرهای AVR :

 

بررسی رجیستر TCNT0 :

 

Timer/Counter Register

 

همونطور که از شکل و قیافه این رجیستر مشخصه و پیداست،این رجیستر حاوی مقدار تایمر/کانتر شماره صفر است !

مقدار تایمر/کانتر داخل این رجیستر میشینه و بصورت اتوماتیک افزایش یا کاهش پیدا میکنه !

اطلاعات این رجیستر رو هم میشه خوند و هم میشه بصورت دستی نوشت !

 

ساده اش این میشه که : این رجیستر به شمارنده 8 بیتی تایمر/کانتر صفر دسترسی مستقیم داره و هم خواندنی است و هم نوشتنی.

هنگام خواندن مقدار شمارش شده رو برمیگردونه و به هنگام نوشتن مقدار جدید رو به شمارنده انتقال میدهد.

 

بررسی رجیستر کنترلی TCCR0 :

Timer/Counter Control Register

 

در این بخش فقط بیتهای شماره 0و1و2 رو بررسی میکنیم و بقیه رو در بخش های بعدی !

 

بیت های 0 و 1 و 2 ؛CS02:00 - Clock Select Bits :

با استفاده از این سه بیت میشه چندتا کار انجام داد :

 

1.یکی اینکه تایمر/کانتر صفر رو فعال یا غیرفعال کرد.

2.بعدی اینکه فرکانس پالس تایمر/کانتر صفر رو که تقسیم فرکانسی از فرکانس اصلی میکرو هست رو تعیین کرد.

3.میشه حساسیت تایمر/کانتر صفر رو به لبه بالارونده یا پایین رونده اعمالی به پایه T0 رو کنترل کرد.

اگه هم هیچ منبع پالس ساعتی انتخاب نشه،تایمر/کانتر غیر فعال خواهد شد.

 

چون ما فرکانس کاری میکرو 32 کیلوهرتز فرض کردیم (در مثال) و این فرکانس،فرکانس مناسبی برای کارکرد تایمر/کانتر هم هست،در نتیجه ما سطر دوم رو انتخاب میکنیم.یعنی نیازی به استفاده از تقسیم فرکانسی نداریم !

حواستون باشه داریم در مورد مثالی که مطرح شد بحث میکنیم نه چیز دیگه !!!

بررسی رجیستر TIMSK :

Timer/Counter Interrupt Mask Register

 

این رجیستر یک رجیستر مشترک میان تمامی تایمر/کانترها میباشد.

که برای تایمر/کانتر صفر فقط از بیتهای 0 و 1 آن استفاده میشود و دیگر بیتها مربوط به تایمر/کانترهای دیگر میباشد !

 

بیت 0 ؛TOIE0 - Timer/Counter0 Overflow Interrupt Enable :

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

لازم بذکر است که شرط فعال شدن این وقفه آن است که بیت فعال ساز وقفه (I) در رجیستر SREG نیز فعال باشد.

 

بررسی رجیستر TIFR :

Timer/Counter Interrupt Flag Register

 

 

این رجیستر هم بین تمامی تایمر/کانترها مشترک میباشد.

که برای تایمر/کانتر صفر فقط از بیتهای 0 و 1 آن استفاده میشود !

 

بیت 0 ؛ TOV0 : Timer/Counter0 Overflow Flag :

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

اگر هیچ زیر روالی در حال انجام نباشد با نوشتن یک در آن،بصورت دستی میتوان آن را پاک کرد.

 

کلام پایانی ؛

این پست،اونجور که دوست داشتم نشد !

علتش رو هم میدونم چیه !؟

وقفه رو که هنوز نگفتم و میدونم اونایی که باهاش آشنایی ندارن،الان چه قدر بد و بیراه بهم میگن که این چه نوع توضیح دادنه!

ولی باور کنید که خودم حواسم به این چیزا هست ولی چه کنم که مبحث وقفه رو اگه بخوام کامل توضیح بدم،مطمئنم همه رو کلافه میکنه و اگه بخوام ناقص و فرمالیته در موردش بحث کنم،خودمو ارضاء نمیکنه !

مسئله بعدی هم اینکه قراره بصورت موازی،برنامه نویسی رو هم توضیح بدم و وقتی نحوه برنامه نویسی رو دیدید،بهتر مطالب رو متوجه میشید.

دارم فکر میکنم ببینم چجوری میتونم مطالب رو بیان کنم که همه متوجه بشند.

فقط صبور باشید و پشتکار داشته باشید ... به منم یکم اعتماد کنید !!!

 

و در پایان :

چرا اینقدر نظرات کمه؟!

خواهشا دوستانی که مباحث رو پیگیری میکنند،اعلام حضور کنند تا یه قوت قلبی باشه برای من.که برای آپدیت منظم تر وبلاگ مصمم تر بشم.

لطفا اگه شده با یک کلمه،فقط یک کلمه (فحش ندیدا ! laughcheeky) بگید که آقا ما خوندیم مطلبو ...

 

به قول رضا صادقی،همین ...

منبع : www.noise.blog.ir

نظرات  (۳)

معرکه ای
عالی بود
سخت بودددددددددددددددددددددددددددددد
ولی بدو بیراه نگفتمممممااا
اصل مطلب دریاف میشه ولی واقعیتش به یاد داشتن این رجیستر ها و البته بیت هاشون به نظرم محاله

پاسخ:
سلام آقای صادقی
نیازی نیست اینا رو به ذهن بسپارین. هر وقت خواستین یه پروژه رو راه بندازین مراجعه کنید به رجیسترها و از اونا استفاده کنید. مرحله به مرحله و با تکرار و تمرین همه چیز درست میشه

ارسال نظر

ارسال نظر آزاد است، اما اگر قبلا در بیان ثبت نام کرده اید می توانید ابتدا وارد شوید.
شما میتوانید از این تگهای html استفاده کنید:
<b> یا <strong>، <em> یا <i>، <u>، <strike> یا <s>، <sup>، <sub>، <blockquote>، <code>، <pre>، <hr>، <br>، <p>، <a href="" title="">، <span style="">، <div align="">
تجدید کد امنیتی