اطلاعیه

Collapse
No announcement yet.

تغییر فرکانس

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

    تغییر فرکانس

    سلام خسته نباشید
    با کد زیر با کریستال 4 مگ داخلی میشه یک سیگنال با فرکانس 40 کیلو هرتز به صورت مداوم روی portb.0 درست کرد.(هم عملی تست کردم هم توی نرم افزار)
    reset portb.0
    do
    'Toggle Portb.0
    'Waitus 11
    'Toggle Portb.0
    'Waitus 11
    loop
    حالا مشکل اینجاست که مثلا میخام تعداد پالس ها را محدود کنم به 20000 پالس (یعنی 20000 پالس بفرسته روی پین مورد نظر و بعد یک تایم 4 چهار ثانیه توقف کنه بعد دوباره شروع کنه.پس کد به صورت زیر میشه
    do
    For A = 0 To 20000
    Toggle Portb.0
    Waitus 11
    Toggle Portb.0
    Waitus 11
    Next
    wait 4
    loop
    ولی فرکانس به هم میخوره و دیگه 40 کیلو هرتز نیست (حدود 80 هرتز ایناست)
    دلیلش چیه و چطور برطرفش کنم؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟
    در ضمن این کار رو با دستورPulseout هم انجام دادم ..باز همینطور

    #2
    پاسخ : تغییر فرکانس

    اگر فرکانس دقیق نیاز نیست یه کریستال 16, مگاهرتز تا،می بزار و با سعی و خطا این کار رو انجام بده تو این برنامه خودت چون از for استفاده کردی یه مقدار پردازش رو بیشتر کردی که باعث شده فرکانس بیاد پایین ولی تا 80 هرتز نباید میومد پایین

    دیدگاه


      #3
      پاسخ : تغییر فرکانس

      سلام
      نیاز نیست پین B.0 رو 2 بار معکوس کنید. یک بار کافیه.
      و برای بالا بردن فرکانس تاخیر 11 میکرو ثانیه رو کم کنید که با اینکار فرکانس حداکثر میشه 11 برابر.
      یا کلا تاخیر رو بردارید.
      شبنم از سعی به سرچشمه خورشید رسید صائب تبریزی

      دیدگاه


        #4
        پاسخ : تغییر فرکانس

        نوشته اصلی توسط 6759
        سلام خسته نباشید
        با کد زیر با کریستال 4 مگ داخلی میشه یک سیگنال با فرکانس 40 کیلو هرتز به صورت مداوم روی portb.0 درست کرد.(هم عملی تست کردم هم توی نرم افزار)
        reset portb.0
        do
        'Toggle Portb.0
        'Waitus 11
        'Toggle Portb.0
        'Waitus 11
        loop
        حالا مشکل اینجاست که مثلا میخام تعداد پالس ها را محدود کنم به 20000 پالس (یعنی 20000 پالس بفرسته روی پین مورد نظر و بعد یک تایم 4 چهار ثانیه توقف کنه بعد دوباره شروع کنه.پس کد به صورت زیر میشه
        do
        For A = 0 To 20000
        Toggle Portb.0
        Waitus 11
        Toggle Portb.0
        Waitus 11
        Next
        wait 4
        loop
        ولی فرکانس به هم میخوره و دیگه 40 کیلو هرتز نیست (حدود 80 هرتز ایناست)
        دلیلش چیه و چطور برطرفش کنم؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟
        در ضمن این کار رو با دستورPulseout هم انجام دادم ..باز همینطور
        به خاطر استفاده از حلقه for چند تا کلاک هدر میره. یعنی به اون فرکانس مد نظر نخواهید رسید. البته اینکه تا 80 هرتز اومده پایین مشکوکه !!
        پیشنهاد من استفاده از تایمر هستش.
        ---------
        .
        .
        ...........

        دیدگاه


          #5
          پاسخ : تغییر فرکانس

          سلام خسته نباشید
          ممنون بابت پاسخ ها
          اگر b.0 هم یک بار معکوس کنی بازم همین فرکانس رو میده.
          اگر تایم رو هم 1 waitus کنم فکانسم باز به 40 کیلو نمیرسه.
          من میخوام بدون استفاده از تایمر این فرکانس رو بگیرم.
          استفاده ازکریستال خارجی فرقی رو این قضیه داره؟؟؟؟؟

          با تشکر
          میلاد با سعادت امام رضا و دهه ی کرامت مبارک

          دیدگاه

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