Professional Documents
Culture Documents
Starting AVR PDF
Starting AVR PDF
مقدمه
این مقاله برای افرادی نوشته شده است که هیچ آشنایی نصبت به میکروکنترلرهای AVRندارند و میخواهند کار با این
میکروکنترلرها را آغاز نمایند.
من در این مقاله میکروکنترلرهای خانواده AVRشرکت ATMELو کامپایلر avr-gccرا به شما معرفی میکنم .و به صورت
قدم به قدم به شما میآموزم که چگونه برای میکروکنترلرها برانامه بنویسید ٬چگونه آنها را برنامه ریزی کنید و چگونه از
آنها در مدارات خود استفاده کنید.
میکروکنترلرهای AVRتوسط شرکت Atmelطراحی و ساخته شدهاند .اولین قطعات از میکروکنترلرهای AVRدر سال
۱۹۹۳روانه بازار شد و به زودی جای خود را در قلب طراحان مدارات میکروکنترلری باز کرد .نخستین قطعات که در این
خانواده معرفی شدند ٬میکروکنترلرهای AVRدر سری AT90Sxxxxبودند .ولی از آنجایی که ای قطعات نسبت به سایر
میکروکنترلرهای AVRکه بعدا در سری Megaارائه شدند امکانات کمتری دارند ٬به ندرت از آنها استفاده میشود.
شرکت Atmelهمزمان با ارائهی میکروکنترلرهای AVRدر سری Megaاقدام به طراحی و تولید میکروکنترلرهای AVRدر
سری Tinyکرده است .این قطعات در بستهبندیهای کوچکتر نسبت به همونههای قبلی و با امکانات فوقالعاده [ ]۱در
جریانهای مصرفی کم ارائه شدهاند و زمینه را برای طراحی مداراتی با توان مصرفی فوقالعاده کم و کارآیی بسیار بال
فراهم کردهاند.
من در این مقاله بر روی ATMega16از سری Megaتاًکید بیشتری خواهم داشد .دلیل انتخاب این قطعه وجود بسیاری
از قابلیتهای تمامی سری Megaو پایه بودن آن است.
میکروکنترلرهای AVRدارای درگاه داده ۸بیتی و از نوع CMOSو با ساختار [ Risc ]۲هستند و در ساخت آنها معماری
نوع Harwardبه کار برده شده است .در این نوع معماری از باسهای سهگانه مجزا (آدرس – داده – کنترل) برای حافظه
برنامه استفاده میشود .کاربرد ساختار Riscباعث میشود که این قطعات دارای خصوصیات منحصر به فردی باشند .از
آن جمله میتوان به سرعت بال ٬سازگاری با کامپایلرهای زبانهای سطح بال چون Cو امکانات فراوان اشاره کرد.
ساختار Riscبرای اولین بار در سال ۱۹۷۰میلدی برای معماری پردازشگرها معرفی شد .پیش از اینُ معماری [Cisc ]۳
متداولتر بوده است.بحث در مورد این معماری ها از عهدهی این مقاله خارج است.
هسته اصلی AVRاز یک مجموعه دستورالعملهای قوی با ۳۲ثبات همه منظوره تشکیل شده است [ .]۴این ۳۲ثبات
به طور مستقیم به واحد محاسبه و منطق ( )ALUمتصل بوده و ALUمیتواند در هر لحظه به طور همزمان به ۲ثبات از
این ۳۲ثبات دسترسی داشته باشد .در نتیجه بسیاری از دستورالعملهای AVRدر یک پالس ساعت اجرا میشود و
این امر باعث میشود که سرعت پردازش AVRبه بیش از ۱۰برابر سرعت پردازشگرهای Ciscهمتای خود برسد و
پهنای باندی برابر [ 1MIPS ]۵برای هر 1MHzپالس ساعت فراهم آید.
واحد محاسبه و منطق در AVRسه نوع عملیات ریاضی ٬منطقی و توابع بیتی را پشتیبانی میکند .در عین حال در
هسته میکروکنترلرهای سری Megaاز یک ضربکننده پر سرعت ( ۲پالس ساعت) استفاده شده است که توانایی
عملیات ضرب بر روی اعداد علمتدار ٬بدون علمت و کسری را دارد.
امکانات موجود در هر دو نوع بستهبندی تقریباً مشابه همدیگر بوده [ .]۶و به طور خلصه شامل این موارد است:
هر درگاه در میکروکنترلرهای AVRاز سه ثبات ایجاد شده است ٬که وضعیت ٬مقدار و جهت درگاه را تعیین میکند.
ثباتهای هر درگاه به شرح زیر است:
:DDRxبا صفر بودن هر بیت از این ثبات ٬بیت متناظر ٬درگاه ٬ورودی و با یک بودن آن ٬بیت متناظر درگاه به صورت
خروجی تعریف میشود .برای مثال در زبان Cدستورات زیر درگاه Bرا به صورت خروجی و پین 2از درگاه Cرا به صورت
ورودی تعریف میکند:
;DDRB=0xFF
;)DDRC &= ~(1<<2
:PINxاین ثبات برای خواندن از درگاه استفاده میشود .با نوشتن بر روی ای ثبات ٬هیچ مقداری به درگاه منتقل نخواهد
شد.
:PORTxاین ثبات خروجی درگاه است و با نوشتن بر روی این ثبات ٬دادهی نوشته شده بر روی پین متناظر با آن منعکس
میشود .البته اگر پین به صورت خروجی تعریف شده باشد .ولی اگر پین ٬به صورت ورودی تعریف شده باشد ٬یک کردن
هر بیت از این ثبات باعث pull-upدار شدن پین متناظر و صفر کردن آنُ باعث tri-stateشدن آن میشود.
کامپایلر avr-gccیک کامپایلر باز متن زبان Cقدرتمند برای میکروکنترلرهای خانوادهی AVRشرکت Atmelاست.
avr-libcیک کتابخانه باز متن زبان Cبا کیفیت بال است برای استفاده با [ gcc ]۱۰برای میکروکنترلرهای .Atmel AVR
مجموعه ی نرمافزارهای avr-gcc ٬ avr-binutilsو avr-libcزنجیره ای از نرمافزارهای آزادی را برای میکروکنترلرهای
Atmel AVRتشکیل میدهند.
نرمافزارهای اضافه دیگری هم همراه آنها وجود دارد .نرمافزارهای برنامهریزی uispو avrdudeنرمافزار شبیهسازی
simulavrو نرمافزارهای اشکالزدایی avr-gdbو .AvaRICEبرای اطلعات بیشتر به سایت راهنمای کاربر avr-libc
مراجعه نمایید [.]۱۱
لینک این نرمافزارها و نحوهی نصب آنها در سیستم عامل گنو/لینوکس (به زبان فارسی) را میتوانید در وبلگ من پیدا
کنید [.]۱۲
مجموعهی این نرمافزارها برای سیستم عامل مایکروسافت ویندوز نیز وجود دارد WinAVR .یک پکیج کامل از مجموعهی
این نرمافزارها برای مایکروسافت ویندوز است [.]۱۳
پروگرامر
پروگرامر وسیلهای است که شما میتوانید بهوسیلهی آن میکروکنترلرها را برنامهریزی نمایید .برای تهیهی پروگرامر دو
راه وجود دارد.
)۱خودتان آن را بسازید.
برای ساخت پروگرامر ٬چیز زیادی لزم نمیباشد .من به شما یاد میدهم که چطور یک پروگرامر STK200/300بسازید.
قطعات زیر را تهیه نمایید:
1m .۱کابل ۶رشتهای
.۲کانکتور پورت Parallel
.۳یک عدد مقاومت 100KΩ
.4یک عدد آیسی بافر 74HC244
شماتیک مدار:
طبق این شماتیک مدار را بسازید و به کامپیوتر خود متصل نمایید.
بهترین کار خریداری یک پروگرامر آماده است که در فروشگاههای قطعات الکترونیکی موجود میباشد .و بدون هیچ
مشکلی کار میکند.
برای شروع ابتدا نرمافزارهای توضیح دادهشده در بال را نصب نمایید .یک پروگرامر تهیه کنید و به کامپیوتر خود متصل
نمایید ٬سپس یک میکروکنترلر ATMega16تهیه نمایید و کار برنامهنویسی را آغاز نمایید.
کامپایلر avr-gccیک کامپایلر تحت خط فرمان است [ .]۱۴این به این معناست که avr-gccدارای [ GUI ]۱۵نمیباشد .و
باید دستورات را در خط فرمان اجرا کنید.
ابتداء یک ویرایشگر متن ٬مانند ( emacs ٬ geditدر گنو/لینوکس) و یا notepadیا ( pnدر مایکروسافت ویندوز) ویا ...را باز
کنید .سپس این کد ها را درآن تایپ کنید (دقت کنید که زبان Cبه کوچک و بزرگی حروف حساس است):
//Blinking LED
>#include <avr/io.h
>#include <util/delay.h
void
)delay_1s(void
{
;int i
int
)main(void
{
//set DDRB.1 high
;DDRB |= 1<<1
)while(1
{
//set PORTB.1 high
;PORTB |= 1<<1
این برنامه پین شماره یک پورت Bطی فواصل زمانی ۱ثانیهای ۰و ۱میکند .و در نتیجه اگر به این پایه یک دیود نوری یا
همان LEDمتصل کنید LED ٬شروع به روشن و خاموش شدن میکند (چشمک میزند).
شرح برنامه:
خط اول توضیحات مربوط به برنامه است .در زبان ٬ Cتوضیحات با //شروع میشوند .توضیحات کامپایل نمیشوند و هیچ
تاثیری بر برنامه ندارند.
خط بعدی هدر avr.hرا به برنامه اضافه میکند .این فایل تمامی ثباتهای AVRرا تعریف میکند.
د که شامل توابعی برای ایجاد تاخیرهای زمانی میان دستوراتخط بعدی فایل هدر delay.hرا به برنامه اضافه میکن ُ
برنامه است.
خط بعدی :توضیحات.
دو خط بعدی ٬تابع delay_1sرا تعریف میکنند.
خط بعد به معنای آغاز تابع است.
بعدی متغیر iرا از نوع Integerتعریف میکند.
بعدی یک حلقه ایجاد میکند که برای ۱۰۰بار دستور:
;)_delay_ms(10
را اجرا میکند که ۱۰میلیثانیه تاخیر در روند برنامه به وجود میآورد .در نتیجه ۱ثانیه تاخیر ایجاد میشود.
خط بعدی پایان تابع delay_1sرا تعریف میکند.
دوخط بعدی تابع mainرا که تابع اصلی برنامه است تعریف میکنند .برنامه از تابع mainآغاز میشود.
خط بعد به معنای آغاز تابع است.
خط بعدی :توضیحات.
خط بعدی پایهی شماره ۱از درگاه Bرا به صورت خروجی تعریف میکند.
خط بعدی یک حلقهی بی انتها تعریف میکند .کدهای این حلقه تا بینهایت تکرار میشوند.
خط بعدی آغاز حلقه را اعلم میکند.
خط بعدی :توضیحات.
خط بعدی پین شماره ۱از درگاه Bرا یک میکند.
خط بعدی :توضیحات.
خط بعدی تابع delay_1sرا صدا میزند که یک تاخیر ۱ثانیهای ایجاد میکند.
خط بعدی :توضیحات.
خط بعدی پین شماره ۱از درگاه Bرا صفر میکند.
خط بعدی :توضیحات.
خط بعدی تابع delay_1sرا صدا میزند که یک تاخیر ۱ثانیهای ایجاد میکند.
خط بعدی پایان حلقه را اعلم میکند.
خط بعدی مقدار صفر را از تابع بر میگرداند.
خط بعدی پایان تابع mainرا اعلم میکند.
حال Makefileی را که ضمیمهی این مقاله هست را در دایرکتوریی که برنامه را در آن ذخیره کردهاید کپی نمایید( .دقت
کنید که نام Makefileرا تغییر ندهید Makefile .هیچ پسوندی ندارد)
سپس در خط فرمان گنو/لینوکس یا مایکروسافتویندوز با دستور cdبه دایرکتوری برنامه بروید و دستور زیر را اجرا کنید:
( #را تایپ نکنید)
# make all
خوب حال اگر در دایرکتوری فایلی به نام main.hexتشکیل شد ٬میکروکنترلر را به پروگرامر متصل کنید و دستور زیر را
اجرا کنید:
# make program
در صورتیکه پیغام خطایی مشاهده نکردید ٬میکروکنترولر شما با موفقیت برنامهریزی شده است.
میکروکنترلر را از پروگرامر جدا کنید و مانند مدار زیر ببندید:
ولتاژ ۵ولت DCرا به آن متصل نمایید .همانطور که مشاهده میکنید LED ٬شروع به چشمک زدن میکند.
Vcc +5V
Vss GND
حال مدار را متصل کنید.
شما میتوانید با تمرین زیاد و یادگیری کامل زبان Cبرنامههای پیشرفتهتری بنویسید.
شما میتوانید اطلعات بیشتر را از سایت Atmelدریافت نمایید]۱۷[ .
در صورت مشاهدهی اشکال در مقاله میتوانید از طریق E-mailبه من اطلع دهید.
نویسنده:
وحید اسکندر
:Email
vahid.eskandar@gmail.com
:Weblog
http://atmel.blogfa.com
منابع:
AVRLibc
Atmel
Atmel.blogfa.com
میکروکنترلرهای AVRسری Mega
پانویسها:
The End