یک سوال در مورد وقفه pwm دارم .زمانی که در مد fast pwm فعال میکنیم وقفه تایمر اگر فعال باشه چکار میکنه. و در مد fast pwm وقفه چه کاربردی داره؟
اطلاعیه
Collapse
No announcement yet.
وقفه pwm
Collapse
X
-
پاسخ : وقفه pwm
هر بار که تایمر کانتر به مقدار انتهایی خودش برسه، وقفه سرریز فعال میشه. یعنی برای تایمر صفر و تایمر 2 وقتی مقدار TCNTx برابر 256 بشه، (اندیس x برای نشون دادن تایمر متناظرشه، یعنی برای تایمر صفر میشه TCNT0 و برای تایمر 2 میشه TCNT2) یا برای تایمر 1 مقدار TCNT1A و TCNT1B برابر 256 بشن که در کل مقدار TCNT1 باید 65535 بشه. حالا شما میتونی تو وقفه یه مقدار اولیه به ریجستر TCNTx بدی که فرکانس دلخواهت رو بسازی.
نمیدونم چیزایی که گفتم به دردت خورد یا نه، سعی کردم ساده توضیح بدم. اگه سوال دیگه ای داری در خدمتم.
راستی یه نکته دیگه: دلیل اینکه مقدار اولیه TCNTx رو تو اینتراپت تعریف میکنیم اینه که با هر بار سرریز شدن تایمر،رجیستر TCNTx دوباره صفر میشه. پس ما یه وقفه میذاریم تا هر بار که صفر میشه، مقدارش رو بذاریم رو چیزی که میخوایم تا فرکانسی که میخوایم درست بشه.
البته من همینا رو تازه از آقای ameen.kh یاد گرفتم. خیلی هم ازشون ممنونم. خلاصه خواستم بگم اگه اشکالی داشت به خاطر اینه که خودمم تازه دارم تایمرو یاد میگیرم.
یاعلی
دیدگاه
-
پاسخ : وقفه pwm
اینم کد یه موج مربعی با فرکانس 2kHz و دیوتی سیکل %25:
کد:#include <mega32.h> #define xtal 8000000 interrupt [TIM0_OVF] void timer0_ovf_isr(void) { TCNT0=194; } void main(void) { PORTB=0x00; DDRB=0x08; TCCR0=0x6b; TCNT0=194; OCR0=205; TIMSK=0x01; #asm("sei") while(1); }
دیدگاه
دیدگاه