آموزش برنامه نویسی AVR
یکی از نیازهای اصلی و مهم دانشجویان، محققان و علاقهمندان به رشتههای الکترونیک و رباتیک، ساخت دستگاهها و تجهیزات مختلف کنترلی و برنامهپذیر مانند تایمر و ساعت و نیز ایجاد امکان کنترل لوازم از طریق اینترنت یا پیامک و کنترل سرورها است که برای این منظور از میکروکنترلرها استفاده میشود. میکروکنترلرهای AVR نوعی ریزکنترلر جدید هستند که شرکت اتمل (Atmel) آنها را وارد بازار الکترونیک کرده است. میکروکنترلر avr یک میکروکنترلر پر کاربرد و متداول است که برای برنامهنویسی آن میتوان از کامپایلرهای مختلفی مانند اتمل استودیو (Atmel Studio) استفاده کرد.
ویژگیهای میکروکنترلر avr
از ویژگیهای بارز میکروکنترلرهای avr میتوان به کارایی بالا، سرعت بالا و مصرف انرژی کم اشاره کرد. این قطعات میتوانند چرخه ماشین را متوقف کنند و عملیات خط لوله را با چرخه ساعت اجرا کنند. بیشتر دستورالعملهای میکروکنترلر avr تک چرخه هستند. چرخه واحد میتواند عملکرد یک دستورالعمل را پیش ببرد و خواندن دستورالعمل بعدی را کامل کند. در مجموع ۳۲ رجیستر همه منظوره در میکروکنترلرهای avr وجود دارد که ۱۶ رجیستر اول (R0 – R15) نمیتوانند به طور مستقیم و فوری اقدام کنند.
در ضمن، میکروکنترلر avr بالاترین کارایی و اجرا در CPU را دارد. در برنامهنویسی آن از کدهای کوچک استفاده میشود. این تراشهها قابلیت به روزرسانی بالایی دارند و حافظه خود برنامهریز آنها کاربردهای بسیاری دارد. همچنین این میکروکنترلر دارای بهترین MCU برای حافظه فلش است.
چگونه میکروکنترلر avr را برنامه نویسی میکنند؟
میکروکنترلرهای avr را با زبانهای مختلف و کامپایلر مختلفی برنامهنویسی میکنند. یکی از این زبانها زبان C در نرمافزار CodeVision، یک کامپایلر برنامهنویسی است. از دیگر کامپایلرهای معتبر و معروف میتوان به اتمل استودیو (Atmel Studio)، بسکام (BASCOM)، IAR، کدویژن (CodeVision AVR C Complier)، آردوینو (Arduino IDE) و WinAVR اشاره کرد. اگر قصد دارید که برنامه نویسی میکروکنترلر avr را به زبان C یاد بگیرید، این بخش را به صورت کامل دنبال کنید.
معرفی زبان C
زبان C یک زبان برنامهنویسی ساده و پرقدرت است که در سال ۱۹۷۲ توسط دنیس ریچی طراحی شده است. این زبان یکی از زبانهای سطح میانی در بین زبانهای برنامهنویسی به شمار میآید. زبان C یک زبان برنامهنویسی ساختیافته به شمار میآید که با استفاده از حلقههای تکرار (مانند for و while) میتوان در آن برنامهای نوشت که قابلیت خوانایی بالایی داشته باشد.
ویژگیهای زبان C
زبان C همانطور که اشاره کردیم یک زبان برنامهنویسی قابل انعطاف و قدرتمند است. ارتباط تنگاتنگی بین زبان C و اسمبلی (Assembly) وجود دارد. تعداد کلمات کلیدی این برنامه ۳۰ عدد است که به نسبت دیگر برنامهها کمتر است. زبان برنامهنویسی C به حروف کوچک و بزرگ حساس است. نکته قابل توجه اینجا است که تمام کلمات کلیدی در این زبان با حروف کوچک نوشته میشوند. برای مثال کلمه int یک کلمه کلیدی است اما INT کلمه کلیدی به شمار نمیآید.
هر دستور در زبان C به “;” ختم میشود. در این زبان برنامهنویسی حداکثر طول یک دستور ۲۵۵ کاراکتر است. هر دستور میتواند در یک یا چند سطر ادامه داشته باشد. در هر سطر نیز میتوان چند دستور تایپ کرد. در زبان C توضیحات میتوانند بین */ و */ قرار بگیرند و یا پس از // نوشته شوند.
انواع داده در زبان C
در زبان C چهار نوع داده وجود دارد که با پیشوندهای Short (کوتاه)، Long (بلند)، Signed (علامتدار) و Unsigned (بدون علامت) همراه میشوند. همچنین از موارد زیر برای ذخیره کاراکترهای مختلف ورودی در زبان C استفاده میشود:
- Char یا کاراکتر: این نوع داده برای ذخیره کاراکترهایی مانند a، ۲ و x استفاده میشود
- Lint برای اعداد صحیح: برای ذخیره اعداد صحیح مانند ۱۹- و ۱۴ به کار میرود
- Float (عدد اعشاری): برای ذخیره اعداد اعشاری مانند ۳٫۱۴ و ۱۲٫۷۵ استفاده میشود
- Double اعداد اعشاری بزرگ: برای ذخیره اعداد اعشاری بزرگتر از Float از Double استفاده میشود
با در دست داشتن اطلاعات این بخش میتوانید به صورت مقدماتی برنامه نویسی میکروکنترلر avr را شروع کنید و قدم به قدم بر یادگیری خود بیافزایید. در این وبسایت آموزش میکروکنترلر avr با اتمل استودیو (Atmel Studio)، کد ویژن (CodeVision) و کامپایلر کیل (Keil) به صورت کامل برای شما قرار داده شده است.
مزایای برنامه نویسی میکروکنترلر avr
اگر قصد دارید که میکروکنترلر خود را از نوع avr انتخاب کنید ولی هنوز در مورد این کار متقاعد نشدهاید بهتر است که به مطالب این بخش دقت کنید. در این بخش برخی از مزایای مهم استفاده از میکروکنترلر avr برای شما لیست شده است:
- قیمت مناسب
- سهولت و آسانی استفاده
- به راحتی در دسترس است
- سرعت بالایی دارد
- برنامه نویسی آن آسان است
- دیتاشیتهای مفصل و گستردهای دارد
- راهاندازی آن آسان است
- حافظه داخلی دارد
موارد استفاده از میکروکنترلر avr چیست؟
برنامه نویسی میکروکنترلر avr باعث استفاده آن در موارد مختلفی از جمله امنیت، پیشرانه و سیستمهای سرگرمی میشود. Atmel یکی از کامپایلرهای برتر میکروکنترلر avr اخیرا نشریه جدیدی را با عنوان Atmel Automotive Compilation راهاندازی کرده است که به توسعهدهندگان در زمینه برنامههای خودرو کمک کند. برخی از کاربردهای فعلی این میکروکنترلر در BMW و TRW است.
شرکتهای مختلفی بردهای میکروکنترلر avr را تولید میکنند که برای استفاده علاقهمندان، سازندگان ربات، آزمایشکنندگان و توسعهدهندگان سیستمهای کوچک مانند BasicX و Oak Micros این قطعات را میسازند. اشنایدر الکتریک برای تولید تراشه موتور و کنترل حرکت M3000 از میکروکنترلر avr استفاده میکرد که دارای یک هسته Atmel AVR و یک کنترلکننده حرکت پیشرفته برای استفاده در برنامههای حرکتی بود.
کامپایلرهای مختلف میکروکنترلر AVR
برای برنامه نویسی میکروکنترلر avr کامپایلرهای متفاوتی در سراسر جهان منتشر شده است که محبوبترین آنها در ایران کدویژن، اتمل استودیو و بسکام هستند. در این بخش به هریک از این کامپایلرهای برنامه نویسی میکروکنترلر avr آشنا میشویم.
۱. اتمل استودیو (Atmel Studio)
اتمل استودیو یک پلتفرم توسعه یکپارچه یا IDP است که با استفاده از آن میتوانید برنامه میکروکنترلرهای avr را عیبیابی یا اشکال زدایی کنید و توسعه دهید. این کامپایلر یکی از قدرتمندترین کامپایلرهای avr در سراسر جهان است ولی در عین حال از بقیه کامپایلرها پیچیدهتر است. این کامپایلر به صورت رایگان در اینترنت قابل دانلود است. علاوه بر میکروکنترلرهای avr، این کامپایلر توانایی برنامه نویسی میکروکنترلرهای arm را نیز دارا است. در آموزش زیر میتوانید به آموزشهای کامل کامپایلر اتمل دسترسی داشته باشید.
۲. کامپایلر بسکام (BASCOM)
این کامپایلر محصولی از شرکت MCS Electronics در هلند است که زبان QBASIC را پشتیبانی میکند. نسخه آزمایشی این کامپایلر از سایت رسمی شرکت قابل دانلود است. با این نسخه میتوان حداکثر ۴ کیلوبایت را کامپایل کرد که برای چیپهایی مانند Atmega48 و سری TinyAVR بسیار مناسب است. نسخه تجاری این کامپایلر این قابلیت را دارا است که تا ۱۲۸ کیلوبایت را کامپایل کند. در ایران به علت نبودن قانون کپی رایت از این نرم افزار به صورت گسترده استفاده میشود.
۳. کامپایلر IAR Embedded Workbench AVR
حروف اختصار IAR به معنای شرکت مهندسی اندرس روندگرن است. IAR Systems یک شرکت نرمافزار کامپیوتری سوئدی است که ابزارهای توسعه سیستمهای تعبیه شده را به کاربران ارائه میدهد. IAR از کامپایلرهای قدرتمند در برنامه نویسی میکروکنترلر avr است که از بیشتر میکروکنترلرهای موجود در بازار پشتیبانی میکند.
سازندگان میکروکنترلرها معمولا مثالهایی که در کد منبعشان دارند به این زبان است. معمولا منابع اینترنتی بسیاری برای این محیط برنامه نویسی وجود ندارد و شاید به همین علت است که خیلی به سراغ آن نمیروند. قیمت این نرمافزار به صورت متغیر از ۹۰۰ تا ۳ هزار دلار است.
۴. کدویژن (CodeVision AVR C Compiler)
این کامپایلر محصولی از شرکت HP InfoTech است. این کامپایلر از زبان C پشتیبانی میکند. شرکت HP InfoTech انواع مختلفی از این نوع کامپایلر را وارد بازار کرده است. نسخه رایگان این کامپایلر میتواند تا ۲ کیلوبایت را کامپایل کند. نسخههای دیگر نوع پیشرفته و حرفهای را شامل میشوند. در سایت سازنده تفاوت بین این دو نسخه به طور کامل توضیح داده شده است. شما میتوانید با رجوع به لینک زیر، از آموزشهای کامل فرادرس در مورد کامپایلر Codevision استفاده کنید.
۵. کامپایلر WinAVR
یکی از قویترین کامپایلرهای سراسر جهان برای برنامه نویسی میکروکنترلرهای avr، WinAVR است و طرفداران بسیاری در سراسر دنیا دارد. این کامپایلر کاملا رایگان است. در حالت کلی میتوان گفت که بیشتر برنامهنویسان حرفهای میکروکنترلرهای avr از این کامپایلر استفاده میکنند. این کامپایلر به خاطر اینکه کد HEX کمتری تولید میکند در آخر، برنامه بهینه و سریعتری را به شما ارائه میدهد.
۶. آردوینو (Arduino IDE)
نرمافزار منبعباز (Open Source) آردوینو کدنویسی و بارگذاری کد روی مدار را سهولت میبخشد. این نرمافزار برای سیستمعاملهای ویندوز، مک و لینوکس قابل اجرا است. همچنین نرمافزار آردوینو با تمامی بردهای آردوینو سازگاری دارد. این محیط برنامه نویسی با استفاده از زبان جاوا و بر پایه پراسسینگ، avr-gcc و سایر نرمافزارهای منبعباز تولید شده است.
اصول برنامهنویسی در نرمافزار آردوینو تا حد زیادی به زبان C و C++ تشابه دارد؛ اگرچه در برخی از دستورها، فرمانها، تابعها و کتابخانهها تغییرات خاصی مختص آردوینو ایجاد شده است. روند کلی کار با این نرمافزار به این صورت است که ابتدا دستورها در پنجره ویرایش متن قرار داده میشوند. سپس کامپایل شده و روی میکروکنترلر بورد آردوینو بارگذاری میشوند. پیش از بارگذاری لازم است بورد آردوینو از طریق درگاه USB به رایانه متصل شده باشد.
رابطهای برنامهنویسی و عیبیابی میکروکنترلر avr
راه و روشهای زیادی برای برنامهنویسی و اشکالیابی کردن میکروکنترلرهای avr وجود دارد و هرکدام از آنها روش خاص خود را دارد. در این بخش با رابطهای برنامهنویسی معروفی که برای عیبیابی میکروکنترلر استفاده میشوند را برای شما شرح دادهایم.
۱. رابط برنامهنویسی ISP
روش برنامهنویسی درون مجموعه (In-System Programming) که به طور مخفف ISP نامیده میشود، توسط پروتکل گذرگاه ارتباط جانبی سریال به علاوه ارسال سیگنال با لبه بالا رونده یا پایین رونده بر پایه RESET کار میکند و پرکاربردترین روش برنامه نویسی میکروکنترلر avr است. تا زمانی که پایههای ISP ریزکنترلر به چیزی که اختلال وارد میکند وصل نشده باشد، میکروکنترلر avr میتواند سر جای خود روی برد مدار چاپی باقی بماند. تنها چیزی که نیاز است یک پایانه ۶ پایه و مبدل برنامهنویسی است.
۲. رابط برنامهنویسی PDI
رابط برنامهنویسی و اشکال زدایی میکروکنترلرها (The Program an Debug Interface) به طور مخفف PDI نامیده میشود که یکی از خصوصیات میکروکنترلرهای avr برای برنامهریزی توسط یک ابزار خارجی و عیبیابی بر روی برد است. این رابط برنامهنویسی با بخش JTAG متفاوت است و برای دستگاههای خانواده XMEGA طراحی شده است.
۳. رابط برنامهنویسی HVSP
برنامهنویس ولتاژ بالای سریال (High Voltage Serial Programmer) که به صورت مخفف HVSP معروف است، بیشتر حالت پشتیبانی در avrهای کوچکتر را بر عهده دارد. یک تراشه ۸ پین بیشتر ترکیبات منحصر به فرد سیگنال را برای قرار دادن avr در حالت برنامهنویسی باقی نمیگذارد. با این حال، avr فقط در زمان برنامه نویسی باید در ولتاژ ۱۲ دیده شود و هرگز در زمان عادی نباید در این ولتاژ باشد.
۴. رابط برنامهنویسی HVPP
برنامهنویسی ولتاژ بالای موازی (High Voltage Parallel Programmer) یک روش برنامهنویسی است که در آن اطلاعات به صورت ۸ بیت مجزا توسط یک پورت انتقال داده میشوند. طبق دستورالعمل شرکت سازنده باید ولتاژ ۱۲ ولت به پایه RESET اعمال شود. از این روش در مواقع محدود شدن دسترسی تراشه از ISP و JTAG، وقتی که کاربر مجبور میشود پردازشگر را برنامه نویسی کند، استفاده میشود. بر خلاف ISP که برای برنامهنویسی میکروکنترلر avr نیاز به ۶ رشته کابل دارد، در این روش تقریبا تمامی پایههای تراشه مورد نظر به کار گرفته میشوند. از مزایای این رو میتوان به سرعت بالا و دسترسی کامل به تراشه اشاره کرد. تنها برنامهریزهایی مانند STK500HV از این روش پشتیبانی میکنند.
۵. رابط برنامهنویسی Bootloader
بیشتر مدلهای avr میتوانند یک منطقه بوتلودر (BootLoader) را از ۲۵۶ بایت تا ۴ کیلوبایت رزرو کنند، جایی که کد برنامهنویسی مجدد میتواند در آن نوشته شود. در هنگام بازنشانی، بوت لودر در ابتدا اجرا میشود و با برنامهنویسی توسط کاربر تعیین میشود که آیا دوباره برنامهریزی شود یا به برنامه اصلی خود بازگردد. این کد میتواند از طریق هر رابط برنامهنویسی دوباره برنامهریزی شود، یا اینکه میتواند یک کد باینری رمزگذاری شده را از طریق یک آداپتور اترنت مانند PXE بخواند. Atmel از طریق این رابط برنامهنویسی کد مربوط به بسیاری از رابطهای اتوبوسها را نوشته است.
۶. رابط برنامهنویسی ROM
سری AT90SC از میکروکنترلرهای avr با رابط برنامهنویسی شرکت ROM در دسترس هستند. به دلیل هزینه اولیه بسیار بالا و وجود میزان حداقل سفارش، ماسک-ROM فقط برای اجرا در تولیدات تعداد بالا برای طرفین مقرون به صرفه خواهد بود.
اشکالزدایی و عیبیابی رابطها
پس از برنامه نویسی میکروکنترلر avr گاهی وقتها نیاز به عیبیابی رابط برنامهنویسی خود داریم. Avr چندین گزینه را برای اشکالزدایی ارائه میدهد که بیشتر شامل عیب یابی روی تراشه در زمانی که در سیستم هدف در حال استفاده است، میشود.
گزینه DebugWIRE
راه حل Atmel برای عیبیابی میکروکنترلرها DebugWIRE است که برای ارائه قابلیتهای اشکال زدایی روی تراشه از طریق یک پایه میکروکنترلر انجام میشود. این راه به ویژه برای قطعاتی که تعداد پین کنتری دارند و نمیتوانند چهار پین یدکی مورد نیاز برای JTAG را فراهم کنند بسیار مفید است. DebugWIRE پس از نسخه اصلی JTAGICE توسعه داده شد و اکنون کاربرد بسیاری در الکترونیک دارد.
گزینه JTAG
گروه اقدام آزمایش مشترک (Joint Test Action Group) یا JTAG دسترسی به عملکرد عیبیابی روی تراشه avr را در حالی که تراش در سیستم هدف در حال اجرا است، فراهم میکند. JTAG امکان دسترسی به حافظه داخلی و رجیسترها، تعیین شکست روی کد و اجرای تک مرحلهای برای مشاهده رفتار سیستم را برای کاربران فراهم میکند. Atmel مجموعهای از آداپتورهای JTAG را برای avr ارائه میدهد. Atmel-ICE جدیدترین آداپتور این شرکت است که از رابطهای ISP، JTAG و PDI پشتیبانی میکند.
JTAGICE mkll از طریق USB به رایانه شخصی متصل میشود و هم JTAG و هم رابط debugWIRE جدیدتری را پشتیبانی میکند. بسیاری از کلونهای شخص ثالث دستگاه Atmel JTAGICE mkll پس از انتشار پروتکل ارتباطی Atmel شروع به ارسال دیتا کردند.
AVR Dragon یک جایگزین مناسب و ارزانقیمت برای JTAGICE mkll است که برای قطعاتی که هدف خاصی دارند ساخته شده است. AVR Dragon برنامهنویسی سریال درون سیستم، برنامهنویسی ولتاژ بالا و همچنین برنامهنویسی موازی و شبیهسازی JTAG را برای قطعاتی با حافظه برنامه ۳۲ کیلوبایتی یا کمتر ارائه میدهد.
آداپتور JTAGICE از طریق یک پورت استاندارد سریال به رایانه شخصی متصل میشود. اگرچه آداپتور JTAGICE توسط Atmel به عنوان “پایان عمر” اعلام شده است، اما همچنان در AVR Studio و سایر ابزارهای مشابه پشتیبانی میشود.
JTAG همچنین میتواند برای انجام تست اسکن مرزی استفاده شود. در این تست اتصالات الکتریکی بین avr و سایر تراشههای دارای قابلیت اسکن مرزی در یک سیستم آزمایش میشوند. اسکن مرزی برای یک خط تولید مناسب است، درحالی که بهتر است با یک مولتیمتر یا اسیلوسکوپ آزمایش خود را انجام دهید.
برنامه نویسی میکروکنترلر avr؛ روشی راهگشا در صنعت الکترونیک
میکروکنترلرهای AVR را میتوان یک کامپیوتر کوچک در نظر گرفت. کاربرد اصلی میکروکنترلرها در یک سیستم، کنترل و پردازش پارامترهای سیستم است. به این صورت که پارامترهای ورودی پردازش میشوند و نتیجه آنها نمایش داده میشود.