در قسمت قبل دیدیم که چگونه میتوان بدون برد آردوینو، از میکروکنترلرهای انگشتشماری که قبلاً در پلتفرم آن پشتیبانی میشد، استفاده کرد. اما اگر بخواهیم کمی فراتر برویم چه؟ برای مثال ATmega32 یک میکروکنترلر پرفروش در بازار ایران بوده و احتمالاً تعداد زیادی از آن در کشوی قطعات بسیاری از ما در حال خاک خوردن است. آیا میتوانیم به این چیپهای قدیمی جانی دوباره ببخشیم؟ و آردوینوی مخصوص خودمان را با آن بسازیم.
در این قسمت درصدد این هستیم که تعداد بیشتری از میکروکنترلرهای خانوادهی AVR را به تسخیر پلتفرم آردوینو درآوریم و در پروژههایمان از پلتفرم آردوینو برای این خانواده استفاده کنیم و در آخر یادبگیرم که متنباز زندگی کردن چگونه به رشد ما و جامعهیمان کمک میکند درست مثل آردوینو.
همانطور که میدانید، مهمترین نقطه قوت آردوینو “متنباز” (Open Source) بودن آن است. این ویژگی باعث شکلگیری جامعهای عظیم شده که هر عضوی میتواند به رشد آن کمک کند. یکی از این افراد ، توسعهدهندهای با نام مستعار MCUdude (یا هانس) است.
او با توسعهی پروژههایی نظیر MightyCore و MegaCore و بازنویسی فایلهای هستهی آردوینو، این امکان را فراهم کرد که ما بتوانیم کدهای آردوینو را مستقیماً و بدون هیچ واسطهای روی برخی میکروکنترلرهای محبوب AVR آپلود کنیم و بتوانیم خانواده AVR را در تسخیر آردوینو در آوریم.
البته همان طور که در جدول زیر میبینید پروژه آقای هانس در سری ATtiny فقط یک میکروکنترلر را شامل میشود. بنابراین سعی داریم پروژه دیگری را هم معرفی کنیم.امروزه برای سریهای ATtiny، پروژه Spence Konde (DrAzzy) به نام ATTinyCore نسبتا کاملتر هست. این پروژه تقریباً تمام میکروکنترلرهای سری تاینی را با امکاناتی باورنکردنی (مثل SoftwareSerial روی هر پین) پشتیبانی میکند.
شاید برایتان سوال شود که این پکیجها دقیقا چطور میکرو جدید را معرفی میکند. در واقع هر فایل هسته (پکیج) شامل تعاریفی از پینها ، ریجسترهای ،فیوزبیتها ، تنظیمات و … ، تعدادی میکروکنترلر هستند که از طریق آدرسی با پسوند json به Arduino IDE معرفی و سپس دانلود و نصب میشود.
هر کدام از این پروژهها برای خانواده خاصی از میکروکنترلرها طراحی شدهاند. برای اینکه بدانید هر پروژه از چه چیپهایی پشتیبانی میکند و یا پکیج مناسب شما کدام است، جدول زیر را بررسی کنید. همچنین لینک گیتهاب، آدرس JSON (برای معرفی به Arduino IDE) و مستندات نصب دستی، برای دسترسی راحتتر شما در جدول قرار گرفته است.
| نام و لینک پروژه | میکروکنترلرهای پشتیبانی شده | آدرس JSON | دانلود مستندات |
| MiniCore | ATmega8, ATmega48, ATmega88, ATmega168, ATmega328 and ATmega328PB | https://mcudude.github.io/MiniCore/package_MCUdude_MiniCore_index.json | دانلود پکیج دانلود Pinout |
| MightyCore | ATmega1284, ATmega644, ATmega324, ATmega324PB, ATmega164, ATmega32, ATmega16 and ATmega8535 | https://mcudude.github.io/MightyCore/package_MCUdude_MightyCore_index.json | دانلود پکیج دانلود Pinout |
| MegaCore |
ATmega6490, ATmega6450, ATmega3290, ATmega3250, ATmega2561, Tmega2560, ATmega1281, ATmega1280, ATmega649, ATmega645, ATmega640, ATmega329, ATmega325, ATmega169, ATmega165, ATmega128, ATmega64, AT90CAN128, AT90CAN64, AT90CAN32 (All variants – A, L, P, PA, PV, V) |
https://mcudude.github.io/MegaCore/package_MCUdude_MegaCore_index.json | دانلود پکیج دانلود Pinout |
| MegaCoreX | ATmega4809, ATmega4808, ATmega3209, ATmega3208, ATmega1609, ATmega1608, ATmega809 and ATmega808 | https://mcudude.github.io/MegaCoreX/package_MCUdude_MegaCoreX_index.json | دانلود پکیج دانلود Pinout |
| MicroCore | ATtiny13 | https://mcudude.github.io/MiniCore/package_MCUdude_MiniCore_index.json | دانلود پکیج دانلود Pinout |
| ATTinyCore | ATtiny 1634, 2313/4313, 24/44/84, 441/841, 25/45/85, 261/461/861, 87/167, 48/88, 43, 26 and 828. | http://drazzy.com/package_drazzy.com_index.json | دانلود پکیج دانلود Pinout |
برای شروع کار، ما باید این پکیجها(پروژهها) را به Arduino IDE معرفی کنیم. پیشنهاد میکنم از آخرین ورژن IDE استفاده کنید در اینجا از ورژن 2.3 استفاده شده. دو روش برای این کار وجود دارد: روش انلاین(پیشنهادی) و روش دستی (برای سیستمهای آفلاین).
۱. نرمافزار Arduino IDE را باز کنید.
۲. از منوی File گزینه Preferences را انتخاب کنید.
۳. لینکهای JSON مربوط به پروژههای مدنظر (از جدول بالا) را در قسمت Additional boards manager URLs کپی کنید.
(نکته: اگر چند لینک دارید، آنها را با کاما (,) از هم جدا کنید یا روی آیکون پنجرهمانند کنار کادر کلیک کنید و هر لینک را در یک خط جداگانه وارد نمایید.)

