آموزش میکروکنترلر AVR تحت نرم افزار کدویژن – جلسه دوم – پورت های میکرو‌کنترلر

آموزش میکروکنترلر AVR

آموزش میکروکنترلر AVR - پورت ها

طبق جلسه معرفی ATMEGA32 با میکروکنترلر آشنا شدیم و حال قراره آموزش میکروکنترلر AVR رو ادامه بدیم .سعی میکنم در این آموزش ساده توضیح بدم تا دوستانی که اولین بار قراره از میکروی avr استفاده میکنن هم بتونن برای این میکرو با کمک کدویزارد و زبان C برنامه نویسی انجام بدن.

پس بدون فوت وقت میریم سراغ محیط نرم افزار.

محیط نرم افزار کدویژن AVR

آخرین ورژن کدویژن avr میتونین در گوگل سرچ کنید و از وبسایت های معتبر دانلودی ، دانلود کنید.

در ابتدا وقتی نرم افزار رو نصب میکنین ، چند صفحه بازه که نبود اون ها خللی ایجاد نمیکنه، پس میبندیمشون.

پس صفحه ای به شکل زیرداریم:

 آموزش میکروکنترلر AVR - محیط کدویژن Codevision

برای ایجاد یک پروژه ی جدید از منوی file گزینه ی New رو انتخاب میکنیم و بعد از اون گزینه ی  project رو میزنیم.

صفحه ای میاد که میگه میخواین از کدویزارد استفاده کنید یا نه؟ و ما بله رو انتخاب میکنیم.

در پیغام بعدی طبق شکل زیر گزینه ی اول رو انتخاب میکنیم.

آموزش کدویزارد CodeVisionAVR-codewizard

توجه کنید که xmega یک سری میکروکنترلر متفاوتی از سری mega هستش که دارای امکانات متفاوتیه و این 2 سری رو باهم اشتباه نگیرید!

حالا صفحه ی کدویزارد برای ما باز میشه که دارای زبانه های مختلفه و هربخش از این زبانه هارو جلسات مختلف توضیح میدیم.اما یک سوال مهم رو در ادامه باید جواب بدیم:

کدویزارد codevisionAvr چیست؟

کدویزارد وظیفه ی اینو داره که به ما کمک کنه تا بدون نیاز به برنامه نویسی رجیستری ها توانایی داشته باشیم میکروی مورد نظرمون رو کانفیگ بکنیم و تنظیمات اولیه ی پروژه رو برای میکرو انجام بدیم.

 تنظیماتی که در کدویزاد انجام  میدیم قابل تغییر در حین برنامه نویسی هم هست!

توی پروژه هامون از atmega32 استفاده میکنیم پس تنظیمات کدویزارد در صفحه اول رو مطابق شکل زیر انجام میدیم:

CodeVisionAVR-codewizard-2

فرکانس 8مگاهرتز ، فرکانس کاری انتخاب شده ی ما هستش. فرکانس میتونه اعداد دیگه ای مثل یک مگاهرتز یا 4 مگاهرتز باشه که الان برای ما تفاوت زیادی نداره و بعدا که جلوتر بریم در بخش های دیگه مثل تایمر مفصل به تفاوت فرکانس ها میپردازیم.

تنظیمات PORT و PIN در کدویزارد

در جلسه ی  معرفی پایه های atmega32  به پایه های میکرو پرداختم و توضیح دادم که هر پورت 8 پایه داره و هر پایه این قابلیت رو داره ورودی/خروجی تعریف بشه و یک سری امکانات دیگه هم مختص هر پایه وجود داره.

در یکی از زبانه های دیگه ی کدویزارد ما میتونیم این پایه هارو مطابق شکل زیر بعنوان ورودی یا خروجی تعریف کنیم.

وقتی پایه ای بعنوان ورودی تعیین میشه دیگه میکرو برای اون ولتاژی رو ایجاد نمیکنه و صرفا ولتاژ ورودی به خودش رو میخونه.

وقتی پایه ای بعنوان خروجی تعریف میشه میتونه هم مقدار یک(5ولت) داشته باشه و هم صفر. یعنی به محض روشن شدن خروجی اون پایه رو میشه تعیین کرد که مقدار صفر و یا یک داشته باشه:

ورودی یا خروجی تعریف کردن پایه های میکرو

در اولین پروژه ی خودمون تصمیم داریم یک LED به پایه ی 7 پورت D وصل کنیم و اون رو به حالت چشمک زن دربیاریم ، به همین علت مطابق تصویر بالا ، اون پایه رو خروجی تعریف کردیم و همونطور که میبینید مقدار اولیه ی اون رو هم صفر انتخاب کردیم.

ما تنظیمات اولیه ی لازم برای این پروژه در کدویزاد انجام دادیم و حالا باید وارد محیط codevision بشیم، پس از منوی  program گزینه ی Save and exit رو میزنیم ، کدمون رو در محلی سیو میکنیم و وارد محیط کدویژن میشیم.

 

odeVisionAVR-codewizard-generate-code

همانند زبان c در کدویژن هم ما کامنت هارو با 2تا // بک اسلش مشخص میکنیم.

من کامنت های کد رو پاک کردم و کدی که کدویزارد به ما داد مطابق زیره:

الان پایه ی 7 از پورت C  که میشه پایه ی 29 میکرو ، بعنوان خروجی تعریف شده و آماده هستش تا ما به اون فرمان بدیم .

اما چطوری؟

ی بخشی رو کدویزارد برای ما مشخص کرده :

ما کدهامون رو داخل حلقه while(1) میریزیم. این حلقه بی نهایت بار تکرار میشه .

 

برای یک شدن پایه ی PC7 (پورت c و پایه ی 7)از دستور زیر استفاده میکنیم:

 

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

 

اگر این 2 دستور رو پشت سر هم در حلقه while بنویسیم میبینیم که LED تقریبا روشن نمیشه ! چرا؟ برای اینکه سرعت میکروکنترلر بالاست و چند هزار بار یا میلیون بار در ثانیه پورت رو خاموش روشن میکنه. پس باید بین هر فرمان چند ثانیه تاخیر ایجاد کنیم. برای این عمل از دستور delay_ms استفاده میکنیم. هر مقدار عددی ای که داخل پرانتز برای این دستور بنویسید بر اساس میلی ثانیه برنامه دچار تاخیر میشه.

مثلا دستور delay_ms(1000) در برنامه تاخیر یک ثانیه ای بین هر خط برنامه ایجاد میکنه.
برای استفاده از تاخیر و دستور delay_ms باید کتابخوانه dealy.h فراخوانی بشه.

در نتیجه برای روشن کردن ال ای دی به شکل چشمک زن کد حلقه while باید به شکل زیر باشه:

 

بعد از نوشتن این بخش از کد طبق تصویر زیر build all project files رو انتخاب میکنیم.

آموزش کدویژن

بعد از زدن این پروژه اگر اشتباه تایپی یا دستوری یا خطای حافظه و … نداشته باشیم باید همانند شکل زیر در پنجره جدیدی که باز میشه Error و warning وجود نداشته باشه.

error-and-warning-in-codevision

در انتها فایلی برای شما با فرمت hex در پوشه ی debug>exe ذخیره میشه که این فایل رو میتونید با کمک پروگرامر بر روی میکروکنترلر بریزید و یا اون رو در نرم افزار شبیه سازی پروتئوس به کار ببرید.(در انتها این پروزه به همراه شبیه سازی برای دانلود قرار داده شده)

 

پروژه دو :

برنامه ای بنویسید که با صفر شدن پایه ی B3 مقدار پورت C7 یک شود و بلعکس.

(حتما قبل از خوندن ادامه ی مطلب سعی به نوشتن این برنامه کنید.)

 

