طراحی کنترلر، مدارت دلخواه، پروژه ها و تمرینات درس میکروکنترلرها
کنترل زاویه ای 0 تا 180 درجه؛ قابلیت تعریف بیش 100 برنامه مجزا توسط کاربر؛ تعیین زاویه برای هر پله حرکت سروو موتور؛ تعیین سرعت حرکت سروو موتور؛ تعیین مدت زمان کارکرد در هر برنامه از 1 تا 255 دقیقه. منوی کاربری بسیار آسان برای تعریف برنامه ها.این پروژه در اصل یک قفل امنیتی است که می توان جلوی درب اصلی منزل (در کنار آیفون) آن را نصب کرد. از امکانات آن می توان به موارد زیر اشاره نمود: نمایش دما از 125 تا 55- درجه سانتیگراد، نمایش ساعت دقیق، نمایش تاریخ شمسی همراه با روز هفته به صورت فارسی، نمایش تعداد فرصت های باقیمانده برای وارد کردن رمز صحیح، و قفل شدن سیستم به مدت 15 دقیقه در صورتی که 4 بار رمز اشتباه وارد شود. امکان تغییر رمز و تنظیم کردن ساعت و تاریج و ...این پروژه یک فرستنده گیرنده رادیویی با برد 100 تا 200 می باشد، که قابلیت کنترل 20 کانال مجزا به همراه کنترل سرعت موتور DC را دارد. از ماژول HMT و HMR و 20 عدد دیپ سوئیچ و درایور L298N برای موتور استفاده شده است.خروجی سه کاناله با کنترل سرعت به صورت مجزا، دو کلید افزایشی و کاهشی برای کنترل سرعت در هر کانال، فرکانس های مختلف و ثابت برای هر کانال، جریان خروجی بیش از 10 آمپر و ولتاژ بیش از 30 ولتاین پروژه یک مدار فرستنده و گیرنده رادیویی در باند 2.4GHz می باشد. در بخش فرستنده جریان برق ورودی تا 50 آمپر اندازه گیری شده و به صورت بی سیم برای گیرنده در نقطه ای دیگر ارسال می شود.
پروژه کنترل سروو موتور از 0 تا 180 درجه با avr

MCP-2

پروژه کنترل سروو موتور از 0 تا 180 درجه با avr
پروژه دربازکن الکترونیکی خانه قفل رمز با avr

MCP-5

پروژه دربازکن الکترونیکی خانه قفل رمز با avr
پروژه کنترل 20 کاناله-به همراه کنترل سرعت موتور با avr

MCP-10

پروژه کنترل 20 کاناله-به همراه کنترل سرعت موتور با avr
پروژه کنترل دور موتور با PWM و جریان خروجی بالا با avr

MCP-19

پروژه کنترل دور موتور با PWM و جریان خروجی بالا با avr
پروژه اندازه گیری جریان و ارسال بیسیم با بورد یک کیلومتر nRF24l01

MCP-44

پروژه اندازه گیری جریان و ارسال بیسیم با بورد یک کیلومتر nRF24l01

آموزش ميكرو كنترلر AVR به زبان بيسيك (قسمت دوم)

دستورات حلقه
دستور Do-Loop
اين دستور يه حلقه بينهايت ايجاد مي كند كه شما مي توانيد دستورات خودتان را دراين حلقه بنويسيد تا مدام توسط CPU تكرار شود. به عنوان مثال شما مي خواهيد كه يكي از بيت هاي پورت D به صورت يك چشكا زن عمل كنه و تا بي نهايت اين كار رو انجام بده كه برنامه رو به اين صورت مي نويسيم:
$regfile "m16def.dat"
$crystal=8000000
Config portd.0=output
 شروع حلقه    DO      "
Set portd.0 "portd.0 = 1
يك ثانيه تاخيرWait 1 "
Reset portd.0   "portd.0= 0
Wait 1
 پايان حلقه    Loop        "
 
End
در مثال بالا ميكرو تا ابد اين چند تا دستور رو انجام ميده و ديگه از اين حلقه هم بيرون نمياد!
البته در همين مثال شما مي توانستيد يك شرط بين دستورات بنويسيد تا ميكرو بتونه از اين حلقه بيرون بياد. مثلا يك ليد به ميكرو وصل كرده باشد و حالا اين كليد رو به صورت شرط درون اين حلقه مي نويسد. كه دستورات شرطي را در ادامه خواهيم گفت.

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


نوعي ديگري از حلقه loop هم هست كه تنها يك بار حلقه را اجرا مي كند (ولي دستورات داخل اون تا زماني كه شرط برقرار نشه اجرا ميشه) و بعد از اينكه شرط حلقه محقق شد از حلقه بيرون مياد.
Do
دستورات
.
.
.
شرط Loop until
 