[عکس ۱: نمایی از پنجره Preferences و محل وارد کردن لینکها]
۴. حالا به مسیر Tools > Board > Boards Manager بروید.
۵. صبر کنید تا لیست آپدیت شود، سپس نام پکیج (مثلاً MightyCore) را جستجو و دکمه Install را بزنید.

عکس ۲: محیط Board Manager و نصب MightyCore
اگر به اینترنت دسترسی ندارید یا میخواهید فایلها را روی سیستمی دیگر منتقل کنید، میتوانید از روش دستی استفاده کنید:
۱. ابتدا فایل فشرده (ZIP) پروژه را از گیتهابِ MCUdude (یا از جدول بالا قسمت دانلود مستندات) دانلود کنید.
۲. به پوشه Documents/Arduino در کامپیوتر خود بروید.
۳. اگر پوشهای به نام hardware وجود ندارد، آن را بسازید.
۴. فایل دانلود شده را درون پوشه hardware اکسترکت کنید. ساختار پوشهها باید به صورت زیر باشد:
Documents/Arduino/hardware/MightyCore/avr/...
۵. آردوینو را ریستارت کنید. اکنون میکروکنترلر ها در قسمت Tools > Board در لیست اضافه شدهاند.

عکس 3: پروژههای اضافه شده به دو روش بالا
حالا که نرمافزار آماده است، نوبت به سختافزار میرسد. بیایید فرض کنیم میخواهیم یک ATmega32 یا ATmega16 را تبدیل به آردوینو کنیم. حال نیاز به یک مدار “حداقل سیستم” (Minimum System) داریم که شامل کریستال و مدار ریست میشود. البته با این روش میتوانیم از اسیلاتور داخلی میکرو استفاده کنیم و نیازی به کریستال نداشته باشم.
من برای اینکه مجبور نباشم برد طراحی کنم یا مدار را روی بردبورد ببندم، از یک شیلد پروتوتایپ آردوینو (Prototype Shield) استفاده کردم که فضای سوراخدار برای لحیمکاری و قیمت مناسبی دارند. شما میتوانید روی بردبورد یا بوردی که خودتان طراحی کردید یا حتی برد از قبل آماده ای که تغییر کاربری دادید (درست مثل کاری در قسمت قبل انجام شد) استفاده کنید.
من روی شیلد پروتوتایپ، یک زیفسوکت (ZIF Socket) یا سوکت چهل پین لحیم کردم تا بتوانم میکروکنترلر را راحت تعویض کنم. و برای اتصال پایههای میکرو به پین هدر از سیم لاکی استفاده کردم.
اتصالات لازم به شرح زیر است:
VCC و GND میکروکنترلر را به ۵ ولت و زمین وصل کنید.XTAL1 و XTAL2 (پین ۱۲ و ۱۳ در مگا ۳۲) قرار دهید و هر پایه را با خازن ۲۲ پیکو به زمین وصل کنید.Reset (پین ۹) را با یک مقاومت ۱۰ کیلو اهم به ۵ ولت (VCC) متصل کنید. [گالری عکس : تصویری از آردوینو شاخته شده با شیلد پروتوتایپ و مگا 16]
حالا همه چیز آماده است. برای آپلود کد روی این میکروکنترلر خام، برای اولین بار ما نیاز به یک پروگرامر داریم من از USBasp استفاده میکنم. اگر پروگرامر ندارید نگران نباشید، برد آردوینو UNO (و بردهای مشابه) شما میتواند نقش پروگرامر را بازی کند.

