سلام،
من میخاستم با PWM یه موج مربعی با فرکانس 200 هرتز و دیوتی سایکل 0.07 درست کنم، چون کریستال خارجی میکروم 4 مگا هرتز بود بنابراین از فرمول
fpwm=crystal/(prescale(256-tcnt))
استفاده کردم و با جایگذاری crystal=4000000 و prescale=128
مقدار TCNT رو برابر 100 که مساوی 64 هگز میشه بدست اوردم و مقدار OCR زو هم از فرمول
dutycycle=ocr/(256-tcnt) برابر 4 بدست اوردم که بنابراین توی رجیسترها مقدار اونو 68 گذاشتم،
TCCR2=0x6D;
TCNT2=0x64;
OCR2=0x68;
ولی مشکلم اینه که فرکانسم 200 هرتز نیست، و حدود 150 هرتزه، حالا اگه tcnt رو هم تغییر بدمم (بیشترش کنم که طبق فرمول فرکانسم بیشتر بشه،) اصلا فرکانی تغییر نمیکنه و ثابته، کسی نمیدونه چرا؟ و من باید چیکار کنم که فرکانسم دقیق باشه؟
من میخاستم با PWM یه موج مربعی با فرکانس 200 هرتز و دیوتی سایکل 0.07 درست کنم، چون کریستال خارجی میکروم 4 مگا هرتز بود بنابراین از فرمول
fpwm=crystal/(prescale(256-tcnt))
استفاده کردم و با جایگذاری crystal=4000000 و prescale=128
مقدار TCNT رو برابر 100 که مساوی 64 هگز میشه بدست اوردم و مقدار OCR زو هم از فرمول
dutycycle=ocr/(256-tcnt) برابر 4 بدست اوردم که بنابراین توی رجیسترها مقدار اونو 68 گذاشتم،
TCCR2=0x6D;
TCNT2=0x64;
OCR2=0x68;
ولی مشکلم اینه که فرکانسم 200 هرتز نیست، و حدود 150 هرتزه، حالا اگه tcnt رو هم تغییر بدمم (بیشترش کنم که طبق فرمول فرکانسم بیشتر بشه،) اصلا فرکانی تغییر نمیکنه و ثابته، کسی نمیدونه چرا؟ و من باید چیکار کنم که فرکانسم دقیق باشه؟
دیدگاه