تایمر کانتر Timer/Counter در میکروکنترلر AVR + توضیح رجیستر ها

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

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

میکروکنترلر قابلیت اینو داره که بازه زمانیشو از چند میکروثانیه تا چندین ساعت تنظیم کرد که این زمان بندی از دقت بالایی برخوردار بوده.

در مدارمنطقی داده های گیت های منطقی توسط ریجیسترها ذخیره میشه که البته ریجیسترها این اطلاعاتو بصورت موقت ذخیره میکنن بطورییکه با آمدن کلاک ،ورودی به خروجی منتقل میشه .این ریجیستر ها بسته به نوعشون که معمولا ۸ بیتی ، ۱۶ بیتی ، ۳۲ بیتی یا ۶۴ بیتی هستن  به همان تعداد بیت ذخیره میکنن.یه ریجیستر 8بیتی تنها عددی در بازه 0تا255 را ذخیره میکنه و ریجیسترهای 16بیتی میتونه از 0تا 65535ذخیره میکنن.

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

در AVRتایمر کانتر ها دو نوع 8بیتی و 16بیتی هستن.

این بدین معناست که تایمر کانتر ۸ بیتی قادر به شمردن ۲۵۶ (۲ به توان ۸) مرحله از صفر تا ۲۵۵ می باشد،به طور مشابه تایمر کانتر ۱۶ بیتی قادر به شمارش ۶۵۵۳۶ (۲ به توان ۱۶) از صفر تا ۶۵۵۳۵ است. وقتی مقدار  ریجیستر به ماکسیمم مقدار برسه (یعنی وقتی ریجیستر 8بیتی به 255 و ریجیستر 16بیتی به 65535برسه)،ریجیستر ریست شده و ممقدار ریجیستر صفر میشه که به این عمل اصطلاحا سرریز(OVER FLOW) گفته میشه و بعد اینکار دوباره کانتر به شمردن ادامه میده.

بهترین ویژگی ای که تایمر کانتر ها دارا می باشند این است که نسبت به CPU مستقل است. از این رو کاملا موازی با CPU کار می کند و با CPU هیچ گونه تداخلی ندارد. همین امر است که تایمر کانتر را کاملا دقیق می سازد.

[ads1]

 

فرق تایمر و کانتر:

تایمر نوعی از شمارشه که بصورت منظم مقدار ریجیستر افزایش پیدا کرده و که همون زمانه مثل کاربرد ساعت و زمان سنج و…

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

یا بعبارتی تایمر نوعی شمارنده باینری صعودی شمار هستش که کلاک خود را از کلاک داخلی سیستم تامین میکنه و کانتر نیز نوعی شمارنده باینری صعودی شمار هستش که کلاک خودشو از پایه Tn تامین میکنه.

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

معمولا از تایمر کانتر برای 2 منظور استفاده می شود:

1)تولید یک وقفه داخلی

2)تولید یک شکل موج در خروجی – یا شمارش یک پالس

[ads1]

در میکروکنترلر ATmega 32 سه نوع تایمر کانتر مختلف داریم:

تایمر کانتر صفر که یک رجیستر ۸ بیتی است.

تایمر کانتر یک که یک رجیستر ۱۶ بیتی است.

تایمر کانتر دو که یک رجیستر ۸ بیتی است.

برخی از آنها دارای عملکرد ساده و برخی دیگر دارای امکانات بیشتر نظیر تولید موج PWM ، حالت مقایسه CTC ، حالت تسخیر، عملکرد غیر همزمان و … می باشند  که در ادامه گفته خواهد شد.

در تایمر کانتر های  ساده 8بیتی پایه خروجی وجود نداره و در تایمر کانتر های پیشرفته 8بیتی یک خروجی و در تایمر کانتر های ساده 16بیتی دو خروجی و در تایمر کانتر های پیشرفته 16بیتی دو خروجی و در بعضی میکروکنترلرها سه خروجی وجود داره.

پایه های تایمر کانتر

[ads1]

 

1)تایمر کانتر صفر:

یه تایمر 8بیتیه و پایه T0بعنوان  ورودی و پایه OC0 بعنوان بخش مقایسه ای این تایمره.این تایمر دارای سه رجیستر TCNT0 و TCCR0 و OCR0  و دو رجیستر مشترک با تایمر یک و دو بنام رجیستر TIMSK و TIFR هستن.

2)تایمر کانتر یک:

