سلام دوستان....میخواستم بدونم کسی از نحوه اندازه گیری duty cycle اطلاعی داشته باشه؟سپاس فراوان
pouyan-asgharian عزیز با سلام
من با PIC این کار رو کردم. اما برای همه میکروکنترلرها درسته. برنامه ای که من نوشتم بصورت زیر کار میکرد:
- یه متغیر کانتر بصورت گلوبال (Global) تعریف میکنی.
- یه اینتراپت تایمر تعریف میکنی. سرعت تایمر باید طوری باشه که در طول یه پالس ورودی بتونی چند تا پالس بخونی. مثلا اگه فرکانس موجی که میخوای duty cycleاش رو بخونی 10 هرتز باشه، تایمرت رو مثلا 10 کیلو هرتز یا بیشتر تعریف کنی خوبه. توی ISR این اینتراپت هم یه دستور میزاری که مقدار کانترت رو یه واحد اضافه کنه.
- یه اینتراپت ورودی تعریف میکنی که روی لبه بالا رونده تحریک بشه.
- توی ISR این اینتراپت یه شرط if بصورت زیر میزاری
- اگه اینتراپت بصورت لبه بالارونده تعریف شده باشه، مقدار کانترت رو تو یه متغیر ذخیره کن. (این متغیر تعداد پالسهایی که تو یه سیکل هست رو ذخیره میکنه) بعد مقدار کانتر رو صفر کن. و بعد اینتراپت رو بصورت لبه پایین رونده تعریف کن.
- اگه اینتراپت بصورت لبه پایین رونده تعریف شده باشه، مقدار کانترت رو تو یه متغیر دیگه ذخیره کن. بعد اینتراپت رو بصورت لبه بالارونده تعریف کن.
- توی برنامه اصلی همیشه مقدار متغیر دوم تقسیم بر متغیر اول مقدار duty cycle هست.
واسه دقت بیشتر هرچقدر فرکانس تایمرت رو بیشتر کنی، دقت کارت بالاتره. فقط باید حواست باشه که نوع متغیر کانترت رو طوری تعریف کنی که مطمئن باشی که Overflow نمیده.
بازم اگه سوال دیگه ای داشته باشی خوشحال میشم کمکت کنم.
GNMS