آموزش Atmel studioتازه هاهمه ی مطالب

آموزش Atmel studio چشمک زن با AVR (یک)

قبلا در الکترولب آموزش هایی در مورد میکروکنترلر های AVR داشتیم و بیشتر پروژه هایی که در الکترولب کار کردیم با این میکروکنترلر ها بوده آموزش های قبلی در محیط کدویژن بود در ادامه آموزش هایی برای آشنایی دوستان با محیط Atmel studio خواهیم داشت در قسمت اول به نحوه ی ایجاد پروژه در این نرم افزار و نوشتن برنامه ی ساده ی LED چشمک زن با میکروکنترلر ATmega32 و شبیه سازی آن در برنامه پروتیوس می پردازیم. در قسمت قبلی به معرفی نرم افزار پرداختیم که توصیه می کنم قسمت قبلی را هم بخوانید.

نرم افزار Atmel studio را دانلود کنید!

این نرم افزار را می توانید از وبسایت ATmel دانلود کنید (برای دانلود باید از IP غیر ایران استفاده کنید به خاطر تحریم) البته می توانید از سایت های ایرانی نیز این نرم افزار را دانلود کنید.

نرم افزار را اجرا کنید.

atms001

از منوی فایل New Project را انتخاب کنید.

atms002

گزینه ی GCC C Executable Project را انتخاب کنید و اسم و محل ذخیره ی پروژه ی جدید را وارد کنید.

میکروکنترلر مورد نظرتان را انتخاب کنید.

atms003

من در اینجا ATmega32 را انتخاب کردم.

atms004

برنامه خود را بنویسید. بعد از نوشتن برای ایجاد فایل HEX باید دکمه F7 را بزنید یا از منوی Build گزینه Build Solution را انتخاب کنید.

شماتیک آموزش Atmel studio چشمک زن با AVR

ATMS000

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 در پروتیوس:

چون از کریستال خارجی در طراحی استفاده کردیم برای تنظیم فیوز بیت های میکروکنترلر و فرکانس در پروتیوس باید تنظیمات میکروکنترلر را به صورت زیر تغییر دهیم.

atms005

شما می توانید فایل های اتمل استدیو و پروتیوس را از اینجا دانلود کنید …

آموزش Atmel studio چشمک زن با AVR

منبع: electrosome

علی عزتی

علی عزتی هستم. رشته ی مهندسی برق الکترونیک رو خوندم. علاقه ی من به یادگیری و به اشتراک گذاشتن چیز هایی که یاد گرفتم. باعث شد تا الکترولب ایجاد بشه. علاقه ی زیادی به الکترونیک دارم. و دوست دارم چیزهای جدید یادبگیرم و بسازم ... :))

نوشته های مشابه

5 دیدگاه

  1. سلام به شما جناب عزتی و همکاران تلاشگرتون
    بازم توضیحات جالب و به روزتون باعث تشویق ما شد
    امیدوارم همچنان توان ادامه ی این آموزش ها رو تا همیشه داشته باشید.
    .
    .
    در ضمن سوال داشتم
    میشه توی کد ویژن به جای نوشتن عبارات برنامه نویسی …. مستقیما کد های باینری رو نوشت؟؟؟
    گمان می کنم کامپایلر به همین معناست درسته؟؟
    درسته برنامه نویسی کار ساده تری نسبت به نوشتن کد هاست اما بازم فکر می کنید امکان ایجاد مستقیم این کد ها باشه یا نه؟؟

    1. ایجاد و ویرایش کد باینری خیلی خیلی سخت هستش و اصلا معقول نیست یه همچین کاری بکنیم. ولی اگر علاقه به بیشتر آشنا شدن یا میکروکنترلر رو دارید می تونید با زبان اسمبلی برای AVR یا هر میکروکنترلر دیگری برنامه بنویسید که نزدیک به زبان سخت افزار یا همان باینری هستش که کدویژن زبان اسمبلی رو پشتیبانی می کند.

  2. علی آقای گل از اینکه این فایلها رو گذاشتین و توضیح دادین نهایت تشکر رو دارم
    لطف میکنی فایل رو طوری کنید تا در پرتوِوس 7 باز بشه.
    البته زیاده خواهی بنده رو ببخشید
    علی آقا من در اول خط هستم نمی دونم که با اطلاعات کمی که دارم میتونم پروژه ماشین کنترلی رو درست کنم
    انشالله

  3. سلام اقای عزتی وقتتون بخیر
    غیر از محصولات خود شرکت اتمل، امکان برنامه نویسی با این نرم افزار برای میکروهای دگ هم هست؟

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

این سایت از اکیسمت برای کاهش هرزنامه استفاده می کند. بیاموزید که چگونه اطلاعات دیدگاه های شما پردازش می‌شوند.

دکمه بازگشت به بالا