این تایمر،یه تایمر 16بیتی بوده و علاوه بر امکانات تایمر صفر،یه بخش دیگری به نام Capture به آن اضافه شده.این بخش در زمان های خاص،عدد شمارش شده توسط تایمر یک و زمان سپری شده رو ثبت میکنه و از طریق آن امکان اندازه گیری های زمانی رو فراهم میکنه.در این تایمر پایه T1بعنوان ورودی و پایه هایOC1A و OC1B بعناون خروجی مقایسه گر عمل میکنه و همچنین پایه ICP1 بعنوان ورودی بخش Capture تایمر یک عمل میکنه.

تایمر یک،دو واحد مقایسه ای مجزا OCR1A و OCR1B داشته و بعلت 16بیتی بودن تایمر یک،این دوتا رجیستر و رجیستر TCNT1 و رجیستر ICR1 نیز که رجیستر واحد Capture هستش،هرکدام 16بیتی بوده و دارای دو بایت Low و High هستش.

3)تایمر کانتر دو:

عملکرد این تایمر مثل تایمر صفره با این تفاوت که برخلاف تایمر صفر و یک،نمیتونه از پایه های خارجی T0 و T1 کلاک دریافت کنه اما این تایمر دارای یه عملکرد غیرهمزمانه و میتونه بصورت مجزا با یه اسیلاتورپالس ساعت کار کنه (به این عملکرد RTC گفته میشه).یعنی وقتی تایمر عملکرد آسنکرون داشته باشه پالس مورد نیاز خودشو از کریستال پالس ساعت یعنی 32.768که به پین های TOSC1 و TOSC2 وصله تامین میشه و میتونه بطور دقیق،زمن رو اندازه گیری کنه.

 

انواع حساسیت در سیگنال:

حساس به

معرفی رجیسترهای تایمر کانتر ها:

منظور از nشماره تایمر کانتر اس.تایمر کانتر nام.

TCNT1 رجیستر تایمر کانتر یک

1)رجیستر  TCNTn

Timer/Counter Register for timer n

این رجیستر برای ذخیره سازی مقدار تایمر و یا کاننتر در هر لحظه به کار میره و در هر لحظه  قابل خواندن و نوشتنه.

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

2)رجیستر OCRn

Out Compare Register for timer n

این رجیستر خواندنی و نوشتنی بوده و حاوی مقداریه که دائما با مقدار  رجیسترTCNT0 (در تایمرصفر)مقایسه میشه که در صورت برابری،طبق مد اعمال شده(در ادامه گفته خواهد شد)،اقداماتی رو انجام میده. از تطابق این دو رجیستر، برای تولید وقفه خروجی یا تولید یک شکل موج روی پایه OC0 (پایه خروجی تایمرصفر)می توان استفاده نمود.

در تایمر یک،مقدار موجود در رجیسترهای OCR1A و OCR1B با مقدار موجود در رجیستر TCNT1 مقایسه شده و در صورت برابری،طبق مد اعمال شده،وضعیت پین های OC1A و OC1B رو تغییر میده.

[ads1]

 

3)رجیستر TCCRn

Timer counter Control Register for timer n

همونطوری که از اسمش مشخصه،این رجیستر نقش کنترلی تایمرکانترو داره.تمامی بیت های این ثبات،نقش تعیین خصوصیت تایمر رو داره. رجیستر کنترلی تایمر کانتر صفر TCCR0 که دارای هشت بیت کنترلی است که برای انتخاب پالس ساعت، حالت خروجی هنگام تطابق مقایسه، عملکرد های PWM، و بیت مقایسه خروجی. که در کل با این 8 بیت حالت های مختلفی وجود دارد که با استفاده از codewizard این رجیستر ها تنظیم می شود.

بیت های رجیستر TCCR0 تایمر کانتر صفر

 

توسط این ثبات میتونیم مد کاری(مد چهارگانه)،فرکانس کاری،خصوصیات کل موج خروجی رو تعیین کنیم.

[ads1]

 

مدهای تایمر کانتر ها:

1)مد نرمال

Normal mode

