در مجموعه آموزش های تحلیل و بررسی کتابخانه ها، این بار به بررسی کتابخانه FrequencyTimer2 می پردازیم. پیشتر در چندین آموزش تحلیل کتابخانه، کتابخانه های مختلفی را جهت زمانبندی اجرای دستورات و ایجاد پالس PWM بررسی کرده ایم. در این آموزش قصد داریم تا به تحلیل و بررسی یک کتابخانه جالب و البته کاربردی در زمینه اجرای زمانبندی شده دستورات، بپردازیم. به کمک این کتابخانه به سادگی و به کمک تایمرهای داخلی میکروکنترلر، زمانبندی جهت اجرای یک تابع تعیین می گردد. مطابق روال آموزش های کتابخانه ای، ابتدا کمی به مفهوم تایمر در میکروکنترلرها می پردازیم. در ادامه نحوه نصب کتابخانه را از نظر خواهیم گذراند. پس از این قسمت، به الزامات فنی و بردهای مورد پشتیبانی کتابخانه خواهیم پرداخت. قسمت بعد از این مرحله را به تحلیل و بررسی توابع کلیدی و کاربردی کتابخانه اختصاص خواهیم داد. در نهایت با ارایه مثالی از یک کد کامل، استفاده از توابع در برنامه ها را مشاهده خواهیم کرد. در ادامه تحلیل کتابخانه FrequencyTimer2.h با مرجع تخصصی رزبری پای و آردوینو به زبان فارسی، دیجی اسپارک همراه باشید.
تایمرهای داخلی میکروکنترلرها
همانطور که اطلاع دارید، میکروکنترلرها هسته پردازشی بسیاری از بردها به شمار می روند. هر میکروکنترلر خود از واحدها و امکانات جانبی مختلفی تشکیل شده است. به عنوان مثال میکروکنترلر ATMEGA2560 درون خود علاوه بر هسته پردازشی، دارای امکاناتی همچون پروتکل های مختلف ارتباط سریال، وقفه ها و البته تایمرهاست. تایمرهای میکروکنترلر روال هایی شمارشی با نوع فعالیت موازی با هسته پردازشی هستند. به عبارت دیگر، تایمرها شمارش خود را به صورت موازی با پردازنده و نه وابسته به کدهای برنامه نویس انجام می دهند. در سمت دیگر، هرگاه شمارش تایمر به انتها برسد(سرریز یا Over Flow کند) یک وقفه رخ خواهد داد. سپس درون روتین(تابع) وقفه عملیات مد نظر را اجرا نمود.
در ادامه این موضوع، کتابخانه مورد بررسی این آموزش از قابلیت تایمر استفاده می کند. هرگاه که تایمر سر ریز کند، عملیات مد نظر کاربر اجرا خواهد شد. در ادامه به نحوه نصب کتابخانه و سپس بررسی امکانات و ویژگی های آن خواهیم پرداخت.
نصب کتابخانه FrequencyTimer2
به منظور استفاده از کتابخانه، ابتدا می بایست آن را نصب کنیم. در این قسمت به نصب کتابخانه با جستجو در مخازن آردوینو می پردازیم. به همین منظور، ابتدا در نرم افزار آردوینو بر روی گزینه Tools و سپس Manage Libraries را کلیک کنید. پس از کلیک بر روی این گزینه، با تصویر زیر رو به می شوید. این منو کتابخانه های در دسترس را به شما نشان می دهد. شما نیز می توانید با جستجوی نام کتابخانه مورد نظر خود، آن را در مخازن آردوینو یافته و سپس نصب کنید.
مطابق فلش مشخص شده در تصویر فوق، در کادر جستجو عبارت FrequencyTimer2 را تایپ کنید. پس از چند لحظه با تصویر زیر رو به رو می شوید. در این مرحله، کتابخانه را با کلیک بر روی گزینه install، نصب کنید.
الزامات و نکات فنی کتابخانه FrequencyTimer2
پس از نصب کتابخانه، نوبت به بررسی الزامات فنی آن می رسد. برای نکته نخست، توجه داشته باشید که این کتابخانه از تایمر شماره ۲ جهت اجرای زمانبندی استفاده می کند. این کتابخانه در حقیقت یک interval برای اجرای یک تابع ایجاد می نماید. با سررسید زمان، تابع اجرا خواهد شد. در طرف دیگر، این کتابخانه بر روی بردهای مبتنی بر میکروکنترلرهای AVR نظیر برد آردوینو MEGA2560 و برخی از بردهای تینسی نظیر قابلیت اجرا دارد. میکروکنترلرهای مورد پشتیبانی این کتابخانه عبارتند از:
- ATMEGA328P(آردوینو UNO)
- ATMEGA1280
- ATMEG2560(آردوینو MEGA)
- AVR_AT90USB646
- AVR_AT90USB1286
- MK20DX128
- MK20DX256
- MK64FX512
- MK66FX1M0
در ادامه پس از آشنایی با الزامات فنی و بردهای مورد پشتیبانی، نوبت به تحلیل و بررسی توابع کلیدی و کاربردی می رسد. قسمت بعد را به این موضوع اختصاص می دهیم.
توابع کلیدی و کاربری کتابخانه FrequencyTimer2
پس از بررسی الزامات و نکات فنی، نوبت به بررسی توابع کلیدی و کاربردی می رسد. جدول زیر لیست این توابع را نمایش می دهد.
شرح | ورودی | تابع |
به کمک این تابع می توانید بازه زمانی INTERVAL را تعیین کنید. | ورودی از نوع بدون علامت جهت تعیین زمان | static void setPeriod(unsigned long) |
این تابع بازه زمانی تعیین شده را در خروجی قرار می دهد. | بدون ورودی | static unsigned long getPeriod() |
این تابع، تابعی که قرار است هنگام سر ریز تایمر اجرا شود را تعیین می کند. نام تابع در ورودی این تابع قرار می گیرد. | ورودی از نوع تابع | static void setOnOverflow( void (*)() ) |
این تابع تایمر را فعال می کند. | بدون ورودی | static void enable() |
این تابع تایمر را غیر فعال می کند. | بدون ورودی | static void disable() |
پس از بررسی توابع کلیدی و کاربردی، نوبت به اجرای نمونه برنامه می رسد. قسمت بعدی را به این موضوع اختصاص می دهیم.
اجرای یک نمونه برنامه
پس از آشنایی با توابع کتابخانه، نوبت به اجرای یک نمونه برنامه می رسد. در این برنامه هر یک ثانیه یکبار تابع مد نظر اجرا شده و پیام تعیین شده را در خروجی چاپ می کند.
#include <FrequencyTimer2.h> void setup() { pinMode(FREQUENCYTIMER2_PIN, OUTPUT); Serial.begin(9600); FrequencyTimer2::setPeriod(1500); FrequencyTimer2::enable(); FrequencyTimer2::setOnOverflow(RUN); } void RUN(void) { Serial.println("Timer Interrupt Routine"); } void loop() { }
لوازم مورد نیاز
جمع بندی
در سلسله آموزش های تحلیل و بررسی کتابخانه، این قسمت را به یکی از کتابخانه های کاربردی اختصاص دادیم. کتابخانه FrequencyTimer2 یکی از کتابخانه های کلیدی و کاربردی در زمینه زمانبندی است. به کمک این کتابخانه می توان در فرمی آسان و بدون درگیر شدن با جزییات رجیستری، توابع و یا دستورات مد نظر را در بازه های زمانی دلخواه اجرا نمود. این کتابخانه جهت اجرای زمانبندی، از تایمر شماره ۲ استفاده می کند. این تایمر در میکروکنترلرهای AVR که هسته بردهای آردوینو نظیر UNO و یا MEGA2560 را تشکیل می دهند، تعبیه شده است. همچنین این تایمر در برخی از پردازنده های تینسی موجود بوده که توسط این کتابخانه پشتیبانی می گردد. این آموزش را ابتدا با شرح و بررسی مختصر تایمرها، آغاز نمودیم. پس از این مرحله به نصب کتابخانه و بررسی الزامات فنی و بردهای مورد پشتیبانی کتابخانه پرداخته شد. در ادامه بحث، توابع کلیدی و کاربردی مورد پشتیبانی قرار گرفت. در نهایت با ارایه مثالی، نحوه استفاده از توابع را در برنامه های عملی مشاهده نمودیم.
چنانچه در مراحل راه اندازی و انجام این پروژه با مشکل مواجه شدید، بدون هیچ نگرانی در انتهای همین پست، به صورت ثبت نظر سوالتان را مطرح کنید. من در سریعترین زمان ممکن پاسخ رفع مشکل شما را خواهم داد. همچنین اگر ایرادی در کدها و یا مراحل اجرایی وجود دارند میتوانید از همین طریق اطلاع رسانی کنید.