AVR یا PIC؟ کدام میکروکنترلر را برای پروژه‌ها انتخاب کنیم؟

پارامترهای مهمی ‌برای این انتخاب و تصمیم وجود دارند که باید درنظر گرفته شوند و در این آموزش قصد داریم دو گروه از معروف‌ترین میکروکنترلر‌ها یعنی میکروکنترلرهای AVR و میکروکنترلرهای PIC را با هم مقایسه کنیم. این مقایسه را در سطوح مختلفی انجام خواهیم داد و امیدواریم بتوانیم در انتها انتخاب شما را قدری ساده‌تر کرده باشیم.

کدام میکروکنترلر

قدم اول؛ به سراغ نیازمندی‌‌های هر پروژه بروید.
قبل از آن که به صورت تصادفی نوع خاصی از میکروکنترلر را تهیه کنید، تمام اطلاعات ممکن در مورد پروژه‌تان را جمع‌آوری کنید. این اطلاعات را تا جایی که ممکن است و می‌توانید گسترده و جزئی کنید چرا که هر جزییات کوچکی ممکن است بتواند در نوع میکروکنترلر انتخاب شده نقش بسیار مهمی ‌داشته باشد.


جمع‌آوری اطلاعاتی در رابطه با جزئیات ظاهری پروژه؛ مثلا ابعاد مدار و …
تعداد پریفرال‌ها و سنسورهایی که قرار است استفاده شوند.
ویژگی‌ها و نیازمندی‌های مصرف توان در مدار.
بودجه‌ای که برای به انجام رساندن این پروژه در اختیار دارید.
اطلاعاتی در رابطه با اینترفیس‌های مورد استفاده؛ مثلا : USB، SPI، I2C، UART و …
تهیه‌ی یک بلوک دیاگرام سخت‌افزاری ساده از مدار.
نوشتنی لیستی از GPIO‌های مورد نیاز.

تعیین ورودی‌های آنالوگ به دیجیتال (ADC‌ها)

اطلاعاتی در مورد PWM.

انتخاب معماری درست و متناسب برای مدار (8 بیتی، 16 بیتی یا 32 بیتی).

تشخیص اینکه پروژه از نظر مموری چه نیازمندی‌هایی دارد (RAM، FLASH و …).

بررسی پارامترهای شاخص

زمانی‌که تمام اطلاعات ممکن را جمع‌آوری کردید، حالا می‌توانید با بررسی آن‌ها تصمیم بگیرید که چه میکروکنترلری برای این پروژه مناسب است. اما برای این کار باید میکروکنترلرها و ویژگی‌های آن‌ها را هم بشناسید تا بتوانید تناسب و تناظر مورد نیاز بین نیازمندی‌های موجود و ویژگی‌های ارائه شده را تشخیص دهید. در قسمت بعد ویژگی‌های شاخص میکروهای AVR و PIC را شناخته و با هم مقایسه کنیم. اما قبل از آن بهتر است لیستی از اینکه چه پارامتر‌های شاخصی در مورد میکروها وجود دارند که باید بشناسیم و بستگی به هر پروژه و نیازمندی‌های آن، به انتخاب درست ما کمک می‌کنند هم داشته باشیم.

فرکانس کاری: هر میکروکنترلر با چه سرعتی کار می‌کند؟

تعداد پین‌های I/O: به چند عدد پورت و پین نیاز داریم؟

حافظه‌ی RAM: هر میکرو گنجایش پردازش چه میزان اطلاعات را دارد؟

حافظه‌ی FLASH: کد‌هایی که قرار است بنویسیم بعد از کامپایل شدن در این حافظه قرار می‌گیرند. پس اهمیت دارد.

اینترفیس‌های پیشرفته (Advanced Interfaces): مثلا USB، CAN، Ethernet و …

ولتاژ کاری: در میکروهای مختلف می‌تواند 3.3V ،5V یا کمتر باشد.

Target Connectors: کانکتورهایی که به سهولت طراحی و سایز مدار کمک می‌کنند.
میکروهای PIC و AVR در بیشتر شاخص‌های بالا مشابه هم هستند اما در چند مورد نیز تفاوت‌‌های فاحشی دارند که در ادامه آن‌ها را بررسی می‌کنیم.

مقایسه‌ ی ولتاژ کاری در میکروهای AVR و PIC
 

