.تعمیـــرکاران کیان ست (kiansat.kim)تابع قوانین -جمهموری-اسلامی ایران میباشد و ارسال هر گونه مطلب سیاسی،مذهبی،غیراخلاقی و خرید و فروش متعلقات ماه-واره و دیگر موارد مجرمانه ممنوع میباشد وبا کاربران خاطی به شدت برخورد میگردد انجمن فقط تعمیرات لوازم الکترونیک میباشد...













سلام مهمان گرامی؛
به کیان ست خوش آمدید برای مشاهده انجمن با امکانات کامل می بايست از طريق این لینک عضو شوید.

http://teranzit.pw/uploads/14469017281.png
پیام خصوصی به مدیریت کل سایت ........... صفحه توضیحات و شرایط گروه ویژه ........... ...........
ارتباط تلگرامی با مدیریت سایت ................. ایدی تلگرام suportripair@ .................
نمایش نتایج: از شماره 1 تا 1 , از مجموع 1

موضوع: آموزش اندازه گیری طول پالس ورودی با استفاده از اینتراپت و تایمر میکرو و نمایش روی LCD

  1. #1


    تاریخ عضویت
    Oct 2012
    محل سکونت
    Mashhad
    نوشته ها
    6
    تشکر ها
    3
    17 سپاس از6 پست

    آموزش اندازه گیری طول پالس ورودی با استفاده از اینتراپت و تایمر میکرو و نمایش روی LCD

    پالس ورودي به ميكرو دارای یك سطح بالا رونده و یك سطح پایین رونده است ، وقتی پالس بالا میيرود تایمر روشن ميشود و وقتی پالس پایین میيرود، آنرا خاموش ميکنیم ، در نتيجه مي توانيم زمان ناحیه مثبت را اندازه بگیریم . براي اینکار میشود از پایه های وقفه استفاده کرد.
    در برنامه بالا پایه
    int0 برای پالس با لبه ی پایین رونده و پایه int1 برای پالس با لبه ی بالا رونده برنامه ریزی شده ، این دو پایه به هم متصل شده و پالس ورودی به آنها اعمال میشود ، هنگامی که پالس از سطح صفر به یک میرود (بالا رونده) وقفه ی int1 فعال شده و به زیر برنامه ان یعنیE پرش میشود ، در آنجا تایمر صفر شروع به کار میکند ، هنگامی که پالس از سطح یک به صفر میرود ، وقفه ی int1 فعال میشود و به زیر برنامه اش یعنیW پرش میشود ، آنجا هم تایمر متوقف شده و مقدار شمرده شده در متغیر c ریخته میشود و c در حلقه do-loop روی LCD نمايش داده ميشود.



    کد:
    $regfile = "m16def.dat"
    $crystal = 8000000
    Config Lcd = 16 * 2
    Config Lcdpin = Pin , Db4 = Pinc.0 , Db5 = Pinc.1 , Db6 = Pinc.2 , Db7 = Pinc.3 , E = Pinc.4 , Rs = Pinc.5
    Config Timer0 = Timer , Prescale = 1
    Config Int0 = Falling
    Config Int1 = Rising
    Enable Interrupts
    Enable Int0
    Enable Int1
    Enable Ovf0
    On Ovf0 Q
    On Int0 W
    On Int1 E
    Dim A As Byte , B As Long , C As Long
    Cursor Off
    Do
    Locate 1 , 1 : Lcd "t= " ; C ; " us  "
    Loop
    End
    Q:
    Incr B
    Return
    W:
    Stop Timer0
    B = B * 16 : C = B : B = 0
    Return
    E:
    Start Timer0
    Return
    نحوه کار تایمر ها :
    میکرو mega16 دارای 3 تایمر است ، دو تایمر هشت بیتی 0 و 2 که میتوانند از صفر تا 255 بشمارند و تایمر شانزده بیتی 1 که میتواند تا 65565 شمارش نماید .
    تایمر ها با دستور زیر راه اندازی میشوند :
    Config Timerx = Timer , Prescale =y
    x شماره تایمر است که میتواند 0 یا 1 یا 2 باشد و y مقدا رPrescaleاست که میتواند 1,8,64,256 و 1024 باشد . Prescale مشخص کننده فرکانس کار تایمر است و به نوعی مشخص میکند که مثلا شمارش از صفر تا 255 برای تایمر 0 چقدر زمان ببرد
    با دستورات زیر میتوان وقفه ی تایمر را فعال کرد :
    Enable Interrupts
    Enable Ovfx
    On Ovfx Q
    x شماره تایمر است و q برچسبی است که تایمر هنگام سرریز شدن به آن پرش میکند ، شمردن تا حداکثر مقدار را سرریز شدن میگویند ، مثلا حداکثر مقدار برای تایمر 0 برابر 255 است .
    برگشت از زیر برنامه با دستور return انجام میشود .
    با توجه به موارد بالا کمترین و بیشترین زمانی که میتوان با تایمر های مختلف ساخت به شرح زیر است ( با کمترین و بیشترین کریستال و Prescale
    تایمر صفر : بیشترین 262144 میلی ثانیه ، کمترین 16 میکرو ثانیه
    تایمر دو : مطابق بالا
    تایمر یک : بیشترین :67.108864 ثانیه ، کمترین 4096 میکرو ثانیه
    در این پروژه ما به زمان های خیلی کم نیاز داریم چون استب بالای میخواهیم ، بنابراین باید از تایمر 0 یا دو استفاده کنیم
    برای داشتن استپ بالا ، اولین پیشنهاد استفاده از کریستال 16 مگاهرتز و پرسکلیر 1 است ، با این کار تایمر 16 میکرو ثانیه میشمارد و ما بیشترین استب را خواهیم داشت (62 استپ (
    در برنامه بالا 16 میکرو ثانیه طول میکشد تا تایمر 0 از 0 تا 255 بشمارد ، هنگامی که رقم شمرده شده به 255 رسید ، به زیر برنامه رجوع میشود و در انجا یک رقم به b افزوده میشود . این کار تاوقتی که لبه یک به صفر نرسیده ادامه مییابد .
    بعد از رسیدن لبه ی مذکور به زیر برنامه w پرش میشود ، هر رقم b یعنی 16 میکرو ثانیه ، پس ما باید b را در 16 ضرب کنیم تا زمان اصلی بدست بیاید .

    دوستانی که علاقه مند به هر قسمت از کاربردهای میکرو کنرلر یا آموزش اون هستند اعلام کنند تا در حد توان آموزشش رو قرار بدیم
    ویرایش توسط soonaeid : 1st November 2012 در ساعت 15:03

  2. نمایش تمام تشکر های soonaeid در این پست:

    مهدی چیت بند (1st November 2012)

اطلاعات موضوع

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

در حال حاضر 1 کاربر در حال مشاهده این موضوع است. (0 کاربران و 1 مهمان ها)

کلمات کلیدی این موضوع

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

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


Copyright ©2000 - 2013, Jelsoft Enterprises Ltd کیــــــــــان ستـــــــــــ ...® اولین و بزرگترین سایت فوق تخصصی الکترونیک در ایران



Cultural Forum | Study at Malaysian University