Blinking

حتما اولین برنامه ای که با #C نوشتید یادتون هست .معمولا همه با Hello World شروع میکنند . اما برنامه نویسی AVR با Blinking شروع می شود . چون چاپ متن پیچیده تر از روشن خاموش کردن LED ست و نیاز به LCD دارد .

در این برنامه به ترتیب 8 تا LED که به PORTD وصل شده اند را روشن و خاموش می کنیم .می خواهیم هر LED برای250ms روشن بماند و بعد LED بعدی روشن شود.

اول توضیحاتی در مورد LED میدهم . LED یک دیود است که با بایاس شدن نور منتشر میکند. برای بایاس کردن LED باید جهت پایه های مثبت و منفی را تشخیص داد که بسیار راحت با نگاه کردن به پایه ها می توان فهمید . پایه ی بلند تر مثبت و پایه ی کوتاه تر منفی است( البته این روش برای اکثر المانهایی که پایه های مثبت ومنفی دارند صادق است).روش دوم برای پیداکردن پایه ها زمانی که اندازه آنها یکسان بود نگاه کردن به طرف صاف LED ست . پایه ی نزدیک به قسمت صاف پایه ی منفی است .

در این مدار پایه مثبت LED به پین AVR وصل می شود و پایه های منفی به منفی یا GND منبع تغذیه.

حالا می رسیم به خود AVR . من از ATmega 8 برای این مثال استفاده می کنم . این میکرو دارای 28 پایه و 3تا پورت ورودی/خروجی به نامهای PORTB ,PORTC ,PORTD است .از PORT ها برای خواندن ورودی و نوشتن نتیجه محاسبات استفاده می شود .در این پروژه من از PORTD به عنوان خروجی استفاده کردم یعنی پایه های مثبت 8تا LED رو به پایه های 0 تا 7 ازPORTD وصل کردم .برای پیدا کردن شماره هر پایه باید از DataSheet کمک بگیریم . پس پایه های 2-3-4-5-6-11-12-13 مورد نظر من هستند .

برنامه ای که با Codevision مینویسیم به این صورت است:

توضیح برنامه :

ابتدا هدر مربوط به mega8 و توابع ایجاد تاخیر به برنامه include شده اند .

درتابع main متغیر شمارنده و جهت ورودی و خروجی PORT تعیین شده .

در AVR هر PORT ورودی خروجی 3تا آدرس در فضای حافظه به نامهای PORTx ,DDRx ,PINx دارد مثلا برای پورت D میشود PORTD,DDRD,PIND . برای تعیین جهت خروجی هر پین کافیست در رجیستر DDR (مخفف Data Direction Register ) بیت مربوط به همان پین را Set (یک) و برای ورودی Clear (صفر )کنیم .در این مثال تمام PORTD خروجی ست پس تمام بیتها را Set میکنیم (معادل 0xFF ) .از رجیستر PORT برای نوشتن استفاده میشود . از آدرس PIN هم برای خواندن استفاده میشود .

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

تابع delay_ms برای ایجاد تاخیر در واحد میلی ثانیه استفاده میشود .پارامتر ارسالی میزان تاخیر را مشخص میکند .

تابع delay_us هم برای ایجاد تاخیر در واحد میکروثانیه به کار میرود.

>>توجه کنید که این برنامه خیلی سادست و از میکروکنترولر برای همچین کاری استفاده نمیشود ولی همانطور که گفتم برای شروع برنامه نویسی گزینه ی خوبیست .<<

در پست بعدی برنامه ای که نوشتیم رو کامپایل و شبیه سازی میکنیم .

پایان !

<<بعدی          قبلی>>

Advertisements

دربارهٔ DeltaCode

Somewhere near the sky Far away from people Far away from noise Somewhere near yourself

Posted on دسامبر 22, 2010, in AVR and tagged , , , , . Bookmark the permalink. 2 دیدگاه.

  1. من زیاد با avr اشنا نیستم وحید ولی واقعا ممنون.

  2. کار با AVR خیلی سادست . بیشتر سخت افزار مورد نیاز رو در داخل خودش دارد و بیشتر تمرکز روی نوشتن برنامه هاست .
    کافیه کاری که می خواهید به صورت برنامه به AVR بگید تا انجام بده.

پاسخی بگذارید

در پایین مشخصات خود را پر کنید یا برای ورود روی شمایل‌ها کلیک نمایید:

نشان‌وارهٔ وردپرس.کام

شما در حال بیان دیدگاه با حساب کاربری WordPress.com خود هستید. بیرون رفتن / تغییر دادن )

تصویر توییتر

شما در حال بیان دیدگاه با حساب کاربری Twitter خود هستید. بیرون رفتن / تغییر دادن )

عکس فیسبوک

شما در حال بیان دیدگاه با حساب کاربری Facebook خود هستید. بیرون رفتن / تغییر دادن )

عکس گوگل+

شما در حال بیان دیدگاه با حساب کاربری Google+ خود هستید. بیرون رفتن / تغییر دادن )

درحال اتصال به %s

%d وب‌نوشت‌نویس این را دوست دارند: