ايران ويج

نسخه‌ی کامل: مشكل در چك كردن كليد با دستور debounce
شما در حال مشاهده‌ی نسخه‌ی متنی این صفحه می‌باشید. مشاهده‌ی نسخه‌ی کامل با قالب بندی مناسب.
صفحه‌ها: 1 2
سلام .من مداری طراحی کردم که با چند کلید ورودی چند خروجی برایم چند کار خاص انجام دهند با این شرط که اگر درحین کار هر کدام از خروجی ها یکی از ورودی های مشخص دوباره زده شود سیستم دست ا زادامه فعالیت قبلی بردارد وکار این کلید خاص را انجام دهد.من با دستورdebounce این کار را انجام دادم ولی این کلید خاص فقط بار اول فعال میشود وخروجی اش ثابت میماند.وبا تکرار فشار دادن این کلید در زمان دیگری دوباره فعال نمیشود یا به اصطلاح ری استارت نمی کند
لطفا اگر کسی متواند کمکم کند 4 روز بیشتر زمان ندارم
(۰۹-دى-۱۳۹۲, ۱۴:۳۱:۵۳)velakat نوشته است: [ -> ]سلام .من مداری طراحی کردم که با چند کلید ورودی چند خروجی برایم چند کار خاص انجام دهند با این شرط که اگر درحین کار هر کدام از خروجی ها یکی از ورودی های مشخص دوباره زده شود سیستم دست ا زادامه فعالیت قبلی بردارد وکار این کلید خاص را انجام دهد.من با دستورdebounce این کار را انجام دادم ولی این کلید خاص فقط بار اول فعال میشود وخروجی اش ثابت میماند.وبا تکرار فشار دادن این کلید در زمان دیگری دوباره فعال نمیشود یا به اصطلاح ری استارت نمی کند
لطفا اگر کسی متواند کمکم کند 4 روز بیشتر زمان ندارم
یه کدی چیزی بزارید تا نگاهی بهش بکنیم
احتمالا شما پس از دریافت کار اون کلیدخاص دیگه به برنامه اصلی بر نمی گردید تا کلید ها دوباره چک شوند

اسم پست هارو هم درست انتخاب کنید خواهشا که مفهوم رو برسونه
هرکدام از 2 ورودی که زده شود کار را به آخر می رساند .اگر هم هردو فشارداده شوند باز، پس از پایان کار یکی ،کار دومی شروع می شود و بس .یعنی نمی توان دوباره کلیدهارا بکار برد
.
.
.

کد php:
Config Debounce 30

       
Do

   
Debounce Pina.0 Power1 Sub
    
     Debounce Pina.2 
Spin Sub
      
        Loop

    End

      Power1
:
         
Cls
        Set Portc.0
           B 
0
           Lcd B
         Waitms 100
         Cls
         B 
1
         Reset Portc.0
         Lcd B

       
Return


      
Spin:

         
Set Portc.1
          Waitms 50
          
If Pind.6 0 Then
       Set Portc.2

       Waitms 200
       Reset Portc.1
       Reset Portc.2
       Waitms 200
       Set Portc.1
       Set Portc.3
       Set Portc.2
       Waitms 200
       Reset Portc.2
       Reset Portc.3
       Waitms 200
       Set Portc.2
       Waitms 200
       Set Portc.4
       Waitms 500
       Reset Portc.4
       Waitms 50
                    Set Portc.2
       Waitms 200
                    Reset Portc.2
       Waitms 200
                  Set Portc.3
                  Set Portc.2
       Waitms 200
       Reset Portc.2
       Reset Portc.3
       Reset Portc.1

       
Else
       
Waitms 50
       
Goto Spin
        End 
If
       Return 
(۰۹-دى-۱۳۹۲, ۲۳:۴۲:۳۳)velakat نوشته است: [ -> ]هرکدام از 2 ورودی که زده شود کار را به آخر می رساند .اگر هم هردو فشارداده شوند باز، پس از پایان کار یکی ،کار دومی شروع می شود و بس .یعنی نمی توان دوباره کلیدهارا بکار برد
.
.
.

کد php:
Config Debounce 30

       
Do

   
Debounce Pina.0 Power1 Sub
    
     Debounce Pina.2 
Spin Sub
      
        Loop

    End

      Power1
:
         
Cls
        Set Portc.0
           B 
0
           Lcd B
         Waitms 100
         Cls
         B 
1
         Reset Portc.0
         Lcd B

       
Return


      
Spin:

         
Set Portc.1
          Waitms 50
          
If Pind.6 0 Then
       Set Portc.2

       Waitms 200
       Reset Portc.1
       Reset Portc.2
       Waitms 200
       Set Portc.1
       Set Portc.3
       Set Portc.2
       Waitms 200
       Reset Portc.2
       Reset Portc.3
       Waitms 200
       Set Portc.2
       Waitms 200
       Set Portc.4
       Waitms 500
       Reset Portc.4
       Waitms 50
                    Set Portc.2
       Waitms 200
                    Reset Portc.2
       Waitms 200
                  Set Portc.3
                  Set Portc.2
       Waitms 200
       Reset Portc.2
       Reset Portc.3
       Reset Portc.1

       
Else
       
Waitms 50
       
Goto Spin
        End 
If
       Return 
