اطلاعیه

Collapse
No announcement yet.

چک کردن مداوم سه پین میکرو

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

    چک کردن مداوم سه پین میکرو

    سلام دوستان با چه دستوری میشه سه میکرو سوییچ که هر کدوم به یک پایه وصل هستن رو مدام چک کنیم و در هر جای برنامه که باشیم اگه هر کدوم از میکروسویچ ها که فشار داده بشه دستورات مربوط به اون کلید اجرا بشه

    #2
    پاسخ : چک کردن مداوم سه پین میکرو

    سلام
    یک راه وصل کردن کلید ها به پایه های اینتراپت خارجی می باشد در این صورت هر وقت کلید فشار داده شود برنامه باید برود و اینتراپت مربوطه را انجام دهد.
    راه دوم اینکه از یک تایمر اینتراپت استفاده کنی و چک کردن را در اینتراپت تایمر انجام دهی.
    من این دو راه را بلد بودم!!!
    دکتر چمران در 1311 در تهران متولد شد
    وي در زمان اقامت در آمريکا انجمن اسلامي آمريکا را تأسيس کرد که منجر به قطع بورسيه وي توسط شاه شد.
    او با اينکه يکي از دانشمندان مطرح آمريکا به حساب مي آمد بدون توجه به مدرک به مصر رفت و آموزش نظامي ديد.

    دیدگاه


      #3
      پاسخ : چک کردن مداوم سه پین میکرو

      این سه پین رو چطوری میشه به یه اینتراپت وصل کرد ؟

      کی پد چطور ؟ 4 تا پین چطوری به یه اینتراپت وصل میشه ؟
      ******** یَاربَّ الحسَینِ ؛ بحَقٍِّ الحسَینِ ؛ اِشفِ صَدرَ الحسَینِ ؛ بِظُهوُرِالحجَّةِ *******
      اللهم صل علی محمد وآل محمد و عجل فرجهم

      دیدگاه


        #4
        پاسخ : چک کردن مداوم سه پین میکرو

        نوشته اصلی توسط s.m.alavi
        این سه پین رو چطوری میشه به یه اینتراپت وصل کرد ؟

        کی پد چطور ؟ 4 تا پین چطوری به یه اینتراپت وصل میشه ؟
        البته من خودم هر پین را به یک اینتراپت خارجی وصل کرده بودم ولی الآن شما تعداد پایه هایتان زیاد است
        یک راه به ذهنم می رسد باید تست بشه:
        اگر کی پد پول پ است
        همه ی پایه ها ی ورودی را به آند دیودها بزنید و بعد کاتد هر دیود را به یک خازن مثلا 220 نانو بدی سر دیگر خازن ها را به هم بزنی و بعد سر مشترک را هم به یک اینتراپت خارجی وصل کنی و هم به یک مقاومتی که به زمین خورده است.

        البته من کاری که در بالا گفتم را تست نکردم ابداع ذهنمه می توانی چک کنی

        البته کار راه تر همین استفاده از یک تایمر اینتراپت است که اسکن صفحه را داخلش انجام بدهی اونوقت وقتی به مقدار زمان خاصی که رسید صفحه کلید را چک می کند.
        دکتر چمران در 1311 در تهران متولد شد
        وي در زمان اقامت در آمريکا انجمن اسلامي آمريکا را تأسيس کرد که منجر به قطع بورسيه وي توسط شاه شد.
        او با اينکه يکي از دانشمندان مطرح آمريکا به حساب مي آمد بدون توجه به مدرک به مصر رفت و آموزش نظامي ديد.

        دیدگاه


          #5
          پاسخ : چک کردن مداوم سه پین میکرو

          وقت بخیر

          همانطور که دوستمون گفتند ، یک تایمر رو برای فعال کردن یکه وقفه تنظیم میکنی !
          بستگی به دقت اسکن کردن کلیدها میتونه 10ms باشه !
          هر 10ms کلیدها رو اسکن میکنی و با توجه به کلید فعال زیربرنامه اون کلید رو اجرا میکنی .

          دیدگاه


            #6
            پاسخ : چک کردن مداوم سه پین میکرو

            سلام، نه دیگه چرا میکرو بنده خدا رو الکی با وقفه های یه تایمر معطل کنیم؟ :NO:
            این جور مواقع باید یه مداری طبق شماتیک زیر ببندیم:



            و یه کدش هم تو محیط بسکام میشه:
            کد:
            'read 3 keys with interrupts by Behnam Zakizadeh [2013] http://avr64.com
            $regfile="m8def.dat"
            $crystal=1000000
            config lcdpin=pin, rs=pinb.0, e=pinb.1, db4=pinb.2, db5=pinb.3, db6=pinb.4, db7=pinb.5
            config lcd=16*2
            
            ddrd.7 = 0 'input
            ddrd.6 = 0 'input
            ddrd.5 = 0 'input
            
            portd.7 = 1 'active pull-up
            portd.6 = 1 'active pull-up
            portd.5 = 1 'active pull-up
            
            key1 alias pind.7
            key2 alias pind.6
            key3 alias pind.5
            
            config INT0= LOW LEVEL
            on int0 read_keys
            enable INT0
            enable INTERRUPTS
            
            cls:cursor off
            do
             'your code here
            
            loop
            end
            
            read_keys:
              cls
              lcd "keys status:"
              lowerline
              lcd "k1:";key1;" k2:";key2;" k3:";key3
            return
            اون عبارت low level توی پیکره بندی وقفه باعث میشه تا زمانی که یکی از کلید ها رو نگه داشتیم وقه مرتب به روتین read_keys پرش کنه و اگه همزمان چند تا کلید رو هم قطع و وصل کردیم مقدارشون رو اسکن کنه. دیود ها هم سطع ولتاژ صفر رو از کلید ها میگیرن و میدن به وقفه شماره صفر. تستش کردم، کار میکنه! :applause:

            دیدگاه


              #7
              پاسخ : چک کردن مداوم سه پین میکرو

              نوشته اصلی توسط بهنام زکی زاده
              سلام، نه دیگه چرا میکرو بنده خدا رو الکی با وقفه های یه تایمر معطل کنیم؟ :NO:
              این جور مواقع باید یه مداری طبق شماتیک زیر ببندیم:



              و یه کدش هم تو محیط بسکام میشه:
              کد:
              'read 3 keys with interrupts by Behnam Zakizadeh [2013] http://avr64.com
              $regfile="m8def.dat"
              $crystal=1000000
              config lcdpin=pin, rs=pinb.0, e=pinb.1, db4=pinb.2, db5=pinb.3, db6=pinb.4, db7=pinb.5
              config lcd=16*2
              
              ddrd.7 = 0 'input
              ddrd.6 = 0 'input
              ddrd.5 = 0 'input
              
              portd.7 = 1 'active pull-up
              portd.6 = 1 'active pull-up
              portd.5 = 1 'active pull-up
              
              key1 alias pind.7
              key2 alias pind.6
              key3 alias pind.5
              
              config INT0= LOW LEVEL
              on int0 read_keys
              enable INT0
              enable INTERRUPTS
              
              cls:cursor off
              do
               'your code here
              
              loop
              end
              
              read_keys:
                cls
                lcd "keys status:"
                lowerline
                lcd "k1:";key1;" k2:";key2;" k3:";key3
              return
              اون عبارت low level توی پیکره بندی وقفه باعث میشه تا زمانی که یکی از کلید ها رو نگه داشتیم وقه مرتب به روتین read_keys پرش کنه و اگه همزمان چند تا کلید رو هم قطع و وصل کردیم مقدارشون رو اسکن کنه. دیود ها هم سطع ولتاژ صفر رو از کلید ها میگیرن و میدن به وقفه شماره صفر. تستش کردم، کار میکنه! :applause:
              البته منم همینو گفتم که فکر می کنم همانطور که گفتم باید از مقاومت و خازن نیز استفاده کنید.
              عیب مدا:
              وقتی دیود فعال شدش و پایه را یک کرد چه کسی صفرش باید بکند!!!؟؟؟
              البته خازن سری با دیود هم برای اینکه لرزش و ... را بگیرد در واقع یک تریگ برای اینتراپت خارجی کافی می باشد.
              دکتر چمران در 1311 در تهران متولد شد
              وي در زمان اقامت در آمريکا انجمن اسلامي آمريکا را تأسيس کرد که منجر به قطع بورسيه وي توسط شاه شد.
              او با اينکه يکي از دانشمندان مطرح آمريکا به حساب مي آمد بدون توجه به مدرک به مصر رفت و آموزش نظامي ديد.

              دیدگاه


                #8
                پاسخ : چک کردن مداوم سه پین میکرو

                چرا خودتون رو اذیت می کنین؟؟
                یه دستور هست به اسم "debounce" که به طور تقریبی هر 10ms میاد هر پینی که بهش گفتین رو چک می کنه . اگر آن پین وضعیتی که شما می خواین رو داشت بعد از 25ms دو باره میاد و چک می کنه و اگه باز هم همونطور بود این را به منزله ی فشرده شدن کلید می گیره و به lable ای که بهش گقتین پرش می کنه هر چند تا پین رو هم خواستید کنترل کنین با این دستور میشه
                شکل کلی:
                کد:
                debounce PINx.y , state , lable [, SUB]
                اگه SUB رو هم بنویسید باید به جای lable اسم یه زیر برنامه باید بنویسین.
                [glow=green,2,300][b]بشر ممکن الخطاست
                درخت هرچه پربار تر سر به زیر تر[/glow]

                دیدگاه


                  #9
                  پاسخ : چک کردن مداوم سه پین میکرو

                  وقتی دیود فعال شدش و پایه را یک کرد چه کسی صفرش باید بکند!!!؟؟؟
                  دیودها با فشردن هر کلید صفر میشن نه یک چون سر مشترک کلید ها رو به زمین وصل کردم، (سیمبول زمین توی KiCad به شکل یه فلش رو به پایینه). آره حرف شما درسته پایه INT0 یه مقاومت پول پ خارجی نیاز داره که به VCC وصلش کنه و تو حالت عادی پایه اینتراپت رو یک کنه. (فکر نکنم بشه از Pull-up داخلی برای INT استفاده کرد).


                  البته خازن سری با دیود هم برای اینکه لرزش و ... را بگیرد در واقع یک تریگ برای اینتراپت خارجی کافی می باشد.
                  بله خازن هم باشه بهتره ولی راستش من تا حالا اینکارو نکردم و برای یه کلید با اولین لرزش اینتراپت اتفاق میفته و وارد روتین میشیم و اونجا میشه با Wait نویزها رو گرفت. ضمناً تو حالت low level تا زمانی که کلید فشرده هست یکسره روتین اجرا میشه تا اگه همزمان یه کلید دیگه رو هم فشار دادیم بشه وضعیتش رو اسکن کرد. همچنین برای کلید ها هم از پول پ داخلی استفاده شده که به محض رها کردنشون پایه 1 میشه و درنهایت اینکه وضعیت کلید ها به ترتیب توی متغیر های key1 تا key3 ذخیره میشه.

                  چرا خودتون رو اذیت می کنین؟؟
                  یه دستور هست به اسم "debounce" که به طور تقریبی هر 10ms میاد هر پینی که بهش گفتین رو چک می کنه . اگر آن پین وضعیتی که شما می خواین رو داشت بعد از 25ms دو باره میاد و چک می کنه و اگه باز هم همونطور بود این را به منزله ی فشرده شدن کلید می گیره و به lable ای که بهش گقتین پرش می کنه هر چند تا پین رو هم خواستید کنترل کنین
                  بله با Debounce هم میشه، راستش من debounce رو هر کاری میکنم در عمل جواب نمیگیرم! :angry: باید بعداً با حوصله چکش کنم ببینم مشکلش چیه.

                  دیدگاه


                    #10
                    پاسخ : چک کردن مداوم سه پین میکرو


                    debounce کار می کنه شاید مشکل از مدار هست .
                    [glow=green,2,300][b]بشر ممکن الخطاست
                    درخت هرچه پربار تر سر به زیر تر[/glow]

                    دیدگاه

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