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

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

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

در آردوینو چون ما از یک زبان سطح بالا استفاده میکنیم زیاد به جزئیات دستورات توجه نمیکنیم. مثلا اگر تابحال در آردوینو دستورات tone , delay و .. رو استفاده کرده باشین احتمالا اطلاع ندارین که این دستورات از تایمر های میکروکنترلر استفاده میکنن.

اما

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

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

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

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

Timer0و Timer2 تایمر/کانتر هایی 8  بیتی هستند و میتونن تا 255 بشمارن.

و تایمر Timer1 هم یک تایمر/کانتر 12 بیتی به حساب میاد که توانایی شمارش تا 65535 رو داراست.

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

 

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

 

تایمر یک و در سری مگا تایمر های 1و3و4و5 تایمرهایی با شمارش بالا هستند و کاربرد زیادی دارن.

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

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

ArduinoTimer library

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

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

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

initialize(microseconds)

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

کمترین مقدار ورودی تابع 1 میکروثانیه و بیشترین مقدار اون 8388480 میکروثانیه هست که نشون از رزولوشن بالا در مقداردهی این کتابخونه هستش.

مثال:

 

setPeriod(microseconds)

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

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

 

stop()

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

 

resume()

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

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

 

restart()

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

 

pwm(pin, val)

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

pin: پایه ای که قراره سیگنال PWM روی اون قرار بگیره.

val: مقدار duty cycle رو مشخص میکنه. همانند آموزش PWM و تابع analogWrite، مقدار 0 تا 1023 میگیرد.

مثال:

 

setPwmDuty(pin, val)

pin: پایه ای که قراره سیگنال PWM روی اون قرار بگیره.

val: مقدار duty cycle رو مشخص میکنه. همانند آموزش PWM و تابع analogWrite، مقدار 0 تا 1023 میگیرد.

 

disablePwm(pin)

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

 

attachInterrupt(function)

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

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

 

detachInterrupt

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

ADS

حمیدرضا مودت

یک مهندس الکترونیک ، علاقه مند به یاد دادن و یاد گرفتن پیرامون دانش برق و الکترونیک

مطالب مرتبط

5 دیدگاه‌

  1. عباس گفت:

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

  2. امین گفت:

    خیلی عالی