در این مد،ثبات TCNTn از مقدار حداقلی (Bottom) که لزوما صفر نیس،بصورت معمولی افزایش پیدا میکنه، این مد کاری یک شمارنده ی ساده است. این مد برای شمارش رویداد هی خارجی استفاده می شود به این صورت که هرگاه پایه ی مربوط به پالس خارجی در تایمر n،یک بشه (از نظر منطقی) یک واحد به مقدار شمارنده افزوده میشه و وقتی به مقدار ماکزیمم(MAX)(همونطوری که گفته شد در 8بیتی(در تایمر صفر و دو) وقتی به 255 برسه یا 0xFF و در 16بیتی (تایمر یک) به مقدار 65535 یا 0xFFFF ) برسه سرریز شده و TOVnرو در ثبات TIFRیک میکنه و در صورت فعال بودن وقفه سرریز تایمر،مسیر برنامه رو برای اجرای  روتین وقفه تغییر میده.

2)مد مقایسه ای CTC

CTC=Clear Timer on Compare match

مد کاری CTC معمولا برای ایجاد زمان های تاخیر دلخواه و نیز برای تولید شکل موج مربعی با فرکانس متفاوت مورد استفاده قرار می گیره.در این مد،مقدر ثبات TCNTnدایما با ثبات OCRn مقایسه شده و در صورت برابری، ثبات TCNTn سرریز میشه(مقدار ان ریجستر صفر میشه) و یا باعث تغییر وضعیت پایه OC0 و یا وقفه تطابق میشه.در لحظه ای که مقدار TCNTبا OCRبرابره،این مقدار همون مقدار TOPمیشه.پس در مد CTC،مقدار TOPرو محتوای ثبات OCRnتعیین میکنه.وقفه ی مقایسه(بیت TOIEnدر ثبات TIMSK) و وقفه همگانی فعال باشه،بیت پرچم معادل در ثبات TIFR (بیت OCF0)یک شده و وقفه مقایسه رخ میده.

اگر خروجی مقایسه ای (OCn)فعال و توسط بیت های چهار و پنجثبات TCCRn آن را در حالت Toggle تنظیم کنیم،این خروجی در هربار که برابری این دو ثبات رخ میده،معکوس میشه.

فرکانس تولیدی در این مد:

3)مد مدولاسیون عرض پالس سریع

Fast PWM=Fast Pulse Width Modulation

در این مد ،مقدار ریجیستر TCNTn از صفر شروع کرده ودایما افزایش یافته و با OCRn مقایسه میشه در صورت برابری اگه در حالت Non-Invert باشه خروجی OCn از همون مقدار صفر TCNTn تا لحظه ی برابری یک میشه و از لحظه ی برابری تا زمان سرریز صفر میشه.

همچنین در حالت Invert خروجی برعکس قبلیه هستش یعنی  از لحظه ای که مقدارTCNTnیکه تا لحظه ای که مقدار TCNTnبا مقدار ریجیستر OCRnبرابر میشه،صفر میشه و از لحظه ی برابری تا زمان اورفلو یک میشه.

هدف ازین مد ایجاد یک موج در پایه خروجی OCn هستش که در شکل پایین هم کاملا مشخصه:

اگه بطور خلاصه بگم اینطوری میشه که این مد مشابه مد نرماله و شمارش تا مقدار ماکزیمم افزایش پیدا کرده با این تفاوت که پین OCn هم در زمان سرریز رجیستر TCNTn و هم در حالت برابری رجیستر TCNTn و OCRn مقدار این پایه تغییر پیدا میکنه.

رابطه ی فرکانس پالس خروجی در مد PWM بصورت زیره:

[ads1]

4)مد مدولاسیون عرض پالس صحیح فاز

Phase Correct PWM

در این مد،مقدار ریجیستر TCNTn افزایش یافته و به مقدار ماکزیمم خود رسیده ولی بعد اون دیگه صفر نمیشه و بصورت کاهشی به مقدار صفر بر میگرده .در این فرایند مقدار ریجیستر  TCNTnدایما با مقدار ثبات OCRnمقایسه شده و در صورت برابری بسته به حالت Invert یا Non-Invert  مثل  مد PWM صفر یا یک میشه و تولید موج PWM میکنه..

مثلن در حالت Non-Invert مقدار ریجیستر از صفر شروع کرده و به لحظه ی برابری رسیدیم که تا این لحظه مقدار پایه خروجی  یک و از این لحظه تا لحظه ی برابری بعدی صفر میشه.

حداکثر فرکانس موج PWMتولید شده در این مد به دلیل داشتن دو شیب(یک شیب از صفر تا رسیدن به ماکزیمم و شیب دیگه از ماکزیمم تا رسیدن به صفر)نصف مد Fast PWM هستش.

فرکانس پالس خروجی  در این مد بصورت زیره:

این چهار مد برای هر تایمر توسط دو بیت WGMدر ریجیسترTCCRnتنظیم میشه که در ادامه گفته میشه.

[ads1]

 

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

بررسی رجیستر TCCR برای تایمر صفر وتایمر دو:

جدول زیر بیت های این رجیستر رو برای تایمر صفر نشون میده:

بیت های رجیستر TCCRn تایمر کانتر

بیت های صفر و یک و دو:

بیت های رجیستر TCCRn تایمر کانتر

اگه در حالت تایمر  استفاده کنیم،این بیت ها تعیین کننده تقسیم فرکانسی کلاک تایمر صفر هستش و اگه بعناون کانتر در نظر گرفته بشه،نوع کلاک خارجی رو مشخص میکنه.مثلا این بیت ها به ازای 111 مشخص میکنه که کانتر ما روی پایه T0 حساس به لبه بالا رونده هستش و یا 110 یعنی حساس به لبه پایین رونده.

بیت های سوم و ششم :

WGM=Waveform Generation Mode

توسط این بیت ها ، عملکرد تایمر مشخص میشه.برای فعال کردن هر مد،طبق جدول زیر به بیت های سوم و ششم یعنی بیت های WGM00 و WGM01 مقادیر مربوطه رو میدیم:

[ads1]

بیت های چهار و پنج:

COM=Compare match Output Mode

توسط این بیت پیکره بندی پایه یOC0 رو تعیین میکنیم:

در حالت CTC و Normal:

در حالت Fast PWM :

در حالت Phase Correct PWM:

بیت هفت:

FOC=Force Output Compare

در صورت یک کردن بیت FOC0 بصورت آنی،مقدار رجیستر TCNT0 با مقدار رجسیتر OCR0 مقایسه شده و در صورت تطبیق  مقایسه،یک تغییر وضعیت روی پایه OC0 ایجاد میشه.در این وضعیت بیت OCF0 یا OCF1 یک نشده و باعث ایجاد وقفه نیز نخواهد شد.

لازم به ذکره که در تمامی حالاتی که روی  پین های OC شکل موج ایجاد میشه ،باید این پین بصورت خروجی تعریف بشه.

[ads1]

 

رجسیترهای 8 بیتیTCCR1A و TCCR1B:

این رجیسترها کنترل تایمر کانتر یک رو دارن.

بیت های صفر و یک رجیستر TCCR1A و بیت های سه و چهار رجیستتر TCCR1B (بیت های WGM13,WGM12,WGM11,WGM10) ، مد های کاری تایمر کانتر رو مشخص میکنن.

عملکرد بیت های دو و سه رجیسترTCCR1A (FOC1B,FOC1A) ،مانند عملکرد FOC0 در تایمر صفر و دو هستش.در مد های غیر PWM ، یک کردن این بیت بدون اینکه وقفه ای ایجاد کنه در صورت تطبیق مقایسه،باعث تغییر وضعیت پین های OC1A و OC1B مطابق باوضعیت بیت های COM در TCCR1 میشه.

بیت های چهار و پنج و شش و هفت (Com1B1,Com1A0,Com1A1,Com1B0)،تغییر وضعیت پین های OC1A و OC1B رو در حالت تطبیق معین میکنه که مقدار آنها بسته به مد کاری عملکرد متفاوتی رو ایجاد میکنه.

در  مد غیر PWM:

در مد Fast PWM:

در مد Phase Correct PWM:

[ads1]

بیت های صفر ویک و دو رجیستر  TCCR1B (Clock Select :CS12,CS11,CS10)نقشتقسیم فرکانسی کلاک تایمر یک و خاموش بودن تایمر کانتر رو بر عهده داره.

بیت ششم رجیستر TCCR1B (Input Capture Edge Select:ICES1) نحوه ی تریگر  شدن واحد Capture رو تعیین میکنه.اگه این بیت صفر باشه یه لبه بالا رونده سیگنال و اگه یک باشه یه لبه پایین رونده سیگنال میتونه واحد Capture رو تحریک کنه.

بیت هفتم رجیستر TCCR1B:(Input Capture Noise Canceler:ICNC1) بیت فعال ساز حذف نویز در ورودی پین ICP1هستش.

[ads1]

 

5)رجیستر TIMSK

Timer/Counter Interrupt Mask Register

