نکته ای در مورد مد CTC در تایمر کانترهای AVR:
با توجه به immediate و فوری بودن تغییر مقدار رجیستر مقایسه در مد CTC که نقش TOP را به عهده دارد، تغییر این رجیستر می تواند منجر به ایجاد خطای ناخواسته در یک سیکل تایمر شود. برای درک بهتر، فرض کنید تایمر شماره 1 در مد CTC قرار داشته باشد و مقدار فعلی تایمر برابر 101 و OCR1A برابر 200 باشد. در این وضعیت اگر مقدار 100 در OCR1A نوشته شود، به دلیل تاثیر فوری این تغییر مقدار و بزرگتر بودن مقدار تایمر کانتر از مقدار جدید رجیستر OCR1A، تایمر به شمارش خود از 101 تا 65535 ادامه می دهد و بعد مجددا صفر می شود تا در سیکل بعدی مقدار 100 به عنوان حداکثر مقدار تایمر کانتر اثر گذار باشد. با چنین فرضی تعداد کلاک لازم برای صفر شدن تایمر بسیار بیشتر از مقدار مورد انتظار خواهد بود که باعث ایجاد خطا می شود. برای بر طرف کردن این مسئله اگر در تایمری از میکروکنترلر مورد استفاده مد fast pwm با مقدار TOP قابل تنظیم وجود داشته باشد، برای اجتناب از مشکل فوق بجای مد CTC می توان از این نوع fast pwm استفاده کرد. زیرا در مد fast pwm مقدار دهی به TOP با مکانیزم double buffering انجام می شود و بصورت immediate نیست و در نتیجه تغییر مقدار TOP تا ابتدای سیکل بعد به تاخیر خواهد افتاد و مشکل مذکور بوجود نخواهد آمد. به عنوان مثال مدهای 14 و 15 در تایمر کانترهای 1 و 3 در mega64 دارای TOP متغیر هستند و می توانند به این منظور مورد استفاده قرار بگیرند.
@KnowledgePlus
Post #593
3.86K