در قسمت اول می خواهیم مرحله به مرحله تمام کارهایی که قرار است در برنامه کدویژن انجام دهیم را شرح دهم.
در ابتدا وارد نرم افزار CodeVision AVR شده و از منوی بلای صفحه سمت چپ New Project را انتخاب میکنیم.
در قسمتی که از ما پرسیده می شود می خواهید از CodeWizard Avr استفاده نمائید، ما No را انتخاب میکنیم.
در مرحله بعد محل ذخیره پروژه را با نام دلخواه وارد میکنیم و روی گزینه Saveکلیک میکنیم.
در مرحله بعدی باید نوع میکروکنترلر را انتخاب کنیم. ما در این پروژه از Atmega32 استفاده کردهایم پس این میکروکنترلر رو انتخاب میکنیم و نام فایل را Led میگذاریم.
در مرحله بعد در قسمت C Compiler نوع chip را Atmega32 و Clock را بر روی 8MHz می گذاریم و بر روی OK کلیک می نمائیم.
حال پنجرهای باز میشود که کدهای مربوطه را در آن می نویسیم.
در ابتدا کتابخانه های مورد نیازمان را اضافه میکنیم :
#include <io.h>
#include <mega32.h>
#include <delay.h>
void main(void)
{
{
سپس در بدنه اصلی (main) کدهای برنامه را مینویسیم:
ابتدا باید یک پورت را برای اتصال به ال ای دی ها فعال کنیم و ما پورت B را فعال می کنیم و متغییر a را برای شمارش حلقه تعریف می کنیم:
void main(void)
{
int a;
DDRB=0b11111111;
{
برای روشن شدن ال ای دی ها باید مقدار آنها را 1 کنیم و اگر بخواهیم ال ای دی ها به ترتیب از چپ به راست یا بلعکس روشن و خاموش شوند باید برای هر وضعیت مقدار آن را مشخص کنیم و چون ما 8 ال ای دی داریم و می خواهیم در هر لحظه فقط یک ال ای دی روشن شود پس باید یک آرایه تعریف کرده و وضعیت ها را در آن مشخص نمائیم:
char led[]={0b00000001,0b00000010,0b00000100,0b00001000,0b00010000,0b00100000,0b01000000,0b10000000};
حال باید در یک حلقه for روشن و خاموش شدن ال ای دی ها را تعریف کنیم:
for (a=0; a<=7; a++) {
PORTB=led[a];
delay_ms(50);
};
برای روشن شدن ال ای دی ها از چپ به راست مانند بالا عمل می کنیم فقط در حلقه for باید ترتیب فراخوانی متغییرها برعکس شود و کد به شکل زیر می شود:
for (a=6 ;a>=0; a--) {
PORTB=led[a];
delay_ms(50);
};
حال اگر بخواهیم همه ال ای دی ها با هم روشن و خاموش شوند ابتدا باید همه ال ای دی ها را در حالت روشن قرار داد سپس یک وقفه داد تا نمایش داده بشوند و پس از آن همه ال ای دی ها را در حالت خاموش قرار داد و دوباره وقفه برای نمایش. برای تکرار این عملیات هم می توان این کار را در یک حلقه for قرار داد:
for(a=0; a<4; a++)
{
PORTB=0b11111111;
delay_ms(50);
PORTB=0b00000000;
delay_ms(50);
};
حال می خواهیم ال ای دی ها را یک در میان روشن و خاموش کنیم برای این کار ابتدا وضعیت هر پایه ال ای دی را یکی در میان 01 می کنیم و بعد 10 به صورت زیر:
for(a=0; a<4; a++) {
PORTB=0b01010101;
delay_ms(50);
PORTB=0b10101010;
delay_ms(50);
};
در دو حالت بالا که می خواستیم ال ای دی ها همزمان یا یک در میان روشن شوند ما در شرط حلقه a<4 قرار دادیم که این یک مقدار دلخواه میباشد و تعداد تکرار عملیات را مشخص میسازد و.
در مثال یکی مانده به آخر ال ای دی ها 4 بار خاموش و روشن میشوند و در مثال آخر هم 4 بار یکی در میان روشن و خاموش میشوند.
در این حالت نیز ال ای دی ها دوتا درمیان خاموش و روشن میشوند:
for(a=0;a<4;a++)
{
PORTB=0b11001100;
delay_ms(50);
PORTB=0b00110011;
delay_ms(50);
};
اکنون کار کدنویسی تمام شده است و اگر بخواهیم همه کد های بالا را به ترتیب پشت سر هم اجرا کنیم قطعه کد ما در نهایت به شکل زیر میباشد:
بعد از اتمام کد نویسی در نوار بالای صفحه روی گزینه Build All Project file را کلیک میکنیم اگر کدها را درست وارد کرده باشیم در پایین صفحه هیچ پیغام خطایی وجود نخواهد داشت در غیر این صورت باید خطا را رفع کنیم.
حالا نوبت به کار با Proteus می رسد و ما باید مدار را شبیه سازی کنیم.
نرم افزار Proteus را اجرا میکنیم و از قسمت بالای صفحه سمت چپ روی File => New Project کلیک میکنیم و در پنجره باز شده نام پروژه و محل ذخیره سازی پروژه را مشخص میکنیم .
مراحل بعدی را بدون تغییر بر روی next کلیک میکنیم.
و در نهایت بر روی finish کلیک میکنیم.
داخل برنامه بر روی p کلیک می کنیم.
حال در پنجره باز شده در قسمت keywords نام قطعاتی که لازم داریم را جستجو کرده و به پروژه اضافه می کنیم. ما باید میکرو Atmega32، Res، Led را همانند شکل زیر به پروژه اضافه نمائیم.
حال نوبت به بستن مدار می باشد که اتصالات به شکل زیر هستند.
بر روی میکروکنترلر atmega32 دابل کلیک میکنیم، پنجره زیر باز میشود و در آنجا فایل برنامه نویسی شده را به آن معرفی میکنیم تا برنامه اجرا شود:
در آخر مداری را که بستیم رو اجرا می کنیم، مطابق شکل زیر:
امیدوارم که استفاده لازم رو برده باشید.