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

موضوع: فرکانس متر با avr

  1. #1
    کاربر دائمی mj3747 آواتار ها
    تاریخ عضویت
    Sep 2007
    نام
    مجید
    نوشته ها
    429
    تشکر
    567
    تشکر شده 570 بار در 240 پست

    پیش فرض فرکانس متر با avr

    دوستان سلام

    میخوام با AVR یه فرکانس متر بسازم اونم به زبان C، اومدم با تایمر 2 یک ثانیه رو درست کردم بعد قراره توی روتین وقفه تایمر 2 با تایمر 1 تعداد پالس ها رو از پایه T1 بخونم و نمایش بدم. اما...
    اما اینکه نمیدونم تایمر 1 رو چطوری بخونم و نمایش بدم و اینکه اگه بشه اون یک ثانیه رو با تایمر صفر درست کنم و کریستال 32.768 حذف بشه خیلی بهتر میشه.
    لطفا راهنمایی کنین.
    مرسی

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

  3. #2
    کاربر علاقه مند 12qwaszx آواتار ها
    تاریخ عضویت
    Mar 2012
    نام
    علی
    نوشته ها
    31
    تشکر
    50
    تشکر شده 10 بار در 8 پست

    پیش فرض

    به این هم فکر کن اگر تایمر/کانتر یک سرریز شد باید برای آن هم زیر برنامه ای بگذاری تا به یک متغیر مثلا x یک واحد اضافه کند و در نهایت بعد از اتمام یک ثانیه فرکانس شما خواهد شد
    f=x*65536
    + مقدار موجود در رجیستر 16 بیتی کانتر/تایمر 1
    (رجیستر تایمر یک یک رجیستر 16 بیتی است متشکل از دو رجیستر 8 بیتی A و B است)

    من به شما توصیه می کنم به جای این کار تقریبا زیاد کاری، بیا یک تایمر برای یک ثانیه ست کن مثلا همین تایمر دو که برای یک ثانیه تنظیم کرده اید یا هر تایمر دیگری در این مورد دستت باز است
    و یک اینترانت خارجی مثلا int0 یا int1 را برای شمارش ست کن! حالا در زیربرنامه اینتراپت خارجی یک متغیر گردن کلفت بگذار!
    در نهایت یک ثانیه که تمام شد فرکانس می شود همان متغیر

  4. #3
    مدیر کل انجمن ها morteza_rk آواتار ها
    تاریخ عضویت
    Apr 2009
    نام
    مرتضی رحیمی کردمحله
    نوشته ها
    2,071
    تشکر
    2,376
    تشکر شده 2,899 بار در 1,263 پست

    پیش فرض

    سلام

    روش های زیادی برای ساختن فرکانس متر وجود داره. در این روشی که شما داری استفاده می کنی پیشنهاد 12qwaszx خیلی خیلی بهتر جواب میده!

    برای ساختن فرکانس 1 ثانیه ی دقیق بهترین گزینه همون تایمر 2 بهمراه کریستال ساعت هست که شما استفاده کردی. برای ساختن زمان یک ثانیه ، اونم با تایمر صفر محدودیت وجود داره و زمان بدست اومده معمولا به هیچ عنوان دقت تایمر 2 بهمراه کریستال ساعت رو نداره!
    .
    اَللّهُمَ صَلّ عَلی مُحَمَّد وَ آلِ مُحَمَّد وَ عَجّل الفَرَجَهُم


    وبلاگ شخصی من

  5. #4
    کاربر دائمی mj3747 آواتار ها
    تاریخ عضویت
    Sep 2007
    نام
    مجید
    نوشته ها
    429
    تشکر
    567
    تشکر شده 570 بار در 240 پست

    پیش فرض

    دوستان ممنون

    بجه ها من این کارا رو انجام دادم اما دقیقا نمیدونم توی روتین وقفه خارجی و همینطور وقفه تایمر دو چیکار کنم، یه کارایی کردم اما یا متغیرم همینطور زیاد میشه یا فقط صفر و یک میشه.

    بازم راهنمایی، کچلم کرده

    مرسی بچه ها

  6. #5
    کاربر علاقه مند 12qwaszx آواتار ها
    تاریخ عضویت
    Mar 2012
    نام
    علی
    نوشته ها
    31
    تشکر
    50
    تشکر شده 10 بار در 8 پست

    پیش فرض

    در اول کار باید مقدار متغیرها را 0 بگذاری

    فرض کن در اینتراپت خارجی گذاشتی یک واحد به متغیر x اضافه کن

    باید عملیات اصلی را در زیر برنامه تایمر 2 بنویسی:
    f=x
    x=0
    سپس روی ال سی دی باید f را نشان بدهی

    یعنی در هر یک ثانیه متغیر x را در f میریزی و سریعا متغیر x ریست می شود تا برای خواندن مقدار فرکانس در یک ثانیه بعد سریعا آماده شود و سپس روی lcd نشان داده میشود

  7. #6
    کاربر علاقه مند 12qwaszx آواتار ها
    تاریخ عضویت
    Mar 2012
    نام
    علی
    نوشته ها
    31
    تشکر
    50
    تشکر شده 10 بار در 8 پست

    پیش فرض

    در ضمن با تایمر 0 و یا هر تایمر دیگری می توانی زمان تقریبا یک ثانیه را بسازی اما اینکه تایمر دو با کریستال 32768 استفاده می کنند چون تایمر دو را می توان در مد async راه اندازی کرد یعنی از کریستال 32768 می تواند استفاده کند و با prescale=128 براحتی زمان دقیق یک ثانیه میسازی. اما برای تایمر 0 که مانند تایمر دو 8 بیتی است نمی توان از کریستال 32768 استفاده کرد و باید مثلا از کریستال 1Mhz اسفاده کرد:

    =1MHz/1Hz
    1Mhz
    1Mhz/1024=
    977
    میبینی حتی با کلاک یک مگاهرتز نمی توانی عدد 977 را در 256 جای دهی! بنابراین در زیر برنامه مربوطه باید یک کانتر دستی بسازی که هر وقت 3.8 بار (تقریبا 4 بار) شد یعنی زمان مثلا یک ثانیه!
    ولی با تایمر یک:
    عدد 977 در رنج 65535 است بنابراین با یک پرش می توانی زمان تقریبا یک ثانیه را ایجاد کرد:
    در زیر برنامه تایمر یک میگذاری:
    تایمر یک را استاپ کن
    65535-977 را در تایمر یک بگذار (حواست باشد رجیستر تایمر 1 دو رجیستر 8 بیتی است لذا باید عدد مربوطه را تبدیل کنی و در هر رجیسترهای A و B مربوطه بگذاری)
    تایمر را استارت کن

    البته یادت باشد برای اینکه تایمر یک در اینجا بتواند چنین کاری کند باید یکبار چنین کانفیگی درونش بگذاری
    مثلا یک دکمه استارت روی فرکانس مترت گذاشته ای که در تابع main کلید را اسکن می کند.
    اگر کلید زدی باید بگویی:
    تایمر یک را استاپ کن
    65535-977 را در تایمر یک بگذار
    تایمر را استارت کن

    سپس با شروع کار تایمر یک خودکار خودش هر یک ثانیه به زیربرنامه مربوطه می پرد.

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

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