# برنامه نویسی میکروکنترلر (MicroController) ها و MicroProcessor ها > برنامه نویسی سیستم های Embeded >  مقایسه میکروکنترلرهای خانواده AVR و PIC

## moeintn

هنگامی که موضوع مقایسه میکروکنترلرهای AVR و PIC در گروه ها مطرح می شود ، بحث داغی به وجود می آید !!! اینگونه بحث در مورد پردازنده ها از قبل ها بوده است : مانند مقایسه ۶۵۰۲ با Z80 و مقایسه پردازنده های دیگر .اینگونه بحث ها با اینکه در تمامی رشته های مهندسی وجود دارد ، ولی در عمل چیزی به نام بهترین وجود ندارد !!! بهتر است بگوییم مناسب ترین میکروکنترلر برای هر پروژه کدام است . اگر بخواهیم به طور کلی مقایسه ای انجام بدهیم ، باید گفت این دو فرق چندانی ندارند ، بلکه به گونه ای در حال رقابت با یکدیگر هستند .اولین بحثی که پیش می آید این است که برای مبتدیان و کسانی که تازه می خواهد کار با میکروکنترلرها را آغاز کنند کدام مورد مناسب می باشد ؟ بیشتر کسانی که با این دو میکروکنترلر ها کار کرده اند ، میکروکنترلر های خانواده AVR را برای شروع مناسب می دانند .معماری میکروکنترلر PIC نوع اصلاح شده معماری هاروارد می باشد که باعث شده تا این میکروکنترلر در برابر نویز مصونیت پیدا کند و در واقع در این مسئله میتوان تا حدودی شاهکار میکروچیپ را برتر دانست .یکی از شباهات اصلی این دو میکروکنترلر ، Packag ( بسته بندی ) های آن می باشد که در دو دسته اصلی : DIP ( دیپ ) و SMD ( اس ام دی ) ارائه شده اندیکی از مزیت های AVR این است که حالت Watchdog را می توان به صورت نرم افزاری غیرفعال نمود . در میکروهای PIC فعال کردن Watchdog با دستورالعمل SLEEP باعث به حالت خواب رفتن یا همان Sleep میکرو می شود در صورتی که این کار در AVR  باعث ریست میکرو می شود که کمی کار را پیچیده می کند .در برنامه نویسی و تعداد دستورات قابل فهم توسط CPU ، بسیار با یکدیگر تفاوت دارند ، به عنوان مثال PIC تقریبا دارای ۳۰ دستور و AVR  نیز تقریبا دارای ۱۳۰ دستور ( البته در زبان اسمبلی ) می باشد . در واقع هرچه دستورات کمتر باشند به فضای حافظه کمتری هم نیاز دارید ، مقایسه حافظه های این دو میکروکنترلر کاملا این مسئله را نشان میدهد .شما یک میکروکنترلر Atmega32 و یک میکروکنترلر PIC16F877a رو در نظر بگیرید . 
ATmega  تقریبا ۳۲ کیلوبایت حافظه دارد در حالی که PIC16F877A حافظه ای در حدود ۸ کیلو دارد . حال تفاوت آن در چه میباشد ؟ 
این به آن معنا میباشد که برنامه ها در PIC به علت تعداد مجموعه دستورات نسبت به AVR از حجم کمتری برخوردار هستند ، در نتیجه به حافظه کمتری نیاز دارند .PIC های اخیر ( سری ۱۲Fxxx و … ) اسیلاتور های RC آنها به صورت دقیق تر کالیبره شده است .در مورد ADC ، سرعت تبدیل ADC در میکروکنترلرهای PIC بیشتر از AVR می باشد .در مقایسه و جنگ تن به تن این دو میروکنترلر :
AVR سری Tiny را دارد ، PIC هم در مقابل PIC 12 XXX را دارد .
AVR سری AT90S را دارد ، PIC هم در مقابل PIC 16 XXX را دارد . 
AVR سری XMEGA را دارد ، PIC هم در مقابل PIC 18 XXX را دارد .علاوه بر اینها PIC ها سری ۱۰ را هم دارند که میکروهای ۶ پایه هستند و همچنین  میکروهای پردازش سیگنال دیجیتال ( dsPIC ) و میکروهای مجهز به فرستنده رادیویی داخلی هستند ( rfPIC ) .هر دو میکروکنترلر ، خانواده میکروهای ۱۶ و ۳۲ بیتی دارند که در کل تفاوت زیادی ندارند و بیشتر بستگی به شرایط ، بودجه کاری ، نیاز مدار و … دارد که چه میکروکنترلری انتخاب بشود .PIC ها دارای ویژگی های جالب هستند که در AVR دیده نمیشود ؛ برای مثال : 
–  با دستور DTMFOUT میتوان روی هر پایه دلخواهی سیگنال سازگار با خط تلفن را تولید کرد .
– با دستور POT میتوانیم یک پتانسیومتر ( یا فتوسل ) به یک پایه وصل کرده و آن را مقیاس بندی کنیم .
– تنها با دستور PWM میتوان موج PWM تولید کرد ولی در AVR به این راحتی نیست .
– از همه مهمتر اینکه در PIC هر پین میتواند هر عملکردی را ارائه دهد .به عنوان مثال ما در PIC میتوانیم موج PWM را روی هر پایه دلخواهی داشته باشیم اما AVR پایه های مخصوصی ( یا محدودی ) را برای این کار قرار داده است . 
–  در کاربردهای صنعتی و حساس بیشتر از PIC استفاده شده است .ولی اگر دو میکروکنترلر از خانواده AVR و PIC با امکانات مشابه هم داشته باشیم ، قیمت خانواده AVR نسبت به PIC مناسب تر می باشد .

منابع: 118فایل
cytiko

----------

