مثلا میشه اینکارو کرد؟
کانتر شرو به شمردن کنه بعد مقدارش رو با یه عدد مقایسه کنیم و زمانی که برابر شدن 1پایه رو یک کنیم بعد اون عددی که مقایسه میکردیمو عوض کنیم برای پین بعدی
اینبار که برابر شد یه پین دیگه رو یک کنیم و پین قبلی رو صفر و باز برای مقایسه سومی مقدار عدد مقایسه رو عوض کنیم. :mrgreen:
بابا یکی کمک کنه. :cry2:
میشه این روند رو داشته باشیم؟
بزار واضح تر بگم
وقتی مقدار تایمر با ocrبرابر شد میشه تو برنامه وقفه مقدار ocr رو تغییر داد؟
تایمر بعد از برنامه وقفه صفر میشه یا از همون مقدار ادامه پیدا میکنه؟
سلام دادا.
من که نفهمیدم چی شد. اما برای این سوال که یک تایمر/کانتر با سه خروجی داشته باشیم: جواب منفیه.
اون سوال هم که میخوای با مقایسه کردن 3 عدد سه پین خروجی رو یک کنی این شدنیه. البته اون جوری که من فهمیدم. با اینتراپت هم میشه این ساخت. بهتره دقیقتر بگی چی میخوای تا کمک کنیم.
خدارو شکر یکی پیدا شد :redface:
هدف کلیم اینه که یه سیگنال ورودی دارم که میخوام فرکانسشو بدست بیارم بعد مطابق با اون فرکانس 2تا موج تو خروجی درست کنم دقیقا با همون فرکانس و جوری که با سیگنال ورودی و باهم هرکدوم 120 درجه اختلاف فاز داشته باشن
فرکانس سیگنال ورودیمم حدود 400hz اما باید دقیق اندازه گیری بکنمش تا 2تا موجی که میسازم دقیقا با سیگنالم هم فرکانس باشن
خوب دادا این همه صغری کبری چیدی برای همین؟!!!! از اول همینو میگفتی. :eek:
شما به یه کانتر نیاز داری برای خوندن فرکانس و 2 تا تایمر برای تولید فرکانس. برای خوندن فرکانس که مشکلی نیست و راحته. اما برا تولید فرکانس یکم باید وقت بذاری. چون اون اختلاف 120 درجه، نوشتن کدش بنظر سخت میاد. البته اگه میخواستی با اختلاف 180 درجه بسازی بسیار راحت بود. در اون صورت از تایمر 1 استفاده میکرد که 2 تا خروجی داره و یکی از خروجی هارو not inverting میکردی.
من پیشنهاد میکنم برا ایجاد اختلاف فاز از سخت افزار استفاده کنی. یه سرچ بزن ببین چی دستت میاد.
این دیگه ناممکنه دادا.
اگه کار دقیق بخوای باید از حد اقل 2 تایمر/کانتر استفاده کنی. مگه اینکه بخوای با دستورات پورت تولید فرکانس کنی که اونم دقیق نیست. اما با این امکانات بنظر میاد تنها راحت همین باشه!
دادا بابت وقت گذاشتنم ممنون
یه راهی پیدا کردم که به احتمال خیلی زیاد جواب بده.
فردا امتحانش میکنم جواب داد میزارمش تو سایت
بازم دمت گرم دادا
یا علی :bye
سلام
من این برنامه رو نوشتم بنظرم همه جاش درسته اما کار نمیکنه
اول فرکانس رو اندازه گرفتم بعد تقسیم به 6 کردم و هر پریود رو 60 درجه به 60 درجه رسم کردم.
فکر کنم ایرادم از فعال کردنای وقفه هاس آخه کامل با رجیستراش آشنا نیستم
میتونید یه نگاهی بهش بندازی
unsigned long int tf; //tov counter
unsigned long int tf2;
unsigned long int t; //input signal period
unsigned long int t2; //t/3
//unsigned long int tov;
unsigned char tt; //256-tcnt0
unsigned int c=0;
unsigned int c2=0; //sector cuonter per sector is 60"
دیدگاه