عکس 4: پیکربندی تنظیمات در نوار Tools
۱. اگر میخواهید از یک برد آردوینو به عنوان پروگرامر استفاده کنید روی برد آردوینوی خود کدِ نمونه ArduinoISP را آپلود کنید (از منوی File > Examples > 11.ArduinoISP).
۲. اتصالات SPI را بین پروگرامر(آردوینو) و میکروکنترلر جدید همتا به همتا برقرار کنید (پایههای MISO, MOSI, SCK, Reset). برای پیدا کردن پایهها ، میتوانید میکرو خود را گوگل کنید یا در جدول ابتدای صفحه روی “دانلود Pinout” کلیک و عکسهای مربوط به میکروکنترلر خود را مشاهده کنید.
۳. در منوی Tools تنظیماتی که مدنظر دارید انجام دهید:
ابتدا در قسمت Board میکروکنترلر خود را انتخاب کنید.
بعد از انتخاب میکروکنترلر وقتی به منوی Tools میروید، با گزینههای جدید روبرو میشوید که برای آردوینوی پیشفرض وجود ندارند همان تنظیماتی که از یک AVR انتظار میرود. بیایید برخی از این تنظیمات را کالبدشکافی کنیم:
BOD(Brown-out Detection) : سطح ولتاژ ریست اضطراری. اگر ولتاژ تغذیه از این حد پایینتر بیاید، میکروکنترلر ریست میشود تا دادهها خراب نشوند.
Bootloader: فعال یا غیرفعال سازی تزریق بوتلودر یا انتخاب پورت سریال در صورت وجود چند پورت برای پروگرام از طریق رابط سریال (UART).
Clock: این مهمترین گزینه است. شما میتوانید فرکانس کاری میکروکنترلر یا منبع آن (داخلی، خارجی) را تعیین کنید.
(نکته 1:در صورت عدم استفاده از کریستال به صورت فیزیکی و انتخاب کریستال خارجی در تنظیمات ممکن است میکروکنترلر تا زمان اتصال کریستال قابل پروگرام مجدد نباشد و عملکردی نداشته باشد.
نکته 2:در صورت استفاده از کریستال متفاوت با تنظیمات، تایمرها و پورتها ارتباطی و … عملکرد درستی ندارند)
LTO یا در واقع Link Time Optimization : فعال یا غیرفعال سازی بهینهسازی کد (در آردوینو معمولی همیشه فعال است).
Pinuot: فقط در بعضی از پکیجها وجود دارد .این کلمه معادل فارسی ندارد اما شاید بتوان به آن پایهبندی! گفت. که به معنی نحوه پیکربندی پایههاست در واقع نحوه نامگذاری پایهها در محیط آردوینو است.(برای مشاهده این پیکربندیها به گیتهاب پروژه مراجعه کنید یا از قسمت “دانلود مستندات” جدول ابتدایی آن را دانلود کنید)
standard: چیدمان بر اساس پایههای فیزیکی خودِ آیسی
Bobuino: چیدمانی که با آردوینو سازگار هست (برای استفاده راحتتر از شیلدها).
در تصاویر زیر نمونه ای از راهنمای pinout برای پکیج MightyCore مشاهده کنید
[گالری عکس : تصویری راهنمای Pinout مگا ۳۲]
فیوزبیت (Fuse Bits): فیوزبیتها “تنظیمات بنیادی سختافزار” هستند که رفتار کلی چیپهای AVR را تعیین میکنند و برخلاف کد برنامه، با قطع برق پاک نمیشوند. برای مثال این بیتها مشخص میکنند که میکروکنترلر با چه سرعتی کار کند (منبع کلاک)، در چه ولتاژی خاموش شود (BOD) و …
تبریک میگویم! شما رسماً آردوینوی اختصاصی خودتان را ساختید. حالا میتوانید اولین کد خودتان را پروگرام کنید.
اما چگونه!؟ دو راه پیش روی شما قرار دارد. آپلود به وسیلهی پروگرامر یا آپلود به وسیله بوتلودر و رابط سریال(UART).
این روش زمانی مناسب است که میخواهید از تمام فضای حافظه استفاده کنید یا زمانی که نیاز ندارید هر بار برنامه جدیدی روی میکروکنترلر پروگرام کنید.

