اطلاعیه

Collapse
No announcement yet.

در مورد وقفه ها یه توضیحی می خواستم؟

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

    در مورد وقفه ها یه توضیحی می خواستم؟

    سلام ...
    اولش بگم من تازه کارم (همون بی سواد بگم بهتره :redface اگه یه وقت با سوالام حوصلتونا سر بردم معذرت می خوام... :cry2:

    من یه مشکل (یه مشکل که نه 1000 تا مشکل ) تو قسمت تایمرا دارم یه جورایی میفهمم ولی نمیدونم چرا جواب نمی گیرم
    خوب برم سر مشکلاتم:

    یه توضیحی در مورد وقفه های تایمر می خواستم با مثال اگه بگید ممنون میشم؟
    از وقفه ها کجاها و چگونه استفاده میشه؟
    اینجایی که ؟ رو کدومشو فعال کنم؟

    من برای نمونه می خواستم از وقفه timer 2 استفاده کنم مثلا می خواستم یه led هر 20 ms روشن خاموش کنم
    تنظیمات code wizard به این شکل انجام دادم درسته؟
    ]
    [/img]

    برنامه رو هم اینجورنوشتم یعنی هر موقه وقفه اتفاق بیوفته این دستورو انجام بده(اگه اشتباه بگید؟)

    ]
    [/img]
    یه چیزه دیگه اگه بخوام کلا یه سری دستورو بعد از انجام وقفه میکرو اجرا کنه کجا باید بنویسم؟
    (تو interrupt بالای یا پایین)

    یه چیزه دیگه تو این روتین های وقفه اصولا چه دستورایی میتونیم بنویسیم؟ منظورم اینکه طولانی نباید باشه؟
    اگه لطف کنید یه توضیح کامل( با مثال اگه باشه عالیه) درباره این وقفه ها(داخلی و خارجی) بدید کارو تموم کردین
    منم دعاتون میکنم... :nice:
    ذكات علم ياد دادنه ....

    #2
    پاسخ : در مورد وقفه ها یه توضیحی می خواستم؟

    سلام دوست من ,ببین وقفه یکی از بهترین امکانات AVRهستش ما میتونیم با استفاده وقفه (هر جا وقفه رخ داد) از برنامه main بیرون بیایم و زیر تابع وقفه را اجرا کنیم , تایمر ها در avr دو تا وقفه دارن یکی واسه سرریز و یکی واسه مقایسه شونده و شما باید کد را در قسمت TIM_OVF2 بنویسی تا وقتی تایمر به 255 رسید بره و وقفه را اجرا کنه :job:
    فرزندم در راه است

    دیدگاه


      #3
      پاسخ : در مورد وقفه ها یه توضیحی می خواستم؟

      دوست عزیز
      خیلی ساده بگم چیز خوبین :mrgreen:
      ببینید
      مثلا شما در نظر بگیرید یه مخزن اسید دارید که دارید با یه شیر برقی پرش میکنید الان کاری به تایمر ندارم
      وقتی این مخزن داره پر میشه خطرناکه و ممکنه تو برنامه نویسی اشتباه کرده باشیم
      حالا وقتی این مخزن پر شد یه کلید واسمون وصل میشه حالا کافیه که ابن کلید رو به پایه وقفه خارجی وصل کنیم که هر کجای برنامه که باشیم ایست میکنه و دستوراتی رو که واسه اون وقفه نوشتیم اجرا میکنه این وقفه خارجی هست

      یه سری هم وقفه داخلی داریم که مثلا وقتی داریم با تایمر کار میکنیم مثلا تایمر داره از 0 تا 255 میشمره وقتی شد 256 یا یه چیز دیگه یه خطا رخ داده که همون سر ریزی هست اون موقع میکرو میاد اون دستوراتی رو که واسه اون وقفه نوشتیم اجرا میکنه

      اما تامیمر ها
      بیشتر واسه موج سازی ازش استفاده میشه یا اینکه وقتی میخواین یه تاخیر دقیق به سیستم بدین میاین فرکانس مورد نظر رو محاسبه میکنید و محاسبه میکنید که دستگاه باید چند بار و تا چه عددی رو بشماره
      مثلا وقتی فرکانس 12 مگا هرتز استفاده میکنید میکرو هر دستور رو 1/12000 ثانیه میشماره
      دنبال کار میگردم تو تهران کسی سراغ داره

      دیدگاه


        #4
        پاسخ : در مورد وقفه ها یه توضیحی می خواستم؟

        سلام
        از لطف دوستان ممنونم :applause:

        راستش یه چیزایی داره دستگیرم میشه

        یه سوالی که داشتم اینکه اگه بخوایم با مد CTC تایمر یه فرکانسی مثلا 50KHz درس کنیم ایا محاسبه من درسته؟(کلاک تایمر 15625 )

        312.5=20ms*15.625KHz که هگزش میشه:0x0137 حالا من اینو گذاشتم تو ریجیستر OCR

        اگه اشتباه بهم بگید ممنون میشم
        ذكات علم ياد دادنه ....

        دیدگاه


          #5
          پاسخ : در مورد وقفه ها یه توضیحی می خواستم؟

          یه چیزی یادم رفت بپرسم :redface:

          این دستور PORTB^=0X00;
          با این چه فرقی میکنه؟ منظورم ^

          PORTB=0X00;
          ذكات علم ياد دادنه ....

          دیدگاه


            #6
            پاسخ : در مورد وقفه ها یه توضیحی می خواستم؟

            سلام
            تو رو خدا سوالامو جواب بدین گیر افتادم :cry2:

            سلام ...
            یه سوال فنی؟ من می خواستم با استفاده از وقفه تایمر 0 یه موج مربعی 400 us (2.5 KHz ) بسازم مد تایر هم گذاشتم رو
            نرمال محاسبه TCNT0 رو هم اینجوری انجامش دادم:
            TCNT0= 125KHz*400us=50=0X32 >>>> FF-32=CD

            ]
            [/img]

            ]
            [/img]
            اگه اشتباه کردم لطف کنید درستشو بهم بگید؟؟؟(راستی اون ؟ برا چیه)

            ولی نمیدونم چرا تو پروتئوس که تستش می کنم فرکانس خروجی 83.33KHz (12us ) میشه ایا تو عمل هم همینه یا من
            محاسباتم اشتباه؟
            ]
            [/img]
            ذكات علم ياد دادنه ....

            دیدگاه


              #7
              پاسخ : در مورد وقفه ها یه توضیحی می خواستم؟

              من هنوز منتظر جوابم :angry:
              ذكات علم ياد دادنه ....

              دیدگاه


                #8
                پاسخ : در مورد وقفه ها یه توضیحی می خواستم؟

                سلام آقا مجید نمیدونم تا حالا جوابتون رو گرفتید یا نه؟
                ^ عمل XOR رو انجام میده
                دستور PORTA^=0x00; با دستور PORTA=PORTA^0x00; یکیه
                مثلا با اجرای دستور : PORTA^=0b11011001
                اگر مقدار قبل PORTA برابر با 01010110 باشه با اجرای این دستور مقدار جدید PORTA برابر با
                10001111 میشه

                دیدگاه

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