اطلاعیه

Collapse
No announcement yet.

مشکل عملی با هر دو وقفه gpio و خارجی.

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

    مشکل عملی با هر دو وقفه gpio و خارجی.

    سلام دوستان من هنگام استفاده عملی از دو وقفه اشاره شده و به کارگیری برنامه های نمونه eca و آقای زرکوب و البته تست بر روی دو برد (هدر برد lpc1768 و برد توسعه یافته lpc1768 ) متوجه شدم که برخلاف تنظیمات من که در حالت حساس فقط به یکی از لبه ها هست موقع فشار کلید و گهگاهی هم موقع دست کشیدن از کلید وارد زیرروال وقفه میشه که نباید حالت دوم اتفاق بیفته.حالا اگه قضیه گلیچ مطرحه چرا پس من تو avr اصلا همچین مشکلی نداشتم cortex که پشرفته تره.و در پایان کسی راه حلی میدونه؟
    پول پ وپول دان رو هم تست کردم و همچنین pinmode نتیجه ای نداد.
    دقت کردین تو مهمونیا یه کیوی رو وقتی با پوست میخورین چه جور نگاتون میکنن.!!!!

    هيچگاه چيزي را خوب نمي فهمي، مگر اينكه بتواني آن را براي مادربزرگت شرح دهي!((آلبرت انيشتين))

    #2
    پاسخ : مشکل عملی با هر دو وقفه gpio و خارجی.

    گلیچ رو نمیدونم چیه !
    ولی به خاطر bounce هست .

    شما تو avr با شبیه ساز کار کردید ؟ ( اخه خودم هم مشکل نداشتم ،چون فقط با شبیه ساز تست کردم :mrgreen: )
    فکر میکنم بهترین کار استفاده از یه خازن برای حذف bounce هست .
    إِنَّ الَّذِینَ یُحِبُّونَ أَنْ تَشِیعَ الْفاحِشَهُ فِی الَّذِینَ آمَنُوا لَهُمْ عَذابٌ أَلِیمٌ فِی الدُّنْیا وَ الْآخِرَهِ وَ اللَّهُ یَعْلَمُ وَ أَنْتُمْ لا تَعْلَمُونَ.
    کسانى که دوست دارند زشتی ها در میان مردم با ایمان شیوع یابد عذاب دردناکى براى آنها در دنیا و آخرت است، و خداوند میداند و شما نمی‏دانید. (نور19)

    دیدگاه


      #3
      پاسخ : مشکل عملی با هر دو وقفه gpio و خارجی.

      نوشته اصلی توسط " سید محمد "
      گلیچ رو نمیدونم چیه !
      ولی به خاطر bounce هست .

      شما تو avr با شبیه ساز کار کردید ؟ ( اخه خودم هم مشکل نداشتم ،چون فقط با شبیه ساز تست کردم :mrgreen: )
      فکر میکنم بهترین کار استفاده از یه خازن برای حذف bounce هست .
      ممنون یه فیلتر RC گذاشتم کامل حل شد :biggrin:
      دقت کردین تو مهمونیا یه کیوی رو وقتی با پوست میخورین چه جور نگاتون میکنن.!!!!

      هيچگاه چيزي را خوب نمي فهمي، مگر اينكه بتواني آن را براي مادربزرگت شرح دهي!((آلبرت انيشتين))

      دیدگاه


        #4
        پاسخ : مشکل عملی با هر دو وقفه gpio و خارجی.

        آیا این نتیجه گیری درستیه ؟
        برای استفاده از اینتراپت خارجی یا وقفه GPIO راهی به جز استفاده از rc خارجی نداریم !
        یعنی خطا به صورت نرم افزاری به هیچ وجه قابل رفع نیست .
        إِنَّ الَّذِینَ یُحِبُّونَ أَنْ تَشِیعَ الْفاحِشَهُ فِی الَّذِینَ آمَنُوا لَهُمْ عَذابٌ أَلِیمٌ فِی الدُّنْیا وَ الْآخِرَهِ وَ اللَّهُ یَعْلَمُ وَ أَنْتُمْ لا تَعْلَمُونَ.
        کسانى که دوست دارند زشتی ها در میان مردم با ایمان شیوع یابد عذاب دردناکى براى آنها در دنیا و آخرت است، و خداوند میداند و شما نمی‏دانید. (نور19)

        دیدگاه


          #5
          پاسخ : مشکل عملی با هر دو وقفه gpio و خارجی.

          سلام،
          شما هر کاری کنی وقتی یک کلید مکانیکی زده بشه بانس به وجود میاد،که یا با تاخیر یا با فیلتر می تونید حذفش کنید!
          حالا اگر شما در وقفه خودتون تاخیر در حد 50 میلی ثانیه داشته باشید این بانس دیگه دیده نمیشه!
          برای glitch filter هم می تونید اینجا یه نگاه بندازید:
          http://**************/showthread.php?706-glitch-filter-%DA%86%DB%8C%D8%B3%D8%AA-%D9%88-%DA%86%D9%87-%DA%A9%D8%A7%D8%B1%D8%A8%D8%B1%D8%AF%DB%8C-%D8%AF%D8%A7%D8%B1%D8%AF%D8%9F
          هر انسانی که احساس بی نیازی کند سرکش و طغیان گر می شود...

          دیدگاه


            #6
            پاسخ : مشکل عملی با هر دو وقفه gpio و خارجی.

            نوشته اصلی توسط حمید لطفعلی زاده
            سلام،
            شما هر کاری کنی وقتی یک کلید مکانیکی زده بشه بانس به وجود میاد،که یا با تاخیر یا با فیلتر می تونید حذفش کنید!
            حالا اگر شما در وقفه خودتون تاخیر در حد 50 میلی ثانیه داشته باشید این بانس دیگه دیده نمیشه!
            وقفه ما به لبه حساسه ، یا بالا رونده یا پایین رونده
            کلید هم در هنگام وصل شدن بانس ایجاد میکنه و هم در هنگام قطع شدن
            تاخیر 50 میلی اون بانس اولیه رو حذف میکنه . ولی وقتی کلید داره قطع میشه هم بانس ایجاد میشه و باز هم وقفه صادر میشه . این قسمت دوم رو چجوری میشه نرم افزاری حلش کرد ؟
            إِنَّ الَّذِینَ یُحِبُّونَ أَنْ تَشِیعَ الْفاحِشَهُ فِی الَّذِینَ آمَنُوا لَهُمْ عَذابٌ أَلِیمٌ فِی الدُّنْیا وَ الْآخِرَهِ وَ اللَّهُ یَعْلَمُ وَ أَنْتُمْ لا تَعْلَمُونَ.
            کسانى که دوست دارند زشتی ها در میان مردم با ایمان شیوع یابد عذاب دردناکى براى آنها در دنیا و آخرت است، و خداوند میداند و شما نمی‏دانید. (نور19)

            دیدگاه


              #7
              پاسخ : مشکل عملی با هر دو وقفه gpio و خارجی.

              این دیگه بستگی به الگوریتم هایی داره که شما استفاده می کنید!
              می تونید مثلا وقفه رو دو مرحله ای کنید، در نظر بگیرید کلید پول پ هستش، شما کلید رو که میزنید لبه پایین رونده ایجاد می کنید، رها که می کنید لبه بالا رونده، شما لبه بالا رونده رو هم وقفه بدید و هیچ کاری نکنید وفقط تغییر لبه رو در وقفه تنظیم کنید.
              هر انسانی که احساس بی نیازی کند سرکش و طغیان گر می شود...

              دیدگاه


                #8
                پاسخ : مشکل عملی با هر دو وقفه gpio و خارجی.

                نوشته اصلی توسط حمید لطفعلی زاده
                این دیگه بستگی به الگوریتم هایی داره که شما استفاده می کنید!
                می تونید مثلا وقفه رو دو مرحله ای کنید، در نظر بگیرید کلید پول پ هستش، شما کلید رو که میزنید لبه پایین رونده ایجاد می کنید، رها که می کنید لبه بالا رونده، شما لبه بالا رونده رو هم وقفه بدید و هیچ کاری نکنید وفقط تغییر لبه رو در وقفه تنظیم کنید.
                من نمیخوام تو لبه بالا رونده وقفه داشته باشم.
                ولی بانس باعث میشه تو لبه بالا رونده وقفه صادر بشه( دقت کنید من فقط لبه پایین رونده رو فعال کردم ). راه حل نرم افزاری چیزی به ذهنم نمیرسه !
                إِنَّ الَّذِینَ یُحِبُّونَ أَنْ تَشِیعَ الْفاحِشَهُ فِی الَّذِینَ آمَنُوا لَهُمْ عَذابٌ أَلِیمٌ فِی الدُّنْیا وَ الْآخِرَهِ وَ اللَّهُ یَعْلَمُ وَ أَنْتُمْ لا تَعْلَمُونَ.
                کسانى که دوست دارند زشتی ها در میان مردم با ایمان شیوع یابد عذاب دردناکى براى آنها در دنیا و آخرت است، و خداوند میداند و شما نمی‏دانید. (نور19)

                دیدگاه


                  #9
                  پاسخ : مشکل عملی با هر دو وقفه gpio و خارجی.

                  دوست عزیز شما می گین بانس در موقع رها کردن کلید باز هم لبه پایین رونده ایجاد می کنه، من میگم در لحظه رها کردن کلید اولین لبا بالا رونده هستش پس اون رو بخونید و کمی صبر کنید و بعد دوباره سیستم رو در لبه پایین رونده ست کنید.
                  این راه نرم افزاریه سخت افزاری هم با یک فیلتر RC می تونید درستش کنید.
                  البته راه های نرم افزاری دیگه ای هم ممکنه وجود داشته باشه.
                  هر انسانی که احساس بی نیازی کند سرکش و طغیان گر می شود...

                  دیدگاه


                    #10
                    پاسخ : مشکل عملی با هر دو وقفه gpio و خارجی.

                    سلام
                    میشه بگید که تو برنامه پایین وقتی وقفه میاد چرا ;(GPIO_SetDir(2,1<<0,1 کار نمیکنه؟
                    مشکلی تو برنامه هست؟
                    کد:
                    #include "lpc17xx_gpio.h"
                    #include "lpc17xx_pinsel.h"
                    #include "lpc17xx_exti.h"
                    
                    uint8_t d = 50;
                    
                    void delay (uint32_t Time)
                    {
                      uint32_t i;
                      
                      i = 0;
                      while (Time--) {
                        for (i = 0; i < 5000; i++);
                      }
                    }
                    
                    
                    void EINT0_IRQHandler(void)
                    {
                    	GPIO_SetDir(2,1<<0,1);
                    	GPIO_SetValue(2,1<<0);
                    	delay(100);
                    	GPIO_ClearValue(2,1<<0);
                    	delay(100);
                     EXTI_ClearEXTIFlag(EXTI_EINT0);	
                    }
                    
                    //*******************************************************
                    int main (void)
                    {	  		
                     uint8_t location,d = 50;
                     // ---------------- Configuration ---------------	
                    //  GPIO_SetDir(2, 0xff, 1);  //LPC_GPIO2->FIODIR = 0xff;
                    //  GPIO_ClearValue(2, 0x0ff); //LPC_GPIO2->FIOCLR = 0xff;
                    	GPIO_SetDir(2,1<<0,1);
                    	PINSEL_CFG_Type PinCfg;
                    	EXTI_InitTypeDef EXTICfg;
                    	
                    	/* Setting P2.10 as EINT0 */
                    	PinCfg.Funcnum = 1;
                    	PinCfg.OpenDrain = 0;
                    	PinCfg.Pinmode = 0;
                    	PinCfg.Pinnum = 10;
                    	PinCfg.Portnum = 2;
                    	PINSEL_ConfigPin(&PinCfg);
                    
                    
                    	/* Initialize External 0 interrupt */
                    	EXTI_Init();
                    	EXTICfg.EXTI_Line = EXTI_EINT0;
                    	/* level sensitive */
                    	EXTICfg.EXTI_Mode = EXTI_MODE_EDGE_SENSITIVE;
                    	//EXTICfg.EXTI_Mode = EXTI_MODE_LEVEL_SENSITIVE;
                    	EXTICfg.EXTI_polarity = EXTI_POLARITY_LOW_ACTIVE_OR_FALLING_EDGE;
                    	//EXTICfg.EXTI_polarity = EXTI_POLARITY_HIGH_ACTIVE_OR_RISING_EDGE;
                    	EXTI_Config(&EXTICfg);
                    	
                    	
                     
                    	
                    
                     NVIC_EnableIRQ(EINT0_IRQn);
                    	
                      while(1){
                     
                    	 }
                    }

                    دیدگاه

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