با گسترش استفاده از محصولاتی که برای تامین توان مورد نیازشان به استفاده از باتری متکی هستند، هر دو میکروهای AVR و PIC به خوبی توانستند خودشان را با این نیاز همگام کنند و مصرف توان‌شان را تا حد امکان پایین بیاورند. اما AVR به مراتب موفق‌تر عمل کرده است. در مقایسه‌ی برخی از سری‌های قدیمی‌تر میکروهای PIC مانند PIC16F یا PIC18F، با AVR‌ها، AVR‌ها معمولا به کم‌مصرف‌تر بودن شناخته شده‌اند. یکی از علت‌های مهم این بود که این سری از میکروهای PIC از روش chip-erased استفاده می‌کردند که برای انجام شدن به حداقل 4.5V ولتاژ نیاز داشت. به همین ترتیب PIC پروگرمرهایی که ولتاژ زیر 4.5V داشتند هم ناگزیر بودند از همین متد استفاده کنند اما چون ولتاژ پایین‌تری داشتند نمی‌توانستند به درستی erase کنند.


اما این مشکل در AVR‌ها وجود نداشت و ندارد.

حتی AVR اخیرا جدیدترین سری از میکروهایش را با نام سری P، ارائه نموده است که توان مصرفی آن‌ها در مرتبه‌ی پیکو است، (pico-power) مثلا ATmega328P. توان مصرفی این سری از AVR‌ها بشدت پایین و به صرفه است. یا مثلا میکروی دیگری که ارائه شد و قابلیت این را دارد که بتوان آن را در sleep mode هم قرار داد و به این ترتیب توان مصرفی را کاهش داد (ATtiny1634). چنین عملکردی در دستگاه‌های متکی به باتری می‌تواند بسیار بهینه و مورد استقبال باشد.

جمع‌بندی این بخش را می‌توان این‌طور اعلام کرد که میکروهای AVR از گذشته و در حال حاضر نسبت به PIC‌ها کم‌مصرف‌تر شناخته‌شده‌اند و همین‌طور هم هست. والبته PIC هم اخیرا دست به کار شده و تصمیم گرفته است میکروهایی با مصرف توان در مقیاس پیکو تولید کند. باید دید که در آینده چه اتفاقی می‌افتد.

مقایسه‌ی Target Connectors در میکروهای PIC و AVR

زمانی‌که مداری را طراحی می‌کنیم یا توسعه می‌دهیم، مسئله‌ی کانکتورها می‌تواند بسیار حائز اهمیت و تاثیرگذار باشد.

میکروهای AVR دارای 6-way ISP interfaces یا 10-way ISP interfaces هستند که استفاده از آن‌ها را بسیار راحت می‌کند. اما میکروهای PIC چنین قابلیتی ندارند و پروگرمر‌های ‌‌آنها دارای آداپتورهای نوع flying lead و یا سوکت‌های RJ11 هستند که برای جانشانی‌ در مدارها بسیار بدقلق هستند.

در مجموع می‌توان گفت که AVR در عرصه‌ی طراحی و بهبود مدارهای میکروکنترلی موفق‌تر عمل کرده است و میکروهای PIC هنوز در این زمینه نیاز به اصلاحات جدی دارند.

مقایسه‌ی AVR و PIC با درنظر گرفتن اینترفیس‌های پیشرفته

از این لحاظ اگر بخواهیم مقایسه کنیم، مسلما میکروهای PIC دست برتر را نسبت به AVR‌ها دارند. مثلا داشتن اینترفیس‌هایUSB، CAN ، Ethernet و … که در AVR وجود ندارند. البته در صورت اضافه کردن چیپ‌های خارجی مانند FTDI USB ،Microchip Ethernet controller‌ها و یا Philips CAN chips، می‌توان برخی قابلیت‌ها را به صورت بیرونی به آن‌ها اضافه کرد.

نتیجه‌ی نهایی این که در این مورد PIC‌ها به مراتب جلوتر از AVR‌ها قرار می‌گیرند.

مقایسه‌ ی AVR و PIC از نظر محیط توسعه

علاوه بر اینکه خود محیط توسعه‌ی میکروها (Development Environment) می‌تواند با هم متفاوت باشد، فاکتورهای دیگری نیز در رابطه با آن وجود دارند که بسیار مورد اهمیت هستند؛ مثلا اینکه سادگی کار کردن با یک محیط توسعه چقدر است؟ برای سنجش این موضوع معیارهایی وجود دارند که در ادامه تعدادی از آن‌ها را می‌بینیم و مختصری نیز در مورد هرکدام توضیح می‌دهیم.

Development IDE
C Compilers (کامپایلرزبان C مورد استفاده)
Assemblers (اسمبلر مورد استفاده)
Development IDE
هم میکروهای PIC و هم AVR ،Development IDE‌های مخصوص به خودشان را دارند. در PIC‌ها این توسعه بر روی MPLAB X انجام می‌شود که در مقایسه با IDE میکروهای AVR، به سادگی و پایداری بیشتر شناخته می‌شود. در مورد AVR‌ها این محیط Atmel Studio7 است که حدود 750MB حجم دارد و با داشتن یک‌سری امکانات و ویژگی‌های بیشتر، محیط آن معمولا کمی برای الکترونیک ‌کار‌های نوپا پیچیده و گیج‌کننده است.

 

