اطلاعیه

Collapse
No announcement yet.

اجرای همزمان در مگا32

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

    اجرای همزمان در مگا32

    با سلام

    من میخوام با مگا32 :
    1. در حد اقل زمان و لحظه به لحظه تغییر وضعیت portA.0 رو تشخیص بدم و نسبت به اون عمل خاصی رو انجام بدم
    2. همزمان با اون کار هر 5 میلی ثانیه port c.0 رو تاگل toggle کنم

    مشکل بنده اینه که نمیتونم این دو تا رو مستقل از هم انجام بدم، یعنی توی حلقه ای که تشکیل میدم 5 میلی ثانیه میزنه کار گزینه 1 رو خراب میکنه!

    اساتید اگر کمکم کنید که برنامم رو چطور بنویسم ممنون میشم

    #2
    پاسخ : اجرای همزمان در مگا32

    شما پورت A رو بی خیال شو ، به جاش از Prtd.2 یا Portd.3 (وقفه خارجی) استفاده کن. کانفیگ اینتراپت فراموش نشه.

    دیدگاه


      #3
      پاسخ : اجرای همزمان در مگا32

      اگه امکانش هست از INT0 یا INT1 به جای Porta.0 استفاده کن و تنظیمات INT رو روی Any change قرار بده

      اگه هم حتما باید از Porta.0 استفاده کنی تو Loop اصلی برنامت تست تغییرات Porta.0 رو قرار بده
      و برای پایه Portc.0 هم از تایمر استفاده کن

      دیدگاه


        #4
        پاسخ : اجرای همزمان در مگا32

        علاوه بر استفاده از وقفه برای تشخیص تغییر وضعیت میتونید از تایمر و خروجی تایمر برای تولید اون موج 5 میلی ثانیه ای استفاده کنید
        [img width=477 height=100]http://www.eca.ir/pic/upload/agazade.png[/img]

        دیدگاه


          #5
          پاسخ : اجرای همزمان در مگا32

          شما از delay استفاده نکن ، بیا و اون 5 میلی ثانیه را خودت محاسبه کن
          چطوری ؟
          فرض بگیر هر دو دستور یعنی پایه آ و ب را توی یک تابع نوشتی
          تنها کاری که لازمه یک متغییر عمومی هست که به ازاء هر سیکل کار میکرو یکی بهش اضافه میشه
          با فرض اینکه سرعن میکرو 1مگا تنظیم شده باشه بعد از هر 1میلیون اضافه شدن یعنی یک ثانیه زمان رد شده ( اینا فرضیه ، و الا باید محاسبه پردازش چک کردن پورت آ و ست کردن پورت ب هم باشه تا عدد درست در بیاد )
          اینطوری یک تایمر داری که به نوع سیستمت بلادرنگ میشه و میکرو توی یک وقفه زمانی تابع delay گیر نمیکنه.
          یه راه دیگه هم داری ، استفاده از سیستم عامل های بلادرنگ
          آن دم که مرا مي زده بر خاک سپاريد زير کفنم خمره اي از باده گذاريد
          تا در سفر دوزخ از اين باده بنوشم
          آنلحظه که با دوزخيان کنم ملاقات يک خمره شراب ارغوان برم به سوغات
          هرقدر که در خاک ننوشيدم از اين باده صافي ، بنشينم و با دوزخيان کنم تلافي

          دیدگاه


            #6
            پاسخ : اجرای همزمان در مگا32

            بهترین کار کریستال 16MHz هست + اینترپت خارجی + پین خروجی تایمر
            اصلا نگران تداخل اینترپت ها نباشید با پریود کلاک 6.25 نانو ثانیه احتمالش منفی هست :biggrin:

            دیدگاه


              #7
              پاسخ : اجرای همزمان در مگا32

              عزیزان از توجهتون بسیار ممنونم،
              در واقع من سوال رو به این خاطر پرسیدم که بتونم روش کار رو یاد بگیرم (هدفم چیز دیگری است!)
              من میخوام که
              1. هر تغییر وضعیت در کل portD رو لحظه به لحظه تشخیص داده و بعضی پین های portd رو (با ریتم خاصی که در اینجا لازم نیس زیاد توضیح بدم) با هم or کنم و خروجیشون رو بدم به portd
              2. همزمان با عملیات بالایی در مدت زمان های کم مثلا هر 1 میلی ثانیه تا 5 میلی ثانیه از پورت (ADC (porta تا شش تا سیگنال DC با مقادیر از 2 تا 4 رو دریافت کنم و مقادیر دریافتی رو توی LCD که در portB کانفیگ شده نشون بدم.

              حالا هر دو تا برنامه بالایی رو نوشتم فقط موندم چطور با هم ادغام کنم، مشکل اینجاست که بنده زیاد توی مباحث AVR حرفه ای نیستم، :redface: البته از نظرات عزیزان حداکثر استفاده رو میکنم تا ببینم چی میشه، الانم دارم با تایمر ور میرم انشاالله که به نتیجه برسم. :read:
              باز هم اگر نکته ای هست منتظر نظرات سازنده تان هستم،
              تشکرات فراوان

              دیدگاه


                #8
                پاسخ : اجرای همزمان در مگا32

                اینا خیلی به avr ربطی نداره. بیشتر تکنیک های برنامه نویسیه. اولین سئوالی که این جور مواقع پیش میاد اینه که : زمان پاسخ هر عمل حداکثر میتونه چقدر باشه. یعنی اگر یک پین تغییر حالت داد حداکثر چه زمانی وقت داریم تا خروجی رو تولید کنیم. جوابهایی مثل "هر چه سریعتر" یا مشابه این هم بدرد نمیخوره. چون مسلما شما نیازی دارین که باید برآورده بشه. اون نیاز ایجاب میکنه که مثلا شما در طی یک میلی ثانیه یا یک نانو ثانیه یا حتی یک ساعت خروجی رو تولید کنین.

                بدون دونستن این زمانها هم میشه راه حل هایی ارائه داد ولی ممکنه بخاطر کندی بکار نیاد.

                دیدگاه


                  #9
                  پاسخ : اجرای همزمان در مگا32

                  میکروهای PIC سری 87x یه وقفه دارند با عنوان interrupt on change (اگه اشتباه اسمشو ننوشته باشم) روی پروت B که کارش اینه که هر وقت یکی از پایه های پروت B تغییر کرد یه وقفه میده (حالا چه از 0 به 1 یا بالعکس که این کارش با قفه های خارجی INT فرق میکنه چون این وقفه ها مثلا فقط در لبه مثبت کار میکنن) من فکر میکنم که میکروهای AVR هم باید این قابلیت رو داشته باشن. یه سرچی بکن

                  دیدگاه

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