اطلاعیه

Collapse
No announcement yet.

مشکل در کنترل آنلاین سرعت روشن خاموش شدن LED

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

    مشکل در کنترل آنلاین سرعت روشن خاموش شدن LED

    سلام
    من می خوام یه سرعت روشن خاموش شدن LED رو به صورت آنلاین کنترل کنم .یعنی وقتی LED در حال روشن خاموش شدن است بتوان سرعت روشن خاموش کردن رو هم عوض کرد البه زمان روشن بودن و خاموش بودن بین 1 تا 300 ثانیه متغییره .
    $regfile = "m16def.dat"
    Config Portb = Output
    Config Porta = Input
    Dim I As Integer
    I = 1
    P0:
    Do
    Debounce Pina.1 , 1 , P1
    Debounce Pina.2 , 1 , P2
    Debounce Pina.3 , 1 , P3
    Loop
    P1:
    Do
    Portb.1 = 1
    Wait I
    Portb.1 = 0
    Wait I
    Loop
    P2:
    I = I + 1
    Goto P0
    Return
    P3:
    If I = 0 Then Goto P0
    I = I - 1
    Goto P0
    Return
    End

    این سورس bascom رو نوشتم ولی بلد نیستم چطوری آنلاین کنترل کنم
    در ضمن برای برگشتن به مرحله اول p0 نمی خوام میکرو رو ریست کنم
    لطفا راهنمایی کنید

    #2
    پاسخ : مشکل در کنترل آنلاین سرعت روشن خاموش شدن LED

    سلام.
    برای پرش به p0 میتونی از دستور jmp استفاده کنی.

    منظورتون از آنلاین چیه؟
    www.icesi.ir

    دیدگاه


      #3
      پاسخ : مشکل در کنترل آنلاین سرعت روشن خاموش شدن LED

      برای اینکه بتونی تو حین اجرای یه عملیات بتونی یه کار دیگه رو به سرعت انجام بدی باید از اینتراپت استفاده کنی.
      تو این برنامه اگه نخوای از اینتراپت استفاده کنی نباید از Debounce استفاده کنی. بهتره از دستور If استفاده کنی تا برنامه همیشه بتونه هم تو یه لوپ وضعیت پایه هارو چک کنه هم کارشو ادامه بده

      دیدگاه


        #4
        پاسخ : مشکل در کنترل آنلاین سرعت روشن خاموش شدن LED

        سلام

        در تایید حرف آقای جعفری

        بهتره که از وقفه ی خارجی استفاده کنید :smile:
        ِِDie for Life, Not Live to Die
        Freedom Fighter
        " ناخود گاه، هريك از ما ، از ناميرائي خود يقين دارد " . فروید

        دیدگاه


          #5
          پاسخ : مشکل در کنترل آنلاین سرعت روشن خاموش شدن LED

          سلام
          بهتره اول بیایم بگیم با زدن کلید مثلا افزایش چه میزان می خواهیم به سرعت چشمک زدن اضافه بشه. به طور مثال 500 میلی ثانیه. یعنی با زدن کلید افزایش 500 میلی ثانیه زمان روشن بودن اضافه بشه. حال باید با تایمر یا دستور wait اینو پیاده سازی کنیم. با تایمر کمی پیچیده تره اما قابل انجامه. بهتره کلیدهای افزایش و کاهش رو همونطوری که حامد اشاره کرد، روی اینتراپتها ببندی. کد مشابه موجوده.
          در برنامت هم اگر خواستی که بدون Reset به P0 بری می تونی به نحوی از exit Do استفاده کنی. مثلا یککلید دیگه بذاری یا از همون کلیدها استفاده کنی مقادیرشونو کنترل کنی تا در صورت پیش آمد یک موقعیت خاص، Exit Do که در یک IF هست فعال بشه و Label مورد نظرتو فراخوانی کنی.

          دیدگاه


            #6
            پاسخ : مشکل در کنترل آنلاین سرعت روشن خاموش شدن LED

            سلام
            خیلی خیلی ممنون از پاسخ هاتون
            مشکلم با استفاده از INT0 و INT1 حل شد ولی اگه نخوام از وقفه استفاده کنم راه دیگه ای نیست؟؟
            من این برنامه رو نوشتم ولی کار نمی کنه

            $regfile = "m16def.dat"
            Config Porta = Input
            Config Portb = Output
            Dim X As Integer
            Dim I As Integer
            X = 5
            Do
            For I = 0 To X
            Waitms 100
            If Pina.0 = 1 Then X = X + 1
            If Pina.1 = 1 Then X = X - 1
            If X = 0 Then X = 1
            Next I
            Toggle Portb
            Loop

            تو برنامه هر 100 میلی ثانیه pina.0 و pina.1 رو چک میکنه و مقدار اوله X هم 5 هست یعنی هر 500 میلی ثانیه LED روشن خاموش میشه
            ولی کار نمیکنه
            ممنون میشم اگه راهنمایی کنید

            دیدگاه


              #7
              پاسخ : مشکل در کنترل آنلاین سرعت روشن خاموش شدن LED

              ببخشید یه سوال دیگه هم دارم
              این یعنی چه؟؟
              Config Timer1 = Pwm , Pwm = 8 , Compare A Pwm = Clear Up , Compare B Pwm = Clear Down

              Pwm1a = 100
              Pwm1b = 200

              تو سایت گشتم ولی چیز کاملی نبود

              دیدگاه


                #8
                پاسخ : مشکل در کنترل آنلاین سرعت روشن خاموش شدن LED

                نوشته اصلی توسط hadi_sl66
                ببخشید یه سوال دیگه هم دارم
                این یعنی چه؟؟
                Config Timer1 = Pwm , Pwm = 8 , Compare A Pwm = Clear Up , Compare B Pwm = Clear Down

                Pwm1a = 100
                Pwm1b = 200

                تو سایت گشتم ولی چیز کاملی نبود
                من این توضیحاتو میدم و فرض به این میگیرم که شما میدونید PWM چیه.
                Config Timer1 = Pwm این دستور مشخص میکنه که شما داری از تایمر 1 برای pwm استفاده میکنی .
                Pwm = 8 این هم مشخص میکنه که pwm 8 بیتی باشه که دو عدد دیگه هم میتونیم بذاریم 9 - 10 که اگه 8 باشه تایمر تا ff واگه 9 باشه تا1ff و اگه 10 باشه تا 3ff میشمره.

                Compare A Pwm = Clear Up , Compare B Pwm = Clear Down
                وقتی ما از pwm استفاده میکنیم پایه های oc1a , oc1b به عنوان خروجی pwm هستش.
                که اگه ما Clear Up رو به کار ببریمpwm به صورت invert در خروجی های oc1a , oc1b ظاهر میشود.
                و اگه Clear Down بگذاریم pwm به صورت non-invert در خروجی های oc1a , oc1b ظاهر میشود.
                و برای تولید pwm باید داخل رجیسترهای آن مقداری رو پر کنید که این کار توسط Pwm1a = 100-Pwm1b = 200 انجام میشود.
                www.icesi.ir

                دیدگاه


                  #9
                  پاسخ : مشکل در کنترل آنلاین سرعت روشن خاموش شدن LED

                  سلام
                  شما گفتی که از INT0 و INT1 استفاده کردی و مشکلت حل شد. ولی در برنامه ای که فرستادی از INT0 و INT1 استفاده نشده. برنامه ای که فرستادی برنامه دیگر است؟
                  در مورد مشکلت در برنامه فرستاده شده در درجه اول در نحوه استفاده از دستور Toggle اشتباه شده. جالب اینکه من کد شما رو کامپایل کردم ولی کامپایلر error نداد چرا که در مستندات خود بسکام گفته که دستور فوق بر روی یک بیت عمل می کنه یا یک pin . شما هم همینکارو بکن. یعنی اگر می خواهی از 8 تا pin پورت b استفاده کنی 8 بار از دستور toggle استفاده کن یا می تونی 8 بار دستور Bit= Not Bit بکار ببری.

                  دیدگاه

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