NOTICE توجه: این یک موضوع قدیمی است که آخرین پست ارسالی آن مربوط به 3411 روز قبل است . لطفا فقط پاسخ ها ، سوالات و درخواست های 100 درصد مرتبط را به آن ارسال کنید و برای درخواست ها و سوالات جدید موضوع جدیدی را ایجاد کنید
نمایش نتایج: از 1 به 2 از 2

موضوع: اشکال در برنامه فرکانس متر با ميکرو در بسکام

  1. #1
    کاربر علاقه مند
    تاریخ عضویت
    Sep 2014
    نوشته ها
    26
    تشکر
    15
    تشکر شده 4 بار در 4 پست

    پیش فرض اشکال در برنامه فرکانس متر با ميکرو در بسکام

    سلام
    برنامه زير برنامه يک فرکانس متر با ميکرو در بسکام است
    طرز کارشم اينطوريه که با تايمر 0 زمان 1 ثانيه ايجا ميشه و کانتر 1 در اين زمان تعداد پالسها رو ميشماره و فرکانس به دست مياد.
    من توي اين برنامه يه اشکالي داشتم
    متغير I چي رو نشون ميده؟؟؟ وعلت دستور I>30 چيه ؟؟
    يه سوال ديگه اينکه زمان 1 ثانيه کجا ايجاد شده ؟
    $regfile = "m32def.dat"
    $crystal = 8000000
    Config Lcd = 16 * 2
    Config Lcdpin = Pin , Rs = Porta.0 , E = Porta.1 , Db4 = Porta.2 , Db5 = _
    Porta.3 , Db6 = Porta.4 , Db7 = Porta.5
    Cursor Off
    Config Timer1 = Counter , Edge = Rising
    Ddrb.1 = 0
    Portb.1 = 1
    Config Timer0 = Timer , Prescale = 1024
    Enable Timer1
    Enable Timer0
    Enable Interrupts
    On Ovf1 Pulse_counter
    On Ovf0 Yazdkit
    Dim A As Long , B As Byte , I As Long
    B = 0
    Start Timer0
    Do
    Loop
    End
    Yazdkit:
    Incr I
    If I > 30 Then
    Stop Timer0
    Cls
    Home
    A = B * 65536
    A = A + Counter1
    Lcd "frequency:"
    Locate 2 , 1
    Lcd A ; " HZ"
    B = 0
    I = 0
    Counter1 = 0
    Start Timer0
    End If
    Return
    Pulse_counter:
    Incr B
    Counter1 = 0
    Return
    ممنون ميشم راهنمايي کنيد.

  2. # ADS
    Circuit advertisement
    تاریخ عضویت
    Always
    نوشته ها
    Many
     

  3. #2
    کاربر علاقه مند
    تاریخ عضویت
    Jan 2011
    نوشته ها
    26
    تشکر
    147
    تشکر شده 29 بار در 12 پست

    پیش فرض

    بهتره یکبار مسئله را برای خودتان حل کنید و بعد جواب را ببینید.
    فرکانس ورودی به تايمر 0 برابر با چقدره؟ یعنی تایمر 0 به ازای هر چند میکرو ثانیه یک واحد افزایش پیدا میکنه؟
    پاسخ : 8Mhz/1024=7,812.5Hz كه با تبدیل 7,812.5Hz به زمان داریم : 0.000128 یا 128 میکرو ثانیه.
    از طرفی در چه زمانی وقفه تایمر صدا زده میشه؟
    پاسخ : زمانی که به حداکثر خودش برسه یعنی 255
    چه مدت زمان طول میکشه تا تایمر 0 یکبار سرریز کنه و وارد روتین وقفه بشه؟
    پاسخ : 0.000128*256=0.032768 ثانیه یا 32.768 میلی ثانیه
    برای تولید زمان یک ثانیه با تایمر 0 چند بار باید سرریز رخ بده؟
    پاسخ : 1 ثانیه تقسیم بر 32.768 میلی ثانیه میشود 30.517578125
    بنابراین حداقل 30 مرتبه باید سرریز رخ بده تا به مدت زمان یک ثانیه برسیم.
    البته هنوز این زمان دقیق نیست و ممکنه کمتر یا بیشتر از 1 ثانیه بشه که برای اندازه گیری دقیق باید زمان اجرای دستورات محاسبه بشه و هرچی آخرش موند برای بار آخر در تایمر قرار داده بشه تا وقفه دقیقی شکل بگیره.
    به عبارتی باید زمان اجرای دستور Incr I و If I > 30 Then ضربدر 30 بار محاسبه بشه و در بار 30 ام یا 31 ام که قراره تایمر مجددا با مقدار 0 شروع به کار کنه در روتین وقفه (Yazdkit:) با مقدار 255 منهای اون عددی که بدست آوردیم راه اندازی بشه تا به دقت قابل قبولی برسیم.

  4. کاربران : 3 تشکر کرده اند از شما hs_golpa برای ارسال این پست سودمند:


مجوز های ارسال و ویرایش

  • شما نمیتوانید موضوع جدیدی ارسال کنید
  • شما امکان ارسال پاسخ را ندارید
  • شما نمیتوانید فایل پیوست کنید.
  • شما نمیتوانید پست های خود را ویرایش کنید
  •