اطلاعیه

Collapse
No announcement yet.

از وقفه خارجی میشه دو منظوره استفاده کرد ؟

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

    از وقفه خارجی میشه دو منظوره استفاده کرد ؟

    سلام دوستان .

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

    حالا من میخوام که کاری بکنم که با نگه داشتن کلید . مثلاً 10 ثانیه وارد مود سوم بشه .


    از تایمر استفاده کردم و داخل تایمر که اومدم پین PORTd.3 رو چک کنم نشد . چون پین همیشه 0 هست .حتی وقتی من کلید رو فشار میدم . وقفه اتفاق میفته .بازم اونجا 0 میمونه .

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

    سلام.

    یک راه ساده اینه که تو وقفه یک تاخیر 10 ثانیه میزاری و پین مربوط به وقفه خارجی رو می خونی. اگه کلید همچنان فشرده بود که میری مد 3، در غیر این صورت همون مدی که می خوای را انتخاب می کنی.

    دیدگاه


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

      این رو که خودم نوشتم بالا
      وقتی وقفه خارجی فعال میشه . اون پین دیگه IO نیست . نمیتونی بخونی.

      دیدگاه


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

        حل شد.
        وقفه رو از نوع LOW Level تنظیم کردم . تو این حالت حتی اگر return کنی ولی سطح ولتاژ LOW باشه باز برمیگرده به وقفه .
        منم یک متغیر گزاشتن با هر بار ورود به وقفه INCR بشه .
        و تو تایمر بررسیش کردم که اگر اون متغییر بیشتر از فلان عدد شد . یعنی این که وقفه پشت سر هم تکرار شده . یعنی دستش رو گزاشته بوده رو کلید .

        چون آدرس وقفه های خارجی بالاتر از تایمر ها هست . وقفه خارجی زود تر اجرا میشه و اجازه نمیده تایمر سر ریز بشه .

        دیدگاه


          #5
          پاسخ : از وقفه خارجی میشه دو منظوره استفاده کرد ؟

          نوشته اصلی توسط l3ai3ak
          این رو که خودم نوشتم بالا
          وقتی وقفه خارجی فعال میشه . اون پین دیگه IO نیست . نمیتونی بخونی.
          سلام. خوبه که مشکلتون حل شد.

          اما وقتی میرین تو وقفه، می تونین همون پین وقفه رو هم باز بخونین ( مثل یک ورودی معمولی)

          دیدگاه


            #6
            پاسخ : از وقفه خارجی میشه دو منظوره استفاده کرد ؟

            لطفاً آزمایش کنید .
            این که می فرمایید ممکن نیست .

            دیدگاه


              #7
              پاسخ : از وقفه خارجی میشه دو منظوره استفاده کرد ؟

              نوشته اصلی توسط l3ai3ak
              لطفاً آزمایش کنید .
              این که می فرمایید ممکن نیست .
              interrupt [EXT_INT0] void ext_int0_isr(void)
              {
              delay_ms(1000);
              if (PIND.2==0)
              mod=3;
              else if (mod==2)
              mod=1;
              else
              mod=1;

              }

              void main(void)
              {

              // External Interrupt(s) initialization
              // INT0: On
              // INT0 Mode: Falling Edge
              // INT1: Off
              // INT2: Off
              GICR|=0x40;
              MCUCR=0x02;
              MCUCSR=0x00;
              GIFR=0x40;
              while (1)

              {

              ما که قبلنا جواب می گرفتیم. oo:
              حالا شما هم یک تست بکن، اگه جواب داد که چه بهتر، اگرم جواب نداد مخلص شما هم هستیم. یک مطلب جدید یاد می گیریم. :applause:

              دیدگاه


                #8
                پاسخ : از وقفه خارجی میشه دو منظوره استفاده کرد ؟

                نوشته اصلی توسط l3ai3ak
                سلام دوستان .

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

                حالا من میخوام که کاری بکنم که با نگه داشتن کلید . مثلاً 10 ثانیه وارد مود سوم بشه .


                از تایمر استفاده کردم و داخل تایمر که اومدم پین PORTd.3 رو چک کنم نشد . چون پین همیشه 0 هست .حتی وقتی من کلید رو فشار میدم . وقفه اتفاق میفته .بازم اونجا 0 میمونه .
                دایی جان
                بجای PORTd.3 بنویس PIND.3
                وقفه را روی لبه تنظیم کن نه روی سطح
                با عرض پوزش خدمت دایی های عزیزم تا اطلاع ثانوی به اینترنت دسترسی ندارم.

                دیدگاه

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