آموزش Atmel studio چشمک زن با AVR (یک)
قبلا در الکترولب آموزش هایی در مورد میکروکنترلر های AVR داشتیم و بیشتر پروژه هایی که در الکترولب کار کردیم با این میکروکنترلر ها بوده آموزش های قبلی در محیط کدویژن بود در ادامه آموزش هایی برای آشنایی دوستان با محیط Atmel studio خواهیم داشت در قسمت اول به نحوه ی ایجاد پروژه در این نرم افزار و نوشتن برنامه ی ساده ی LED چشمک زن با میکروکنترلر ATmega32 و شبیه سازی آن در برنامه پروتیوس می پردازیم. در قسمت قبلی به معرفی نرم افزار پرداختیم که توصیه می کنم قسمت قبلی را هم بخوانید.
نرم افزار Atmel studio را دانلود کنید!
این نرم افزار را می توانید از وبسایت ATmel دانلود کنید (برای دانلود باید از IP غیر ایران استفاده کنید به خاطر تحریم) البته می توانید از سایت های ایرانی نیز این نرم افزار را دانلود کنید.
نرم افزار را اجرا کنید.
از منوی فایل New Project را انتخاب کنید.
گزینه ی GCC C Executable Project را انتخاب کنید و اسم و محل ذخیره ی پروژه ی جدید را وارد کنید.
میکروکنترلر مورد نظرتان را انتخاب کنید.
من در اینجا ATmega32 را انتخاب کردم.
برنامه خود را بنویسید. بعد از نوشتن برای ایجاد فایل HEX باید دکمه F7 را بزنید یا از منوی Build گزینه Build Solution را انتخاب کنید.
شماتیک آموزش Atmel studio چشمک زن با AVR
LED ها به PORTC وصل شده اند و جریان آن ها با مقاومت های 680 محدود شده است. کریستال 16 مگاهرتز کلاک میکرو را تامین می کند از خازن های 22P برای پایداری عملکرد کریستال استفاده شده است. از خازن 10p و مقاومت 10K اهم برای ریست شدن دستگاه هنگام روشن شدن یا POR مخفف Power On Reset استفاده شده است. وقتی که منبع تغذیه وصل می شود ولتاژ از طریق خازن صفر خواهد شد و میکروکنترلر ریست خواهد شد. وقتی که خازن تا VCC شارژ شد میکرو از حالت ریست خارج خواهد شد. پین سیم میکروکنترلر (AVCC) در صورت استفاده از PORTA باید به VCC وصل شود.
برنامه C در Atmel studio:
#ifndef F_CPU #define F_CPU 16000000UL // 16 MHz clock speed #endif #include <avr/io.h> #include <util/delay.h> int main(void) { DDRC = 0xFF; //Nakes PORTC as Output while(1) //infinite loop { PORTC = 0xFF; //Turns ON All LEDs _delay_ms(1000); //1 second delay PORTC= 0x00; //Turns OFF All LEDs _delay_ms(1000); //1 second delay } }
- DDRC = 0xFF همه پین های PORTC را به صورت خروجی تنظیم می کند.
- PORTC = 0xFF همه پین های PORTC را یک منطقی می کند (5V).
- PORTC = 0x00 همه پین های PORTC را صفر منطقی می کند (0V).
- delay_ms تاخیری به اندازه مقدار نوشته شده در پارانتز ایجاد می کند.
- whie(1 یک حلقه ی بی نهایت ایجاد می کند.
از رجیستر PORT برای نوشتن دیتا بر روی پین های یک پورت استفاده شد برای خواندن دیتا از روی پورت های می توانید از رجیستر PIN به طور مشابه استفاده کنید در آینده بیشتر در این مورد توضیح خواهم داد.
نکته مهم و تفاوت اول کدویژن و Atmel studio:
اگر با کدویژن کار کرده باشید برای ست کردن یا ریست کردن 1 پین از یک پورت می توانستید به راحتی از دستور زیر ایتفاده کنید. مثلا:
PORTC.0=0;//SET //OR PORTC.0=1;//RESET
که این روش غیر استاندارد و فقط مخصوص محیط کدویژن است و اگر در آینده بخواهید از میکروکنترلر های دیگر یا محیط های برنامه نویسی دیگر استفاده کنید این روش به کارتان نمی آید و شاید باعث سردرگمی شما شود پس از اول روش استاندارد و درست آن را یاد بگیرید.
پس در Atmel studio دسترسی بیتی به رجیستر ها نداریم و اگر بخواهیم یک پین از پورت را تنظیم کنیم یا از وضعیت یک پین از پورت آگاهی داشته باشیم باید به صورت زیر عمل کنیم. به عنوان مثال می خواهیم پین PC2 را به صورت ورودی تنظیم کنیم یعنی صفر باید بنویسم.
DDRC &= ~(1<<PC2)
(1<<PC2) کد باینری 00000100 را ایجاد می کند و علامت ~ آن را به صورت 11111011 تغییر می دهد. و اگر بخواهیم به صورت خروجی تنظیم کنیم یعنی یک باید از روش زیر استفاده کنیم.
DDRC |= (1<<PC2)
و برای خواندن وضعین یک پین از روش زیر استفاده می کنیم
a = PINC & (1<<PC2)
وضعیت PC2 در متغییر a ذخیره شد.
شبیه سازی آموزش Atmel studio چشمک زن با AVR در پروتیوس:
چون از کریستال خارجی در طراحی استفاده کردیم برای تنظیم فیوز بیت های میکروکنترلر و فرکانس در پروتیوس باید تنظیمات میکروکنترلر را به صورت زیر تغییر دهیم.
شما می توانید فایل های اتمل استدیو و پروتیوس را از اینجا دانلود کنید …
آموزش Atmel studio چشمک زن با AVR
منبع: electrosome
سلام به شما جناب عزتی و همکاران تلاشگرتون
بازم توضیحات جالب و به روزتون باعث تشویق ما شد
امیدوارم همچنان توان ادامه ی این آموزش ها رو تا همیشه داشته باشید.
.
.
در ضمن سوال داشتم
میشه توی کد ویژن به جای نوشتن عبارات برنامه نویسی …. مستقیما کد های باینری رو نوشت؟؟؟
گمان می کنم کامپایلر به همین معناست درسته؟؟
درسته برنامه نویسی کار ساده تری نسبت به نوشتن کد هاست اما بازم فکر می کنید امکان ایجاد مستقیم این کد ها باشه یا نه؟؟
ایجاد و ویرایش کد باینری خیلی خیلی سخت هستش و اصلا معقول نیست یه همچین کاری بکنیم. ولی اگر علاقه به بیشتر آشنا شدن یا میکروکنترلر رو دارید می تونید با زبان اسمبلی برای AVR یا هر میکروکنترلر دیگری برنامه بنویسید که نزدیک به زبان سخت افزار یا همان باینری هستش که کدویژن زبان اسمبلی رو پشتیبانی می کند.
علی آقای گل از اینکه این فایلها رو گذاشتین و توضیح دادین نهایت تشکر رو دارم
لطف میکنی فایل رو طوری کنید تا در پرتوِوس 7 باز بشه.
البته زیاده خواهی بنده رو ببخشید
علی آقا من در اول خط هستم نمی دونم که با اطلاعات کمی که دارم میتونم پروژه ماشین کنترلی رو درست کنم
انشالله
چشم وقت کردم اصلاحش می کنم تا با 7 هم باز بشه
سلام اقای عزتی وقتتون بخیر
غیر از محصولات خود شرکت اتمل، امکان برنامه نویسی با این نرم افزار برای میکروهای دگ هم هست؟