سلام دوستان
من تو یه پروژه ای برا کنترل چندتاموتور از atmega32استفاده کردم.براکنترل دورموتورها ازتمامی تایمرهای میکروتومدpwm استفاده کردم.برد pcb مدار روطراحی وچاپ کردم ونهایی شده.الان بعدگذشت یک ماه لازم شده یه تاخیرچندثانیه ای مثل waitms 5000 توبرنامه ام ایجادکنم.همونطورکه میدونیدایجادتاخیربازمان های طولانی مثل نمونه ذکرشده نیازبه استفاده ازتایمرداره چون ایجادتاخیرهای طولانی بااستفاده ازدستور waitکار درستی نیست وتاخیرباخطاهای زیاداتفاق میفته.حالاسوال من اینه که وقتی من ازتمامی تایمرها تومد pwm استفاده کردم راه حل ایجادتاخیرطولانی ودقیق توبرنامه چیه؟ ممنونم
سلام.
اگر از همه تایمرها برای pwm استفاده کردید، همه تایمرها مشغول هست دیگه.
زمان 5 ثانیه فکر نمی کنم نیاز به دقت داشته باشه با همون دستور wait بایستی کافی باشه.
به هر حال بستگی به جایی که تاخیر رو در برنامه نیاز دارید و وضعیت pwm ها در زمان تاخیر ، شاید بشه یکی از تایمرها رو مداوم مجدد پیکربندی کنید.
اما باز می گم ، همون دستور wait و ... باید کافی باشه ... .
موفق باشید.
دستور wait اصلا دقیق نیست.من تو مدارم از کریستال خارجی استفاده کردم و همین مدار با کامپیوتر تبادل اطلاعات داره.یعنی کلاکش و فیوزبیت ها درست تنظیم شده.حالا اگه 5 ثانیه بشه 6 ثانیه قابل قبوله ولی خطاش بسیار زیاده. وقتی قراره مدار شبانه روزی روشن باشه و کار کنه اگه یکبار هم اشتباه کنه قابل قبول نیست. حالا فکر کنید از این میکرو تو پروژه های تقریبا حساس استفاده کنن.دنبال یه راه حل اساسی باید بود. قرار نیست از میکر فقط تو مسابقات رباتیک استفاده کرد. خیلی ها از این میکرو تو پروژه های صنعتی استفاده میکنن و بعضا چنین اشتباهاتی خسارت به بار میاره.
برای هر پروژه باید میکروی درخورش انتخاب بشه.
هنوز هم نگفتید 5 بشه 7 چه اتفاق بدی می افته؟ ( حساسیت تایمینگ 5 ثانیه روی چه موضوعی هست؟ )
تفاوت در حد 1 ثانیه نیست. خطا در حد میلی ثانیه هست که با گذر زمان ، این خطا ها جمع می شه و دچار شیفت زمانی می شه . برای خیلی پروژه ها هم این موضوع اهمیتی نداره. برای پروژه هایی که نیاز به تایمینگ دقیق دارن هم یک تایمر رزرو می شه.
راه حل دیگه اینه که اگر PWM ها معمولی هستن و فرکانس زیادی ندارند، می تونید نرم افزاری تولیدشون کنید تا تایمرها بیکار بشن و بتونید زمان دقیق محاسبه کنید.
جدا از اینها، برای ارسال و دریافت هایی با پروتکل usart که احتمالا در پروژه تون استفاده کردید و همینطور پروتکل های دیگه ، یه سری وقفه ارسال و دریافت وجود داره که هر وقت داده ای موجود بود میکرو مطلع بشه و اطلاعات رو برداره و ...
خیلی مسائل و راهکار ها وجود داره که از هر کدام باید سرجاش استفاده بشه ... ، به همین منظور نیازه که طراح ابزار کارش رو خوب بشناسه ...
موفق باشید.
سلام
بجای wait با حلقه for میتونید با دقت بیشتر تاخیر مورد نیاز رو ایجاد کنید