میکروهای PIC را می‌توان به کمک ابزارهایی مانند PicKit3 و MPLAB X پروگرم کرد و AVR‌ها را با ابزارهایی مانند JTAGICE و Atmel Studio 7. (هرچند که کاربران معمولا از نسخه‌های پایین‌تری از AVR Studio مثلا ورژن 4.18 به همراه service pack3 استفاده می‌کنند چرا که سرعت به مراتب بالاتری دارد و کار کردن با آن نیز ساده تر است).

مطلب پیشنهادی:  مجموعه مقالات آموزش میکروکنترلرهای AVR
به عنوان جمع‌بندی این قسمت می‌توان گفت که PIC MPLAB X نسبت به AtmelStudio7 هم سرعت نسبتا بالاتری دارد و هم رابط کاربری ساده‌تری.

کامپایلر زبان C

کامپایلرهای مورد استفاده‌ی PIC و AVR به ترتیب XC8 و WINAVR هستند. شرکت تولیدکننده‌ی میکروهای PIC در این مورد کاملا به صورت ‌های- تک عمل کرده و کامپایلر منحصر به فرد خود یعنی XC8 را عرضه کرده است. این کامپایلر به خوبی با MPLAB X سازگار شده و هماهنگ با آن عمل می‌کند.

اما در مقابل WINAVR یک GCC کامپایلر است که مبتنی بر ANSI C عمل می‌کند و به همین علت استفاده از کتابخانه‌های استاندارد و کارکردن با کدهای مختلف را امکان پذیر و ساده می‌کند.

یک ورژن رایگان و محدود از C Compiler سبکی به نام IAR هم ارائه شد که حجم آن 4KB بود و تا حدوی یک کامپایلر حرفه‌ای و گران محسوب می‌شد.

از آنجایی که میکروهای AVR را از ابتدا مبتنی بر زبان C طراحی کردند، عملکرد آن با این کامپایلرها به خوبی سازگار است و خروجی‌های سبک و نسبتا سریعی تولید می‌کند.

میکروهای PIC ویژگی‌های زیادی دارند که آن‌ها را در این زمینه از دور رقابت با AVR‌ها خارج نکند اما با در نظر گرفتن تمام آن‌ها، از آن‌جایی که متناسب با ساختار طراحی ‌شده‌شان کدهای نسبتا بزرگ‌تری دارند، ناگزیر چند قدم عقب‌تر از AVR‌ها می‌ایستند. و ذکر این نکته نیز بد نیست که نسخه‌های رایگان کامپایلرهای آن‌ها معمولا به خوبی اپتیمایز (بهینه) نشده‌اند اما نسخه‌های پولی از این نظر بهتر است.

در انتها می‌توان این‌طور نتیجه‌گیری کرد که کامپایرهای WINAVR از کامپایلرهای PIC XC8 سریع‌تر هستند.


اسمبلر

زبان اسمبلی میکروهای AVR بسیار ساده است، دستورات بسیار زیاد و متنوعی دارد و قادر است از هر 32 عدد رجیستر به عنوان آکومولاتور استفاده کند. همچنین سه عدد پوینتر رجیستر 16 بیتی دارد که فرآیند آدرس‌دهی و عملیات‌های کلمه مبنا (word operationa) را تسهیل می‌کنند. و این در حالی است که زبان اسمبلی در میکروهای PIC اصلا به این قدرتمندی نیست و نمی‌تواند مواردی را که باید از طریق آکومولاتور انجام شوند را به درستی مدیریت کند در عوض ناچار است همواره از سوییچینگ‌ها استفاده کند تا بتواند برای انجام آن کارها به Special Function Register‌ها دسترسی داشته باشد.

و هرچند که MPLAB برای ساده‌سازی سوییچینگ‌ها تدابیری دارد اما استفاده از آن‌ها نیز معمولا زمان‌بر و خسته‌کننده است.

علاوه بر اینها نداشتن دستورات branch ،GoTo و امثالهم نیز باعث می‌شود کدها، ساختاری گیج‌کننده و تودرتو پیدا کنند.

البته در میان سری‌های مختلف میکروهای خانواده‌ی PIC برخی نیز هستند که عملکرد سریع‌تری نسبت به بقیه دارند اما همان‌ها نیز محدود به داشتن تنها یک آکومولاتور هستند.

