در ATmega8 از 3 تا پایه میتونی بعنوان PWM خروجی بگیری اول این 3 تا پایه رو تو عکس زیر ببین :
حالا معرفی این پایه ها به صورت خلاصه :
پایه های 16 و 15 از ATmega8 متعلق به تایمر 1 هست وچون تایمر یک 16 بیتی هست اگه روی مد PWM قرار داده بشه میتونه تا 66536 پله ( یعنی 2 به توان 16 استپ) تغییر حالت داشته باشیم اما این قابلیت وجود داره که روی 10 بیتی و 8 بیتی هم کار کنه . اگه دقت کنی پایه های تایمر 1 رو با سیم قرمز به اسکوپ وصل کردم .
اما پایه 17 مربوط به تایمر کانتر 2 هست . تایمر کانتر دو 8 بیتیه یعنی تا 256 حالت میتونه عرض پالس تغییر کنه . این پایه رو با سیم سبز به اسکوپ وصل کردم .
حالا میریم سراغ برنامه . من یه برنامه خیلی ساده تو بسکام نوشتم که این پایینه :
توی این برنامه در ابتدا تایمر 1 رو به صورت PWM مرتب کردم بعد چون تایمر یک 16 بیتیه اونو اومدم به صورت 8 بیتی تعریف کردم (pwm=8) . خروجی پایه 15 با دستور
compare A pwm=Clear up به صورت معکوس تعریف شده .یعنی چی ؟ یعنی اگه به رجیستر مربوط به اون عدد 254 رو بدی ( چون 8 بیتی تعریف شده از 0 تا 255 رو میتونی بدی )
کمترین عرض پالس رو میگیری . خروجی پایه 16 با دستور compare A pwm=Clear down به صورت نرمال تعریف شده یعنی اگه به رجیستر مربوط به اون عدد 254 رو بدی بیشترین عرض پالس رو میگیری . prescale هم که فرکانس PWM رو مشخص میکنه ........ :nerd:
حالا PWM1a مربوط به خروجی پایه 15 و PWM1b مربوط به خروجی پایه 16 هست تحلیلش خیلی سادس وازش صرفه نظر می کنم
اما قسمت دوم برنامه اومدم تایمر 2 رو به صورت PWM تعریف کردم .
وقتی برنامه اجرا بشه در ابتدا فقط پایه های 15 و 16 خروجی میدن (تغییرات عرض پالسهارو می تونی ببینی ) و بعد از مدتی پایه 17 هم شروع به کار میکنه .....
لینک زیر شامل برنامه بسکام به همراه فایل پرتیوس هست که اگه دانلود کنی میتونی نحوه کار رو تو پروتیوس به صورت زنده ببینی
دیدگاه