۰۲۱-۷۷۶۰۵۵۳۸

پنج شنبه, 20 -2669 ساعت 00:00

بررسی تایمر/کانتر شماره صفر (0) میکروکنترلرهای AVR

نوشته شده توسط 
این مورد را ارزیابی کنید
(0 رای‌ها)

بررسی تایمر/کانتر صفر (0) میکروکنترلرهای AVR 

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

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

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

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

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

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

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 :

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

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

 

بازدید 172003 بار آخرین ویرایش در یکشنبه, 09 آذر 1393 ساعت 12:21
+