در قسمت سوم آموزش میکروکنترلر XMEGA به آشنایی با رجیسترهای پورت میکروکنترلر XMEGA پرداختیم. در این قسمت از آموزش میکروکنترلر XMEGA به نحوه ایجاد پروژه و کامپایل و پروگرام کردن آن در AtmelStudio میپردازیم. همچنین، دو مثال دراینخصوص بیان میکنیم.
ابتدا باید اشاره کرد که در این آموزشها قصد داریم در نهایت به انجام آزمایشهای عملی برسیم.
مثال اول
ایجاد پروژه، کامپایل و پروگرام کردن آن در AtmelStudio
شاید برای شما مفید باشد: دانلود نرم افزار Atmel Studio
برای ایجاد یک پروژه جدید میتوانید از هر کدام از این دو روش استفاده کنید:
- در صفحه ابتدایی که بعد از اجرای AtmelStudio ظاهر میشود (بهعنوان Start Page)، یک گزینه به نام New Project وجود دارد که از این طریق میتوانید یک پروژه جدید ایجاد کنید.
- از منوی File گزینه New و در نهایت گزینه Project را انتخاب کنید تا یک پروژه جدید برای شما ایجاد شود.
اگر صفحه Start Page غیرفعال باشد، برای فعالکردن آن ابتدا از منوی View وارد قسمت Start Page شوید. در این صفحه، با انتخاب گزینه New Page یک صفحه جدید برای شما باز میشود که در این صفحه، گزینه ابتدایی (GCC C Executable Project) بهصورت پیشفرض فعال است. در اینجا مسیری برای تشکیل پروژه باید مشخص شود. همچنین، باید یک نام برای پروژه تعیین گردد؛ بهعنوانمثال، برای اولین پروژه که یک پروژه چشمکزن LED است، نام XMEGA_LED_0 را انتخاب میکنیم. در نهایت، بعد از اعمال تغییرات در این صفحه، گزینه OK را انتخاب میکنیم. سپس صفحه دومی باز میشود که در آن باید چیپ موردنظر را انتخاب کنیم؛ چیپهای مختلفی در اینجا قابلانتخاب است که باتوجهبه سختافزار در دسترس،
AT xmega64A3 را بهعنوان چیپی که قرار است کد برای آن نوشته شود، انتخاب میکنیم.
بعد از OK کردن، فایل XMEGA_LED_0.C تشکیل میشود که میتوانیم کد خود را در اینجا بنویسیم. برای صرفهجویی در زمان، میتوان از قبل پروژهای تشکیل داد و کد را در آن نوشت. اکنون باید فایل حاوی کد را باز کنیم. سپس محتوای داخل این فایل را کپی و در فایل جاری پیست میکنیم.
در جلسه قبل توضیح دادیم که ۸ تا LED روی برد آموزشی وجود دارد که آنودهای آنها با مقاومت به پورت E متصل هستند و همچنین، از طریق یک بافر به PF0 متصل هستند. برایناساس، محتوای کد را بررسی میکنیم. در ابتدا کامنتهایی نوشته شده، در مرحله بعد فایل avr/io.h وجود دارد که این فایل را باید در ابتدا حتماً include کنیم.
باتوجهبه اینکه در این پروژه، یک بیس زمانی موردنظر هست، از delay.h استفاده میکنیم تا بتوانیم از تابع delay_ms استفاده کنیم. البته باید به محتوای فایل رجوع کنیم و بررسی کنیم که آیا delay_ms تابع هست یا خیر. اما با فرض اینکه delay_ms تابع است، در این پروژه از آن استفاده میکنیم؛ استفاده از این تابع یعنی هر نیم ثانیه یکبار، وضعیت LED تغییر میکند.
همانطور که قبلاً هم اشاره شد، کلاک پیشفرض در XMEGA مقدار ۲ مگاهرتز است که از اسیلاتور RC داخلی ۲ مگاهرتز تأمین میشود؛ بنابراین قبل از include کردن delay.h، FCPU را با مقدار ۲ میلیون define میکنیم. همچنین، UL نیز در اینجا به معنای Unsigned Long است؛ بنابراین اگر UL جلوی یک عدد قرار دهیم، کامپایلر متوجه میشود که این عدد اولاً یک عدد از نوع unsigned و ثانیاً از نوع long است.
تعریف FCPU در ۲ میلیون باعث میشود که مبنای زمانی در delay_ms بهدرستی اتفاق بیفتد. در بدنه تابع Main، PE0 را خروجی تعریف کردیم که در این مورد در جلسه قبل کامل توضیح داده دادیم. همین مسئله برای PF0 نیز برقرار است. در گام بعدی PF0 را high میکنیم، سپس خط مشترک LEDها و مسیر جریان را برای آن فراهم میکنیم. درست است که LEDها بهصورت کامان کاتد هستند، اما چون یک ترانزیستور سر راه آنها قرار گرفته باید یک PF0 را high کنیم. همچنین، PE0 را high میکنیم که در پایان این دستور، LED سمت راست در برد آموزشی روشن شود. در حلقه Y یک تأخیر ۵۰۰ میلیثانیه ایجاد میشود و سپس وضعیت PE0 تغییر میکند.
Port E Out toggle = PIN0_BM
همانطور که در جلسه قبل اشاره شد toggle Out وضعیت پین یا پینهایی را toggle میکند؛ یعنی اگر پین در وضعیت high باشد، آن را Low میکند و برعکس.
یک توضیح اینجا لازم است که وقتی که دستوری مثل toggle Out عمل میکند، مقدار متناظر در رجیستر Out هم بهصورت خودکار تغییر میکند. بهاینترتیب، یک شرایط چشمکزدن برای یکی از LEDها ایجاد میشود.
در مرحله بعدی با زدن F7 پروژه کامپایل میشود. گام بعدی شامل پروگرام کردن فایل خروجی است که برای این کار از قسمت Tools گزینهprogramming Device را انتخاب میکنیم. سپس صفحهای باز میشود؛ در این صفحه IC و چیپ موردنظر را انتخاب و سپس گزینه اپلای را کلیک میکنیم. در این صورت، گزینهها ظاهر میشوند، با استفاده از گزینه Memorize فایل خروجی پروژه را که با پسوند elf هست، روی برد پروگرام میکنیم. اگر سختافزار و پروگرامر در دسترس ما باشد، شرایط چشمکزدن برای LED فراهم خواهد شد. پس این یک مثال برای تشکیل پروژه، نوشتن برنامه و کامپایل کردن آن و همچنین، پروگرام کردن برنامه روی میکروکنترلر است.
مثال دوم
بهعنوانمثال دوم میتوانیم از طریق گزینه New Project یک پروژه جدید تشکیل دهیم. مجدداً به همان ترتیب عمل میکنیم. نام این پروژه را XMEGA_LED_1 میگذاریم. البته اینجا اگر ما بار را پایین آوریم، در بعضی مواقع دوباره به بالا برمیگردد که ممکن است این موضوع یکی از باگهای AtmelStudio باشد. مراحل را مثل پروژه قبل انجام میدهیم تا مجدداً فایل تشکیل شود. در ادامه کار، فایل حاوی کد را باز میکنیم. سپس محتوای داخل این فایل را کپی و در فایل جاری پیست میکنیم.
در این پروژه هدف ما استفاده از ۸ تا LED است. بهاینترتیب که در ابتدا LED سمت راست روشن باشد و بعد از خاموششدن آن، LED کناری روشن شود و به همین ترتیب از راست به چپ LED حرکت کند.
اینجا متغیری به نام LED تعریف شده که مقدار اولیه آن ۱ است و با گذشت برنامه مقدار آن به ۳۲،۱۶،۸،۴،۲ تغییر میکند و بهطورکلی یک شیفت به چپ پیدا میکند.
در این پروژه میخواهیم کل پینهای پورت E را خروجی تعریف کنیم.
برای خواناتر بودن برنامه ازPIN 0 ،1 PIN تا PIN7_BM استفاده میشود. وضعیت PF0 بهصورت خروجی است و مقدار آن high هست. در حلقه Y در ابتدا متغیر LED در پورت E Out قرار میگیرد که مقدار آن ۱ هست.
همچنین، یک تأخیر ۵۰۰ میلیثانیهای ایجاد میشود و متغیر LED به سمت چپ شیفت پیدا میکند. بهعلاوه، این شرط وجود دارد که اگر متغیر صفر شد، مقدار آن ۱ قرار داده شود. پس باتوجهبه شیفت به چپ، LED مقادیر: ۳۲،۱۶،۸،۴،۲، ۶۴ و ۱۲۸ را در خود جای میدهد. همچنین، یکبار که ۱۲۸ به چپ شیفت پیدا کند، مقدار آن صفر میشود. در این شرایط، مقدار اولیه دوباره به LED نسبت داده میشود. این پروژه را نیز ابتدا کامپایل و سپس پروگرام میکنیم که پروگرام کردن آن را میتوان از دو طریق انجام داد:
۱. انتخاب گزینه programming Device از قسمت Tools ۲. استفاده از Control Shift P
اگر این پروگرام کردن انجام شود، شاهد آن خواهیم بود که LEDها از سمت راست به چپ شیفت پیدا میکنند و آنچه که هدف انجام این برنامه بود، بهخوبی اجرا میشود.
بهعنوان آخرین مطلب، فایل iox64.h را روی صفحه، نمایش داده و سپس اگر عبارت PIN0_BM را در این فایل سرچ کنیم، ملاحظه میکنیم که برای PIN0_BM یک define انجام شده و به همین ترتیب برای پینهای بعدی defineهایی ایجاد شده است که از این defineها میتوانیم در برنامه استفاده کنیم.
همچنین، لازم به ذکر است که BP مخفف Bit Position است و BM مخفف Bit Max هست که هر کدام را لازم باشد میتوانیم در برنامه استفاده کنیم.
در قسمت پنجم آموزش میکروکنترلر XMEGA با مدهای ورودی و خروجی پورت ها آشنا میشویم. با سیسوگ همراه باشید.
سری مقالات آموزش میکروکنترلر XMEGA توسط آقای مهندس کینژاد تهیه شده است.