مقدمه ای بر الگوریتم کنترل آسانسور و میکرو کنترلر AVR (بخش دوم)

آسانسور آسانسور
06 جولای

در بحث آموزش نصب آسانسور  به ادامه الگوریتم کنترل آسانسور توسط میکروکنترلر AVR می پردازیم:

 در قسمت قبل عنوان گردید که روند کلی چک کردن ورودی تابلو فرمان آسانسور مشتمل بر دو قسمت بوده و در این مقاله به روش اول تابع Main و توابع فرعی آن می پردازیم:

تابع Main و توابع فرعی:

برای شروع کار در آسانسور لازم است ابتدا موقعیت کابین آسانسور مشخص شود در صورت نامشخص بودن موقعیت کابین تابع شناسایی کابین فراخوانده می شود. بعد از این مرحله برنامه وارد یک حلقه (while (1 می شود. در این حلقه تمامی ورودی ها و خروجی های تابلو فرمان آسانسور به طور منظم چک می شود و دستورات لازم صادر میگردد.

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

#include<mega64>

#definemotorPORTC// ماکروی موتور جهت فرمان دادن به کنتاکتورها

Char vorodi[8]={0};char level;

Char hal ,kabin ,rvzion_swich=0;

Char i, Jehat , ss ,n_stop;

Char dorandaz ,time-park; char tabage; char activate_stop;

Int tim_travel=0;

Void revizsion(void){}

Void shenasi(void){}

Void main(void)}

Shenasi();

While(1)

{if(tim_travel>0)} tim_travel++;  if(time_travel>2000){};};

If((PINF&1)==1) vorodi[0]++; else(vorodi[0]=0 hal&=0xfe);

If(vorodi(0)>200)

(hal=hal|1; vorodi[0]=201;};

If((pinf&2)==2)(rvzion_Swich=1; revision();}else(rvzion_swich=0;};};};

در برنامه فوق جهت کوچک شدن برنامه تنها دو ورودی که چک می شود، یکی شاسی احضار و دیگری کلید رویزیون بوده و از آرایه های متغیر آرایه ای Vorodi جهت اندازه گیری مدت زمان یک (بودن) ورودی ها استفاده می شود. اگر به برنامه توجه نمایید شاهد خواهید بود که برای تشخیص ورودی رویزیون از یک بار نمونه برداری استفاده شده است. ولی برای تشخیص شاسی احضار از 200بار نمونه برداری استفاده شده است که علت آن به ساختار شاسی ها بر می گردد. در انتها که سیم های احضار وصل می شود تعدادی LED قرار داده می شوند که هنگام پذیرفته شدن احضار روشن می گردد.