اطلاعیه

Collapse
No announcement yet.

تاخیر میکروثانیه به جای میلی ثانیه

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

    تاخیر میکروثانیه به جای میلی ثانیه

    سلام دوستان
    برنامه زیر یک برنامه تغییر زاویه اتش هست که اینجا من دوتا برنامه گذاشتم یکی تاخیر زاویه اتش به اندازه میلی ثانیه ( برنامه اول ) و یکی تاخیر برحسب میکروثانیه . برنامه اول درست کار میکنه و میاد بعد از گذر از صفر سیگنال ac به مقدار a میل ثانیه تاخیر ایجاد میکنه و بعد تریستور رو اتش میکنه . ولی برنامه دوم درست کار نمی کنه و با برنامه اول یکی هستش فقط تنها فرقی که داره اینه که تاخیر رو برحسب میکروثانیه انجام میده . ولی عملا این اتفاق نمی افته و دستور waitus a که باید به اندازه a میکروثانیه تاخیر ایجاد کنه عمل نمیکنه .
    خودم هر کاری که کردم نشد که نشد .

    $regfile = "m32def.dat"
    $crystal = 1000000
    Config Portb.0 = Output
    Portb.0 = 0
    Config Pina.0 = Input 'afzayesh time'
    Config Pina.1 = Input ' kaheshe time'
    Config Int0 = Rising
    Enable Interrupts
    Enable Int0
    On Int0 Triger
    Dim A As Word
    A = 0
    Cursor Off
    Cls : Lcd "time triger " ; A
    Do
    Debounce Pina.0 , 1 , Show1 , Sub
    Debounce Pina.1 , 1 , Show2 , Sub



    Loop
    End

    Triger:
    Waitms A ' takhire baraye atashe thyristor'

    Set Portb.0
    Waitus 100
    Reset Portb.0


    Return


    Show1:
    A = A + 1
    If A > 10 Then A = 10
    Cls : Lcd "time triger " ; A
    Return





    Show2:
    A = A - 1
    If A < 1 Then A = 1
    Cls : Lcd "time triger " ; A
    Return

    برنامه بالا مثل مرد کار میکنه ولی توی خط 22 اونجایی که نوشتم waitms a میاد به اندازه a میلی ثانیه تاخیر ایجاد میکنه . ولی مشکل اینجاست اگه به جای waitms a بنویسم waitus a دیگه میکرو نمیتونه مقدار a رو بخونه و بعد از گذر از صفر توی همون زاویه صفر درجه تریستور رو تریگر میکنه
    اینم برنامه تغییرات برنامه :



    $regfile = "m32def.dat"
    $crystal = 1000000
    Config Portb.0 = Output
    Portb.0 = 0
    Config Pina.0 = Input 'afzayesh time'
    Config Pina.1 = Input ' kaheshe time'
    Config Int0 = Rising
    Enable Interrupts
    Enable Int0
    On Int0 Triger
    Dim A As Word
    A = 0
    Cursor Off
    Cls : Lcd "time triger " ; A
    Do
    Debounce Pina.0 , 1 , Show1 , Sub
    Debounce Pina.1 , 1 , Show2 , Sub



    Loop
    End

    Triger:
    Waitus A ' takhire baraye atashe thyristor'

    Set Portb.0
    Waitus 100
    Reset Portb.0


    Return


    Show1:
    A = A + 100
    If A >= 10000 Then A = 10000
    Cls : Lcd "time triger " ; A
    Return





    Show2:
    A = A - 100
    If A <= 1 Then A = 1
    Cls : Lcd "time triger " ; A
    Return



    انجمن LABVIEW
    http://www.eca.ir/forum2/index.php?board=279.0
    اموزش ميكروكنترلرهاي AVR به زبان ساده
    http://www.eca.ir/forum2/index.php/topic,7070.0.html

    #2
    پاسخ : تاخیر میکروثانیه به جای میلی ثانیه

    سلام دادا.
    تاخیرهای میکرو صحیح نیست. یا باید از کریستال های ساعت استفاده کنی یا با تایمر بنویسی.
    موفق باشی.
    تشکر لازم نیست!

    دیدگاه


      #3
      پاسخ : تاخیر میکروثانیه به جای میلی ثانیه

      سلام
      درست شد مشکل اینجاست که تاخیر waitus رو باید حتما جلوش عدد بزاری و نباید جلوش متغییر بزاری . برای رفع مشکل از یک حلقه doo loop استفاده کردم . خوب دیگه چاره ای نبود . از تایمر هم می تونستم استفاده کنم ولی نیازی نبود .
      انجمن LABVIEW
      http://www.eca.ir/forum2/index.php?board=279.0
      اموزش ميكروكنترلرهاي AVR به زبان ساده
      http://www.eca.ir/forum2/index.php/topic,7070.0.html

      دیدگاه


        #4
        پاسخ : تاخیر میکروثانیه به جای میلی ثانیه

        میتونی بیشتر توضیح بدی گه چی کار کردی ؟
        یعنی با لوپپ تاخیر ساختی ؟
        اگه میشه اون قسمت از برنامتو برای ما هم بزار
        ممنون

        دیدگاه


          #5
          پاسخ : تاخیر میکروثانیه به جای میلی ثانیه

          سلام دادا.
          یعنی با لوپپ تاخیر ساختی ؟
          کاری نداره. یه حلقه مینویسی و یه کار توش انجام میدی. بهرحال یه زمانی صرص این حلقه میشه!
          تشکر لازم نیست!

          دیدگاه

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