از اين نوع حلقه loop در ميكرو براي خواند از صفحه كليد زياد استفاده مي شود. به عنوان مثال شما يه صفحه كليد 12 تايي يا 16 تايي به ميكرو وصل كرده ايد و فرض مي كنيم شما عدد 5 را فشار مي دهيد با توجه سرعت اجرايي ميكرو شما قادر نخواهيد بود كه فورا دستون رو از روي صفحه كليد برداريد (لرزش دست) به همين علت مي بينيد كه يه هو 1000 بار عدد 5 رو از زير دست شما مي خونه و تمام برنامه به هم مي خوره. براي همين ما بعد از اينكه از صفحه كليد عدد 5 را خونديم ميكرو رو مي فرستيم درون اين حلقه و بهش ميگيم تا زماني در ون اين حقله بمون كه كاربر دستش رو از روي كليد ها بر داره. بنابراين ميكرو فقط يك عدد را از زير دستمان مي خونه. كه در ادامه به بحث صفحه كليد هم خواهيم پرداخت.
دستور FOR-NEXT
عملكرد اين دستور هم مانند همون حلقه LOOP مي باشد با اين تفاوت كه ما در اينجا يك شمارنده داريم و تا زماني كه عدد شمارنده به مقداري كه براش تعريف كرده اين نرسه دستورات داخل اين حلقه تكرار ميشه. به مثال زير توجه كنيد! ما مي خواهيم كه همون برنامه چشمك زن رو در اينجا دوباره اجرا كنيم اما با اين تفاوت كه مثلا 20 بار فقط اجرا بشن و بعدش ديگه اجرا نشن:
$regfile "m16def.dat"
$crystal=8000000
Config portd.0=output
Dim m as byte
For m=1 to 20 step 1
Set portd.0 "portd.0 = 1
يك ثانيه تاخيرWait 1 " 
Reset portd.0   "portd.0= 0
Wait 1
Next m
End
خوب ما اميدم و درخط 4 يك متغيير از نوع بايت تعريف كرديم و در خط بعدي نوشتيم { براي m برابر با 1 باشد تا 20 و گام 1 } ما مقدار اوليه متغير m را برابر با 1 كرديم و بعد هم گفتيم STEP=1 يعني اينكه بعد از اجراي تمام دستورات داخل حلقه و رسيدن به دستور NEXT m يك واحد به m اضافه كن. كه در نهايت بعد از 20 بار اجرا شدن اين دستورات ميكرو از حلقه بيرون مياد. STEP گام حلقه مي باشد و شما مي توانيد هر عددي براي اون در نظر بگيريد كه بستگي به شما برنامه تان دارد مثلا اگر STEP 3 قرار داديد بعد از اجراي دستورات و رسيدن به NEXT m 3 واحد به مقدار m اضافه ميشه.
نكته: اگر گام شما در حلقه for برابر با عدد 1 هست ديگه نيازي نيست كه بنويسد STEP 1 و همچنين نوشتن نام متغيير بعد از NEXT هم الزامي نيست.
 
دستور while-wend
عملكرد اين دستور مانند حلقه for مي باشد با اين تفاوت كه براي رسيدن به مقدار شرط اون مي تونيد خودتون در برنامه اين شراط رو محقق كنيد. يعني اينكه با دستورات افزايشي يا كاهشي اين شرط رو ايجاد كنيد. مثال بالا رو براي اين نوع حلقه اينطور مي نويسيم:
 
 
$regfile "m16def.dat"
$crystal=8000000
Config portd.0=output
Dim m as byte
M=20
While m=0
Set portd.0 "portd.0 = 1
يك ثانيه تاخيرWait 1" 
Reset portd.0   "portd.0= 0
Wait 1
Decr m
wend
End
در اين برنامه ما در خط 5 مقدار پيش فرض m را برابر با 20 قرار داديم و در خط بعدي ابتداي حلقه و شرط حلقه رو ايجاد كرديم. يعني گفتيم كه تا دستورات داخل را مدام تكرار كن و زماني مي توني ديگه تكرار نكني و از حله بري بيرون كه m=0 شده باشد. و در خط 11 هم با هر بار اجراي دساورات بالايي يك واحد از 20 كم ميشه و خط بعدي هم يعني انتهاي حلقه. Wend . و خط آخر هم END مي باشد كه در هر برنامه اي كه ميكرو به اين دستور رسيد ديگه متوقف ميشه.!
و اما دستور IF
دستوري كه زياد كاربرد داره و در كل مي تونيد ميكرو رو باهاش كاملا تو چنگ بگيريد.( من كه زياد به اين دستور علاقه دارم)
اين دستور چندين حالت داره كه يكي يكي اونها رو توضيح ميديم:
1)         دستور   Then شرط IF
اين دستور اينو ميگه: اگر اين شرط برقرار هست سپس دستور را جرا كن. و اگر هم شرط برقرار نيست دستور بعد از Then  را اجرا نكن و خط بعدي برنامه رو بخون.
نمونه كاربرد اين دستور براي مقايسه دو عد هست كه اگر دو عدد با هم برابر بود دستور رو اجرا ميكنه و اگر هم نبود دستور اجرا نيشه و خط بعدي برنامه اجرا ميشه.   به اين مثال توجه كنيد؟!
فرض مي كنيم كه ما از صفحه كليد يه عدد خونديم (به عنوان مثال يك رمز تك رقمي) حالا مي خواهيم كه اگر اين عدد با عدد رمز ما برابر بود LED روشن بشه و در غير اين صورت LED خاموش بشه.
$regfile "m16def.dat"
$crystal=8000000
Config portd.0=output
 فرض مي كنيم كه عدد از صفحه كليد خونده ميشه و تو K ريخته ميشه   Dim k as byte