من مشکلی ندیدم! شاید هم منظور شما رو نگرفتم!
الان پس از انجام تابع دوباره بر میگرده و شما می تونید کلید ها رو فشار بدید
فقط چند تا نکته
1- وقتی برنامه تابع ها اجرا میشه کلید ها دیگه خونده نمی شن برای همین اگه اون موقع کلیدی بزنید گرفته نمیشه
2- توی تابع کلید دوم یه شرط برای pind6 گذاشتید که اگه واقع نشه دیگه به تابع اصلی بر نمی گرده و در نتیجه کلید ها دیگه چک نمی شن
با سلام. ببینید من مشکلی با کار انجام شده هر خروجی ندارم چون کار بطور صحیح طبق آنچه مد نظر من است انجام می شود.مشکل من همانطور که توضیح دادم این است که بعد از پایان کار هر خروجی ،اگر دوباره پین مربو طه را فشار دهیم این بار هیچ عکس العملی صورت نمیگیرد در صورتی که انتظار دارم در یک چرخه مانند Do Loop این کار هرچقدر بخواهیم قابل تکرار باشد. من از GOTO و jmp هم استفاده کردم ولی نشد.این دوتا دستور را در هرکجا بکار میبرم کار میکنند ولی فقط در گرفتن دستور از طریق کلید این مشکل پیش می آید.در مورد Pind.6 یک ورودی است که طوری طراحی شده که می توان دستی آنرا وصل کرد .وشرط برقرار میشود ودر نهایت کار خواسته شده انجام میگیرد .ولی پس از پاین کار هر چقدر کلید pina.2 رادوبار فشار دهیم دوباره کار از اول شروع نمی شود((البته به شرطی که میکرو ومدار همچنان روشن است ))],چون همان لحظه در پروتوس نتیجه را میبینم.راستش را بخواهید من با این اطلاعات ناقصم گیج شدم که چرا هر چقدر هم شرط می گذارم باز مدار کار مجدد انجام نمیشود
يه شماتيك از طراحي كليدهاتون كه به پايه ها وصل هست بذاريد.

برنامه ي ساده ي زير رو روي ميكرو پروگرام كنيد ببينيد همه چيز اوكي هست ( كليد ها مدام چك مي شن؟ )
با زدن كليد اول led اي كه به c.0 هست بايد تغيير وضعيت بدهه و بعد از 200 ميلي ثانيه برگرده به حالت قبلش
با زدن كليد دوم هم اين وضعيت براي led متصل به پايه ي c.1 بايد به وجود بياد
کد php:
Do

   
Debounce Pina.0 Lbl1 Sub
   Debounce Pina.2 
Lbl2 Sub

Loop

End

Lbl1
:
Set Portc.0
Waitms 200
Reset Portc.0
Return

Lbl2:
Set Portc.1
Waitms 200
Reset Portc.1
Return 
برای این برنامه مدارش را در پروتوس 7 طرا حی کردم .جواب نمیده. هرکدام از کلیدها فقط یکبار عمل مکنند .درست مثل برنامه خودم
(۱۰-دى-۱۳۹۲, ۲۳:۳۷:۵۳)velakat نوشته است: [ -> ]برای این برنامه مدارش را در پروتوس 7 طرا حی کردم .جواب نمیده. هرکدام از کلیدها فقط یکبار عمل مکنند .درست مثل برنامه خودم
خوب فایل برنامش رو خوهشا قرار بدید
با سلام مجدد.دوستان فکر میکنم مشکل من از خود نرافزار پروتوس 7 میباشد که از اینترنت داللود کردم.چون بعد از تست برنامه بالا وکار نکردن دوباره آن ،رفتم سراغ شماتیکهای از قبل طراحی شده کتاب آقای بخت آور که در داخل سی دی آن قرار داشت وکاملا اجرا شد.سپس من هم به همان روش کار کردم ومدار را طرا حی وبرنامه را نوشتم و در عین ناباوری مدار من که کاملا با مدار داخل سی دی مطابقت داشت وبرنامه بسکام هم عین همان ، باز هم یکبار اجرا شد ودیگه کار نکرد.حالا نظر شما چیه
اين ورژن رو از كجا گير آورديد؟!

بله ، ورژن هاي پايين باگ زياد داشتن. احتمالش بسيار زيادهه
نسخه ي 11 ، 12 نصب كنيد. نمي دونم آخرين ورژنش چندهه ، با بسكام خيلي وقته كار نمي كنم...
ابتدا ببخشید که بعض وقتها ااملاء نوشته ها خوب در نمیاد.
منظور من از اینکه برنامه آقای بخت آور کار میکرد این است که هر چند بار که کلیدها فشار داده شوند برنامه باز هم کار را دوباره انجام میدهد.ولی برنامه ای که من از روی برنامه آقای بخت آور کپی کردم وشماتیک را عین ایشان طراحی کردم ،فقط یکبار اجرا میشود
اینم برنامه ساده داخل کتاب
کد php:
$regfile "m8def.dat"
  
$crystal 8000000

Config Portb 
Output
Config Porta 
Input
Config Debounce 
30
Do
Debounce Pind.3 Roshan Sub
Debounce Pind.4 
Khamosh Sub
Loop
End

Roshan
:
Set Portb.2
Return
Khamosh:
Reset Portb.2
Return 

منظورم برنامه پروتوس است (نرم افزار شبیه ساز مدار) نه بسکام .هر چند نمی دانم ورژن پروتوس از 8 بیشتر شده یانه
بسکام هم 1.11.9.8
صفحه‌ها: 1 2