این رجیستر وقفه رو در تایمرکانتر فعال وغیرفعال میکنه.

این رجیستر بین هرسه تایمر مشترک بوده و فقط بیت های صفر و یک مربوط به Timer0 هستش.

بیت صفر OCIE0:

Output Compare Match Interrupt Enable for Timer/Counter 0

اگه وقفه همگانی فعال و تطبیق مقایسه ای تایمر یا کانتر صفر صورت بگیره و این بیتو یک کنیم،وقفه ی مربوط به مقایسه اجرا میشه.

بیت یک TOIE0:

Overflow Interrupt Enable for Timer/Counter 0

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

بیت دو TOIE1:

Overflow Interrupt Enable for Timer/Counter 1

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

بیت سهOCIE1B:

Output Compare Match B Interrupt Enable for Timer/Counter1

اگه وقفه همگانی فعال باشه و تطبیق مقایسه ای واحد B تایمر کانتر یک صورت بگیره (یعنی برابری رجیستر TCNT1و OCR1B) و در این بیت یک بنویسیم وقفه مربوط به مقایسه اجرا میشه.

بیت چهار OCIE1A:

Output Compare Match A Interrupt Enable for Timer/Counter 1

اگه وقفه همگانی فعال باشه و تطبیق مقایسه ای واحد A تایمر کانتر یک صورت بگیره (یعنی برابری رجیستر TCNT1 و OCR1A)در این بیت یک بنویسیم،وقفه مربوط به مقایسه اجرا میشه.

بیت پنج TICIE2 :

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

بیت ششTOIE2

Overflow Interrupt Enable for Timer/Counter 2

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

بیت هفت OCIE2:

Output Compare Match Interrupt Enable for Timer/Counter 2

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

[ads1]

 

6)رجیستر TIFR:

Timer Interrupt Flag Register

محتوی بیت های پرچم مربوط به تایمر

 

بیت صفر TOV0:

Timer/Counter 0 Overflow Flag

در زمان سرریز تایمر صفر،این بیت یک میشه.

بیت یک OCF0:

Timer/Counter 0 Output Compare Match Flag

در صورت برابری مقدار TCNT0 و OCR0 این پرچم فعال میشه.

بیت دو TOV1 :

در زمان سرریز تایمر یک،این بیت یک میشه.

بیت سه OCF1B:

درصورت برابری مقدار TCNT1 و OCR1B این پرچم فعال میشه.

بیت چهار OCF1A:

Timer/Counter 1 Output Compare A Match Flag

در صورت برابری مقدار TCNT1 وOCR1A این پرچم فعال میشه.

بیت پنجICF1:

Input Capture Flag for Timer/Counter 1

زمانیکه واحد Capture تحریک بشه این پرچم فعال میشه.

بیت ششTOV2:

Timer/Counter 0 Overflow Flag

در  زمان سرریز تایمر دو،این بیت یک میشه.

بیت هفتOCF2:

Timer/Counter 2 Output Compare Match Flag

در صورت برابری مقدار TCNT2 و OCR2 این پرچم فعال میشه.

[ads1]

 

7)رجیستر ورودی Capture

Input Capture Register ICR1H and ICR1L

عملکرد این واحد به اینصورته که در اثر تریگر شدن ورودی Capture از پین ICP1 یا خروجی مقایسه گر آنالوگ مقدار موجود در رجیستر TCNT1 در رجیستر ICR1 نوشته شده و همزمان پرچم Captureتایمر یک (ICF1) یک میشه.دراین زمان درصورت فعال بودن بیت پرچم ورودی (Capture (TICIE1 این تریگر شدن میتونه باعث ایجاد وقفه بشه.

پروژه ساخت ساعت دیجیتالی با تایمر صفر


توسط

برچسب‌ها:

دیدگاه‌ها

4 پاسخ به “تایمر کانتر Timer/Counter در میکروکنترلر AVR + توضیح رجیستر ها”

  1. خرید بک لیتک نیم‌رخ

    عاشق این وبسایت شدم من.عالی هستید
    شما

  2. mehdi نیم‌رخ
    mehdi

    ممنون .خدا قوت .خیلی کامل بود

  3. حمید نیم‌رخ
    حمید

    سلام
    عالی بود
    با تشکر از مدیر محترم سایت.

  4. Zahra نیم‌رخ
    Zahra

    بسیار عالی بود . ممنونم

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

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