تایمر/کانتر 2 در میکروکنترلر ATmega128A، یک تایمر/کانتر 8 بیتی است. عملکرد این تایمر/کانتر شبیه تایمر صفر است. تایمر/کانتر صفر و 2، دو تفاوت دارند. اول این که تایمر/کانتر 2 هم کاربرد تایمر دارد و هم کاربرد کانتر، ولی تایمر/کانتر صفر تنها تایمر است. دوم این که تایمر/کانتر 2 عملکرد آسنکرون ندارد ولی تایمر صفر عملکرد آسنکرون دارد. با توجه به این دو تفاوت، تایمر/کانتر 2 پایه های TOSC برای کریستال ساعت ندارد. همچنین یک پایۀ T2 برای کاربرد کانتر نسبت به تایمر صفر اضافه دارد. در بعضی میکروکنترلرها مثل ATmega16، ATmega32 و…، تایمر 2 عملکرد آسنکرون دارد. در نوشتۀ «آموزش تایمر صفر در میکروکنترلر AVR (ATmega128A)» تایمر صفر در AVR را در میکروکنترلر ATmega128A بررسی کردیم. در این نوشته به بررسی تایمر/کانتر 2 این میکروکنترلر می پردازیم.
فیلم آموزش تایمر در STM32 (فیلم آموزش ARM STM32 مقدماتی)
فیلم آموزش تایمر پیشرفته در STM32
فیلم آموزش تایمر در AVR (فیلم آموزش میکروکنترلرهای AVR مقدماتی)
فیلم آموزش تایمر پیشرفته در AVR
فیلم آموزش تایمر در آردوینو (فیلم آموزش آردوینو مقدماتی)
فیلم آموزش تایمر پیشرفته در آردوینو
بلوک دیاگرام تایمر/کانتر 2 در میکروکنترلر ATmega128A
در تایمر/کانتر 2 در ATmega128A، یک واحد مقایسه و یک خروجی مقایسه و همچنین یک وقفۀ سرریز و یک وقفۀ مقایسه وجود دارد. این تایمر/کانتر 4 مد دارد که عبارت از مد نرمال، مد PWM تصحیح فاز، مد CTC و مد PWM سریع هستند. در تصویر زیر بلوک دیاگرام تایمر/کانتر 2 را مشاهده می کنید.
تصویر 1 – بلوک دیاگرام تایمر/کانتر 2 در ATmega128A
تعریف چند اصطلاح در تایمر/کانتر 2 میکروکنترلر AVR
BOTTOM: کمترین مقدار تایمر/کانتر است. این مقدار برابر 0x00 است.
MAX: بیشترین مقداری است که تایمر/کانتر می تواند به آن برسد. این مقدار برابر 0xFF (255 دسیمال) است.
TOP: مقدار نهایی در مد مورد نظر است. در مد CTC، مقدار TOP برابر مقدار ذخیره شده در رجیستر OCR2 می باشد.
CM یا Compare Match: هر گاه مقدار تایمر برابر رجیستر مقایسه شود به آن CM می گوییم.
حالت های خروجی مقایسه کنندۀ تایمر 2 در AVR
تصویر زیر نشان دهندۀ بلوک دیاگرام واحد مقایسۀ تایمر/کانتر 2 می باشد. واحد مقایسه یک بخش Waveform generator دارد که شکل موج روی پایه های OC2 را می سازد. شکل موجی که روی این پایه ساخته می شود سه حالت دارد که در ادامه توضیح داده می شود.
تصویر 2 – بلوک دیاگرام واحد مقایسۀ تایمر/کانتر 2
برای خروجی مقایسه، سه حالت وجود دارد. این حالت ها که بیانگر نوعِ تغییر سطح ولتاژ روی پایۀ مقایسه یعنی OC2 هستند، در مدهای مختلف، متفاوت هستند. در جداول زیر به بررسی این حالت ها در مدهای مختلف می پردازیم. برای فهم آسان تر این حالت ها تصاویر مدها را نیز مشاهده کنید.
حالت های OC2 در مد Normal و CTC – مدهای 0 و 2
تغییر وضعیت پایۀ OC2 در مدهای صفر و 2 تایمر/کانتر 2 به صورت زیر است.
توضیحات | COM20 | COM21 |
حالت disconnected
در این حالت خروجی OC2 قطع است. |
0 | 0 |
حالت Toggle
در این حالت هر گاه CM اتفاق بیفتد وضعیت پایۀ OC2 تغییر می کند. یعنی اگر 1 باشد 0 می شود و اگر 0 باشد 1 می شود. |
1 | 0 |
حالت Clear OC2 on compare match
در این حالت وقتی CM اتفاق می افتد، پایۀ OC2 همواره صفر می باشد. |
0 | 1 |
حالت Set OC2 on compare match
در این حالت وقتی CM اتفاق می افتد، پایۀ OC2 همواره یک می باشد. |
1 | 1 |
جدول 1 – حالت های OC2 در مد نرمال و CTC
حالت های OC2 در مد PWM سریع (Fast PWM) – مد 3
نوع تغییر سطح ولتاژ پایۀ OC2 در مد PWM سریع تایمر/کانتر 2 به صورت زیر است.
توضیحات | COM20 | COM21 |
حالت disconnected
در این حالت خروجی OC2 قطع است. |
0 | 0 |
Reserved
– این حالت رزرو شده است. |
1 | 0 |
حالت non-inverting (حالت PWM ناوارون)
– در این حالت هر گاه CM اتفاق بیفتد، پایۀ OC2 صفر می شود و هر گاه تایمر به BOTTOM برسد، پایۀ OC2 یک می شود.
– دلیل این که نام این حالت، PWM ناوارون است این است که با افزایش دادنِ مقدار رجیسترِ OCR2 عرض پالس های روی OC2 افزایش می یابد. یعنی Duty Cycle آنها زیاد می شود. |
0 | 1 |
حالت inverting (حالت PWM وارون)
– در این حالت هر گاه CM اتفاق بیفتد، پایۀ OC2 یک می شود و هر گاه تایمر به BOTTOM برسد، پایۀ OC2 صفر می شود.
– دلیل این که نام این حالت، PWM وارون است، این است که با افزایش دادنِ مقدار رجیسترِ OCR2 عرض پالس های روی OC2 کاهش می یابد. یعنی Duty Cycle آنها کم می شود. |
1 | 1 |
جدول 2 – حالات OC2 در مد Fast PWM
حالت های OC2 در مد PWM تصحیح فاز (Phase Correct PWM) – مد 1
تغییر وضعیت پایۀ OC2 در مد PWM تصحیح فاز تایمر/کانتر 2 به صورت زیر است.
توضیحات | COM20 | COM21 |
حالت disconnected
در این حالت خروجی OC2 قطع است. |
0 | 0 |
Reserved
– این حالت رزرو شده است. |
1 | 0 |
حالت non-inverting (حالت PWM ناوارون)
– در این حالت هر گاه CM در شمارش صعودی اتفاق بیفتد، پایۀ OC2 صفر می شود و هر گاه CM در شمارش نزولی اتفاق بیفتد، پایۀ OC2 یک می شود.
– دلیل این که نام این حالت، PWM ناوارون است این است که با افزایش دادنِ مقدار رجیسترِ OCR2 عرض پالس های روی OC2 افزایش می یابد. یعنی Duty Cycle آنها زیاد می شود. |
0 | 1 |
حالت inverting (حالت PWM وارون)
– در این حالت هر گاه CM در شمارش صعودی اتفاق بیفتد، پایۀ OC2 یک می شود و هر گاه CM در شمارش نزولی اتفاق بیفتد، پایۀ OC2 صفر می شود.
– دلیل این که نام این حالت، PWM وارون است، این است که با افزایش دادنِ مقدار رجیسترِ OCR2 عرض پالس های روی OC2 کاهش می یابد. یعنی Duty Cycle آنها کم می شود. |
1 | 1 |
جدول 3 – حالت های OC0 در مد Phase Correct PWM
مدهای تایمر/کانتر 2 در AVR
تایمر/کانتر 2 همانند تایمر صفر می تواند 4 مد عملیاتی داشته باشد که آنها را در جدول های زیر مشاهده می کنید. برای مدهای تایمر 2 در AVR در انتهای هر کدام یک تصویر حاوی نمودار تایمر و شکل موج خروجی آن با توجه به حالت های مختلف خروجی قرار گرفته است. توضیحات این جداول و تصاویر موجود در آنها بسیار مهم هستند.
مد نرمال تایمر/کانتر 2 در ATmega128A (مد شمارۀ صفر)
مشخصات مد نرمال تایمر/کانتر 2 در ATmega128A به صورت زیر است.
TOV2 Flag Set on | Updete of OCR2 at | TOP | Timer Mode of Operation | WGM20 (PWM2) | WGM21 (CTC2) | Mode |
MAX | Immediate | 0xFF | Normal | 0 | 0 | 0 |
جدول 4 – مشخصات مد نرمال تایمر/کانتر 2
در مد نرمال تایمر/کانتر 2 میکروکنترلر ATmega128A:
- تایمر تا مقدار MAX بالا می رود و پس از آن سرریز می شود و از مقدار BOTTOM شروع به شمارش می کند.
- هر جایی که رجیستر مقایسه مقدار دهی شود، مقدار آن فوراً در آن رجیستر قرار می گیرد.
- در این مد سرریز در MAX اتفاق می افتد و هر گاه تایمر سرریز شود وقفۀ سرریز در صورت فعال بودن اتفاق می افتد. و هر گاه CM اتفاق بیفتد وقفۀ مقایسه در صورت فعال بودن اتفاق می افتد.
تصویر 3 – نمودار زمانی تایمر/کانتر 2 در مد نرمال و شکل موج روی OC2
مد Phase Correct PWM تایمر/کانتر 2 در ATmega128A (مد شمارۀ 1)
مشخصات مد PWM تصحیح فاز تایمر/کانتر 2 به صورت زیر است.
TOV2 Flag Set on | Updete of OCR2 at | TOP | Timer Mode of Operation | WGM20 (PWM2) | WGM21 (CTC2) | Mode |
BOTTOM | TOP | 0xFF | PWM , Phase Correct | 1 | 0 | 1 |
جدول 5 – مشخصات مد Phase Correct PWM در تایمر/کانتر 2
در مد PWM تصحیح فاز (PWM , Phase Correct) تایمر/کانتر 2:
- تایمر تا مقدار 0xFF بالا می رود و سپس به صورت نزولی تا مقدار BOTTOM می شمارد. و دوباره جهت شمارش صعودی می شود.
- در این مد هر جایی که رجیستر مقایسه مقدار دهی شوند مقدار آن ها در زمانی که تایمر به TOP می رسد، در آن رجیستر قرار می گیرد.
- در این مد سرریز وقتی اتفاق می افتد که مقدار تایمر (در حالی که جهت شمارش نزولی دارد) به BOTTOM برسد. هرگاه تایمر سرریز شود وقفۀ سرریز در صورت فعال بودن اتفاق می افتد. و هر گاه CM اتفاق بیفتد وقفۀ مقایسه در صورت فعال بودن اتفاق می افتد.
تصویر 4 – نمودار زمانی تایمر/کانتر 2 در مد PWM تصحیح فاز و شکل موج روی OC2
مد CTC تایمر/کانتر 2 در ATmega128A (مد شمارۀ 2)
مشخصات مد CTC در تایمر/کانتر 2 به صورت زیر است.
TOV2 Flag Set on | Updete of OCR2 at | TOP | Timer Mode of Operation | WGM20 (PWM2) | WGM21 (CTC2) | Mode |
MAX | Immediate | OCR2 | CTC | 0 | 1 | 2 |
جدول 6 – مشخصات مد CTC در تایمر/کانتر 2
در مد CTC (Clear Timer on Compare Match):
- تایمر تا مقدار رجیستر OCR2 می شمارد و پس از آن به مقدار BOTTOM می رسد و دوباره از BOTTOM شروع به شمارش می کند.
- مقدار TOP را رجیستر OCR2 تعیین می کند.
- مقادیر جدید برای رجیستر مقایسه فوراً در آن رجیستر قرار می گیرد.
- سرریز در MAX اتفاق می افتد و این امر تنها زمانی امکان پذیر است که OCR2=MAX (یعنی 0xFF) باشد. هر گاه تایمر سرریز شود وقفۀ سرریز در صورت فعال بودن اتفاق می افتد. وقفۀ مقایسه نیز به هنگام رسیدن تایمر به OCR2 (TOP) در صورت فعال بودن اتفاق می افتد.
تصویر 5 – نمودار زمانی تایمر/کانتر 2 در مد CTC و شکل موج روی OC2
مد Fast PWM تایمر/کانتر 2 در ATmega128A (مد شمارۀ 3)
مشخصات مد PWM سریع در تایمر/کانتر 2 به صورت زیر است.
TOV2 Flag Set on | Updete of OCR2 at | TOP | Timer Mode of Operation | WGM20 (PWM2) | WGM21 (CTC2) | Mode |
MAX | BOTTOM | 0xFF | Fast PWM | 1 | 1 | 3 |
جدول 7 – مشخصات مد Fast PWM در تایمر/کانتر 2
در مد PWM سریع (Fast PWM):
- تایمر تا مقدار 0xFF بالا می رود و پس از آن سرریز می شود و مقدارش به BOTTOM می رسد و دوباره از BOTTOM می شمارد.
- هر جایی که رجیستر مقایسه مقدار دهی شود، این مقدار در زمانی که تایمر به BOTTOM می رسد، در آن رجیستر قرار داده می شود.
- در این مد سرریز در MAXاتفاق می افتد. هرگاه تایمر سرریز شود وقفۀ سرریز در صورت فعال بودن اتفاق می افتد. و هر گاه CM اتفاق بیفتد، وقفۀ مقایسه در صورت فعال بودن اتفاق می افتد.
تصویر 6 – نمودار زمانی تایمر/کانتر 2 در مد Fast PWM و شکل موج روی OC2
چند نکته دربارۀ تایمر/کانتر 2 در AVR
- در همۀ مدهای تایمر می توان در رجیستر TCNT2 (مقدار تایمر) نوشت. در این صورت تایمر به محض دریافت مقدار TCNT2، از مقدار قرار گرفته در TCNT2 شروع به شمارش می کند. این امر تنها برای یک بار قابل اجراست و پس از اولین سرریز (سرریز ممکن است در BOTTOM باشد)، تایمر طبق مد کاری خود شمارش می کند. برای این که همواره تایمر از مقدار معینی (به غیر از صفر) شروع به شمارش کند باید آن مقدار معین هنگام سرریز و در روتین وقفۀ سرریز یا در وقفۀ مقایسه در TCNT2 نوشته شود. در این صورت تایمر همواره از مقدار قرار گرفته در TCNT2 شروع به شمارش می کند و این امر تکرار می شود. در مد شمارۀ 1 که شمارش صعودی و نزولی داریم، وقتی مقدار تایمر در حال افزایش است و مقداری به آن بدهیم، تایمر از آن مقدار به صورت صعودی می شمارد و وقتی شمارش تایمر نزولی است و مقداری به آن بدهیم تایمر از آن مقدار به صورت نزولی می شمارد.
- بیت های WGM21 و WGM20 به ترتیب نام جدید بیت های CTC2 و PWM2هستند.
- همۀ مدهای تایمر دو برای کاربرد کانتر نیز قابل استفاده اند.
- همان طور که گفته شد، در مد CTC، وقفۀ سرریز در صورتی اتفاق می افتد که مقدار OCR2 برابر با مقدار MAX یعنی 255 باشد.
تقسیم کنندۀ فرکانس در تایمر/کانتر 2 میکروکنترلر ATmega128A
تایمر/کانتر 2 دارای یک واحد تقسیم کنندۀ فرکانس (Prescaler Module) 10 بیتی است که می تواند فرکانسِ cpu را به اعداد 8، 64، 256 و 1024 تقسیم کند و آنگاه آن را به تایمر بدهد. بلوک تایمر/کانتر 2 می تواند با فرکانس cpu هم کار کند که در این صورت نیاز به تقسیم فرکانس نیست. همچنین در کاربرد کانتر، تقسیم کنندۀ فرکانس غیر قابل استفاده است. بلوک دیاگرام تقسیم کنندۀ فرکانس را برای تایمر/کانتر 2 و تایمر/کانتر 1 و 3 در شکل زیر مشاهده می کنید. (n=1,2,3)
تصویر 7 – بلوک دیاگرام واحد تقسیم کنندۀ فرکانس تایمر/کانتر 2
نوع کلاکِ بلوک تایمر/کانتر 2 با بیت های CS2[2:0] از رجیستر TCCR2 انتخاب می شود. اگر این سه بیت صفر باشند، تایمر/کانتر خاموش است، در غیر این صورت تایمر/کانتر فعال است و منبع کلاک آن با توجه به جدول زیر تعیین می شود.
نوع کلاک تایمر/کانتر | CS20 | CS21 | CS22 |
تایمر/کانتر متوقف (خاموش) است. | 0 | 0 | 0 |
کلاک cpu بدون تقسیم (clkI/O) | 1 | 0 | 0 |
کلاک cpu تقسیم بر 8 (clkI/O/8) – از تقسیم کنندۀ فرکانس | 0 | 1 | 0 |
کلاک cpu تقسیم بر 64 (clkI/O/64) – از تقسیم کنندۀ فرکانس | 1 | 1 | 0 |
کلاک cpu تقسیم بر 256 (clkI/O/256) – از تقسیم کنندۀ فرکانس | 0 | 0 | 1 |
کلاک cpu تقسیم بر 1024 (clkI/O/1024) – از تقسیم کنندۀ فرکانس | 1 | 0 | 1 |
لبۀ پایین روندۀ سیگنال اعمالی به پایۀ T2 – سیگنال خارجی | 0 | 1 | 1 |
لبۀ بالا روندۀ سیگنال اعمالی به پایۀ T2 – سیگنال خارجی | 1 | 1 | 1 |
جدول 8 – نوع کلاک تایمر/کانتر 2 در ATmega128A
کاربرد کانتر (Counter Mode) در تایمر/کانتر 2 میکروکنترلر ATmega128A
اگر منبع کلاک بلوک تایمر/کانتر از بیرون از میکروکنترلر باشد، این بلوک در کاربرد کانتر قرار دارد. در این کاربرد، بلوک تایمر/کانتر با هر لبۀ بالا رونده یا پایین روندۀ یک کلاک خارجی که روی پایۀ Tn (n=2) اعمال می شود، کار می کند. با هر لبۀ بالا رونده یا پایین رونده، یک واحد به مقدار شمارش اضافه می شود. در کابرد کانتر نمی توان از تقسیم کنندۀ فرکانس استفاده کرد. همچنین بهتر است فرکانس سیگنال ورودی کانتر کمتر از 0.4 فرکانس cpu (یعنی 0.4*fclk_I/O) باشد. بلوک دیاگرام کانتر را در شکل زیر مشاهده می کنید.
تصویر 8 – بلوک دیاگرام کانتر 2 میکروکنترلر ATmega128A
واحد مقایسۀ خروجی (Output Compare Unit) یا واحد مقایسه
تایمر/کانتر 2 در میکروکنترلر ATmega128A دارای یک واحد مقایسه (یا واحد مقایسۀ خروجی) است. این واحد مقایسه دائماً خروجی تایمر را با رجیستر OCR2 (که در برنامه مقدار دهی شده است) مقایسه می کند و در صورت تطابق می تواند یک وقفه بدهد. همچنین در این واحد یک بخش Waveform Generator وجود دارد که در صورت تطابقِ مقدار تایمر با مقدار رجیستر OCR2 می تواند خروجی واحد مقایسه (یعنی پایۀ OC2) را با توجه به مقادیر بیت های COM2[1:0]، صفر و یک کند. از این واحد می توان برای تولید موج PWM استفاده کرد. بلوک دیاگرام این واحد را در تصویر 2 مشاهده می کنید. همچنین بلوک دیاگرام خروجیِ واحد مقایسه را در شکل زیر می بینید.
تصویر 9 – بلوک دیاگرام خروجی واحد مقایسۀ تایمر/کانتر 2
مقایسۀ اجباری
در مدهایی به غیر از مد PWM (مدهای Normal و CTC)، با فعال سازی این بخش از واحد مقایسه، یک تطابق اجباری ایجاد می شود و با توجه به حالات خروجی مقایسه کننده، یک تغییر سطح روی پایه های OC2 اتفاق می افتد. این تطابق اجباری تنها روی خروجی واحد مقایسه اثر می گذارد و روی وقفۀ آن اثر گذار نیست.
وقفه های تایمر/کانتر 2
بلوک تایمر/کانتر 2، دو وقفه دارد که با فعال کردن آنها می توان از روتین وقفۀ مربوطه برای نوشتن کدهای برنامه استفاده کرد. زمان اتفاق افتادن این وقفه ها به مد تایمر بستگی دارد. این دو وقفه عبارتند از: وقفۀ سرریز و وقفۀ مقایسه.
رجیسترهای تایمر/کانتر 2
با توجه به این که این تایمر/کانتر 8 بیتی است، رجیسترهای آن نیز 8 بیتی هستند. تایمر/کانتر 2 یک رجیستر کنترلی، یک رجیستر مقدار تایمر و یک رجیستر مقدار مقایسه دارد.
رجیستر TCCR2
این رجیستر کنترلی شامل بیت های WGM و COM است که حالات مختلف و مدهای مختلف با مقدار دهی به این بیت ها حاصل می شوند. در این رجیستر فرکانس کاری تایمر (مقدار تقسیم فرکانس از بلوک تقسیم فرکانس) یا کاربرد کانتر انتخاب می شود. بیت مربوط به مقایسۀ اجباری نیز در این رجیستر قرار دارد.
TCCR2 (Timer/Counter Control Register 2) | ||||||||
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | Bit number |
CS20 | CS21 | CS22 | WGM21 | COM20 | COM21 | WGM20 | FOC2 | Bit name |
R/W | R/W | R/W | R/W | R/W | R/W | R/W | W | Access |
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | Initial Value |
جدول 9 –رجیستر TCCR2
بیت های WGM2[1:0](Waveform Generation Mode): این بیت ها تعیین کنندۀ مد عملیاتی تایمر/کانتر 2 هستند.
بیت های COM2[1:0] (Compare Output Mode): این بیت ها حالت های خروجی مقایسه کننده های تایمر/کانتر 2 را تعیین می کنند.
بیت های CS2[2:0] (Clock Select): این بیت ها تعیین کنندۀ فعال بودن یا نبودن تایمر/کانتر، مقدار کلاک تایمر و یا فعال بودنِ کاربرد کانتر هستند.
بیت FOC2 (Force Output Compare): با یک شدن این بیت، یک مقایسۀ اجباری برای مقایسه کننده اتفاق می افتد. این بیت فقط نوشتنی است.
رجیستر TCNT2
مقدار تایمر در این رجیستر قرار دارد. یعنی با وارد شدن هر کلاک به بلوک تایمر/کانتر، یک واحد به این رجیستر اضافه می شود.
TCNT2 (Timer/Counter 2 Register) | ||||||||
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | Bit number |
TCNT2.0 | TCNT2.1 | TCNT2.2 | TCNT2.3 | TCNT2.4 | TCNT2.5 | TCNT2.6 | TCNT2.7 | Bit name |
R/W | R/W | R/W | R/W | R/W | R | R/W | R/W | Access |
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | Initial Value |
جدول 10 – رجیستر TCNT2
رجیستر OCR2
این رجیستر مربوط به واحد مقایسه است. در واحد مقایسه، مقدار تایمر با مقدار نوشته شده در این رجیستر مقایسه می شود.
OCR2 (Output Compare Register 2) | ||||||||
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | Bit number |
OCR2.0 | OCR2.1 | OCR2.2 | OCR2.3 | OCR2.4 | OCR2.5 | OCR2.6 | OCR2.7 | Bit name |
R/W | R/W | R/W | R/W | R/W | R | R/W | R/W | Access |
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | Initial Value |
جدول 11 – رجیستر OCR2
رجیستر TIMSK
بیت های 6 و 7 این رجیستر مربوط به وقفه های تایمر/کانتر 2 است.
TIMSK (Timer/Counter Interrupt Mask Register) | ||||||||
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | Bit number |
TOIE2 | OCIE2 | Bit name | ||||||
R/W | R/W | Access | ||||||
0 | 0 | Initial Value |
جدول 12 – رجیستر TIMSK در تایمر/کانتر 2
بیت OCIE2 (Timer/Counter 2 Output Compare Match Interrupt Enable): با یک شدن این بیت، وقفۀ مقایسۀ تایمر/کانتر دو فعال می شود و با صفر شدن آن، این وقفه غیر فعال می شود.
بیت TOIE2 (Timer/Counter 2 Overflow Interrupt Enable): با یک شدن این بیت، وقفۀ سرریز تایمر/کانتر دو فعال می شود و با صفر شدن آن، این وقفه غیر فعال می شود.
رجیستر TIFR
در این رجیستر پرچم های مربوط به وقفه های تایمر/کانتر 2 قرار دارد.
TIFR (Timer/Counter Interrupt Flag Register) | ||||||||
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | Bit number |
TOV2 | OCF2 | Bit name | ||||||
R/W | R/W | Access | ||||||
0 | 0 | Initial Value |
جدول 13 – رجیستر TIFR در تایمر/کانتر 2
بیت OCF2 (Timer/Counter 2 Output Compare Match Flag): با اتفاق افتادن وقفۀ مقایسۀ تایمر/کانتر، این پرچم 1 می شود.
بیت TOV2 (Timer/Counter 2 Overflow Flag): با اتفاق افتادن وقفۀ سرریز تایمر/کانتر 2، این پرچم 1 می شود.
تمرین برای تایمر/کانتر 2
برای یادگیری تایمر در AVR و تایمر/کانتر در AVR و برنامه نویسی تایمر لازم می دانیم که تمرین هایی را انجام دهید. بنابراین همانند نوشتۀ «آموزش تایمر صفر در میکروکنترلر AVR (ATmega128A)» که چند تمرین مطرح کردیم، در اینجا نیز یک تمرین طرح می کنیم. فایل های برنامه و شبیه سازی این تمرین در پیوست موجود است. برای یادگیری تولید فرکانس متغیر با AVR با تایمر صفر به تمرین 2 نوشتۀ «آموزش تایمر صفر در میکروکنترلر AVR (ATmega128A)» مراجعه کنید. برای راه اندازی تایمر در کدویژن یک راه آسان این است که از کدویزارد استفاده کنید.
تمرین 1: ساخت یک موج PWM با Duty Cycle ثابت با تایمر 2 در ATmega128A
با استفاده از مد Fast PWM تایمر 2، یک پالس با duty cycle = 10% روی پایۀ OC2 با فرکانس 10 kHz ایجاد کنید. فرکانس کاری میکروکنترلر 8 MHz و فرکانس کاری تایمر/کانتر 1 مگاهرتز باشد. همچنین برنامه تایمر با کدویژن نوشته شود.
راهنمایی: مقدار TCNT2 را در وقفۀ سرریز طوری تعیین کنید که فرکانس 10 kHz شود. تایمر/کانتر 2 را در مد Fast PWM، تقسیم فرکانسی 8 و با حالت خروجی inverted PWM راه اندازی می کنیم. در ابتدا و در وقفۀ سرریز نیز مقدار تایمر را 156 قرار می دهیم. تایمر از 156 تا 256، تعداد 100 پله را طی می کند. با توجه به مقدار زمان هر پله (1 µs) تایمر هر 100 µs یکبار سرریز می شود. چون در مد Fast PWM هستیم، با هر سرریز یک پریود 100 µs ای در خروجی تولید می شود. فرکانس این موج برابر 1/100us = 100 kHz می باشد. تایمر تعداد 100 پله را طی می کند. از پلۀ 156 تا 255. با توجه به این که خروجی در حالت PWM وارون قرار دارد، اگر OCR2 = 245 باشد، در پلۀ 245 خروجی یک می شود و هنگام سرریز که 10 پله با 245 فاصله دارد خروجی صفر می شود. مدت زمانی که خروجی یک است، 10 پله و پریود خروجی برابر 100 پله است. بنابراین duty cycle برابر 10% می شود.
از آموزش تایمر/کانتر 2 در میکروکنترلر ATmega128A نتیجه می گیریم:
- تایمر/کانتر 2 در ATmega128A هم تایمر است و هم کانتر. این بلوک شبیه بلوک تایمر صفر است. با این تفاوت که در اینجا عملکرد آسنکرون وجود ندارد. ولی کاربرد کانتر وجود دارد.
- در هر کدام از مدهای تایمر/کانتر حالت هایی برای تغییر وضعیت OC2 وجود دارد. این حالات با بیت های COM21 و COM20 انتخاب می شوند.
- تایمر/کانتر 2 دارای چهار مد نرمال، PWM تصحیح فاز (Phase Correct PWM)، CTC و PWM سریع (Fast PWM) است.
- اگر به رجیستر TCNT2 مقدار بدهیم، تایمر/کانتر از آن مقدار شروع به شمارش می کند.
- بیت های WGM21 و WGM20 به ترتیب نام جدید بیت های CTC2 و PWM2 هستند.
- برای راه اندازی تایمر کافی است بیت های CS2[2:0] برابر 000 نباشند.
- در کاربرد کانتر در تایمر/کانتر 2، کلاک از پایۀ T2 گرفته می شود. این کلاک نمی تواند با باحد تقسیم فرکانس تقسیم بر عددی شود و مستقیماً به تایمر/کانتر وصل می شود.
- مقایسۀ اجباری در مدهای نرمال و CTC وجود دارد. با مقایسۀ اجباری وقفۀ مقایسه اتفاق نمی افتد.
- فرکانس سیگنال ورودی به پایۀ T2 در کاربرد کانتر بهتر است کمتر از 4 فرکانس کلاک CPU باشد. یعنی کمتر از 0.4fclk_I/O باشد.
0 دیدگاه