اطلاعیه

Collapse
No announcement yet.

اندازه گیری فرکانس

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

    اندازه گیری فرکانس

    سلام
    من می خوام با میکرو و با زبان بسکام فرکانس یک پالس مربعی رو اندازه بگیرم(در حد hz)
    تو سایت هم مطلب بود و من هم طبق اون ها برنامه رو نوشتم جواب نگرفتم
    $regfile = "m8def.dat"
    $crystal = 1000000
    '-------------------------------------------------------------------------------
    Config Timer1 = Timer , Prescale = 64
    '-------------------------------------------------------------------------------
    Config Int0 = Rising
    '--------------------------------------------------------------------------------
    Config Lcd = 16 * 2
    Config Lcdpin = Pin , Rs = Pinc.4 , E = Pinc.5 , Db4 = Pinc.3 , Db5 = Pinc.2 , Db6 = Pinc.1 , Db7 = Pinc.0
    Cursor Off
    '-------------------------------------------------------------------------------
    Dim A As Byte
    Dim F As Byte
    '-------------------------------------------------------------------------------4
    Enable Interrupts
    Enable Timer1
    Timer1 = 49911
    On Int0 Pulse
    On Timer1 Show_lcd
    start timer1
    A = 0
    Do
    Loop
    End
    '-------------------------------------------------------------------------------
    Pulse:
    Disable Int0
    Start Timer1
    Incr A
    Enable Int0
    Return
    '-------------------------------------------------------------------------------
    Show_lcd:
    Timer1 = 49911
    Cls
    Lcd A
    Wait 1
    A = 0
    Return
    اما همش عدد 0 رو برمی گردونه
    با سپاس

    #2
    پاسخ : اندازه گیری فرکانس

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

    $regfile = "m8def.dat"
    $crystal = 1000000
    '-------------------------------------------------------------------------------
    Config Timer1 = Timer , Prescale = 64
    '-------------------------------------------------------------------------------
    Config Int0 = Rising
    '--------------------------------------------------------------------------------
    Config Lcd = 16 * 2
    Config Lcdpin = Pin , Rs = Pinc.4 , E = Pinc.5 , Db4 = Pinc.3 , Db5 = Pinc.2 , Db6 = Pinc.1 , Db7 = Pinc.0
    Cursor Off
    '-------------------------------------------------------------------------------
    Dim A As single
    Dim F As Byte
    '-------------------------------------------------------------------------------4
    Enable Interrupts
    Enable Timer1
    Enable Int0
    Timer1 = 49911
    On Int0 Pulse
    On Timer1 Show_lcd
    start timer1
    A = 0
    Do
    Loop
    End
    '-------------------------------------------------------------------------------
    Pulse:
    Start Timer1
    Incr A
    Return
    '-------------------------------------------------------------------------------
    Show_lcd:
    Timer1 = 49911
    Locate 1 , 1
    Lcd Fusing(a , "###.&&&&quot
    A = 0
    Return

    خوب اگر دقت کنبد :
    1-شما اصلا اینتراپت 0 رو فعال نکرده بودید
    2-هیچ وقت در روتین وقفه ( هر وقفه ای ) تاخیر نابجا وارد نکنید البته شما این کار رو به خاطر از بین بردن لرزش
    نمایشگر کرده بودید ولی سعی کنید این مشکل رو جور دیگه ای حل کنید مثلا با استفاده از دستور locate
    3-نیازی نیست که هنگام ورود به یک وقفه اون وقفه رو غیر فعال کنید چرا که خود کامپایلر کد هگز رو جوری تنظیم کرده که به وحض ورود به یک وقفه، وقفه سراسری غیر فعال بشه
    یک چیز دیگه اینکه این برنامه شما برای فرکانس های پایین جواب میده اما برای فرکانس های بالا تر به خاطر اینکه احتمال داره بعضی از پالسهای بالا رونده رو به خاطر اجرای روتین وقفه از دست بدید جوابتون درست درنمیاد از این رو بهتره که از کانتر استفاده کنید که به وقفه و روتینش نیازی نداره !

    دیدگاه


      #3
      پاسخ : اندازه گیری فرکانس

      سلام
      ممنون از پاسختون
      من هم فرکانس های کمتر از50 هرتز رو می خوام اندازه گیری کنم
      ولی چندتا سئوال داشتم
      1) شما گفتید که : نیازی نیست که هنگام ورود به یک وقفه اون وقفه رو غیر فعال کنید چرا که خود کامپایلر کد هگز رو جوری تنظیم کرده که به وحض ورود به یک وقفه، وقفه سراسری غیر فعال بشه
      یعنی اصلا نیازی به این کار نیست؟
      2)من اینتراپت سراسری رو فعال کردم بازه باید تک تک اینتراپت ها رو فعال کنم؟
      3)فزکانس من در حد 20 هرتر و حتا کمتر هست روش بهتر از این هم برا اندازه گیری فرکانس این پالس هست؟

      دیدگاه


        #4
        پاسخ : اندازه گیری فرکانس

        1) شما گفتید که : نیازی نیست که هنگام ورود به یک وقفه اون وقفه رو غیر فعال کنید چرا که خود کامپایلر کد هگز رو جوری تنظیم کرده که به وحض ورود به یک وقفه، وقفه سراسری غیر فعال بشه
        یعنی اصلا نیازی به این کار نیست؟ حداقل در مورد این کامپایلر ، خیر

        2)من اینتراپت سراسری رو فعال کردم بازه باید تک تک اینتراپت ها رو فعال کنم؟ بله

        3)فزکانس من در حد 20 هرتر و حتا کمتر هست روش بهتر از این هم برا اندازه گیری فرکانس این پالس هست؟ به نظر من همین جواب کار شما رو میده فقط حتما در عمل پایه int0 رو با یک مقاومت 10k اهم پول دان کنید

        دیدگاه

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