در قسمت قبل از آموزش تایمر ، به شرح رجیستر‌های تایمر در حد آشنایی و همچنین عمل کرد تایمر پرداختیم. در این آموزش کتابخانه‌‌هایی معرفی خواهیم کرد کار با  Timer1 , Timer3 , Timer4 و Timer5 را بسیار آسان می‌کند و بدون درک زیادی از رجیستر‌ها قادر خواهید بود برنامه‌هایی که نیاز به استفاده از تایمر می‌باشند را بنویسید. این مجموعه ، اولین مجموعه‌ای از تایمر‌هایی ۱۶ بیتی می‌باشد که برای اولین بار توسط تیم تخصصی دیجی اسپارک بر روی وب قرار گرفته است.در ادامه با مرجع تخصصی آردوینو ، دیجی اسپارک همراه باشید.

در قسمت قبل آموختیم که تایمر یک المان در خارج از cpu می‌باشد که وظیفه‌ی آن شمارش زمان ‌می‌باشد.در صورتی که با تایمر آشنایی ندارید ، پیشنهاد می‌کنیم آموزش قبلی تایمر را از لینک زیر مطلاعه کنید.

آموزش تایمر آردوینو بخش اول

 

در Arduino‌های سری مگا از ۶  تایمر و ۱۵ عدد خروجی PWM استفاده شده است که به شرح زیر می‌باشند:

  • پین ۴ و ۱۳ که به وسیله Timer0 کنترل می‌شوند
  • پین ۱۱ و ۱۲ به وسیله Timer1 کنترل می‌شوند
  • پین ۹ و ۱۰ در اختیار Timer2 قرار دارند
  • پین ۲ ، ۳ و ۵ در اختیار Timer3 قرار دارند
  • پین ۶ ، ۷ و ۸ به وسیله Timer4 کنترل  می‌شوند
  • پین ۴۶ ، ۴۵ و ۴۵ به وسیله Timer5 کنترل می‌شوند

 

 

 

 در هنگام برنامه‌نویسی برای قسمت تایمر ممکن است در زمانی که از کتابخانه و یا توابع استفاده می‌کنید ممکن است با مشکلاتی از قبیل زیر روبه‌رو شوید :

هنگام استفاده از Timer1 ، در صورتی که از کتابخانه Servo استفاده می‌کنید ، دیگر نمی‌توانید از پین ۹ و ۱۰ به عنوان PWM استفاده کنید. این قضیه در آردوینو‌های سری مگا کمی پیچیده تر می‌باشد. در آردوینو مگا هر تایمر توانایی راه اندازی ۱۲ عدد سروو موتور را دارد. برای راه ندازی ۱۲ سروو موتور اولی از Timer5 استفاده می‌شود (بنابراین از PWM برای پین‌های ۴۴ ، ۴۵ و ۴۶ نمی‌توانید استفاده کنید). برای راه اندازی ۲۴ عدد سروو موتور از Timer1 و Timer5 استفاده می‌شود ( بنابر این نمی‌توانید از PWM برای پین‌های ۱۱ ، ۱۲ ، ۴۴ ، ۴۵ و ۴۶ استفاده کنید) . اگر قصد راه‌اندزی۳۶ عدد سروو موتور را دارید ، آردوینو از Timer1 , Timer3  و Timer5 برای انجام این کار استفاده می‌کند (بنابراین نمی‌توانید از پین‌های ۲ , ۳ , ۵ , ۱۱ , ۱۲ , ۴۴, ۴۵ و ۴۶ به عنوان PWM استفاده کنید). و در آخر اگر می‌خواهید ۴۸ عدد سروو موتور را راه ‌اندازی کنید ، آردوینو برای راه اندازی آن‌ها از تمام تایمر‌های ۱۶ بیتی ( تایمر ۱ ،۳ ، ۴ و ۵) استفاده می‌کند و در این حالت شما تمام پین ‌های PWM را از دست می‌دهید.

 

برنامه نویسی تایمر در Arduino

برای شروع برنامه‌نویسی ابتدا کتابخانه تایمر‌های ۱۶ بیتی را از لینک زیر دانلود کنید.سپس مجموعه کتابخانه‌ها را به نرم‌افزار آردوینو اضافه نمایید. در فایل ضمیمه شده ، ۴ عدد کتابخانه موجود می‌باشد که از کتابخانه Timer1 می‌توان برای برنامه نویسی تایمر شماره ۱ در آردوینوها Uno , nano ,MEGA و… استفاده نمود و از کتابخانه‌های Timer3 , Timer4 ,Timer5 در آردوینوهای سری مگا استفاده می‌شود.

 

 

دانلود کتابخانه تایمرهای ۱۶ بیتی آردوینو (Timer1,Timer3,Timer4 , Timer5)

 

 

توابع کتابخانه

 

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

 

تمام توابع زیر در تایمر ۱، ۳ ، ۴ ، ۵ یکسان می‌باشند.

 

initialize(microseconds)

در هنگام شروع استفاده از تایمر ، این تابع حتما باید در ابتدای کار فراخوانی شود. آرگمانی که به آن می‌دهیم بر حسب میروثانیه می‌باشد و مقدار زمانی که تایمر باید شمارش کند را مشخص می‌کند. به طور پیش فرض مقدار این تابع ۱ ثانیه می‌باشد. کمترین مقدار برای این تابع ۱ میکروثانیه  و بیشترین مقدار برای آن ۸۳۸۸۴۸۰ میکرو ثانیه یا تقریبا ۸٫۳ ثانیه می‌باشد.