و در نهایت جمع‌بندی ما در مورد مقایسه‌ی AVR‌ها و PIC‌ها از نظر اسمبلر این است که گرچه در میان خانواده‌ی PIC برخی موارد پرسرعت نیز وجود دارند اما در کل AVR‌ها رتبه‌ی بهتری دارند.

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

از نظر اینکه کدام گروه بیشتر در دسترس هستند؟ خانواده‌ی PIC بسیار در این زمینه کوشاتر بوده ‌و خود را متعهد دانسته‌اند که همواره محصولات‌شان را در کوتاه‌ترین زمان‌های ممکن به کاربران برسانند. اما شرکت Atmel از آنجا که رنج گسترده‌ای از محصولات را تولید می‌کنند و خانواده‌ی AVR بخش کوچکی از این رنج را در بر می‌گیرد، ناگزیر در مسئله‌ی پخش و رساندن به بازار نیز همواره توجه کمتری دریافت کرده و چند گام عقب‌تر بوده‌اند. به این معنا که حتی بعضا تولید به موقع آن‌ها نسبت به سایر محصولات شرکت در اولویت نبوده و مشمول تاخیرهای این چنینی نیز می‌شوند. بنابراین اگر برنامه‌ی زمانی یک پروژه بسیار حساس و حائز اهمیت است، توصیه این است که از میکروهای PIC استفاده شود که همواره به راحتی در دسترس هستند.


مقایسه از نظر برخی ویژگی‌های دیگر

هم میکروهای AVR و هم میکروهای PIC، در انواع پکیج‌ها و بسته‌بندی‌ها ارائه می‌شوند. در خانواده‌ی PIC این تنوع به مراتب گسترده‌تر است و البته این گستره‌ی وسیع تنوع، هم مخالفان و هم موافقانی دارد. مخالفان بر این نکته تاکید دارند که زمانی که گزینه‌های موجود خیلی متنوع هستند، در زمان انتخاب کاربر دچار سردرگمی‌ خواهد شد که بالاخره کدام را باید انتخاب کند. موافقان نیز معتقدند که اتفاقا این گسترده‌ی وسیع باعث انعطاف ‎پذیری بیشتر این محصول شده و آن را با هر کاربردی سازگار کرده است. تازه‌ترین نسخه‌های میکروکنترلر هم در خانواده‌ی ARM و هم PIC، بر کم مصرف بودن تمرکز کرده‌اند و در ولتاژهای کاری مختلف عرضه می‌شوند. مثلا کلاک‌ها و تایمرهای PIC دقیق‌تر هستند اما از نظر سرعت تفاوت محسوسی با کلاک‌ها و تایمرهای AVR ندارند.

Atmel Studio 7 اخیرا فایل‌های Production ELF را اضافه کرده است که شامل EEPROM ،Flash و fuse data به صورت همزمان در یک فایل هستند و این در حالی است که در AVR ،fuse data با فرمت فایل هگز ترکیب شده و به این ترتیب می‌توان از آن در کدها استفاده کرد. این ویژگی باعث می‌شود که رسیدن از پروژه به محصول راه ساده‌تری در پیش داشته باشد.

جمع‌بندی نهایی

چه میکروکنترلرهای خانواده‌ی PIC و چه میکروکنترلرهای خانواده‌ی AVR ، هر دو محصولاتی کم هزینه و با عملکرد خوب هستند و ویژگی‌ جالب هردوی آن‌ها این است که نه تنها در کاربردهای صنعتی به خوبی مورد استفاده قرار می‌گیرند بلکه در میان دانش‌جویان و علاقه‌مندان آزاد به کارهای الکترونیکی نیز محصولاتی محبوب هستند. هر دوی آن‌ها بسیار پراستفاده هستند و منابع آموزشی آماده، فروم‌های سوال و جواب، کدهای نمونه و بسیاری پشتیبانی‌های دیگر هستند. هر دو نوع تنوع قابل قبولی در ابعاد و ظواهر میکروهای ارائه شده دارند و دارای پریفرال‌های مستقل نیز هستند.

Microchip اخیرا کنترل Atmel را نیز بر عهده گرفته و حالا هم AVR‌ها و هم PIC‌ها تحت یک مدیریت هستند.

در پایان نکته‌ای را متذکر شویم که احتمالا خود شما هم آن را متوجه شده‌اید. یادگیری کار با میکروکنترلرها چیزی نیست مگر یادگیری زبان‌های برنامه‌نویسی. خود میکروها و عملکردهای کلی‌شان تا حدود زیادی به هم شبیه هستند و پس از یادگیری یکی خواهید دید که یادگرفتن کار با بقیه چقدر راحت خواهد بود.

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

مجله برق

نظر خود را بنویسید