اطلاعیه

Collapse
No announcement yet.

استفاده از مقایسه کننده داخلی میکرو بدون ایجاد وقفه در روتین برنامه

Collapse
X
 
  • فیلتر
  • زمان
  • Show
Clear All
new posts

    استفاده از مقایسه کننده داخلی میکرو بدون ایجاد وقفه در روتین برنامه

    سلام.من میخوام برای تشخیص لحظه گذر از صفر میکرو از مقایسه کننده داخلی میکرو استفاده کنم ولی نمیخوام از اینتراپت استفاده کنم.میخوام توی روتین برنامم چک کنم ببینم هروقت ولتاژ جهتش عوض شد تیرستور یا تریاک رو فرمان بدم.زاویه آتش رو کنترل کنم.چطور میشه فهمید گذر از صفر رخ داده بدون وقفه؟
    مخلص همه بر و بچ eca

    #2
    پاسخ : استفاده از مقایسه کننده داخلی میکرو بدون ایجاد وقفه در روتین برنامه

    بیت ACO در رجیستر ACSR، یعنی ACSR.5 خروجی همزمان شده مقایسه کننده آنالوگ است (ممکن است 1 یا 2 کلاک تاخیر داشته باشد). این مطلب در دیتاشیت ATmega8 نوشته شده است. در ضمن اگر از وقفه استفاده نکنید و مثلا در حلقه برنامه بیت مورد نظر را چک کنید، نمی توانید به طور دقیق لحظه عبور از صفر را داشته باشید و بسته به سرعت تکرار حلقه برنامه (تعداد دستورات موجود در حلقه) خطا در تشخیص لحظه تغییر وضعیت خروجی مقایسه کننده، تغییر خواهد کرد. البته به منظور کاهش خطا می توانید در چند قسمت از حلقه برنامه، بیت مذکور را چک کنید.

    دیدگاه


      #3
      پاسخ : استفاده از مقایسه کننده داخلی میکرو بدون ایجاد وقفه در روتین برنامه

      نوشته اصلی توسط aed
      بیت ACO در رجیستر ACSR، یعنی ACSR.5 خروجی همزمان شده مقایسه کننده آنالوگ است (ممکن است 1 یا 2 کلاک تاخیر داشته باشد). این مطلب در دیتاشیت ATmega8 نوشته شده است. در ضمن اگر از وقفه استفاده نکنید و مثلا در حلقه برنامه بیت مورد نظر را چک کنید، نمی توانید به طور دقیق لحظه عبور از صفر را داشته باشید و بسته به سرعت تکرار حلقه برنامه (تعداد دستورات موجود در حلقه) خطا در تشخیص لحظه تغییر وضعیت خروجی مقایسه کننده، تغییر خواهد کرد. البته به منظور کاهش خطا می توانید در چند قسمت از حلقه برنامه، بیت مذکور را چک کنید.
      میشه بگی چجوری تو بسکام میشه اینکارو کرد؟
      هنوز من نمیدونم که چجوری میشه رجیسترا رو تو بسکام مستقیم تغییر داد بدون اسمبلی!
      اسمبلی هم بم بگی اشکال نداره میشه اضافه کرد.فقط این موضوع باقی میمونه که این رجیستر 1 میشه یا صفر؟ واینکه خودم باید مجددا صفرش کنم یا خودش بعد از خوندن صفر میشه؟
      ممنون

      دیدگاه


        #4
        پاسخ : استفاده از مقایسه کننده داخلی میکرو بدون ایجاد وقفه در روتین برنامه

        کد زیر را آزمایش و نتیجه را اعلام کنید. در این کد مقایسه کننده به صورت وقفه ای پیکربندی شده است:
        کد:
        CONFIG ACI = ON, COMPARE = ON, TRIGGER=FALLING
        
        Enable ACI
        On ACI _aci_int
        Enable Interrupts
        
        Do
        برنامه
        Loop
        
        
        _aci_int:
        برنامه مورد نظر
        Return
        کلمه Falling مشخص می کند که لبه پائین رونده خروجی مقایسه کننده باعث وقفه گردد. اگر به جای آن از Rising استفاده کنید، لبه بالارونده باعث وقفه می شود و اگر از Toggle استفاده کنید، هر تغییر در خروجی مقایسه کننده باعث وقفه خواهد شد.
        برای مقدار دهی به رجیسترها، کافی است نام رجیستر مورد نظر را تایپ کنید. در بسکام شناخته شده است و خواهید دید که ادیتور بسکام، نام رجیسترها را به صورت خودکار با حروف بزرگ و رنگ قرمز مشخص می کند. برای مقداردهی به بیت های رجیستر هم به عنوان مثال یک کردن بیت 5 رجیستر ACSR بنویسید ACSR.5 = 1
        برای راهنمایی بیشتر به help بسکام مراجعه کنید. خیلی خوب توضیح داده است.

        دیدگاه

        لطفا صبر کنید...
        X