اطلاعیه

Collapse
No announcement yet.

مشکل با اتصال چند میکروسوئیچ به int0

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

    مشکل با اتصال چند میکروسوئیچ به int0

    مداری دارم طراحی میکنم که با چند تا میکرو سوئیچ کار میکنه و هر کدوم یه متغیر رو افزایش میده. می خوام با فشار دادن یک کدوم از میکروسوئیچ ها وقفه ایجاد بشه و بره به زیر برنامه و متغییر اضافه بشه . مشکل اینجاست که یه طرف میکروسوئیچ ها رو به پایه int0 وصل کردم وقتی یه میکرو رو فشار میدم به همشون اتصال میکنه و کلا اشکال بوجود میاد .. دوستان کسی راه حلی واسه این مشکل داره ؟!!
    ممنون

    #2
    پاسخ : مشکل با اتصال چند میکروسوئیچ به int0

    نوشته اصلی توسط navid.h
    مداری دارم طراحی میکنم که با چند تا میکرو سوئیچ کار میکنه و هر کدوم یه متغیر رو افزایش میده. می خوام با فشار دادن یک کدوم از میکروسوئیچ ها وقفه ایجاد بشه و بره به زیر برنامه و متغییر اضافه بشه . مشکل اینجاست که یه طرف میکروسوئیچ ها رو به پایه int0 وصل کردم وقتی یه میکرو رو فشار میدم به همشون اتصال میکنه و کلا اشکال بوجود میاد .. دوستان کسی راه حلی واسه این مشکل داره ؟!!
    ممنون
    به چندتا دکمه فشاری نیاز دارید؟ نباید بوسیله وقفه خارجی اینکار رو کنید. میتونید تایمر ست کنید و هربار تو وقفه تایمر مقدار روی پین ها را با دفعه قبل مقایسه کنید که مثلا اگر مقدار روی پین صفر شد و همچنین مقدار قبلی 1 بود (برای مشاهده لبه پایین رونده) به نسبت بیت تغییر کرده ،متغییر مورد نظر را افزایش بده.
    راه اندازي ماژول nrf24l01p براي codevision (ارتباط بيسيم بين دو ميکرو) : http://www.eca.ir/forum2/index.php?topic=78587.0
    کوچ کردن از کدويژن به http://www.eca.ir/forum2/index.php?topic=81025.0 : AtmelStudio
    نحوه نوشتن اصولي يک لايبرري و درايور نرم افزاري( بصورت ساده) : http://www.eca.ir/forum2/index.php?topic=81071
    http://www.eca.ir/forum2/index.php?topic=82130.0 سفارش راه انداز ماژول هاي مختلف توسط اعضاي انجمن
    انشالله به زودي تاپيک ها به روز رساني خواهد شد،

    دیدگاه


      #3
      پاسخ : مشکل با اتصال چند میکروسوئیچ به int0

      5 تا میکرو سوئیچ دارم . تو برنامم از تایمرصفر واسه ایجاد زمان استفاده کردم . میشه واسه این کاری که شما میگید استفاده کنم؟ چطوری مقایسشون کنم ؟

      دیدگاه


        #4
        پاسخ : مشکل با اتصال چند میکروسوئیچ به int0

        نوشته اصلی توسط navid.h
        5 تا میکرو سوئیچ دارم . تو برنامم از تایمرصفر واسه ایجاد زمان استفاده کردم . میشه واسه این کاری که شما میگید استفاده کنم؟ چطوری مقایسشون کنم ؟
        ببینید خیلی کارا میشه کرد ، مثلا میشه از همون وقفه خارجی هم به نحوی استفاده کرد ولی خوب در اون صورت باید حتما دیبانسینگ به صورت سخت افزاری صورت بگیره.
        همچنین میشه اصلا از تایمرم استفاده نکرد و کاری که تو پست قبل گفتم رو تو حلقه بینهایت تابع main انجام داد.

        ولی خوب شما تایمر 0 را ست کردید( مثلا برای 1 میلی ثانیه)
        میخواهید 5 تا دکمه را کنترل کنید.
        علاوه بر اینها من یک فرضیاتی میگیرم: اول اینکه دکمه ها یک سرشون به زمین وصله و ثانیا سر دیگشون هم هرکدوم به پین های 0 تا 4 پورت A متصل است(فقط مثاله)
        پس اول کار پینهای 0 تا4 پورت A ورودی بشن و همچنین پول پ داخلی برای این پین ها فعال بشه:
        مسلما در روتین وقفه تایمر کارای دیگه هم میکنید ، که مهم نیست فقط باید اول روتین یک متغییر از نوع static تعریف بشن و مقدار اولیش 0x1F باشه و بعد از اون باید یه گوشه ای از روتین وقفه مقدار فعلی پین های 0 تا 4 پورت A خوانده و با حالت قبل مقایسه شود.

        به عنوان مثال یک آرایه سراسری تعریف میکنید:
        کد:
        unsigned int n[5]={0,0,0,0,0};
        بعد تو روتین وقفه تایمر:

        کد:
        static unsigned char p_key=0x1F;
        unsigned char c_key,i;
        c_key=PINA & 0x1F;
        for (i=0;i<5;i++)
        {	
        	if ( (c_key & (1<<i))==0 && (p_key & (1<<i))==1 )
        	{
        		n[i]++;
        	}
        }
        p_key=c_key;
        الان با فشار دادن هردکمه مقدار عضو مربوطه از آرایه افزایش پیدا میکند.
        تستش نکردم ، کامپایل و تستش با خودتون ولی فکر نمیکنم مشکلی داشته باشه
        راه اندازي ماژول nrf24l01p براي codevision (ارتباط بيسيم بين دو ميکرو) : http://www.eca.ir/forum2/index.php?topic=78587.0
        کوچ کردن از کدويژن به http://www.eca.ir/forum2/index.php?topic=81025.0 : AtmelStudio
        نحوه نوشتن اصولي يک لايبرري و درايور نرم افزاري( بصورت ساده) : http://www.eca.ir/forum2/index.php?topic=81071
        http://www.eca.ir/forum2/index.php?topic=82130.0 سفارش راه انداز ماژول هاي مختلف توسط اعضاي انجمن
        انشالله به زودي تاپيک ها به روز رساني خواهد شد،

        دیدگاه


          #5
          پاسخ : مشکل با اتصال چند میکروسوئیچ به int0

          ممنون از پاسختون
          این برنامتون رو تو بیسیک هم میشه نوشت؟! چون فکر نمیکنم بشه تو بیسیک آرایه تعریف کرد.

          دیدگاه


            #6
            پاسخ : مشکل با اتصال چند میکروسوئیچ به int0

            نوشته اصلی توسط navid.h
            ممنون از پاسختون
            این برنامتون رو تو بیسیک هم میشه نوشت؟! چون فکر نمیکنم بشه تو بیسیک آرایه تعریف کرد.
            خواهش میکنم
            راستش من زیاد بیسیک بلد نیستم ولی مطمئنم میشه آرایه تعریف کرد.( حدود 7 8 سال هست بیسیک کار نکردم ولی اگه اشتباه نکنم اینجوریه Dim n(5) as Integer )

            مهم اون الگوریتمشه که اینجوریه:
            بایستی هرجند وقت یکبار کدی اجرا شود که مقدار فعلی پین را با مقدار اون در دفعه قبل مقایسه کند و داخل شرط باید چک شود اگر مقدار این دفعه 0 و مقدار دفعه قبل 1 بود (برای لبه پایین رونده) یکی به متغییر مربوطه اضافه شود.
            خیلی سادس من توصیه میکنم خودتون برید دنبالش و فکر کنید و بنویسید ، تمرین خیلی خوبی میتونه باشه.
            راه اندازي ماژول nrf24l01p براي codevision (ارتباط بيسيم بين دو ميکرو) : http://www.eca.ir/forum2/index.php?topic=78587.0
            کوچ کردن از کدويژن به http://www.eca.ir/forum2/index.php?topic=81025.0 : AtmelStudio
            نحوه نوشتن اصولي يک لايبرري و درايور نرم افزاري( بصورت ساده) : http://www.eca.ir/forum2/index.php?topic=81071
            http://www.eca.ir/forum2/index.php?topic=82130.0 سفارش راه انداز ماژول هاي مختلف توسط اعضاي انجمن
            انشالله به زودي تاپيک ها به روز رساني خواهد شد،

            دیدگاه


              #7
              پاسخ : مشکل با اتصال چند میکروسوئیچ به int0

              راستی اگر این شیوه را دوست ندارید و تمایل دارید از طریق وقفه خارجی انجام بدید ، میتونید همون کار خودتون(وصل کردن کل سویچ ها به پین وقفه خارجی) را انجام بدید ولی باید دونه دونه سویچ ها را به 5 تا پین دیگه هم وصل کنید و وقتی وقفه ایجاد شد یعنی حتما دکمه ای فشار داده شده پس تو روتین وقفه خارجی با توجه به مقادیر روی پین های مربوطه بفهمید کدوم دکمه فشار داده شده. (ولی بدلیل مشکل Bounce روی دکمه ها من اصلا توصیه نمیکنم ، چون باید ساخت افزاری رفعش کنید و کاره اضافس)
              ( اینا همش ایده هست که قابلیت عملی شدنم داره. خودتونم میتونید ایده بدید، خیلی ساده تر از این حرفاس که فکرشو کنید :agree
              راه اندازي ماژول nrf24l01p براي codevision (ارتباط بيسيم بين دو ميکرو) : http://www.eca.ir/forum2/index.php?topic=78587.0
              کوچ کردن از کدويژن به http://www.eca.ir/forum2/index.php?topic=81025.0 : AtmelStudio
              نحوه نوشتن اصولي يک لايبرري و درايور نرم افزاري( بصورت ساده) : http://www.eca.ir/forum2/index.php?topic=81071
              http://www.eca.ir/forum2/index.php?topic=82130.0 سفارش راه انداز ماژول هاي مختلف توسط اعضاي انجمن
              انشالله به زودي تاپيک ها به روز رساني خواهد شد،

              دیدگاه


                #8
                پاسخ : مشکل با اتصال چند میکروسوئیچ به int0

                با سلام
                برای رفع مشکل شما باید دی بانسینگ کنید.
                نمیشه که همینطور سویچ رو به وقفه خارجی وصل کرد.
                شما باید سخت افزار زیر را برای از بین بردن بانس حاصل از سوئیچ ببندین
                http://www.atmel.com/Images/doc8468.pdf
                چه يافت آنــکه تــو را گم کرد وچه گم کرد آنـکه تــو را يافت.

                دیدگاه


                  #9
                  پاسخ : مشکل با اتصال چند میکروسوئیچ به int0

                  بسیار ممنون از پاسخ آقای مرتضوی و آقای ابراهیمی عزیز

                  دیدگاه


                    #10
                    پاسخ : مشکل با اتصال چند میکروسوئیچ به int0

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

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

                    دیدگاه


                      #11
                      پاسخ : مشکل با اتصال چند میکروسوئیچ به int0

                      سلام محمد عزیز
                      متوجه شدم چی میگین. اتفاقا این کار رو کردم اما اصرار داشتم این مشکل رو نرم افزاری با آی سی حل کنم ولی خوب نمیشه از پایه وقفه آی سی هم گذشت یه جورایی وقفه بهتر جواب میده.
                      دوستان تفاوت وقفه داخلی با خارجی چیه ؟! تفاوت وقفه داخلی با تایمر چیه ؟!!
                      اگه سوالا پیش پا افتاده بود مارو ببخشید :biggrin:

                      دیدگاه


                        #12
                        پاسخ : مشکل با اتصال چند میکروسوئیچ به int0

                        نوشته اصلی توسط navid.h
                        سلام محمد عزیز
                        متوجه شدم چی میگین. اتفاقا این کار رو کردم اما اصرار داشتم این مشکل رو نرم افزاری با آی سی حل کنم ولی خوب نمیشه از پایه وقفه آی سی هم گذشت یه جورایی وقفه بهتر جواب میده.
                        دوستان تفاوت وقفه داخلی با خارجی چیه ؟! تفاوت وقفه داخلی با تایمر چیه ؟!!
                        اگه سوالا پیش پا افتاده بود مارو ببخشید :biggrin:
                        در وقفه داخلی شما یه شمارنده داری که پشت سر هم از مقدار مینیموم میشماره تا ماکسیمم(tcnt) خوب حالا شما میکروتو تنظیم میکنی که چه موقع اینتراپت اتفاق بیفه به این صورت که با رسیدن این شمارنده به یه عدد خاص یا لبریز شدن شمارش واین در صورتی هست که شما منبع شمارش رو کلاک داخی انتخاب کرده باشی
                        حالا اینتراپت خارجی در این روش وقفه شما زمانی اتفاق میفته که (بسته تنظیماتی که انجام میدین) یه تغییری در پایه اینتراپت داشته باشین(تغییر لبه)
                        اطلاعات بیشتر رو میتونین در کتاب های مختلف و حتی اینترنت به وفور پیدا کنین
                        چه يافت آنــکه تــو را گم کرد وچه گم کرد آنـکه تــو را يافت.

                        دیدگاه

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