اطلاعیه

Collapse
No announcement yet.

غیرفعال شدن وقفه تایمر dsPIC

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

    غیرفعال شدن وقفه تایمر dsPIC

    دوستان، یه مشکلی دارم که احتمالاً به خاطر تجربه کم منه. میکروکنترلرم حتماً باید ریست بشه تا وقفه تایمرش کار کنه. یعنی وقتی پروگرامر رو درمیارم، و مدار رو روشن می کنم وقفه غیرفعاله. بقیه برنامه درست کار می کنه.
    میکرو dsPIC30F59011، کامپایلر MikroC Pro، فرکانس 20MIPS، کلاً برنامه خاصی نیست، ولی مجبورم تو وقفه تایمر، یه پورت رو صفر و یک کنم و یکم محاسبه انجام بدم. راه اندازی تایمر یک:
    کد:
    //---- Timer1 init: -------
     IPC0  = IPC0 | 0x5000;  // Interrupt priority level = 5
     T1IF_bit = 0;       // Clear T1IF
     T1IE_bit = 1;       // Enable Timer1 interrupts
     PR1 = 500 - 1;      //20.0MHz / 500 = 40.0kHz
     T1CON = 0x8000;      // Timer1 ON, internal clock Freq, prescaler 1:1
    تابع وقفه تایمر یک:
    کد:
    void Timer1Int() iv IVT_ADDR_T1INTERRUPT {
     T1IF_bit = 0;       // Clear T1IF
     R_20kHz=!R_20kHz;     // Invert 'R'
     // do a little calculation
    }
    هان، POR به قدر 64ms فعاله. غیرفعالش هم که کردم درست نشد. دیگه اینکه، تغذیه سریع میاد بالا و MCLR با خازن 470n و مقاومت 1K ولتاژ دار شده. همینا دیگه. هر چی جُستم نتونستم درستش کنم. اولویت ها رو هم دست کاری کردم، نشد.
    لازمه بگم، وقتایی که دستی ریستش می کنم همه چی ردیفه ها. ولی اوقاتی که خودش می خواد شروع به کار کنه وقفه ش کار نمی کنه.
    خوب، حالا چی از قلم افتاده که وقفه غیر فعال میشه؟!
    بیایید با Google آشتی کنیم!

    #2
    پاسخ : غیرفعال شدن وقفه تایمر dsPIC

    فکر کنم مشکل ریست داری. nMCLR خازنشو نزار تست کن. توی main هم یه پین دیگه رو تاگل کن تا مطمئن شی میکرو داره کار میکنه.

    دیدگاه


      #3
      پاسخ : غیرفعال شدن وقفه تایمر dsPIC

      نوشته اصلی توسط محمد رستمی
      ...
      وقفه غیرفعاله. بقیه برنامه درست کار می کنه.
      ...
      عرض کردم که بقیه برنامه (یا به قول شما، برنامه main) درست کار می کنه.
      POR رو هم همه جوره دستکاری کردم فایده ای نداشت. درباره مشکلِ ریست یکم بیشتر توضیح بدید لطفاً. چون کلاً باید MCLR خازن داشته باشه که ییهو میکرو وسط کار ریست نشه.
      بیایید با Google آشتی کنیم!

      دیدگاه


        #4
        پاسخ : غیرفعال شدن وقفه تایمر dsPIC

        من با 30F کار نکردم ولی خوندم که خازن ممکنه بعضاً مشکل ایجاد کنه. 470 نانو هم کمی زیاده.
        من خبره نیستم فقط گفتم شاید مشکل این باشه. در کل یه تست بکن ضرری نداره که! :smile:

        دیدگاه


          #5
          پاسخ : غیرفعال شدن وقفه تایمر dsPIC

          نوشته اصلی توسط freedom_truth
          من با 30F کار نکردم ولی خوندم که خازن ممکنه بعضاً مشکل ایجاد کنه. 470 نانو هم کمی زیاده.
          من خبره نیستم فقط گفتم شاید مشکل این باشه. در کل یه تست بکن ضرری نداره که! :smile:
          باشه. آقا دستت درد نکنه. هفته دیگه برم پیش صاحابش، خازن رو کمتر می کنم ببینم چی میشه.
          تو یه فروم دیدم یه بابایی همچین مشکلی براش پیش اومده بود، گفت میکرو رو عوض کرده درست شده. آخه حیفه عوضش کنم، میکروش داره کار می کنه :biggrin:
          بیایید با Google آشتی کنیم!

          دیدگاه


            #6
            پاسخ : غیرفعال شدن وقفه تایمر dsPIC

            دوستان، کسی چیزی در این باره نمی دونه؟!

            --------
            مشکل به صورت نرم افزاری حـل شد
            بیایید با Google آشتی کنیم!

            دیدگاه


              #7
              پاسخ : غیرفعال شدن وقفه تایمر dsPIC

              نوشته اصلی توسط محمد رستمی
              دوستان، کسی چیزی در این باره نمی دونه؟!

              --------
              مشکل به صورت نرم افزاری حـل شد
              سلام.
              ببخشید یه مدت نبودم.
              ممکنه توضیح بیشتری بفرمایین تا ما هم استفاده کنیم؟ چطوری حل شد؟

              دیدگاه


                #8
                پاسخ : غیرفعال شدن وقفه تایمر dsPIC

                نوشته اصلی توسط شاهرخ مستقیمی
                سلام.
                ببخشید یه مدت نبودم.
                ممکنه توضیح بیشتری بفرمایین تا ما هم استفاده کنیم؟ چطوری حل شد؟
                دوستان استقبال نکردند، منم گفتم مزاحم وقت اساتید نشم!
                بعد از بالا اومدن تغذیه، وقفه ها [به دلیلِ نامعلوم] غیرفعال میشه. تو یه سایت خارجی نوشته بود مشکل با تعویض میکرو حل میشه. ولی از یه مهندس خبره پرسیدم، گفت که این مشکل چند بار براش پیش اومده و دلیلش رو نمی دونست. اما راه حلش رو گفت؛
                با راه اندازی Watchdog و پاک کردنش توی روتین وقفه تایمر، اگه وقفه ها غیر فعال باشند یه بار Watchdog سرریز میشه (بعد از یه زمانِ چند ده میلی ثانیه ای) و میکرو ریست میشه، بعد از اون دیگه همه وقفه ها فعال هستند و کار به خوبی و خوشی از سر گرفته میشه و دیگه مشکلی از این بابت وجود نخواهد داشت. جریمه این کار هم فقط چند ده میلی ثانیه تأخیر اولین ریست میکروئه.
                بیایید با Google آشتی کنیم!

                دیدگاه

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