درس 04

از این فصل به بعد میخواهیم پروژه های برنامه نویسی را با برنامه کدویژن

(CodeVision AVR) را آغاز کنیم.

درابتدا برنامه را باز کرده واز منوی Fileگزینه newرا انتخاب میکنیم.

وسپس گزینهprojectرا میزنیم. حال از قسمت chipآی سی atmega16را باکریستال 8 مگاهرتز انتخاب میکنیم. به قسمت portرفته و PORTAرا خروجی یک قرار میدهیم.

برنامه را با نام Leson04یا هر اسم دیگه ای ذخیره میکنیم. در صفحه باز شده که برای نوشتن برنامه Cاست ، درقسمت حلقه While(1)برنامه روشن شدن 8 دیود را می نویسیم. یعنی 8 دیود روشن شده وروشن نیز باقی می مانند.

پس:

While(1){

PORTA=0xFF;       //Turn On LED

}

حالا برنامه را کمپایل می کنیم. برای تست برنامه از برنامه پروتئوس استفاده میکنیم. ودر آن مثل مدار قبلی قطعات مدار را پیدا میکنیم.

Atmega16,LEDرا وارد می کنیم.پایه های مثبت  8 دیود را به 8 پایه آی سی متصل میکنیم و قطب منفی آنها را نیز به هم وصل کرده وبه پایه زمین متصل می کنیم.

برروی آی سی کلیک راست کرده وسپس کلیک چپ میکنیم. پنجره کوچکی باز میشود در این پنجره و در قسمت Program Fileباید مسیر فایل هگز برنامه را درآن وارد کنیم که با کلیک برروی پوشه کنار آن میتوانیم مسیر آنرا وارد کنیم.(نکته: آی سی های میکرو با فایل هگز کار میکنند.)

خوب نکته دیگر ان است که باید فرکانس کاری میکرو را که 8 انتخاب کرده بودیم را در قسمت Clock Frequencyوارد کنیم وگزینه OKرا میزنیم.

حالا اگر دکمه ► را بزنیم باید 8 دیود روشن شده وروشن نیز باقی بمانند تا زمانی که دکمه ■ را بزنیم.

به همین سادگی یک برنامه ساده نوشتیم.

نکته اینکه علامت// جهت توضیح است و لازم نیست شماحتما آنرا بنویسید.

نکته دیگر اینکه برای نوشن برنامه هم میتوان از هگز استفاده کرد وهم از باینری وهم دسیمال

باینری: PORTA=0b11111111;

دسیمال:

 PORTA.0=1;       PORTA.1=1;        PORTA.2=1;        PORTA.3=1;

PORTA.4=1;        PORTA.5=1;        PORTA.6=1;        PORTA.7=1;

همانطور که می بینید دسیمال از همه سخت تر و هگز از همه آسان تر است. اما کار کردن با باینری در مواقعی بهتر از بقیه است.

آشنایی با یک کتابخانه به نام کتابخانه تاخیر (delay):

  • برای تاخیر دادن به مدار باید کتابخانهDelayرا صدا بزنیم که آنرا در بالای حلقه  mainباید معرفی کنیم.
  • #includeکه تمامی حروف آن باید باحروف کوچک نوشته شود.
  • برای تاخیر از زمانهای میکرو ومیلی ثانیه استفاده میکنیم.
  • در حالت میلی ثانیه ودر فرکانس کاری 8مگاهرتز 1000 میلی ثانیه ، یک ثانیه طول میکشد.
  • فرم کلی این کتابخانه در برنامه به صورت زیر است:
  • delay_us();
  • delsy_ms();

برنامه 2: روشن شدن وخاموش شدن 8 دیود با تاخیر یک ثانیه:

برای اینکار کافیست که برنامه را دستکاری کوچکی بکنیم.

While(1){

PORTA=0xFF;       //Turn On LED

delay_ms(1000);   //Wait For One Secound

PORTA=0x00;       //Turn Off LED

delay_ms(1000);   //Wait For One Secound

}

این هم از برنامه چشمک زن ساده  که طراحی کردیم. روشن کنیدولذت ببرید برنامه نویس های عزیز!!!

حال برای اینکه بیشتر با تاخییر آشنا شوید زمان 1000 را به 500 کاهش دهید.

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

While(1){

PORTA=0xFF;       //Turn On LED

delay_ms(500);   //Wait For Half Secound

PORTA=0x00;       //Turn Off LED

delay_ms(500);   //Wait For Half Secound

}

واگر آنرا به 250 تغییر دهید ، دیودها در هر ثانیه 4 بار روشن و خاموش می شوند.

While(1){

PORTA=0xFF;       //Turn On LED

delay_ms(250);   //Wait For 1/4 Secound

PORTA=0x00;       //Turn Off LED

delay_ms(250);   //Wait For 1/4 Secound

}

 

برنامه3: روشن وخاموش شدن دیود ها به صورت متوالی با تاخیر نیم ثانیه:

برای این کار نکته قابل عرض آن است که اول دیود اولی را روشن میکنیم وبعد از نیم ثانیه دیود اول خاموش ودیود دوم روشن و همینطور الی آخر... .

برای نوشتن این برنامه از باینری استفاده میکنیم که راحت تر است. ونیاز به حساب وکتاب ندارد.

 

While(1){    
       PORTA = 0b00000001;       //Turn ON LED 01 AND Turn OFF LED 08
       delay_ms(150);   //Wait For 0.5 Secound
       PORTA = 0b00000010; //Turn OFF LED 01 AND Turn ON LED 02
       delay_ms(150);   //Wait For 0.5 Secound
       PORTA = 0b00000100; //Turn OFF LED 02 AND Turn ON LED 03
       delay_ms(150);   //Wait For 0.5 Secound
       PORTA = 0b00001000; //Turn OFF LED 03 AND Turn ON LED 04
       delay_ms(150);   //Wait For 0.5 Secound
       PORTA = 0b00010000; //Turn OFF LED 04 AND Turn IN LED 05
       delay_ms(150);   //Wait For 0.5 Secound
       PORTA = 0b00100000; //Turn OFF LED 05 AND Turn ON LED 06
       delay_ms(150);   //Wait For 0.5 Secound
       PORTA = 0b01000000; //Turn OFF LED 06 AND Turn ON LED 07
       delay_ms(150);   //Wait For 0.5 Secound
       PORTA = 0b10000000; //Turn OFF LED 07 AND Tuen ON LED 08
       delay_ms(150);   //Wait For 0.5 Secound
;{
خوب امید است که از این بخش نیز استفاده کافی رابرده باشید.
 

 

برنامه نویس های عزیز میتوانید با تغییراتی که در برنامه های بالا میدهید انواع مختلفی از مدارات چشمک زن را طراحی نمایید. طور مثال میتوانید برناه های زیر را طراحی نمایید:

  • برنامه ای که دیود های آن بترتیب روشن شده وپس از یک ثانیه بترتیب خاموش شوند.
  • برنامه ای که دوتا دوتا روشن شوند و پس از نیم ثانیه خاموش شوند.
  • برنامه ای که سه تا سه تا روشن شوند وپس از نیم ثانیه خاموش شوند.
  • برنامه ای که چهارتا چهارتا روشن شوند و پس از نیم ثانیه خاموش شوند.

حالا اگر این برنامه هارا در یک برنامه جا بدهید یک برنامه چشمک زن با 4 برنامه جداگانه طراحی

کرده ایید!!!

1

شکل 1-4

FILE PROGRAM

شکل 2-4

 

موفق باشید