PDA

توجه ! این یک نسخه آرشیو شده میباشد و در این حالت شما عکسی را مشاهده نمیکنید برای مشاهده کامل متن و عکسها بر روی لینک مقابل کلیک کنید : اجرای وقفه تایمر بعد از 3 ثانیه



ebi2001
22-04-2012, 01:38
سلام

میخوام با استفاده از تایمر هر سه ثانیه یه بار تابع وقفه تایمر رو فراخوانی کنم و دستورات توش رو اجرا کنم. با سی به چه صورت باید بنویسمش؟

sadmonew
22-04-2012, 11:40
سلام مهندس
خودتون تونستين برنامه اي بنويسيد؟
و اينكه ميخواين از كدوم ميكروي avr ميخواين استفاده كنيد؟ m8 يا m16 يا ....؟

Ma3ood
22-04-2012, 14:06
درود
وقفه ای در حد سه ثانیه یه فکر نکنم امکان پذیر باشه:sa:
ولی شما بیا مثلا زمان 100 میلی ثانیه رو درست کن بعد یه متغییر تو روتین وقفه تعریف کن
از اونجایی که میدونیم هر 1000 میلی ثانیه یک ثانیه هست پس 10 بار که روتین وقفه اجرا شد میشه یک ثانیه و اگه 30 بار اجرا شد میشه 3 ثانیه :wink:
یه همچین چیزی


int i;
روتین وقفه
{
i++;
if(i==30)
کاری که میخوای انجام بدی
}

ali_h
22-04-2012, 16:06
سلام
مهندس چرا وقفه 3 ثانیه رو فکر نمی کنید امکانپذیر باشه؟
اگر کلاک رو روی 8 مگ تنظیم کنید و prescale رو برابر 1024 بگذارید. تایمر 1 شما باید 23438 بار شمارش کنه تا 3 ثانیه تاخیر براتون ایجاد بشه.
فقط کافیه در وقفه سرریز تایمر، بعد از اینکه عملیات مورد نظرتون رو انجام دادید عدد 42098 رو در تایمر 1 بریزید. تایمرتون بعد از 3 ثانیه دوباره سرریز می شه.

ebi2001
22-04-2012, 20:29
با atmega 64 میخوام بنویسم ولی نمیدونم چطوری با سی بنویسم از کریستال 16mhz استفاده میکنم
میشه یه برنامه خیلی کوچیک و ساده که بعد 3 ثانیه تابع وقفه رو فراخوانی میکنه بدید؟

Ma3ood
22-04-2012, 22:26
سلام
مهندس چرا وقفه 3 ثانیه رو فکر نمی کنید امکانپذیر باشه؟
اگر کلاک رو روی 8 مگ تنظیم کنید و prescale رو برابر 1024 بگذارید. تایمر 1 شما باید 23438 بار شمارش کنه تا 3 ثانیه تاخیر براتون ایجاد بشه.
فقط کافیه در وقفه سرریز تایمر، بعد از اینکه عملیات مورد نظرتون رو انجام دادید عدد 42098 رو در تایمر 1 بریزید. تایمرتون بعد از 3 ثانیه دوباره سرریز می شه.

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

ali_h
23-04-2012, 01:01
دوست عزیز ممنون ولی امکانش هست بیشتر توضیح بدی:hi: شما با این روش می فرمایید که 3 ثانیه رو مستقیم تولید میکنی .
خوب از روشی که من در دو پست قبل گفتم با این روش شما چه فرقی داره

اولین خوبیش اینه که هر 100 میلی ثانیه برنامه اصلی قطع نمی شه و وقفه تایمر اجرا بشه.
اگر مثلاً شما در حال رسم شکل روی LCD گرافیکی باشین اونوقت هر 100 میلی ثانیه یه اینتراپت کل کار LCD رو مختل می کنه.

دوم اینکه OverHead کد راه اندازی تایمر تو این روش خیلی کمه ( فقط یکبار مقدار دهی تایمر در هر 3 ثانیه) در برنامه شما در هر 100 میلی ثانیه یک مقداردهی متغیر داریم و یک دستور شرطی که سرعت میکرو رو می گیره.

روشی که شما گفتی در مواردی خوبه که می خواین تایمر مجازی (نرم افزاری) داشته باشین.

ebi2001
26-04-2012, 22:29
سلام کسی این برنامه را نمیزاره؟