سالک:در مورد تایمرها داشتیم صحبت می کنیم ، اتمگا ۳۲ ، رجیستر tccn , 3 بیت اول را گفتی تقسیم فرکانس ، اولا بگو تقسیم فرکانش یعنی چی ، باقی بیت ها را هم بگو چی کار می کنند؟
بسیار عالی که تا اینجا پیش رفتی!
داریم دربارهی رجیستر TCCRn در میکروکنترلر ATmega32 صحبت میکنیم. این رجیستر کنترل تایمر/کانترهاست. برای مثال، برای تایمر صفر (Timer0) رجیستر TCCR0 داریم، و برای تایمر 1 و 2 هم به ترتیب TCCR1A, TCCR1B, TCCR2 داریم.
اول:
تقسیم فرکانس یعنی چی؟ (Prescaler)
فرض کن فرکانس کلاک سیستم تو ۱۶ مگاهرتزه. تایمر باید با یه فرکانسی کار کنه. اگه همین ۱۶ مگاهرتز مستقیم بره به تایمر، خیلی سریع شمارش میکنه و شاید برات کاربردی نباشه.
اینجاست که "تقسیمکنندهی فرکانس" وارد میشه:
Prescaler یعنی فرکانس کلاک رو تقسیم کنیم به عددی مثل 8، 64، 256 و غیره، تا سرعت تایمر کمتر بشه.
مثلاً:
prescaler = 8 → تایمر با فرکانس 2MHz کار میکنه (16MHz ÷ 8)
prescaler = 64 → تایمر با 250kHz کار میکنه
رجیستر TCCR0 — بررسی بیتها
رجیستر TCCR0 هشتبیتیه و ساختارش اینه:
Bit 7 6 5 4 3 2 1 0
FOC0 | WGM00 | COM01 | COM00 | WGM01 | CS02 | CS01 | CS00
بیتهای ۰ تا ۲: CS02، CS01، CS00 → برای تقسیم فرکانس (Clock Select)
CS02CS01CS00عملکرد
000تایمر متوقف (No clock)
001بدون تقسیم (clk/1)
010clk/8
011clk/64
100clk/256
101clk/1024
110کلاک خارجی - لبه پایین
111کلاک خارجی - لبه بالا
بیت ۳: WGM01
بیت ۶: WGM00
→ تعیین مد کاری تایمر:
مثلاً تایمر شمارنده عادی باشه یا PWM تولید کنه یا CTC و...
WGM01WGM00مد کاری
00Normal (شمارنده ساده)
01PWM, Phase Correct
10CTC (Clear Timer on Compare Match)
11Fast PWM
بیتهای ۴ و ۵: COM00 و COM01
→ کنترل خروجی روی پایه OC0 (Output Compare Pin)
مثلاً اگه PWM تولید میکنی، این بیتها تعیین میکنن که وقتی شمارش با مقدار OCR0 برابر شد، چه اتفاقی برای پایهی OC0 بیفته (Set, Clear, Toggle).
بیت ۷: FOC0
→ Force Output Compare
در حالت non-PWM اگه بخوای دستی مقدار مقایسه رو مجبور کنی، از این بیت استفاده میشه.
جمعبندی ساده:
بیتهااسمکار
0 تا 2CS00..CS02تعیین تقسیم فرکانس (prescaler)
3 و 6WGM01, WGM00تعیین مد کاری تایمر (Normal, PWM...)
4 و 5COM00, COM01رفتار پایهی OC0 در حالت مقایسه
7FOC0دستور دستی مقایسه در مد non-PWM
اگر خواستی، بعداً بریم سراغ TCCR1A و TCCR1B برای تایمر ۱ که ۱۶ بیتیه و پیچیدهتره.
بگم یا اول این رو کاملاً جا بندازیم؟