پروگرامر AVR با رابط USBasp برای برنامهریزی درونمداری ISP
Sketch، گزینه Upload Using Programmer را بزنید (یا کلیدهای Ctrl+Shift+U).
عکس 5: آپلود به وسیلهی پروگرامر
این روش دقیقاً مشابه کاری است که با برد آردوینو UNO انجام میدهید. برای این کار نیاز به یک مبدل USB به سریال دارید. در بازار ایران تعداد زیادی ماژول (مثل ماژولهای CH340 یا FTDI) در ابعاد مختلف وجود دارد میتوانید کوچک ترین برد موجود را تهیه و روی برد لحیم کنید. حتی میتوانید از ایسیهای USB به سریال هم استفاده کنید(من در برد پروتوتایپ از ایسی CH340G استفاده کردم و سوکت usb را در پشت برد نصب کردم) . فقط مطمئن شوید در ماژول یا ایسی ای که انتخاب میکنید پایه ای به نام DTR وجود داشته باشد. این پایه در زمان آپلودِ کد، میکروکنترلر را ریست میکند تا بوتلودر زمان بوت ، پروگرام را بر عهده گیرد.

عکس 6: انواع رابط سریال
میبینید که با این پروژه های متنباز توانستیم که تعداد قابل توجهای از خانواده AVR را به تسخیر آردوینو در آوریم

عکس 7: نتیجه
شما هم میتوانید با طراحی برد برای هر کدام از این پکیجها و به اشتراک گذاشتن برد اختصاصی خودتان به نام خودتان در اینجا ، سهمی در گسترش دانش الکترونیک داشته باشید.
سیسوگ با افتخار فضایی برای اشتراک گذاری دانش شماست. برای ما مقاله بنویسید.