۱۴۰۱ دی ۱۲, دوشنبه

شروع به کار با میکروکنترلر AVR در لینوکس

avr in linux


تقریبا تمام دانشجوهای مهندسی برق ، و علاقمندان الکترونیک حداقل یک بار در طول زندگیشون سراغ استفاده از میکرو رفته اند . سالها قبل میکرو های ۸۰۵۱ بسیار مورد استفاده قرار میگرفتند ، از حدود ۱۰ ۱۲ سال پیش میکرو های AVR جای ۸۰۵۱ رو در بین پروژه های دانشجویی گرفتند و از حدود ۵ ۶ سال پیش هم خانواده ARM محبوبیت دوچندانی پیدا کردند . اما هنوز هم تعداد زیادی از پروژه های صنعتی قدیمی تر مبتنی بر ۸۰۵۱ و AVR وجود دارند و همچنان پروژه های زیادی براساس AVR توسعه داده میشوند .


برای راه اندازی پروژه «میکروکنترلری» خودمان در لینوکس ، من میکروی AVR را انتخاب کرده ام . برنامه ها همگی از مخازن قابل به رایگان قابل دریافت هستند .برای شروع به کار تنها به یک پروگرمر استاندارد ( اصلا قدیمی بودن پروگرمر مهم نیست ) که در محیط ویندوز به درستی کار کند ،نیاز داریم . مدار الکترونیکی به دلخواه طراح هر چیزی میتواند باشد که من بحثی بر روی آن ندارم . این نوشته تنها درباره برنامه ریزی میکرو و روش آن در لینوکس است .

ابتدا به یک برنامه ادیتور احتیاج داریم .با اینکه vim ویرایشگر محبوب خیلی ها ( من جمله من) است شاید خیلی های دیگه علاقه ای به استفاده از vim نداشته باشند . از هر ویرایشگر متنی مثل nano یا gedit یا هر چیز دیگه ای که خودتان تشخیص میدهید نوشتن کدها در آن راحت تر است استفاده کنید .

برنامه هایی که برای کامپایل و آپلود کردن فایل HEX برنامه بر روی میکرو احتیاج داریم به راحتی از مخازن نصب میشوند :

sudo apt-get update
sudo apt-get install avr-gcc avr-libc avrdude

در آرچ لینوکس هم به صورت زیر :

sudo pacman -Syu
sudo pacman -S avr-gcc avr-libc avrdude

در صورتیکه از پروگرمرهای USB استفاده نمیکنید و از پروگرمر دست ساز پورت سریال یا LPT استفاده میکنید احتیاج به برنامه uisp دارید . میتوانید با استفاده از مخازن این برنامه را هم نصب کنید .

نوشتن یک برنامه ساده

برنامه ساده main.c پورت D را به خروجی تبدیل کرده و هر ۱۰۰ میلی ثانیه یکبار وضعیت پورت را عوض میکند .

#include <avr/io.h>
#include <util/delay.h>
 
int main (void)
{
 DDRD = 255; // MAKE ALL PORT D PINS OUTPUTS
 
 while(1) {
  PORTD = 255;
    _delay_ms(100); // LED ON
  PORTD = 0;
    _delay_ms(100); // LED OFF
 }
 
 return 0;
}

کامپایل کردن برنامه

avr-gcc -w -Os -DF_CPU=1200000UL -mmcu=atmega8 -c -o main.o main.c
avr-gcc -w -mmcu=atmega8 main.o -o main
avr-objcopy -O ihex -R .eeprom main main.hex

کامپایلر avr-gcc از برنامه نوشته شده ما فایل آبجکت میسازد .

با استفاده از سوئیچ w- میتوان warning های حین کامپایل را نادیده گرفت .

سوئیچ Os- سطح بهینه سازی کد را تعیین میکند .

با استفاده از DF_CPU- میتوان فرکانس کاری میکروکنترلر را تعیین کرد . و من در اینجا ۱۲ مگاهرتز در نظر گرفته ام .

نوع میکروکنترلر توسط سوئیچ mmcu- مشخص میشود . من در اینجا از میکروی مگا۸ استفاده کرده ام .

کلیدهای c- و o- مربوط به مشخصات فایل کامپایل شده میباشند . با استفاده از سوئیچ c- بدون استفاده از لینک کردن فایل سورس ما کامپایل خواهد شد .شکل نهایی هر فایل به صورت یک فایل آبجکت خواهد بود . با استفاده از کلید o- بجای یک فایل out.a کامپایلر یک فایل اجرایی میسازد.

برنامه avr-objcopy برای ساخت فایل باینری و کپی آن در حافظه استفاده میشود . این برنامه فایل های symbol و اطلاعات جانمایی مازاد را پاک کرده و یک فایل ابتدایی از اعداد باینری جهت بارگزاری در میکرو کنترلر میسازد . سوئیچ O- مشخص کننده فایل خروجی باینری ( به فرمت هگز) میباشد . کلید R- برای پاک کردن استفاده میشود ( برنامه قبلی را ازتمام حافظه eeprom پاک میکند . ) و در انتها فایل ما به فرمت Hex تحویل داده میشود .

بارگزاری فایل هگز بر روی میکرو

در آخرین مرحله ، فایل هگز ساخته شده بر روی میکرو کنترلر بارگزاری میشود .

ابتدا فیوزبیت ها با توجه به نیاز ما تنظیم میشوند . برای این کار میتوانیم با استفاده از سایت تنظیم فیوزبیتها اقدام به تنظیم فیوزبیتها کنیم . بعد از تنظیم فیوزبیتها این سایت مقادیر مناسب را برای برنامه avrdude نمایش میدهد . خروجی چیزی شبیه به این خواهد بود :

-U lfuse:w:0xe8:m -U hfuse:w:0xd9:m

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

sudo avrdude -F -V -c usbasp -p m8 -P usb -U lfuse:w:0xe8:m -U hfuse:w:0xd9:m -U flash:w:main.hex

سوئیچ F- باعث میشود برنامه avrdude سعی در شناسایی نوع میکرو بکند . سوئیچ V- عملیات automatic verify check را در هنگام آپلود فایل در میکرو از کار می اندازد . سوئیچ c- نام پروگرمر ما را به برنامه معرفی میکند و p- نمایانگر پارت نامبر یا همان اسم میکرو میباشد .با استفاده از P- میتوان پورتی که از آن برای برنامه ریزی میکرو استفاده میکنیم معرفی کرد . و با استفاده از U- ابتدا فیوزبیتها و سپس فایل اصلی به فرمت هگز برای بارگزاری مشخص شده اند .

منابع :برای نوشتن این متن از این وبلاگ استفاده کردم . برای بدست آوردن اطلاعات بیشتر میتوانید به سایت LadyADA مراجعه کنید .لیست نام میکرو ها و نام اونها در برنامه avrDude رو ازسایت LadyADA میتونید ببینید . اطلاعات خوبی درباره آموزش AVR رو میتونید از سایت avr-tutorials بدست بیارید . برای داشتن یک راهنمای خوب از کامپایلر gcc اینجا مطالب خوبی پیدا میکنید . و در انتها میتونید ازاینجا درباره برنامه avr-objcopy هم اطلاعات خوبی کسب کنید .

 این مطلب قبلا در وبلاگ من به نشانی https://nutshell.ir منتشر شده بود .

هیچ نظری موجود نیست:

ارسال یک نظر