در این برنامه مثل برنامه قبل یک پروژه ایجاد میکنیم و در بخش پین ها پایه ی C7 رو در خروجی در نظر میگیریم. برای پایه ی B3 هم طبق شکل زیر ورودی تعریف میکنیم و مقدار P  رو برای اون انتخاب میکنیم که باعث میشه پایه پول آپ بشه. (اگر آشنا نیسین در ادامه pull up رو توضیح دادم).

پول آپ در کدویژن

نوشتن کد هم تفاوتی با پروژه ی قبل نداره و فقط باید از یک حلقه شرط if (اگر با if و دستورات شرطی آشنا نیستید کلیک کنید). استفاده کنیم و شرط تعیین کنیم.

 

در شرطِ تعیین شده گفته شده اگر پایه ی b3 صفر بود پایه ی 7 پورت c رو یک کن ، در غیر اینصورت مقدار اون رو صفر نگه دار.

فکرمیکنم برای شروع آموزش میکروکنترلر AVR تا همینجا کافی باشه ، برای بهتر یاد گرفتن میتونید بعنوان مثال چند کلید ورودی و چند led بعنوان خروجی تعریف کنید و برنامشو خودتون بنویسید. حتما برای خودتون پروژه تعریف کنید و تمرین کنید.

 

دانلود پروژه های 1 و 2 به همراه شبیه سازی در نرم افزار پروتئوس.

دانلود پروژه ها به همراه شبیه سازی نرم افزار proteus

 

نرم افزار پروتئوس رو میتونید از سایت های معتبر دانلود کنید. اگر با نحوه کار با این نرم افزار آشنایی ندارید در جلسه ی آینده آموزش ویدئویی رو ضمیمه مطلب میکنم که برای این دسته از افراد که با پروتئوس آشنا نیستن هم مناسب خواهد بود.

 

اما در آخر چند نکته:

مقاومت پول آپ در avr  یا Pull up چیست؟

پول آپ یک مقاومت متصل به میکروست ، که یک سر اون به میکروکنترلر وصل میشه و یک سر دیگه ی اون به 5 ولت.

اگر ما این مقاومت پول آپ رو طبق شکل زیر به پایه ی میکروکنترلر وصل کنیم پول آپ خارجی انجام دادیم.در این حالت همیشه پایه به مقدار 5 ولت وصل میشه و اگر کلید وصل بشه مقدار پایه به صفر تغییر میکنه.

مقاومت پول آپ

بجز وصل کردن مقاومت پول آپ در avr طبق شکل بالا با برنامه نویسی (طبق پروژه دوم همین مطلب) میتونیم مقاومت پول آپِ داخلی میکروکنترلر رو هم فعال کنیم.

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

 

چرا از حلقه بینهایت استفاده میکنیم ؟

کارهایی که با میکروکنترلر انجام میشه عموما به شکل یک چرخه هستن.مثلا برای کنترل دمای یک اتاق ما بینهایت بار و هر  چند ثانیه یا دقیقه دمای محیط رو باید اندازه بگیریم ، پس نیاز به تکرار یک سری عمل به شکل مکرر داریم. به همین جهت از حلقه بی نهایت استفاده میکنیم.

 

توجه به Sensitive Case بودن.

همونطور که در جلسه اول آموزش زبان C ” آموزش برنامه نویسی به زبان C ” گفته شده . در این زبان کوچک یا بزرگ نوشتن حروف باهم تفاوت دارن.

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

مثل delay_ms که با حروف کوچک و یا PORTC.7 که با حروف بزرگ نوشته میشه.

 

منابع این سری آموزشی:

1-کتاب آموزش جامع avr  جابرالوندی . انتشارات نص

2-کتاب آموزش کاربردی میکروکنترلرهای AVR  . انتشارات جهاد دانشگاهی

3-آموزش های ویدیویی وب سایت مکتب خونه

 

موفق باشید.

حمیدرضا مودت

یک مهندس الکترونیک ، علاقه مند به یاد دادن و یاد گرفتن پیرامون دانش برق و الکترونیک

مطالب مرتبط