Reset portd.0
If k=8 then set portd.0
End
قبل از اينكه ميكرو به شرط برسه ما LED رو خاموش ميكنيم حالا اگر ما عدد 8 را از صفحه كليد وارد كرده باشيم خوب شرط برقرار ميشه و LED رو روشن ميكنه و اگر هم عددي غير از عدد 8 خونده باشه در نتيجه دستور
Set portd.0 اجرا نميشه و LED‌ همچنان خاموش مي ماند
2)
Then شرط IF
مجموعه دستورات مربوط به اين شرط صحيح
Else
 مجموعه دستورات مربوط به اين شرط غلط
End if
اگر شرط ما برقرار بود يعني صحيح بود خوب فقط مجموعه دستورات مربوط به اين شرط صحيح اجرا END IF ميشه. و ميكرو ميره به
در خط بعد يعني Else ما گفتيم در غير اين صورت مجموعه دستورات مربوط به اين شرط غلط رو انجام بده.
و خط آخر هم نوشيم end if يعني پايان اين دو اگر. مثلا ما مي تونيم مثال بالا رو هم اينطوري بنويسيم:
 
$regfile "m16def.dat"
$crystal=8000000
Config portd.0=output
 فرض مي كنيم كه عدد از صفحه كليد خونده ميشه و تو K ريخته ميشه   Dim k as byte
If k=8 then
Set portd.0
Wait 1
Reset portd.0
Wait 1
Else
Set portd.0
waitms 100
Reset portd.0
waitms 100
end if
end
اگر عدد ما برابر با 8 بود LED به مدت يك ثانيه روشن مي شود و بعد خاموش ميشود و ميكر به مدت يك ثانيه كاري انجام نمي دهد. اما اگر شرط برقرار نبود يعني عدد 8 از صفحه كليد خوانده نشده بود سپس ميكرو به مدت 100 ميلي ثانيه LED رو روشن مي كنه و بعد هم 100 ميلي ثانيه كاري انجام نميده و در آخر به END IF و بعد هم به END ميرسد.
3)
Then شرط1 IF
مجموعه دستورات مربوط به اين شرط 1
Then شرط2 Elseif
 مجموعه دستورات مربوط به اين شرط 2
Else
مجموعه دستورات مربوط به اين شرط 3
End if
اگر شرط 1 برقرار بود دستورات مربوط به اين شرط اجرا خواهد شد و اگر شرط 1 برقرار نبود ولي شرط 2 برقرار بود دستورات مربوط به شرط2 اجرا خواهد شد و اگر هم شرط 2 برقرار نبود (شرط1 هم كه برقرار نبوده) دستورات بعد از Else اجرا مي شوند.
$regfile "m16def.dat"
$crystal=8000000
Config portd=output
If a=5 then
Set portd.0
Wait 1
Reset portd.0
Wait 1
Elseif a=6 then
Set portd.1
Wait 1
Reset portd.1
Wait 1
Else
Set portd.2
Wait 1
Reset portd.2
Wait 1
برنامه به اين صورت عمل ميكنه اگر عددي كه در متغيير A قرار دارد برابر باشد با 5 سپس LED متصل به پورت D.0 به مدت يك ثانيه خاموش و روشن ميشه.
اگر هم برابر با 5 نبود ولي برابر با 6 بود بنابراين LED متصل به پورت D.1 به مدت يك ثانيه روشن و خاموش ميشه .
و اگر هم برابر با 6 نبود يعني هر مقدار ديگري داشت LED متصل به پورت D.2 به مدت يك ثانيه خاموش و روشن ميشه.

خوب در اينجا به پايان قسمت دوم ميرسيم. منظر قسمت هاي بعدي باشيد.!

  منبع: www.picpars.com

  لطفا مقالات، آموزش‌ها و پروژه های خود را به آدرس ایمیل ارتباطی ایمیل نمائید تا آن را با نام خودتان در سایت منتشر کنیم.

به این مطلب امتیاز دهید

برچسب ها:
تاریخ ارسال چهارشنبه، 21 بهمن ماه، 1388    نویسندهنویسنده: مدیریت    نظرات 3 نظر    بازدید بازدید [ 11502 ]   پرینتنسخه چاپی
فایل پی دی اف فایل پی دی اف   ارسال به دوستان ارسال به دوستان