آموزش تایمر در آردوینو

  •   شما اینجا هستید :
  •   جمعه, ۱۹ مرداد ۱۳۹۷
  •   آموزش, بلاگ, سخت‌افزار
  •   محمد مسعود ساکی زادی
  •   ۱ دیدگاه
  •   652
  • در آردوینو ما از یک‌زبان سطح بالا استفاده می‌کنیم زیاد به جزئیات دستورات توجه نمی‌کنیم. برای مثال اگر تابه‌حال در آردوینو دستورات tone, delay و. را استفاده کرده باشید احتمالاً اطلاع ندارید که این دستورات از تایمرهای میکروکنترلر استفاده می‌کنند.

    تایمر در آردوینو چیست و چه کاربردی دارد؟

    تایمر در آردوینو یک بخش سخت‌افزاری است که وظیفه‌ی آن همان‌گونه که از اسم آن پیداست اندازه‌گیری زمان می باشد.

    انواع تایمر در آردوینو

    در آردوینو Uno که دارای هسته‌ی ATmega328 به‌عنوان میکروکنترلر است، ۳ عدد تایمر/کانتر وجود دارد. Timer0 و Timer1 و Timer2.

    Timer0 و Timer2 تایمر/کانتر هایی ۸  بیتی هستند و می‌توانند تا ۲۵۵ را بشمارند.

    و تایمر Timer1 هم یک تایمر/کانتر ۱۲ بیتی به‌حساب می‌آید که توانایی شمارش تا ۶۵۵۳۵ را داراست.

    به‌عنوان نمونه از این تایمر در کتابخانه‌ی سروو موتور استفاده‌شده.

    در سری mega شش عدد تایمر وجود دارد که تایمرهای Timer3, Timer4, Timer5 تایمرهایی ۱۶ بیتی هستند.

    تایمر یک و در سری مگا تایمرهای ۱ و ۳ و ۴ و ۵ تایمرهایی با شمارش بالا هستند و کاربرد زیادی دارند.

    همانند AVR، تمامی این تایمر/کانترها دارای ریجستر های خاص TCNTx، TIMSKx و. هستند که می‌شود با تعیین مقدار آن‌ها را تنظیم کرد، ولی چون ممکن است برای کاربرهای آردوینو خیلی ورود به جزئیات مطلوب نباشد با استفاده از کتابخانه‌ی تایمر در آردوینو ادامه‌ی مطلب را پیش می‌گیریم.

    این کتابخانه را می‌توانید از لینک زیر دریافت کنید:

    ArduinoTimer library

    این کتابخانه فایل‌های سر عنوان زیر را دارد  و اگر تمایل دارید از هرکدام از تایمرها استفاده کنید باید فایل سر عنوان همان کتابخانه را صدا بزنید.

     

    از این کتابخانه می‌توانید به‌عنوان شمارنده یا تایمر با کمک تابع‌های زیر استفاده کنید.

    تابع‌های کتابخانه‌ی تایمر در آردوینو:

    initialize/microseconds

    فراخوانی این تابع الزامی هست و ورودی این تابع برحسب میکروثانیه باید نوشته شود.

    کمترین مقدار ورودی تابع ۱ میکروثانیه و بیشترین مقدار آن ۸۳۸۸۴۸۰ میکروثانیه است که نشان از رزولوشن بالا در مقداردهی این کتابخانه است.

    مثال:

     

    setPeriod/microseconds

    با کمک این تابع می‌توانید سیکل‌های متفاوتی را از زمان برای برنامه مشخص کنید.

    مثلاً دوره زمانی ۳ ثانیه برای شمارش در تایمر یک به این شکل تعریف می‌شود:

     

    stop()

    برای توقف شمارش استفاده می‌شود:

     

    resume()

    مثلاً در برنامه می‌خواهیم که مدت‌زمان خاصی شمارش انجام نشود، در این زمان از تابع Stop استفاده می‌کنیم؛ و پس از گذشت چند خط از برنامه، تمایل داریم که شمارش دوباره از سر گرفته شود، در این زمان از تابع resume استفاده می‌کنیم.

     

    این تابع مقدار شمارنده رو صفر نمی‌کند و مقدار شمارش‌شده را ادامه می‌دهد.

    restart()

    این تابع برخلاف resume مقدار شمارش‌شده را صفر می‌کند و مجدداً شمارش را انجام می‌دهد.

     

    pwm/pin, val

    با این تابع pwm برای پایه‌ی موردنظر کانفیگ می‌شود.

    pinپایه‌ای که قراراست سیگنال PWM روی آن قرار بگیرد.

    valمقدار duty cycle را مشخص می‌کند. همانند آموزش PWM و تابع analogWrite، مقدار ۰ تا ۱۰۲۳ می‌گیرد.

    مثال:

     

    setPwmDuty/pin, val

    pinپایه‌ای که قراراست سیگنال PWM روی آن قرار بگیرد.

    valمقدار duty cycle را مشخص می‌کند. همانند آموزش PWM و تابع analogWrite، مقدار ۰ تا ۱۰۲۳ می‌گیرد.

     

    disablePwm/pin

    اگر از تابع‌های setPwmDuty و pwm استفاده کردید می‌توانید توسط این تابع، pwm را غیرفعال کنید و در این حالت پایه به حالت نرمال ورودی/خروجی برمی‌گردد.

    attachInterrupt/function

    در این تابع می‌توانیم از وقفه استفاده کنیم.

    به این شکل که تابع وقفه‌ای که برای عمل سرریز شدن تایمر نوشتیم را به برنامه معرفی می‌کنیم تا اجرا شود.

     

    detachInterrupt

    این تابع هم برای غیرفعال کردن attachInterrupt استفاده می‌شود.


  • 1 Star2 Stars3 Stars4 Stars5 Stars (3 رای, متوسط: 5٫00 از 5)
    Loading...

  • قالب ایرانی تم روید
    پک کامل UI
    
      خبرنامه رویدکت
    باعضویت در خبرنامه رویدکت به دنیای اندروید متصل بمانید. برای عضویت اینجا کلیک کنید
      نویسنده
  • محمد مسعود ساکی زادی
  • در حال نویسندگی با عشق و علاقه در رویدکت
  • 1
    دیدگاه بگذارید

    avatar
    1 Comment threads
    0 Thread replies
    0 Followers
     
    Most reacted comment
    Hottest comment thread
    1 Comment authors
    علی Recent comment authors
      Subscribe  
    Notify of
    علی
    مهمان
    علی

    سلام.. من تو ی برنامه خیلی گیر افتادم و نمیدونم طور حل کنم: من میخوام بعد از برقرار شدن یک شرط بعد از مثلا یک ثانیه یک led روشن بشود..اما بدون استفاده از دستور delay ..تقریبا مثل این : }(if (p==HIGH یک تاخیر یک ثانیه ای بجز delay ;(digitalWrite(led,HIGH { فقط اون قسمت تاخیر مشکل دارم..لطفا کمک کنید خیلی کارم گیره😭

    جستجو در بین مطالب بلاگ



    تبلیغات ویژه

    سورس فروشگاه خواروبار


  • سیستم ویژه پشتیبانی رویدکت پاسخگوی شبانه روزی تمامی مشکلات و سوالات شما کاربر گرامی می‌باشد، پاسخگویی 24 ساعته از طریق تیکت، پیام کوتاه و... ( Support.Roidket.com )
  • کسب و کار رویدکت در مرکز توسعه تجارت الکترونیکی وزارت صنعت، معدن و تجارت شناسایی شده و دارای نماد اعتماد الکترونیکی می باشد. برای تایید صلاحیت بر روی نماد ها کلیک کنید.
    اعتبار ما، اعتماد شما
  • logo-samandehi