اطلاعیه

Collapse
No announcement yet.

سرعت کلیدزنی در برنامه؟

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

    #16
    پاسخ : پاسخ : سرعت کلیدزنی در برنامه؟

    نوشته اصلی توسط wiki
    سلام من اینکار را بصورت دستی کردم و طبق قول شما ودوست دیگرمون هم تابع تاخیری با توجه به تایمر یک ساختم به اینصورت ولی متاسفانه اصلا موقعی که کلید را فشار میدم جوابی دریافت نمیکنم ؟

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

    *** من در پروتئوس چک میکنم.***
    با سلام راهش همونه که استاد آقا زاده گفت البته بقیه اساتید هم تکمیلش کردن در ضمن ببخشید در تاپیکی که اساتید بزرگ نظر دادن نظر میدم گفتم شاید بتونم مشکل را با راهنمایی اساتید حل کنم
    Start Timer1
    If Down = 0 Then
    Stop Timer1
    End If
    Tim = Timer1
    If Tim =< 100 Then
    Incr F
    Elseif Tim =< 1000 Then
    F = F + 2
    Else
    F = F + 40
    End If
    loop
    در این برنامه باید در روتین اینتراپت تایمر هم کلید را چک کنید یا در همینجا یک بیت را یک کنید که مادامیکه کلید نگه داشته شده از متغییر Tim یکی یکی کم کنه و در آخر که کلید رها شد دوباره مقدار 100 را در متغییر قرار بده

    دیدگاه


      #17
      پاسخ : سرعت کلیدزنی در برنامه؟

      سلام از همه دوستان بخاطر راهنماییهاشون ممنونم تقریبا همه راهها دوستان را تست کردم . ببینید من الان تونستم با همون روش جناب که در زیر گفتن برنامم بنویسم
      نوشته اصلی توسط mojtaba_led
      با سلام
      به نظر من بیایید یک دیبانس نرمافزاری به این صورت تعریف کنید البته با شرایط زیر :
      1. وقفه های خارجی برای اسکن پوش باتون حساس به لبه پایین رونده باشند مثلا وقفه خارجی 0 و1
      2. یک تایمر در برنامه تون حتما باید استفاده بشه ، اگه تایمری در برنامه دارید که برای کار دیگه ای هست میتونیمد برای این کار استفاده کنید مثلا تایمر 1
      3.یک پین میکرو رو هم باید به این کار اختصاص بدین مثلا pb0
      الان اگر دستم را روی کلید نگه دارم همون واحد اعشاری که میخوام را میشمرد وبالا وپایین میرود ودر صورتی که یکبار هم کلیدهارا بزنم نیز همان واحد کم یا زیاد میشه
      اما
      من میخوام دقیقا همونطور که جناب در زیر گفتن کلیدم عمل کند:
      نوشته اصلی توسط ahmadmn
      سلام دایی جان
      توی کلید خونی از وقفه استفاده نکن.
      دست انسان بسیار کنده و نیازی نیست از وقفه استفاده بشه. اینجوری می تونی از استانداردهای کلید خونی استفاده کنی و انعطاف بیشتری توی برنامه خواهی داشت.
      من روتین های کامل کلید خونی رو به زبان C دارم. هم برای فشردن دیبانس داره هم برای ول کردن.
      اگه کلید رو فشرده نگه داری بعد زمانی شروع به کلید زنی اتوماتیک می کنه و سرعتشم از کم کم زیادتر می شه.
      همونی که توی دستگاههای استاندارد صنعتی می بینی.
      یعنی در صورتی که کلید برای مثلا بیشتر از 2ثانیه فشرده ماند سرعت افزایش وکاهش اعدادم بیشتر شود بطورریکه مثلا من عدد 12.5 را که بر روی السیدی نمایش دارم با سرعت نزدیک به یک ثانیه به عدد 13.5 برسانم .
      میخواهم این حالت اتفاق بیفتد اما باعث نشود تغییر یک واحدی اعشار من بهم بخورد چون من با هر بار کلید زدن میخواهم مثلا عدد من از12.5 به عدد12.6 برود.
      باز هم از دوستان با تجربه میخوام کمکم کنند

      دیدگاه


        #18
        پاسخ : سرعت کلیدزنی در برنامه؟

        همانطور که برخی از دوستان گفتند در وقفه بایستی یک متغیر تاخیر وجود داشته باشه و برای تاخیر در تابع وقفه استفاده بشه و پس از کلید زدن ،به ازای اجرای اولین وقفه ،این تاخیر یک ثانیه و به ازای وقفه های دوم به بعد تاخیر 0.2 ثانیه بشه.
        فقط نکته ای که وجود داره اینه که پس از برداشتن دست از روی کلید ،متغیر تاخیر بایستی ریست بشه به همون یک ثانیه اول .برای اینکار بایستی یک پین به صورت ورودی تعریف بشه و خروجی کلید علاوه بر پین int به این پین ورودی هم وصل بشه.
        حالا در لوپ برنامه اصلی این پین ورودی دایما چک بشه و هر وقت از حالت low به high تغییر وضعیت داد یعنی اینکه دست از روی کلید برداشته شده و باید متغیر تاخیر به مقدار یک ثانیه ریست بشه.
        برای اینکه متغیر تاخیر در همه جای برنامه شناخته بشه در زبان c به صورت خارجی بایستی تعریف بشه و در زبان بیسیک شاید چیز خاصی لازم نباشه.
        در ضمن اضافه کردن تاخیر هیچ تاثیری بر شمارش نداره حالا اعشاری یا عدد صحیح.

        دیدگاه


          #19
          پاسخ : سرعت کلیدزنی در برنامه؟

          نوشته اصلی توسط ahmadmn
          سلام دایی جان
          توی کلید خونی از وقفه استفاده نکن.
          دست انسان بسیار کنده و نیازی نیست از وقفه استفاده بشه. اینجوری می تونی از استانداردهای کلید خونی استفاده کنی و انعطاف بیشتری توی برنامه خواهی داشت.
          من روتین های کامل کلید خونی رو به زبان C دارم. هم برای فشردن دیبانس داره هم برای ول کردن.
          اگه کلید رو فشرده نگه داری بعد زمانی شروع به کلید زنی اتوماتیک می کنه و سرعتشم از کم کم زیادتر می شه.
          همونی که توی دستگاههای استاندارد صنعتی می بینی.
          سلام دایی جان عزیز

          اگه میشه و براتون مقدوره روتینی رو که فرمودید بزارید یا یک راهنمایی کوچیک بفرمایید
          یک سوالم داشتم توی روتینی که فرمودید از تایمر هم استفاده نمیشه ؟

          ممنون

          دیدگاه


            #20
            پاسخ : سرعت کلیدزنی در برنامه؟

            حتما دایی جان
            اما پیش از پرداختن به روتین کلیدخونی دوست دارم یه مقدمه کوچیک برای دوستان خوبم بگم که به نظرم برای دنیای عمل واقعی بدرد می خوره و خیلی از رفقا نادیده می گیرن:
            1- در روتین اصلی برنامه نباید میکرو معطل بشه. یه برنامه معمولا از چند قسمت تشکیل شده. اولین قسمت برنامه عموما تنظیمات متغیرها و رجیستر هاست. یعنی میکرو بعد از ریست شدن باید پورت ها، تایمر ها و ... رو ست کنه تا آماده کار بشه. در این قسمت ما می تونیم از هر تاخیری که دوست داریم استفاده کنیم. مثلا آماده سازی LCD همیشه نیازمند تاخیره. حتی یه دستور delay یا wait هم کارمونو راه میندازه.
            بعد از تنظیمات وارد روتین اصلی برنامه می شیم که بدنه اصلی برنامه ماست و داخلش کلی کار باید انجام بدیم. کلید بخونیم، پورت بخونیم، فرمان بدیم، پالس بشمریم، ولتاژ بخونیم، محاسبه کنیم، به اینتراپت ها سرویس بدیم و...
            حتی تمام PLC های دنیا این روتین اصلی رو دقیقا به همین شکل دارند.
            در زبان C و پاسکال و بیسیک و... این روتین اصلی داخل یه حلقه while قرار گرفته.
            یعنی کل این روتین باید تا ابد اجرا بشه. از اول تا انتها و دوباره ....
            در یک پروژه صنعتی این روتین و زمان اجراش بی نهایت اهمیت داره! هرچه این روتین سریعتر انجام بشه ما می تونیم از میکرو کار بیشتری بکشیم. حتی قیمت PLC های بازار به این زمان که بهش Cycle time میگن بستگی داره.
            نمی تونم پرچونگی کنم. خلاصه آینده برنامه نویسی شما به بهینه سازی همین حلقه بستگی داره.
            اگه توی این حلقه بخواهید از تاخیر استفاده کنید یه روزی گرفتار می شید. مثلا ADC شما کارش تموم شده و باید بخونیدش اما میکروی بیچاره توی یه دستور delay گیر کرده. یعد می بیند که توی همین زمان کوتاه مخزنی که باید فشارشو می خوندید درحال انفجاره و میکروی بیچار نتونست سر موقع اونو بخونه.
            این فقط یه مثال بود. در عمل می بینید که هزاران مشکل دیگه بخاطر همین بی دقتی و یا تنبلی ما بوجود میاد. می تونستیم از تایمر استفاده کنیم ولی حالشو نداشتیم و wait گذاشتیم. می تونستیم از while استفاده کنیم اما از دستور نچسب goto استفاده کردیم و ...
            بیشتر دوستان می شینن پای کامپیوتر و شروع به برنامه نویسی می کنند! اما نوشتن یه برنامه موفق نیازمند طرح ریزی و درک مفهومی پروسه و در نهایت الگوریتمی بسیار دقیقه.
            سال 75 با یک شرکت قرارداد بستم تا برای یک ماشین تزریق پلاستیک پیشرفته، کنترل کامپیوتری بسازم. سخت افزار رو خودم به عهده گرفتم و نرم افزار رو به یک مهندس کامپیوتر که از بهترین دانشگاه ایران فارغ التحصیل شده بود دادم. مهندسی بسیار منظم و کاری بود و امیدوارم این داستان رو بعنوان غیبت حساب نکنه. از صبح می نشست پای کامپیوتر و بی استراحت تایپ می کرد تا شب. بعد از 3 ماه برنامه توی تست کار نکرد. چندین روز پای دستگاه کنارش نشستم و برنامه رو تست کردیم و کار نکرد. چندهزار خط برنامه رو میرفتیم بالا و پایین و واقعا توش گم شده بودم. زمان قرارداد که تموم شد و روزهای جریمه رسید مجبور شدم مرخصش کنم و نشستم توی یه اتاق و هرچی که از دستگاه می دونستم ریختم روی کاغذ. بدون اینکه بدونم چه می کنم، واسه هر قسمت از دستگاه الگوریتمی نوشتم و با مدیرفنی کارخونه ایراداتشو رفع کردم. بعد از 2 هفته 20 صفحه A4 الگوریتم داشتم که هموشونو چسبوندم به دیوار. چندین بار از صفحه اول تا اخر مرور کردم و با پاککن ادیت کردم. وقتی دیدم مو لای درزش نمیره نشستم پای کامپیوتر و به زبان پاسکال برنامه نوشتم. شاید باورتون نشه که کمتر از 4 ساعت کل برنامه نوشته شد و روز بعد در همون تست اول جواب داد!
            اون پروژه هیچ سودی نداشت اما یه تجربه بزرگ برام داشت. از اون به بعد بجای نشستن پای PC و کدنویسی، از فاصله دورتر به یه برنامه نگاه می کنم و سعی می کنم کلشو درک کنم و بعد جزئیاتشو الگوریتم کنم و بعد سه سوت کد بنویسم.
            از اینکه سرتونو درد آوردم پوزش می طلبم. ادامه بحث رو برای پست بعد میزارم.
            با عرض پوزش خدمت دایی های عزیزم تا اطلاع ثانوی به اینترنت دسترسی ندارم.

            دیدگاه


              #21
              پاسخ : سرعت کلیدزنی در برنامه؟

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

              دیدگاه


                #22
                پاسخ : سرعت کلیدزنی در برنامه؟

                نوشته اصلی توسط ahmadmn
                سلام دایی جان
                توی کلید خونی از وقفه استفاده نکن.
                دست انسان بسیار کنده و نیازی نیست از وقفه استفاده بشه. اینجوری می تونی از استانداردهای کلید خونی استفاده کنی و انعطاف بیشتری توی برنامه خواهی داشت.
                من روتین های کامل کلید خونی رو به زبان C دارم. هم برای فشردن دیبانس داره هم برای ول کردن.
                اگه کلید رو فشرده نگه داری بعد زمانی شروع به کلید زنی اتوماتیک می کنه و سرعتشم از کم کم زیادتر می شه.
                همونی که توی دستگاههای استاندارد صنعتی می بینی.
                با توجه به بحث بالا و را هنمایی بعدی جناب ahmadmn در مورد عدم توقف برنامه در اینتراپت و اینکه شما می خواین از اینتراپت استفاده کنید می تونین یه متغیری رو توی وقفه ست کنید که شرط اجرای تابع کلید زنی تون باشه و اون تابع رو هم در حلقه ی اصلی برنامه داشته باشید(البته مشروط به اینکه تاخیر خیلی خیلی کمی در روند حلقه اصلی باشه، تا از جایی که وقفه رخ داده به تابع کید زنی برسه، مثلا اگه بعد از اون 1 ثانیه تاخیر باشه در عمل این روش به کار نمیاد)
                در اینصورت اگر اینتراپت مهمتری دارین که می بایست چک بشه به مشکل نمی خورین
                بستگی به اهمیت کارهایی که انجام می خواید بدید داره
                به نظر اساتید روش کاملی میرسه که مشکل بالا هم پیش نیاد؟

                دیدگاه


                  #23
                  پاسخ : سرعت کلیدزنی در برنامه؟

                  با سلام بر دایی های گلم
                  متوجه منظور دایی رضا نشدم! ما توی این انجمن گرد اومدیم تا تجربیاتمونو برای هم بگیم. این تجربیات ممکنه فنی، علمی و حتی شخصی باشه. تنها هدف من از پرچونگی اینه که دوستان جوانتر بصورت بنیادی با این مسائل آشنا بشن. نه اینکه سطحی و بزن دررویی کارشون راه بیفته و برن. بهرحال اگه سرتونو درد آوردم حتما بگید. داییتون گاهی زیاد فک می زنه و حواسش نیست :biggrin:

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



                  سیگنال A شکل موج پایه میکروست که کلید بهش وصله و فقط یکبار فشرده و رها شده. یعنی وقتی کلید رو فشار میدیم یا رها می کنیم، لرزش دست و ساختمان کلید باعث میشه پورت میکرو چندین بار صفر و یک بشه. این باعث میشه میکرو به اشتباه بیفته و کار مورد نظر رو چندین بار انجام بده.
                  اما سیگنال B سیگنال درستیه ما دوست داشتیم داشته باشم. وقتی کلید فشرده میشه پورت میکرو 1 بشه و وقتی کلید رها شد پایه پورت صفر بشه.
                  در دوره هایی که میکرو وجود نداشت با سخت افزار سیگنال A رو به B تبدیل می کردند و به مدارات لاجیک میدادند اما الان میکرو براحتی می تونه با چند خط برنامه اینکارو انجام بده. مثل شکل زیر:



                  این فلوچارت ساده بنیاد تمام کلیدخونی های نرم افزاری امروزه. متغیری اینتیجری(صحیح) بنام C داریم و یک عدد ثابت بنام m که مقدارش بستگی به سرعت اجرای سیکل اصلی برنامه داره. مثلا من این روتین کلید خونی رو هر 1 میلی ثانیه اجرا می کنم و مقدار m رو 50 میگیرم.
                  یعنی اگه 50 بار پشت سر هم کلید 1 بود بعنوان 1 قبول میشه و اگه 50 بار پشت سرهم صفر بود بعنوان صفر قبول میشه. به عبارت "پشت سرهم" دقت کنید چون رمز و اساس دیبانسینگه.
                  واسه بعضی از کلیدها که جنس خوب ندارند یا روشون ممبرانس نصب نشده، این عدد رو بزرگتر هم می گیریم.
                  متغیر B بسته به کامپایلر می تونه تعریف بشه. مثلا من اونو بصورت بیت تعریف می کنم. بجای A هم اسم اون پورت رو میزارم.

                  مطابق شکل، هر بار که برنامه به روتین کلید خونی می رسه:
                  -چک می کنه متغیر B با وضعیت کلید یعنی A یکی هست یا نه؟ اگه یکی بودند یعنی تغییری در وضعیت کلید دیده نشد یا اینکه لرزش کلید باعث شده وضعیت اشتباه خونده شده باشه. پس متغیر شمارنده C را صفر می کنیم تا شمارش از اول صورت بگیره و میریم به انتهای روتین تا به کارهای دیگه برسیم. اما اگه A, B یکی نبودن یعنی تغییری در وضعیت کلید دیده شده و باید شمارش رو آغاز کنیم پس میریم به مرحله بعد.
                  - میکرو به مقدار متغیر C یکی اضافه می کنه و چک می کنه C با عدد از پیش تعریف شده m برابر شد یا نه؟ اگه نشد میره به انتهای روتین تا به کارهای دیگه برسه. و اگه برابر شد یعنی اینکه m سیکل برنامه کلید وضعیت ثابتی داشت که با وضعیت قبلیش متفاوت بود. مثلا اگه قبلا صفر بود حالا دیگه توی m سیکل 1 شد یا برعکس
                  - در آخر میکرو با خیال راحت مقدار پورت رو داخل Bآ‌ میریزه و شما می تونید بر اساس صفر یا یک بودن B روتین دلخواهتونو بنویسید.
                  شکل زیر برنامه همین فلوچارت هست به زبان C که برای متغیرها اسم های مناسبتری استفاده شده:



                  همین فلوچارت ساده می تونه برای n کلید استفاده بشه و حتی همزمان n کلید رو بخونه. میکرو فقط با چند کلاک کلید می خونه و به همه کارهای دیگش هم میرسه.
                  در پست های بعد روتین خوندن کلید بصورت مالتی پلکس و auto increment را اضافه می کنیم.
                  با عرض پوزش خدمت دایی های عزیزم تا اطلاع ثانوی به اینترنت دسترسی ندارم.

                  دیدگاه


                    #24
                    پاسخ : سرعت کلیدزنی در برنامه؟

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

                    دیدگاه


                      #25
                      پاسخ : سرعت کلیدزنی در برنامه؟

                      سلام
                      دایی جان ما منتظر بقیهاش هستیم :nerd:

                      دیدگاه


                        #26
                        پاسخ : سرعت کلیدزنی در برنامه؟

                        سلام دایی جان
                        صبور باش. داییت باید فردا کار بفرسته واسه مشتری.
                        بقیش الان به شکل زیره که من توی برنامه هام استفاده می کنم اما گمون نمی کنم بدرد کسی بخوره. چون باید قسمتهایی کمی وقت پیدا کنم کاری می کنم بدردتون بخوره. یعنی قسمتهایی رو که مربوط به برنامه خودم هست حذف کنم و یه فلوچارت براش بکشم و..
                        اگه هم عجله داری و علاقه مندی می تونی از همین برنامه زیر استفاده کنی. این برنامه کلید خونه یه درایو موتور DC است که نمایشگر RPM هم داره. نمایشگرها سون سگمنت هستند. برای هر سون سگمنت یه فرمان میره و من همیشه از همون برای کلیدخونی استفاده می کنم. یعنی کلید ها دونه دونه خونده میشن و... چهار کلید UPآ‌و DOWN و SET و ZERO در این برد هست که کلید UPآ‌و DOWNآ‌برای زیاد و کم کردن سرعت و متغیر بکار میره.
                        کد:
                            if(wait_release)
                              {
                              if(dig_cntr==current_key)
                                {
                                if(!KEYINP)
                                  {      
                                  if(++deb_cntr==DEB_LIMIT)
                                    {
                                    wait_release=0;
                                    deb_cntr=0;
                                    exp_cntr=0;  
                                    set_mode_cntr=0;
                                    wait_release_cntr=0;
                                    };        
                                  }
                                else
                                  { 
                                  if(wait_release_cntr!=0)
                                    {
                                    if(--wait_release_cntr==exp_cntr)
                                      {
                                      wait_release=0;
                                      if(exp_cntr<180) exp_cntr=exp_cntr+20;
                                      deb_cntr=DEB_LIMIT-1;
                                      };
                                    };
                                  };
                                };    
                              }
                            else
                              {
                              if(KEYINP)
                                {
                                if(dig_cntr==current_key)
                                  {
                                  if(++deb_cntr==DEB_LIMIT)
                                    {  
                                    //*******************************************
                                    switch (current_key) 
                                      {
                                      case 1: //UP key
                                        if(set_mode)
                                          { 
                                          if(Tooth<250)
                                            {
                                            Tooth++;
                                            wait_release_cntr=201;
                                            }; 
                                          }
                                        else
                                          {
                                          if(PWM_decade<(255-MINPWM))
                                            {
                                            PWM_decade++;
                                            wait_release_cntr=201;
                                            };
                                          };
                                      break;
                                      case 2: //DN key
                                        if(set_mode)
                                          {
                                          if(Tooth>0)
                                            {
                                            Tooth--; 
                                            wait_release_cntr=201;
                                            };
                                          }
                                        else
                                          {
                                          if(PWM_decade>0) 
                                            {
                                            PWM_decade--; 
                                            wait_release_cntr=201;
                                            };
                                          };
                                      break;
                                      case 3: //SET key
                                        if(set_mode)
                                          {
                                          set_mode=0;
                                          eeTooth=Tooth;
                                          }
                                          else
                                          {
                                          set_mode_cntr=30;
                                          };
                                      break;
                                      case 4: //Zero key
                                        if(set_mode)
                                          {
                                          set_mode=0;
                                          Tooth=eeTooth;
                                          }
                                          else
                                          {
                                          PWM_decade=0; 
                                          };
                                      break;
                                      } 
                                    if(PWM_decade==0) 
                                      { 
                                      TCCR2A=0x03;
                                      PWMREG=0; 
                                      MINPWM=10;
                                      }
                                    else 
                                      { 
                                      TCCR2A=0x23;
                                      PWMREG=PWM_decade+MINPWM;
                                      };  
                                    //*************************************************
                                    wait_release=1;
                                    deb_cntr=0;
                                    if(exp_cntr==0) buz_timer=BUZ_LIMIT;
                                    BUZZER=0;
                                    };  
                                  }
                                else
                                  {
                                  current_key=dig_cntr;
                                  deb_cntr=0; 
                                  };          
                                }
                              else            
                                {
                                if((dig_cntr==current_key)&&(deb_cntr!=0))
                                  {
                                  deb_cntr=0;
                                  exp_cntr=0;
                                  wait_release=1;
                                  };
                                }; 
                              };
                        با عرض پوزش خدمت دایی های عزیزم تا اطلاع ثانوی به اینترنت دسترسی ندارم.

                        دیدگاه


                          #27
                          پاسخ : سرعت کلیدزنی در برنامه؟

                          سلام دوستان
                          جناب ahmadmn ممنونم متاسفانه نتونستم از برنامتون سر در بیارم اگر لطف کنید وفلوچارت کاری که باید بکنم را بزارید ممنون میشم .
                          من برنامه های زیادی در مورد استفاد ه از کلید با میکرو نوشتم وانواع تاخیرها با تایمر و دستور دیبانس ، با تایمر و وقفه ، استفاده از خود دستورات برنامه به عنوان تاخیر ، با دستور شرطی if و...
                          اما هنوز نتونستم به راهکاری برای مورد سئوالم برسم چون میخواهم وقتی کلیدی برای یک مدت زمانی به طور مداوم فشرده شده باشد عملیات مربوط به ان کلید (افزایش یا کاهش متغیر) سرعت پیدا کند.
                          حتما بارها خودتان در دستگاههای صنعتی به این مدل برخورد کردید نمونه بسیار ساد ه آن کنترل تلویزیونها می باشد که وقتی دستمان را برروی کلید با لا وپایین برای چند ثانیه مداوم نگه داریم شبکه های تلویزیون به سرعت بالا یا پایین میروند واین در حالی است که اگر فقط یک بار کلید بالا یا پایین کنترل را فشار دهید فقط یک شبکه بالا یا پایین میرود اما من در برنامه هایی که نوشتم اگر سرعت را توسط تاخیرهایی که بکار بردم افزایش دهم انوقت دیگر افزایش وکاهش متغیر من با یکبار فشردن کلید یک عدد نخواهد بود.
                          دوستان با تجربه لطفا کمک کنند.

                          دیدگاه


                            #28
                            پاسخ : سرعت کلیدزنی در برنامه؟

                            دمت دایی جان
                            برنامه ای که برات گذاشتم دقیقا همین کارو می کنه. حتی سرکت افزایش یا کاهش متغیر هم به مرور زیادتر میشه تا کاربر در کوتاه ترین زمان به عدد دلخواهش برسه. تقریبا تمام مدارتی که می سازم این روتین توش هست. امیدوارم فرداشب فرصتی دست بده تا فرم ساده شده و فلوچارتشو برات بکشم. متاسفانه چکنویسهایی رو که توش فلوچارت می کشیدم گم کردم وگرنه این برنامه از روی همونا نوشته شده.
                            با عرض پوزش خدمت دایی های عزیزم تا اطلاع ثانوی به اینترنت دسترسی ندارم.

                            دیدگاه


                              #29
                              پاسخ : سرعت کلیدزنی در برنامه؟

                              اگه از بیسیک استفاده می کنی از DEBOUCE استفاده کن:
                              Debounce Pind.0 , 0 , Pr , Sub

                              توی HELP بسکام کامل گفته.دیگه به وقفه احتیاجی نداری! :agree:
                              انا لله و انا الیه الراجعون

                              دیدگاه


                                #30
                                پاسخ : سرعت کلیدزنی در برنامه؟

                                نوشته اصلی توسط ahmadmn
                                امیدوارم فرداشب فرصتی دست بده تا فرم ساده شده و فلوچارتشو برات بکشم. متاسفانه چکنویسهایی رو که توش فلوچارت می کشیدم گم کردم وگرنه این برنامه از روی همونا نوشته شده.
                                دایی جان سلام
                                شرمنده ها :redface:
                                میشه فلوچارتش یا توضیحات همون برنامه را برام بگی ؟

                                دیدگاه

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