آموزش AVRآموزش الکترونیک

تایمر / کانتر دو 2 در میکروکنترلر AVR (آموزش کامل + مثال) (آموزش AVR #16)

سلام. آموزش کامل تایمر / کانتر 2 در میکروکنترلر AVR به همراه مثال هایی از Timer / counter دو را آماده کرده ایم.

آموزش کامل تایمر کانتر دو

در قسمت قبلی سری آموزش های AVR ما به طور کامل با تایمر کانتر 1 در میکروکنترلر های AVR آشنا شدیم. پیشنهاد میکنم آموزش ها را به بخوانید ، پس اگر قسمت های قبلی را نخوانده اید ، آن ها را بخوانید :))

قسمت قبلی : نحوه کار با تایمر / کانتر 1 در میکروکنترلر AVR (آموزش AVR #15)

در این قسمت آموزش AVR ما به طور کامل به صورت تئوری و عملی با کدنویسی و تنظیم Timer counter 2 آشنا میشویم.

تایمر / کانتر 2 چیست ؟

تایمر / کانتر شماره دو مانند تایمر کانتر شماره 0 است یعنی 8 بیتی است و رجیستر های آنها نیز مشابه است. منتهی تایمر کانتر 2 ، ویژگی خاصی دارد که به آن میگویند عملیات آسنکرون (Asynchronous Operation ).

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

ما میخواهیم یک فلاشر طراحی کنیم که هر 50 میلی ثانیه چشمک بزند. ما از کریستال خارجی 16 مگاهرتز استفاده میکنیم.

تایمر / کانتر دو 2 در میکروکنترلر AVR

حل مسئله :

محاسبه مدت پالس در AVR

با انتخاب ضریب تقسیم 256،زمان سرریز 4.096 میلی ثانیه میشود. با 12 بار سرریز شدن تایمر/کانتر،و شمرده شدن تا گام 53 در 13 اُمین سرریز مدت زمان 50 میلی ثانیه طی خواهد شد. تمامی صحبتهایی که شد تکراری است و از توضیح مجدد خودداری میکنیم.

بررسی رجیسترها :

رجیستر TCCR2 : Timer/Counter2 Control Register

حتما ببینید :  برد آردوینو Uno چیست ؟ (شیلد، قیمت خرید Arduino یونو R3 اورجینال SMD)

رجیستر TCCR2 : Timer/Counter2 Control Register

بیت های 0 و 1 و 2 ؛ Bit 2:0 – CS22:0: Clock Select :

بیت های 0 و 1 و 2 ؛ Bit 2:0 – CS22:0: Clock Select :

اگر در مورد این مطلب سوالی داشتید در انتهای صفحه در قسمت نظرات بپرسید.

از این بیتها استفاده میکنیم برای انتخاب ضریب تقسیم مورد علاقه. ما 256 رو انتخاب میکنیم.

رجیستر TCNT2 : Timer/Counter2

این رجیستر هم مقدار Timer Counterشماره 2 را در خودش نگه میدارد.

رجیستر TIMSK : Timer/Counter-Interrupt Mask-Register

رجیستر TIMSK : Timer/Counter-Interrupt Mask-Register

در اینجا تنها بیت TOIE2 مد نظر ماست که با 1 کردن آن وقفه سر ریز تایمر/کانتر 2 فعال میشود.

رجیستر TIFR : Timer/Counter Interrupt Flag Register – TIFR

رجیستر TIFR : Timer/Counter Interrupt Flag Register – TIFR

در اینجا هم تنها بیت TOV2 مد نظر ماست.

هنگامی که تایمر/کانتر 1 سر ریز شود، این بیت 1 میشود و پس از اینکه زیرروال مربوط به وقفه (interrupt) بصورت کامل انجام شد 0 میشود و اگر زیرروالی وجود نداشت، با نوشتن یک 1 دیگر روی آن، 0 میشود.

آموزش کدنویسی تایمر کانتر 2 در کدویژن

فرکانس کاری میکروکنترلر 16 مگاهرتز خارجی تعریف شده است. در ابتدا مانند همیشه کتابخانه میکروکنترلر مگا 32 را فراخوانی میکنیم. سپس تابعی را با نام timer2_configuration تعریف میکنیم که تنظیمات Timer / Counter 2 را در آن انجام میدهیم.

#include <mega32.h> 
unsigned int overflow; 
void timer1_configuration (){
TCCR2 |=(1<<CS21)|(1<<CS22);
TIMSK |=(1<<TOIE2); 
TCNT2=; 
#asm ("sei"); 
overflow = 0;
}

این بخش از کد مانند کد های قسمت های قبل است پس از ارائه توضیحات اضافی میگذریم.

سپس به تابع main میرسیم.

void main(){ 
DDRB. = 1;
timer2_configuration ();
}

پین B0 را به عنوان خروجی (Output) تعریف میکنیم زیرا همان پینی است که ال ای دی به آن متصل میشود. در خط سوم نیز تابع timer2_configuration را فراخوانی میکنیم تا تنظیمات تایمر / کانتر 2 انجام شود.

حتما ببینید :  کاربرد آردوینو در صنعت (ساخت PLC با برد صنعتی آردوینو)

و سپس  :

while(1){ 
if(overflow>=12){ 
if(TCNT2>=53){ 
PORTB. ^=(1<<); // روشن و خاموش کردن ال ای دی 
TCNT2=; // ریست کردن تایمر / کانتر
overflow=; // ریست شمارنده Overflow  
} 
} 
}

این قسمت نیز مانند قسمت های قبلی آموزش AVR بود و نیازی به ارائه توضیحات اضافه نیست در صورتی که متوجه نشدید قسمت های قبلی مربوط به تایمر کانتر را بخوانید 🙂

حالا میرسیم به قسمت وقفه و زیرروال :

interrupt [TIMER2 OVF] void timer2_isr (void) { 
overflow++; // اضافه کردن یک مقدار به متغیر overflow 
}

کد کامل :

#include <mega32.h> 
void timer2_configuration (){
TCCR2 |=(1<<CS21)|(1<<CS22); 
TIMSK |=(1<<TOIE2); 
TCNT2=;
#asm ("sei");
overflow = ;
} 
interrupt [TIMER2 OVF] void timer2_isr (void) { 
overflow++; 
} 
while(1){ 
if(overflow>=12){ 
if(TCNT2>=53){ 
PORTB. ^=(1<<);
TCNT2=; 
overflow=;
} 
} 
}

خب این قسمت هم از سری آموزش های میکروکنترلر های AVR تمام شد، در قسمت بعد به طور کامل با مد CTC آشنا میشویم.

قسمت بعد : آموزش مود های مختلف تایمر / کانتر در میکروکنترلر های AVR (آموزش AVR #17)

نظرتان را در مورد این مطلب با ستاره دادن اعلام کنید امیدوارم این مطلب برای شما مفید بوده باشد. نظرات ، مشکلات و پیشنهادات خود را در پایین صفحه اعلام کنید

محمد رحیمی

محمد رحیمی هستم. سعی میکنم در آیرنکس مطالب مفید را قرار دهم. (در خصوص سوال در مورد این مطلب از قسمت نظرات همین مطلب اقدام کنید)

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا