۲-۲ ایجاد تاخیر زمانی با استفاده از دستور delay و ساخت LED چشمک زن

گاهی اوقات ما نیاز داریم تا یک مقدار خاص صفر یا یک را برای مدت محدود روی یک پایه ی میکروکنترلر اعمال کنیم یعنی مثلا می خواهیم پین A.0 به مدت ۱ ثانیه مقدار ۱ و به مدت ۵۰۰ میلی ثانیه مقدار صفر را داشته باشد.

برای انجام چنین کاری به تابعی نیاز داریم که برنامه را برای مدت محدود در یک خط خاص از کد نگه دارد و پس از تمام شدن این زمان مشخص دوباره برنامه روند اجرای خط به خط خود را از سر بگیرد.

در نرم افزار CodeVision چنین قابلیتی وجود دارد.

در این نرم افزار با استفاده از کتابخانه ی <delay.h> این قابلیت در نظر گرفته شده است.

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

#include<delay.h>

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

delay_ms(milliseconds)

می توانید برنامه ی خود را به مدت چند میلی ثانیه که به جای کلمه ی milliseconds می نویسید در یک خط خاص متوقف کنید و با همین ویژگی مقدار ثبت شده روی یک پایه را برای مدت زمان محدود و مشخص ثابت نگه دارید و سپس اگر خواستید آن را تغییر دهید.

مثلا دستور:

delay_ms(300)

برنامه را ۳۰۰ میلی ثانیه در خطی که این دستور را وارد کرد ه ایم متوقف می کند.

حال با همین خاصیت می توانیم یک LED چشمک زن بسازیم.

به این نحو که سعی می کنیم پین A.0 برای مدت ۱ ثانیه یک LED را روشن کرده و برای ۱ ثانیه ی بعد آن را خاموش نگه دارد و این عمل همین طور تکرار شود.

به این منظور پس از تعریف یک پروژه و تعیین پین A.0 به عنوان خروجی با مقدار اولیه ی صفر کار خود را شروع می کنیم.

در ادامه و در قطعه کد while(1) شروع به برنامه نویسی می کنیم. همان طور که در تعریف پروژه آمده است پین A.0 باید به مدت ۱ ثانیه روشن باشد، پس ابتدا پین A.0 را روشن می کنیم و سپس با استفاده از تاخیر این مقدار دهی را به مدت ۱۰۰۰ میلی ثانیه که همان یک ثانیه می شود بر روی این پایه حفظ می کنیم.

سپس مقدار پین A.0 را صفر کرده و بازهم با استفاده از تاخیر این مقدار دهی را به مدت ۱۰۰۰ میلی ثانیه بر روی این پایه حفظ می کنیم.

قطعه کد زیر نشان دهنده ی این کار است:

while(1){
PORTA.0=1;
delay_ms(1000);
PORTA.0=0;
delay_ms(1000);
}

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

حال با ریختن فایل HEX این کد را بر روی میکرو کنترلر ATmega32 در حالی که به پین A.0 آن یک LED متصل است، تست کنید.

یک LED چشمک زن مشاهده خواهید کرد.

پس از انجام این پروژه با تعریف پروژه های جدیدی که پایه های بیشتری از آنها روی حالت خروجی تنظیم شده اند و به آنها LED متصل است، سعی کنید انواع بیشتر و زیباتری چشمک زن تولید کنید.

شاید این مطالب را هم دوست داشته باشید

6 پاسخ

  1. ابوالفضل می‌گه:

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

  2. مرتضی می‌گه:

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

  3. asghar می‌گه:

    سلام
    من می خواستم یک تاخیر دوساعته ایجاد کنم , آیا از این دستور می تونم استفاده کنم؟

    • با سلام،

      دستور delay، در واقع برای کاربردهای هست که زمان خیلی‌ مهم نیست، به این علت که این دستور از دقت زمانی بالایی برخوردار نیست، و با توجه به شرایط داخلی برنامهِ که برای میکرو نوشتین زمانش عوض می‌شه، به این مفهوم که متناسب با interrupt هایی که در میکرو هست ممکنه زمان delay عوض بشه چرا که از اولویت بسیار پأیینی در کد برخوردار هست. به طور مثال ممکن یک delay با زمان ۱ ثانیه ۱۰ ثانیه طول بکشه!
      برای همین برای کار شما توصیه می‌کنم از واحد تایمر کانتر استفاده کنین، و یک دقیقه شمار و ساعت شمار اونجا تعریف کنین و زمان رو به اون شکل با دقت بسیار بالا اندازه گیری و ثبت کنین،در فصل ۷ بخش ۴ کتاب زیر این مبحث به طور کامل توضیح داده شده
      http://robotmakers.ir/blog/%D9%85%DB%8C%DA%A9%D8%B1%D9%88-%DA%A9%D9%86%D8%AA%D8%B1%D9%88%D9%84%D8%B1%D9%87%D8%A7%DB%8C-avr/

پاسخ دهید

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

CLOSE
CLOSE