برای مثال اگر بخواهیم تایمر شماره ۱ ، ۰٫۵ ثانیه شمارش کند باید همانند قطعه کد زیر عمل کنیم :

 

setPeriod(microseconds)

بعد از اینکه توسط تابع initialize مقدار دوره زمانی نایمر را تعیین کردید ، به  وسیله‌ی این تابع می‌توانید یک دوره زمانی جدید به تایمر معرفی کنید. به عنوان مثال دوره زمانی ۲٫۵ ثانیه را به تایمر معرفی می‌کنیم :

 

 

stop()

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

 

resume()

این تابع  از همان جایی که عمل stop انجام شده است ، عمل شمارش را ادامه می‌دهد ( این تابع مقدار تایمر را صفر نمی‌کند )

 

 

start()

این تابع برای شروع کار دوباره تایمر است.

 

 

restart()

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

 

pwm(pin, duty)

به وسیله این تابع مقدار pwm  برای pin مورد نظر کانفیگ می‌شود. در صورتی که بخواهیم برای اولین بار به یک پین ، pwm اعمال کنیم ، ابتدا باید این تابع را فراخوانی کنیم.

pin : شماره پین مربوط به Timer

duty : مقدار pwm که عددی بین ۰ تا ۱۰۲۳ می‌باشد ( صفر به معنی این که pin همیشه در وضعیت LOW قرار دارد و ۱۰۲۳ به این معنی است که pin همیشه در وضعیت HIGH قرار دارد).

در مثال زیر مقدار duty cycle ، برابر ۵۱۲ می باشد و به پین شماره ۹ اعمال می‌شود.

setPwmDuty(pin, duty)

 

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

disablePwm(pin)

این تابع اعمال pwm را بر روی pin غیر فعال می‌کند و از آن به بعد می‌توان از آن به عنوان ورودی خروجی دیجیتال استفاده شود.

 

 

attachInterrupt(function)

به وسیله‌ی این تابع ، تابع وقفه‌ای که برای عمل سر ریز شدن تایمر نوشتیم را به برنامه معرفی می‌کنیم. به عنوان مثال در قطعه کد زیر تایمر هرگاه مقدارش ۲ ثانیه شود ، تابع callback فراخوانی می‌شود.

detachInterrupt()

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

 

 

پروژه : در برنامه‌ی زیر یک LED که به پین شماره ۱۲ آردوینو متصل  می‌باشد هر ۱ ثانیه یک بار چشمک می‌زند.

 

 

علیرضا قربانی
علیرضا قربانی
علیرضا قربانی هستم دانشجوی مهندسی پزشکی. چیزهای خیلی زیادی رو در دنیا دوست دارم. یک گیک هستم و یشه گفت یک هکر. نه به معنی دزدی پسورد و ایمیل مردم. به معنی عشق به دونستن و عشق به تحقیق درباره خیلی از چیزهایی که می بینم و می‌شنوم. اگر بخوام علاقه‌مندی‌ درجه یکم رو نام ببرم میتونم بگم برنامه نویسی و بعد از اون امبدد سیستم ها.

11 دیدگاه ها

  1. امیر رفیایی می‌گه:

    سلام
    وجود چنین آموزشی خیلی نیاز بود
    ممنون

  2. مسعود می‌گه:

    سلام
    تشکر بابت آموزشتون
    فقط لینک کتابخانه ها از بین رفته
    اگه میشه اصلاحش کنید
    موفق باشید

  3. آمانج می‌گه:

    با سلام و تشکر از آموزش خوبتون
    لینک دانلود فایل کتابخانه تایمر دچار مشکله شده.بی زحمت مجددا آپلود بفرمائید

  4. حسین می‌گه:

    سلام
    واقعا عالی
    دارم با شما جلو میام ولی فکر میکنم انسجام کافی بین مطالب مخلف نیست ینی یک خط سیر کلی نداره ولی هر مطلب خوب و کامل گفته شده
    بازم ممنون
    درضمن کتابخانه تایمر ظاهرا مشکل داره

  5. مهرشاد می‌گه:

    با سلام و احترام …دوست عزیز میشه راهنمایی کنین این کتابخانه ها را چگونه میشه تهیه کرد …..ایا از سایت خاصی تهیه میکنین …..؟ و ما چگونه میتونیم به این کتابخانه ها دسترسی داشته باشیم

  6. timer4 & timer5 می‌گه:

    […] از کتابخونه ی تایمر ۱ کتاب خوبه برای تایمر های ۴و ۵ نوشت آموزش تایمر آردوینو بخش دوم – دیجی*اسپارک Timer 4 and Timer 5 libraries for Arduino […]

  7. عباس می‌گه:

    سلام.
    تشکر میکنم از مطلب آموزندتون.
    عزیز برای مقدار دهی ۱ ساعته باید این زمان رو به میکروثانیه جلوی تابع نوشت؟

  8. محسن می‌گه:

    ممنون
    خدا خیرت بده

پاسخ دهید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *